04.1 go-admin自动化上线到生产环境 nginx配置上线vue和go

build MIT

简介

goadmin-ui 是一个后台基础模块的前端的实现,它基于 vue-element-admin实现。它实现了一套最基本的后台权限管理前端的基础模块。可以很快捷的开启自己的项目,不用考虑权限功能如何实现,操作页面如何设计,这里基本上已经满足了,希望能够为大家提供便利。

基于Gin + Vue + Element UI的前后端分离权限管理系统

系统初始化极度简单,只需要配置文件中,修改数据库连接,系统启动后会自动初始化数据库信息以及必须的基础数据

一. 上线思路

1.1 首先确保项目前后端在本地可以都可以正常跑起来,如果不会可以去看一下作者的视频教程

1.2 配置域名(ytt.haimait.com)代理到前端vue打包的文件目录并上传前端代码

1.3 配置域名(ytt.haimait.com/yttapi)代理到后端服务的8877端口上并上传后台文件

二. nginx配置

配置服务器上的配置

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

server {
  listen 80;
  server_name test.haimait.com;
  # 配置前端静态文件目录
  location / {
      index index.html index.htm;
      root /home/go/src/go-admin/dist;
     }
  # 配置后台go服务api接口服务 代理到8877端口  
  location ~ ^/goadminapi/ {
      proxy_set_header   Host             $http_host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto  $scheme;
      rewrite ^/goadminapi/(.*)$ /$1 break;
      proxy_pass  http://127.0.0.1:8877;   
      }
}

`nginx -t` //测试nginx配置是否正确
`nginx -s reload` //重启nginx服务

三. 打包go服务

3.1 修改配置文件

修改go-admin/config/settings.yml

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

application:
    enabledp: true
    host: 0.0.0.0
    mode: dev 
    name: yttAdmin
    port: 8877 #修改端口
    readtimeout: 1
    writertimeout: 2
database:
    driver: mysql
    source: root:123456@tcp(127.0.0.1:3306)/goadmindb?charset=utf8&parseTime=True&loc=Local&timeout=1000ms #数据配置
gen:
    dbname: goadmindb #数据库名
    frontpath: ../go-admin-ui/src #前端vue/js代码的生成路径 ..是指在go-admin同级目录的go-admin-ui里生成前端代码 参考上面一.建议开发目录 

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

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

注意

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

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

# !/bin/bash

# author https://www.cnblogs.com/haima/p/13234853.html

# 如果是mac使用这个打包
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o go-admin main.go

# 如果是windows使用这个打包 自行测试
# SET CGO_ENABLED=0
# SET GOOS=linux
# SET GOARCH=amd64
# go build -o go-admin main.go

# 如果是linux环境使用这个打包
go build -o go-admin main.go

echo "复制文件到服务器"
echo "CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go"
#调用上传文件角本把打包好的go-admin二进制文件上传到服务器上
expect ./scpToServer.sh $i $j
b. 新建上传角本 /go-admin/scpToServer.sh
#!/usr/bin/expect -f

# author https://www.cnblogs.com/haima/p/13234853.html

# 复制go-admin(和上面的build-go-admin.sh打包文件名保持一致)二进制文件到服务器/home/go/src/go-admin目录 root:服务器用户名
spawn scp go-admin root@182.92.234.123:/home/go/src/go-admin
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "这里是你的服务器密码\r"
  }
}
interact

3.3 打包并上传

​ 命令行里运行

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

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

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

3.4 编写后台启动go服务角本

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

[root@iZ2ze505h9bgsbp83ct28pZ go-admin]# tree
.
├── config
│ ├── db.sql
│ ├── rbac_model.conf
│ ├── READMEN.md
│ ├── settings.dev.yml
│ ├── settings.yml
│ └── sqlite.sql
├── go-admin
└── restart.sh

c. 启动服务

./restart

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

3.5 查看启动的服务

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

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

3.6 更新go服务

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

a. 先删除服务器上的/home/go/src/go-admin/go-admin二进制文件
b. 重复3.4和3.5步骤即可

四.打包前端文件并上传

4.1 修改配置文件

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

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

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

这里的域名地址和1.2nginx里配置的go后台api接口地址 保持一致 ,它是指请求后台接口的根地址

b.修改go-admin/dome01/go-admin-ui/vue.config.js文件里的

publicPath: '/' 改为 publicPath: './'

打成静态文件后,是指以index.html所在目录找js/css文件的地址,所以'./'就是找当前前目录里的js/css文件夹

所以这样配置后,在本地可以直接使用,上传到服务器后,再用nginx配置一个域名代理就可以了

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

a. 新建/go-admin-ui/npmbuild.sh
# !/bin/bash

# author https://www.cnblogs.com/haima/p/13234853.html

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

# author https://www.cnblogs.com/haima/p/13234853.html

# 复制go-admin(和上面的build-go-admin.sh打包文件名保持一致)二进制文件到服务器/home/go/src/go-admin目录 root:服务器用户名
spawn scp -rC dist root@182.92.234.123:/home/go/src/go-admin
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    #exp_send "这里是你的服务器密码\r"
  }
}
interact

4.3 执行角本文件

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

./npmbuild.sh

4.4 登陆后台页面

http://test.haimait.com

已经成功部署到线上了

4.5 更新前端代码到服务器

重复4.3步骤,就会重新打包并覆盖到线上的dist目录文件了

posted @ 2020-07-04 14:35  HaimaBlog  阅读(955)  评论(0编辑  收藏  举报