nginx 配置

配置服务器上的配置

新建/etc/nginx/conf.d/test.haimait.com.conf

  1. server {
  2. listen 80;
  3. server_name test.haimait.com;
  4. # 配置前端静态文件目录
  5. location / {
  6. index index.html index.htm;
  7. root /home/go/src/go-admin/dist;
  8. }
  9. # 配置后台go服务api接口服务 代理到8877端口
  10. location ~ ^/goadminapi/ {
  11. proxy_set_header Host $http_host;
  12. proxy_set_header X-Real-IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. proxy_set_header X-Forwarded-Proto $scheme;
  15. rewrite ^/goadminapi/(.*)$ /$1 break;
  16. proxy_pass http://127.0.0.1:8877;
  17. }
  18. }
  1. `nginx -t` //测试nginx配置是否正确
  2. `nginx -s reload` //重启nginx服务

打包 go 服务

修改配置文件

修改go-admin/config/settings.yml

这里要填写你服务器上的 mysql 数据库的配置信息

  1. settings:
  2. application:
  3. # dev开发环境 test测试环境 prod线上环境
  4. mode: dev
  5. # 服务器ip,默认使用 0.0.0.0
  6. host: 0.0.0.0
  7. # 服务名称
  8. name: testApp
  9. # 端口号
  10. port: 8000 # 服务端口号
  11. readtimeout: 1
  12. writertimeout: 2
  13. # 数据权限功能开关
  14. enabledp: false
  15. logger:
  16. # 日志存放路径
  17. path: temp/logs
  18. # 控制台日志
  19. stdout: true
  20. # 日志等级
  21. level: all
  22. # 业务日志开关
  23. enabledbus: true
  24. # 请求日志开关
  25. enabledreq: false
  26. # 数据库日志开关 dev模式,将自动开启
  27. enableddb: false
  28. jwt:
  29. # token 密钥,【特别注意:生产环境时及的修改】
  30. secret: go-admin
  31. # token 过期时间 单位:秒
  32. timeout: 3600
  33. database:
  34. # 数据库类型 mysql,sqlite3, postgres
  35. driver: mysql
  36. # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms
  37. source: user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
  38. gen:
  39. # 代码生成读取的数据库名称
  40. dbname: dbname
  41. # 代码生成是使用前端代码存放位置,需要指定到src文件夹,相对路径
  42. frontpath: ../go-admin-ui/src

修改默认端口的代码文件

编写自动打包上传的 shell 脚本文件

新建打包脚本 go-admin/build-go-admin.sh

注意
如果是 mac 和 windows 自己百度 go 交叉编译的方法或者参考下面的地址

Go 语言 Mac、Linux、Windows 下交叉编译

  1. # !/bin/bash
  2. # 如果是mac使用这个打包
  3. # CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o go-admin main.go
  4. # 如果是windows使用这个打包 自行测试
  5. # SET CGO_ENABLED=0
  6. # SET GOOS=linux
  7. # SET GOARCH=amd64
  8. # go build -o go-admin main.go
  9. # 如果是linux环境使用这个打包
  10. go build -o go-admin main.go
  11. echo "复制文件到服务器"
  12. echo "CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go"
  13. #调用上传文件脚本把打包好的go-admin二进制文件上传到服务器上
  14. expect ./scpToServer.sh $i $j

新建上传脚本 /go-admin/scpToServer.sh
  1. #!/usr/bin/expect -f
  2. # 复制go-admin(和上面的build-go-admin.sh打包文件名保持一致)二进制文件到服务器/home/go/src/go-admin目录 root:服务器用户名
  3. spawn scp go-admin root@182.92.234.123:/home/go/src/go-admin
  4. #######################
  5. expect {
  6. -re ".*es.*o.*" {
  7. exp_send "yes\r"
  8. exp_continue
  9. }
  10. -re ".*sword.*" {
  11. exp_send "这里是你的服务器密码\r"
  12. }
  13. }
  14. interact

打包并上传


命令行里运行

  1. cd go-admin
  2. haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/go-admin/dome01/go-admin$ ./build-go-admin.sh
  3. spawn scp go-admin root@182.92.234.111:/home/go/src/go-admin
  4. root@182.92.234.111's password:
  5. go-admin 100% 43MB 635.7KB/s 01:09

