Selaa lähdekoodia

feat: 增加docker 支持

rikugun 4 vuotta sitten
vanhempi
commit
669ced9073

+ 119 - 0
.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

+ 41 - 0
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"]

+ 4 - 0
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

+ 56 - 0
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} ;
+        }
+
+}
+
+}

+ 2 - 2
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:

BIN
server/db/db.db → server/db.db


+ 1 - 1
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)

+ 4 - 3
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
 }