diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..4e352a51 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,119 @@ +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.pnp.* + +**/node_modules diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..5a055230 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM golang:alpine as builder +RUN apk add --update --no-cache yarn make g++ +RUN yarn global add cross-env node-sass + +ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct \ + GO111MODULE=on \ + CGO_ENABLED=1 +WORKDIR /go/src/gin-vue-admin +RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct +COPY server/ ./ +RUN go env && go list && go build -v -a -ldflags "-extldflags \"-static\" " -o gvadmin . + +WORKDIR /web +COPY web/ ./ +RUN yarn install && yarn run build + + +FROM nginx:alpine +LABEL MAINTAINER="rikugun" + +RUN apk add --no-cache gettext tzdata && \ + cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ + echo "Asia/Shanghai" > /etc/timezone && \ + date && \ + apk del tzdata + +COPY docker/etc/nginx/nginx.conf.tpl /etc/nginx/nginx.conf.tpl +WORKDIR /app +#copy web +COPY --from=builder /web/dist/ /var/www/ +#copy go app +COPY --from=builder /go/src/gin-vue-admin/gvadmin ./ +COPY --from=builder /go/src/gin-vue-admin/db.db ./ +COPY --from=builder /go/src/gin-vue-admin/config.yaml ./ +COPY --from=builder /go/src/gin-vue-admin/resource ./resource +COPY docker/docker-start.sh ./ + +ENV API_SERVER="http://localhost:8888/" +EXPOSE 80 + +ENTRYPOINT ["./docker-start.sh"] diff --git a/docker/docker-start.sh b/docker/docker-start.sh new file mode 100755 index 00000000..df7e2e76 --- /dev/null +++ b/docker/docker-start.sh @@ -0,0 +1,4 @@ +#!/bin/sh +envsubst '$API_SERVER' < /etc/nginx/nginx.conf.tpl > /etc/nginx/nginx.conf +env nginx +./gvadmin diff --git a/docker/etc/nginx/nginx.conf.tpl b/docker/etc/nginx/nginx.conf.tpl new file mode 100644 index 00000000..c96973cb --- /dev/null +++ b/docker/etc/nginx/nginx.conf.tpl @@ -0,0 +1,56 @@ +daemon on; +worker_processes 50; +#error_log /dev/stdout warn; +error_log /var/log/nginx/error.log error; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + # See http://licson.net/post/optimizing-nginx-for-large-file-delivery/ for more detail + # This optimizes the server for HLS fragment delivery + sendfile off; + #tcp_nopush on; + keepalive_timeout 65; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + #access_log /dev/stdout combined; + +# ssl_ciphers HIGH:!aNULL:!MD5; +# ssl_protocols TLSv1 TLSv1.1 TLSv1.2; +# ssl_session_cache shared:SSL:10m; +# ssl_session_timeout 10m; + +server { + listen 80; + + # Uncomment these lines to enable SSL. + # Update the ssl paths with your own certificate and private key. + # listen 443 ssl; + # ssl_certificate /opt/certs/example.com.crt; + # ssl_certificate_key /opt/certs/example.com.key; + location / { + root /var/www; + try_files $uri $uri/ /index.html; + index index.html; + } + + location /v1/ { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_pass ${API_SERVER} ; + } + +} + +} diff --git a/server/config.yaml b/server/config.yaml index 0f10318a..30af1073 100644 --- a/server/config.yaml +++ b/server/config.yaml @@ -20,7 +20,7 @@ mysql: log-mode: true #sqlite 配置 sqlite: - path: db/db.db + path: db.db log-mode: true config: 'loc=Asia/Shanghai' # oss configuration @@ -39,7 +39,7 @@ system: use-multipoint: false env: 'public' # Change to "develop" to skip authentication for development mode addr: 8888 - db-type: "mysql" + db-type: "sqlite" # support mysql/sqlite # captcha configuration captcha: diff --git a/server/db/db.db b/server/db.db similarity index 90% rename from server/db/db.db rename to server/db.db index 73a5833b..edf5416c 100644 Binary files a/server/db/db.db and b/server/db.db differ diff --git a/server/initialize/sqlite.go b/server/initialize/sqlite.go index 68315ffe..235fa9d4 100644 --- a/server/initialize/sqlite.go +++ b/server/initialize/sqlite.go @@ -11,7 +11,7 @@ import ( func Sqlite() { admin := global.GVA_CONFIG.Sqlite if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil { - global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err) + global.GVA_LOG.Error("DEFAULT DB数据库启动异常", err) } else { global.GVA_DB = db global.GVA_DB.LogMode(admin.LogMode) diff --git a/server/service/sys_menu.go b/server/service/sys_menu.go index ffa04dc3..086386fb 100644 --- a/server/service/sys_menu.go +++ b/server/service/sys_menu.go @@ -14,8 +14,8 @@ import ( // @return err error // @return menus []model.SysMenu func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) { - sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM sys_menus authority_menu WHERE authority_menu.authority_id = ? AND authority_menu.parent_id = ?" - + //sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM sys_menus authority_menu WHERE authority_menu.authority_id = ? AND authority_menu.parent_id = ?" + sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.id menu_id,am.sys_authority_authority_id authority_id FROM sys_base_menus authority_menu left join sys_authority_menus am on authority_menu.id = am.sys_base_menu_id WHERE am.sys_authority_authority_id = ? AND authority_menu.parent_id = ? " err = global.GVA_DB.Raw(sql, authorityId, 0).Scan(&menus).Error for i := 0; i < len(menus); i++ { err = getChildrenList(&menus[i], sql) @@ -119,7 +119,8 @@ func AddMenuAuthority(menus []model.SysBaseMenu, authorityId string) (err error) // @return err error // @return menus []SysBaseMenu func GetMenuAuthority(authorityId string) (err error, menus []model.SysMenu) { - sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM sys_menus authority_menu WHERE authority_menu.authority_id = ?" + //sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM sys_menus authority_menu WHERE authority_menu.authority_id = ?" + sql := "SELECT authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.id menu_id,am.sys_authority_authority_id authority_id FROM sys_base_menus authority_menu left join sys_authority_menus am on authority_menu.id = am.sys_base_menu_id WHERE am.sys_authority_authority_id = ? " err = global.GVA_DB.Raw(sql, authorityId).Scan(&menus).Error return err, menus }