去服务器上查看已经上传到服务器上了

  1. [root@iZ2ze505h9bgsbp83ct28pZ ~]# cd /home/go/src/go-admin/
  2. [root@iZ2ze505h9bgsbp83ct28pZ go-admin]# ll
  3. 总用量 43868
  4. -rwxr-xr-x 1 root root 44920528 7 7 06:53 go-admin

环境部署 - 图1

编写后台启动 go 服务脚本

在服务器上新建 go-admin/restart.sh 文件
  1. #!/bin/bash
  2. echo "删除进程"
  3. killall go-admin #杀死运行中的go-admin服务进程
  4. echo "启动进程"
  5. nohup ./go-admin server -c=config/settings.yml >> access.log 2>&1 & #后台启动服务将日志写入access.log文件
  6. ps -aux | grep go-admin #查看运行用的进程

上传 config 配置到服务器上
  1. [root@iZ2ze505h9bgsbp83ct28pZ go-admin]# tree
  2. .
  3. ├── config
  4. ├── db.sql # 系统初始化配置不建议上传服务器
  5. ├── rbac_model.conf
  6. ├── READMEN.md
  7. ├── settings.dev.yml # 测试环境配置不建议上传服务器
  8. ├── settings.yml
  9. └── sqlite.sql # 系统初始化配置不建议上传服务器
  10. ├── go-admin
  11. └── restart.sh

启动服务

./restart

后台启动服务
  1. [root@iZ2ze505h9bgsbp83ct28pZ go-admin]# ./restart.sh
  2. 删除进程
  3. go-admin: 未找到进程
  4. 启动进程
  5. root 4033 0.0 0.0 12324 1080 pts/0 R+ 07:39 0:00 grep go-admin

查看启动的服务

下面可以看到 go-admin 的 8877 服务已经运行

  1. [root@iZ2ze505h9bgsbp83ct28pZ go-admin]# netstat -tpln
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 27650/redis-server
  5. tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 921/systemd-resolve
  6. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1733/nginx: master
  7. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1041/sshd
  8. tcp6 0 0 :::3306 :::* LISTEN 14732/mysqld
  9. tcp6 0 0 :::8811 :::* LISTEN 27758/./mindoc
  10. tcp6 0 0 :::5355 :::* LISTEN 921/systemd-resolve
  11. tcp6 0 0 :::8877 :::* LISTEN 4031/./go-admin
  12. tcp6 0 0 :::80 :::* LISTEN 1733/nginx: master
  13. tcp6 0 0 :::8887 :::* LISTEN 16252/./power
  14. [root@iZ2ze505h9bgsbp83ct28pZ go-admin]#

更新 go 服务

每次修改来代码后,想要更新到服务器上步骤.

先删除服务器上的/home/go/src/go-admin/go-admin 二进制文件

重复 3.4 和 3.5 步骤即可

打包前端文件并上传

修改配置文件

修改生产环境请求接口的配置文件

修改go-admin/dome01/go-admin-ui/.env.production文件里的

VUE_APP_BASE_API = 'http://test.haimait.com/goadminapi'

这里的域名地址和 1.2nginx 里配置的 go 后台 api 接口地址 保持一致

编写自动打包上传的 shell 脚本文件

新建/go-admin-ui/npmbuild.sh
  1. # !/bin/bash
  2. npm run build:prod
  3. echo "复制dist文件到服务器"
  4. #调用scpToServer文件把本把打包好的dist文件夹上传到服务器上
  5. expect ./scpToServer.sh $i $j

新建/go-admin-ui/scpToServer.sh
  1. #!/usr/bin/expect -f
  2. # 复制go-admin(和上面的build-go-admin.sh打包文件名保持一致)二进制文件到服务器/home/go/src/go-admin目录 root:服务器用户名
  3. spawn scp -rC dist root@182.92.234.123:/home/go/src/go-admin
  4. #######################
  5. expect {
  6. -re ".*es.*o.*" {
  7. exp_send "yes\r"
  8. exp_continue
  9. }
  10. -re ".*sword.*" {
  11. #exp_send "这里是你的服务器密码\r"
  12. }
  13. }
  14. interact

执行脚本文件

执行脚本文件,打包并上传到服务器

./npmbuild.sh

登陆后台页面

http://www.zhangwj.com

已经成功部署到线上了

更新前端代码到服务器

重复【执行脚本文件】步骤,就会重新打包并覆盖到线上的 dist 目录文件了

环境部署 - 图2
:::tip
特别感谢 海马同学 的支持,对文档的维护起到了至关重要的角色
:::