🎨 新增打包docker相关配置
This commit is contained in:
@@ -12,7 +12,6 @@ RUN go env -w GO111MODULE=on \
|
|||||||
|
|
||||||
FROM alpine:latest
|
FROM alpine:latest
|
||||||
|
|
||||||
LABEL MAINTAINER="SliverHorn@sliver_horn@qq.com"
|
|
||||||
# 设置时区
|
# 设置时区
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
RUN apk update && apk add --no-cache tzdata openntpd \
|
RUN apk update && apk add --no-cache tzdata openntpd \
|
||||||
|
@@ -16,12 +16,29 @@ zap:
|
|||||||
encode-level: LowercaseColorLevelEncoder
|
encode-level: LowercaseColorLevelEncoder
|
||||||
stacktrace-key: stacktrace
|
stacktrace-key: stacktrace
|
||||||
log-in-console: true
|
log-in-console: true
|
||||||
|
retention-day: -1
|
||||||
|
|
||||||
# redis configuration
|
# redis configuration
|
||||||
redis:
|
redis:
|
||||||
|
name: "hw"
|
||||||
|
addr: 120.46.165.63:6379
|
||||||
|
password: "loser765911"
|
||||||
db: 0
|
db: 0
|
||||||
addr: 177.7.0.14:6379
|
useCluster: false
|
||||||
password: ""
|
clusterAddrs:
|
||||||
|
- 172.21.0.3:7000
|
||||||
|
- 172.21.0.4:7001
|
||||||
|
- 172.21.0.2:7002
|
||||||
|
redis-list:
|
||||||
|
- name: cache
|
||||||
|
addr: 120.46.165.63:6379
|
||||||
|
password: "loser765911"
|
||||||
|
db: 1
|
||||||
|
useCluster: false
|
||||||
|
clusterAddrs:
|
||||||
|
- 172.21.0.3:7000
|
||||||
|
- 172.21.0.4:7001
|
||||||
|
- 172.21.0.2:7002
|
||||||
|
|
||||||
# mongo configuration
|
# mongo configuration
|
||||||
mongo:
|
mongo:
|
||||||
@@ -30,6 +47,7 @@ mongo:
|
|||||||
database: ''
|
database: ''
|
||||||
username: ''
|
username: ''
|
||||||
password: ''
|
password: ''
|
||||||
|
auth-source: ''
|
||||||
min-pool-size: 0
|
min-pool-size: 0
|
||||||
max-pool-size: 100
|
max-pool-size: 100
|
||||||
socket-timeout-ms: 0
|
socket-timeout-ms: 0
|
||||||
@@ -51,21 +69,25 @@ email:
|
|||||||
|
|
||||||
# system configuration
|
# system configuration
|
||||||
system:
|
system:
|
||||||
env: public # Change to "develop" to skip authentication for development mode
|
env: local # 修改为public可以关闭路由日志输出
|
||||||
addr: 8888
|
addr: 8888
|
||||||
db-type: mysql
|
db-type: mysql
|
||||||
oss-type: local # 控制oss选择走本地还是 七牛等其他仓 自行增加其他oss仓可以在 server/utils/upload/upload.go 中 NewOss函数配置
|
oss-type: aliyun-oss # 控制oss选择走本地还是 七牛等其他仓 自行增加其他oss仓可以在 server/utils/upload/upload.go 中 NewOss函数配置
|
||||||
use-redis: false # 使用redis
|
use-redis: true # 使用redis
|
||||||
use-mongo: false # 使用mongo
|
use-mongo: false # 使用mongo
|
||||||
use-multipoint: false
|
use-multipoint: false
|
||||||
# IP限制次数 一个小时15000次
|
# IP限制次数 一个小时15000次
|
||||||
iplimit-count: 15000
|
iplimit-count: 15000
|
||||||
# IP限制一个小时
|
# IP限制一个小时
|
||||||
iplimit-time: 3600
|
iplimit-time: 3600
|
||||||
|
# 路由全局前缀
|
||||||
|
router-prefix: ""
|
||||||
|
# 严格角色模式 打开后权限将会存在上下级关系
|
||||||
|
use-strict-auth: false
|
||||||
|
|
||||||
# captcha configuration
|
# captcha configuration
|
||||||
captcha:
|
captcha:
|
||||||
key-long: 6
|
key-long: 4
|
||||||
img-width: 240
|
img-width: 240
|
||||||
img-height: 80
|
img-height: 80
|
||||||
open-captcha: 0 # 0代表一直开启,大于0代表限制次数
|
open-captcha: 0 # 0代表一直开启,大于0代表限制次数
|
||||||
@@ -74,16 +96,19 @@ captcha:
|
|||||||
# mysql connect configuration
|
# mysql connect configuration
|
||||||
# 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://gin-vue-admin.com/docs/first_master)
|
# 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://gin-vue-admin.com/docs/first_master)
|
||||||
mysql:
|
mysql:
|
||||||
path: ""
|
prefix: ""
|
||||||
port: ""
|
port: "3366"
|
||||||
config: ""
|
config: charset=utf8mb4&parseTime=True&loc=Local
|
||||||
db-name: ""
|
db-name: lckt
|
||||||
username: ""
|
username: lckt
|
||||||
password: ""
|
password: loser765911.
|
||||||
|
path: 219.152.55.29
|
||||||
|
engine: ""
|
||||||
|
log-mode: info
|
||||||
max-idle-conns: 10
|
max-idle-conns: 10
|
||||||
max-open-conns: 100
|
max-open-conns: 100
|
||||||
log-mode: ""
|
singular: false
|
||||||
log-zap: false
|
log-zap: true
|
||||||
|
|
||||||
# pgsql connect configuration
|
# pgsql connect configuration
|
||||||
# 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://gin-vue-admin.com/docs/first_master)
|
# 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://gin-vue-admin.com/docs/first_master)
|
||||||
@@ -98,10 +123,42 @@ pgsql:
|
|||||||
max-open-conns: 100
|
max-open-conns: 100
|
||||||
log-mode: ""
|
log-mode: ""
|
||||||
log-zap: false
|
log-zap: false
|
||||||
|
oracle:
|
||||||
|
path: ""
|
||||||
|
port: ""
|
||||||
|
config: ""
|
||||||
|
db-name: ""
|
||||||
|
username: ""
|
||||||
|
password: ""
|
||||||
|
max-idle-conns: 10
|
||||||
|
max-open-conns: 100
|
||||||
|
log-mode: ""
|
||||||
|
log-zap: false
|
||||||
|
mssql:
|
||||||
|
path: ""
|
||||||
|
port: ""
|
||||||
|
config: ""
|
||||||
|
db-name: ""
|
||||||
|
username: ""
|
||||||
|
password: ""
|
||||||
|
max-idle-conns: 10
|
||||||
|
max-open-conns: 100
|
||||||
|
log-mode: ""
|
||||||
|
log-zap: false
|
||||||
|
sqlite:
|
||||||
|
path: ""
|
||||||
|
port: ""
|
||||||
|
config: ""
|
||||||
|
db-name: ""
|
||||||
|
username: ""
|
||||||
|
password: ""
|
||||||
|
max-idle-conns: 10
|
||||||
|
max-open-conns: 100
|
||||||
|
log-mode: ""
|
||||||
|
log-zap: false
|
||||||
db-list:
|
db-list:
|
||||||
- disable: true # 是否禁用
|
- disable: true # 是否禁用
|
||||||
type: "" # 数据库的类型,目前支持mysql、pgsql
|
type: "" # 数据库的类型,目前支持mysql、pgsql、mssql、oracle
|
||||||
alias-name: "" # 数据库的名称,注意: alias-name 需要在db-list中唯一
|
alias-name: "" # 数据库的名称,注意: alias-name 需要在db-list中唯一
|
||||||
path: ""
|
path: ""
|
||||||
port: ""
|
port: ""
|
||||||
@@ -114,7 +171,6 @@ db-list:
|
|||||||
log-mode: ""
|
log-mode: ""
|
||||||
log-zap: false
|
log-zap: false
|
||||||
|
|
||||||
|
|
||||||
# local configuration
|
# local configuration
|
||||||
local:
|
local:
|
||||||
path: uploads/file
|
path: uploads/file
|
||||||
@@ -122,22 +178,11 @@ local:
|
|||||||
|
|
||||||
# autocode configuration
|
# autocode configuration
|
||||||
autocode:
|
autocode:
|
||||||
transfer-restart: true
|
web: web/src
|
||||||
# root 自动适配项目根目录
|
root: "" # root 自动适配项目根目录, 请不要手动配置,他会在项目加载的时候识别出根路径
|
||||||
# 请不要手动配置,他会在项目加载的时候识别出根路径
|
server: /lckt-server
|
||||||
root: ""
|
module: 'git.echol.cn/loser/lckt'
|
||||||
server: /server
|
ai-path: "https://ai.gin-vue-admin.com/{FUNC}/loser7659/c178e970-6a59-497d-96ed-86fee6b3285a" # AI服务路径
|
||||||
server-plug: /plugin/%s
|
|
||||||
server-api: /api/v1/%s
|
|
||||||
server-initialize: /initialize
|
|
||||||
server-model: /model/%s
|
|
||||||
server-request: /model/%s/request/
|
|
||||||
server-router: /router/%s
|
|
||||||
server-service: /service/%s
|
|
||||||
web: /web/src
|
|
||||||
web-api: /api
|
|
||||||
web-form: /view
|
|
||||||
web-table: /view
|
|
||||||
|
|
||||||
# qiniu configuration (请自行七牛申请对应的 公钥 私钥 bucket 和 域名地址)
|
# qiniu configuration (请自行七牛申请对应的 公钥 私钥 bucket 和 域名地址)
|
||||||
qiniu:
|
qiniu:
|
||||||
@@ -149,14 +194,24 @@ qiniu:
|
|||||||
secret-key: ""
|
secret-key: ""
|
||||||
use-cdn-domains: false
|
use-cdn-domains: false
|
||||||
|
|
||||||
# aliyun oss configuration
|
# minio oss configuration
|
||||||
aliyun-oss:
|
minio:
|
||||||
endpoint: yourEndpoint
|
endpoint: yourEndpoint
|
||||||
access-key-id: yourAccessKeyId
|
access-key-id: yourAccessKeyId
|
||||||
access-key-secret: yourAccessKeySecret
|
access-key-secret: yourAccessKeySecret
|
||||||
bucket-name: yourBucketName
|
bucket-name: yourBucketName
|
||||||
bucket-url: yourBucketUrl
|
use-ssl: false
|
||||||
base-path: yourBasePath
|
base-path: ""
|
||||||
|
bucket-url: "http://host:9000/yourBucketName"
|
||||||
|
|
||||||
|
# aliyun oss configuration
|
||||||
|
aliyun-oss:
|
||||||
|
endpoint: oss-cn-hangzhou.aliyuncs.com
|
||||||
|
access-key-id: LTAI5tB3Mn5Y7mVo8h3zkf46
|
||||||
|
access-key-secret: FtuHdFy4NFdVItEiNBnTun3Ddi8BMK
|
||||||
|
bucket-name: lckt
|
||||||
|
bucket-url: https://lckt.oss-cn-hangzhou.aliyuncs.com
|
||||||
|
base-path: lckt
|
||||||
|
|
||||||
# tencent cos configuration
|
# tencent cos configuration
|
||||||
tencent-cos:
|
tencent-cos:
|
||||||
@@ -179,6 +234,15 @@ aws-s3:
|
|||||||
base-url: https://gin.vue.admin
|
base-url: https://gin.vue.admin
|
||||||
path-prefix: git.echol.cn/loser/lckt
|
path-prefix: git.echol.cn/loser/lckt
|
||||||
|
|
||||||
|
# cloudflare r2 configuration
|
||||||
|
cloudflare-r2:
|
||||||
|
bucket: xxxx0bucket
|
||||||
|
base-url: https://gin.vue.admin.com
|
||||||
|
path: uploads
|
||||||
|
account-id: xxx_account_id
|
||||||
|
access-key-id: xxx_key_id
|
||||||
|
secret-access-key: xxx_secret_key
|
||||||
|
|
||||||
# huawei obs configuration
|
# huawei obs configuration
|
||||||
hua-wei-obs:
|
hua-wei-obs:
|
||||||
path: you-path
|
path: you-path
|
||||||
@@ -191,30 +255,55 @@ hua-wei-obs:
|
|||||||
excel:
|
excel:
|
||||||
dir: ./resource/excel/
|
dir: ./resource/excel/
|
||||||
|
|
||||||
# timer task db clear table
|
# disk usage configuration
|
||||||
Timer:
|
disk-list:
|
||||||
start: true
|
- mount-point: "/"
|
||||||
spec: "@daily" # 定时任务详细配置参考 https://pkg.go.dev/github.com/robfig/cron/v3
|
|
||||||
detail:
|
|
||||||
- tableName: sys_operation_records
|
|
||||||
compareField: created_at
|
|
||||||
interval: 2160h
|
|
||||||
- tableName: jwt_blacklists
|
|
||||||
compareField: created_at
|
|
||||||
interval: 168h
|
|
||||||
|
|
||||||
# 跨域配置
|
# 跨域配置
|
||||||
# 需要配合 server/initialize/router.go -> `Router.Use(middleware.CorsByRules())` 使用
|
# 需要配合 server/initialize/router.go -> `Router.Use(middleware.CorsByRules())` 使用
|
||||||
cors:
|
cors:
|
||||||
mode: whitelist # 放行模式: allow-all, 放行全部; whitelist, 白名单模式, 来自白名单内域名的请求添加 cors 头; strict-whitelist 严格白名单模式, 白名单外的请求一律拒绝
|
mode: allow-all # 放行模式: allow-all, 放行全部; whitelist, 白名单模式, 来自白名单内域名的请求添加 cors 头; strict-whitelist 严格白名单模式, 白名单外的请求一律拒绝
|
||||||
whitelist:
|
whitelist:
|
||||||
- allow-origin: example1.com
|
- allow-origin: example1.com
|
||||||
allow-headers: content-type
|
allow-headers: Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,X-Token,X-User-Id
|
||||||
allow-methods: GET, POST
|
allow-methods: POST, GET
|
||||||
expose-headers: Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type
|
expose-headers: Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type
|
||||||
|
|
||||||
allow-credentials: true # 布尔值
|
allow-credentials: true # 布尔值
|
||||||
- allow-origin: example2.com
|
- allow-origin: example2.com
|
||||||
allow-headers: content-type
|
allow-headers: content-type
|
||||||
allow-methods: GET, POST
|
allow-methods: GET, POST
|
||||||
expose-headers: Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type
|
expose-headers: Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type
|
||||||
allow-credentials: true # 布尔值
|
allow-credentials: true # 布尔值
|
||||||
|
mcp:
|
||||||
|
name: GVA_MCP
|
||||||
|
version: v1.0.0
|
||||||
|
sse_path: /sse
|
||||||
|
message_path: /message
|
||||||
|
url_prefix: ''
|
||||||
|
|
||||||
|
wechat:
|
||||||
|
app-id: wx3d21df18d7f8f9fc
|
||||||
|
app-secret: 3ab19e9b6a5e155c25ac6457be650047
|
||||||
|
token: kjeldcsdz2phfwfxnevsajnzsboho1ev
|
||||||
|
aes-key: PiqqlGdEblw5Gv1RJ5qcTnhKUjFw9YNkBMAX6CIw6Me
|
||||||
|
callback: https://api.gin-vue-admin.com/wechat/callback
|
||||||
|
pay-list:
|
||||||
|
- type: wxpay
|
||||||
|
alias-name: wxpay-1
|
||||||
|
app-id: wx3d21df18d7f8f9fc
|
||||||
|
mch-id: 1646874753
|
||||||
|
v3-key: 1a3sd8561d5179Df152D4789aD38wG9s
|
||||||
|
cert-path: /resource/cert/apiclient_cert.pem
|
||||||
|
key-path: /resource/cert/apiclient_key.pem
|
||||||
|
notify-url: http://lckt.hnlc5588.cn/app_order/notify
|
||||||
|
serial-no: 59A891FB403EC7A1CF2090DB9C8EC704BD43B101
|
||||||
|
- type: wxpay2
|
||||||
|
alias-name: wxpay-2
|
||||||
|
app-id: 2
|
||||||
|
mch-id: 2
|
||||||
|
v3-key: 2
|
||||||
|
cert-path: 2
|
||||||
|
key-path: 2
|
||||||
|
notify-url: 2
|
||||||
|
serial-no: 2
|
157
utils/upload/local_upload.go
Normal file
157
utils/upload/local_upload.go
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
package upload
|
||||||
|
|
||||||
|
// UploadOSS OSS对象存储接口
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Worker struct {
|
||||||
|
in chan string
|
||||||
|
done chan bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type Uploads struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
const endpoint = "oss-cn-hangzhou.aliyuncs.com" // oss endpoint
|
||||||
|
const accessKeyId = "LTAI5tB3Mn5Y7mVo8h3zkf46" // oss key
|
||||||
|
const accessKeySecret = "FtuHdFy4NFdVItEiNBnTun3Ddi8BMK" //oss secret
|
||||||
|
const bucketName = "lckt" //oss bucket名称
|
||||||
|
const objectName = "avatar/" //oss远程目标地址
|
||||||
|
const workerCount = 100 //设置最大并发数
|
||||||
|
const suffix = "" //筛选目录下需要上传的格式
|
||||||
|
|
||||||
|
// 上传单个文件
|
||||||
|
func (u *Uploads) UploadOne(path string) {
|
||||||
|
// 创建OSSClient实例。
|
||||||
|
localFileName := path
|
||||||
|
split := strings.Split(localFileName, `\`)
|
||||||
|
length := len(split)
|
||||||
|
fileName := split[length-1 : length]
|
||||||
|
|
||||||
|
client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
// 获取存储空间。
|
||||||
|
bucket, err := client.Bucket(bucketName)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
up(bucket, objectName+fileName[0], localFileName)
|
||||||
|
}
|
||||||
|
func createWorker(bucket *oss.Bucket, objectName string, id int) Worker {
|
||||||
|
w := Worker{
|
||||||
|
in: make(chan string),
|
||||||
|
done: make(chan bool),
|
||||||
|
}
|
||||||
|
go doWork(id, w.in, w.done, bucket, objectName)
|
||||||
|
return w
|
||||||
|
}
|
||||||
|
|
||||||
|
// 并发上传目录下所有文件
|
||||||
|
func (u *Uploads) UploadMany(path string) {
|
||||||
|
files, err := getAllFiles(path)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
fileCount := len(files)
|
||||||
|
if fileCount == 0 {
|
||||||
|
handleError(errors.New("目录下没有指定文件,请重试!"))
|
||||||
|
}
|
||||||
|
client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
bucket, err := client.Bucket(bucketName)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
var workers [workerCount]Worker
|
||||||
|
for i := 0; i < fileCount; i++ {
|
||||||
|
workers[i] = createWorker(bucket, objectName, i)
|
||||||
|
}
|
||||||
|
for i := 0; i < fileCount; i++ {
|
||||||
|
workers[i].in <- files[i]
|
||||||
|
}
|
||||||
|
for i := 0; i < fileCount; i++ {
|
||||||
|
<-workers[i].done
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleError(err error) {
|
||||||
|
fmt.Println("Error:", err)
|
||||||
|
os.Exit(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func up(bucket *oss.Bucket, objectName string, localFileName string) {
|
||||||
|
// 上传文件。
|
||||||
|
err := bucket.PutObjectFromFile(objectName, localFileName)
|
||||||
|
if err != nil {
|
||||||
|
handleError(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func doWork(id int, c chan string, done chan bool, bucket *oss.Bucket, objectName string) {
|
||||||
|
for n := range c {
|
||||||
|
split := strings.Split(n, `\`)
|
||||||
|
length := len(split)
|
||||||
|
fileName := split[length-1 : length]
|
||||||
|
fmt.Printf("worker : %d, object: %s, uploading file %v \n", id, objectName, n)
|
||||||
|
up(bucket, objectName+fileName[0], n)
|
||||||
|
go func() { done <- true }()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取指定目录下的所有文件,包含子目录下的文件
|
||||||
|
func getAllFiles(dirPth string) (files []string, err error) {
|
||||||
|
var dirs []string
|
||||||
|
dir, err := ioutil.ReadDir(dirPth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
PthSep := string(os.PathSeparator)
|
||||||
|
for _, fi := range dir {
|
||||||
|
if fi.IsDir() { // 目录, 递归遍历
|
||||||
|
dirs = append(dirs, dirPth+PthSep+fi.Name())
|
||||||
|
getAllFiles(dirPth + PthSep + fi.Name())
|
||||||
|
} else {
|
||||||
|
// 过滤指定格式
|
||||||
|
if suffix != "" {
|
||||||
|
ok := strings.HasSuffix(fi.Name(), suffix)
|
||||||
|
if ok {
|
||||||
|
files = append(files, dirPth+PthSep+fi.Name())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
files = append(files, dirPth+PthSep+fi.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return files, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitOss() (*oss.Bucket, error) {
|
||||||
|
// 创建OSSClient实例。
|
||||||
|
AccessKeyId := "LTAI5tB3Mn5Y7mVo8h3zkf46"
|
||||||
|
AccessKeySecret := "FtuHdFy4NFdVItEiNBnTun3Ddi8BMK"
|
||||||
|
Endpoint := "oss-cn-hangzhou.aliyuncs.com"
|
||||||
|
BucketName := "lckt"
|
||||||
|
client, err := oss.New(Endpoint, AccessKeyId, AccessKeySecret)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取存储空间。
|
||||||
|
bucket, err := client.Bucket(BucketName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return bucket, nil
|
||||||
|
}
|
Reference in New Issue
Block a user