# 运行模式

# 0x01 后端

# 1-1 环境

go 1.13.3

# 1-2 源码

git clone https://github.com/jweny/pocassist.git
cd pocassist
go build
./pocassist
1
2
3
4

# 1-3 swagger配置

开发过程中,可以使用 swagger 测试 api 是否正常运行

gin-swagger 的配置可参考 教程 (opens new window)

或者参考我已经写好的 swagger 注解(每个 api 方法都有)

TIP

当 config.yaml 中run_mode: "debug"时,pocassist 将以debug方式启动,届时将自动启用swagger

访问地址http://127.0.0.1:1231/swagger/index.html

TIP

swagger 在 gin 中注册路由的逻辑请查看api/routers/router.go:InitRouter 方法

当你开发了新的接口,或者更改了当前注解,可通过以下方式更新:

  1. cd pocassist
  2. 安装 swag go get -u github.com/swaggo/swag/cmd/swag
  3. 初始化 swag swag init,初始化完成之后将在当前目录创建一个 docs 目录,目录中有生成 go文件、json文件、yaml文件
  4. go build编译成go二进制

# 0x02 前端

# 2-1 环境

安装 yarn

# 2-2 源码

git clone https://github.com/jweny/pocassistweb.git
cd pocassistweb
# 本地运行
yarn start
# 打包成静态文件
yarn build
1
2
3
4
5
6

# 2-3 静态文件打包至go二进制

  1. 编辑前端源码,本地运行通过

  2. 打包, yarn build

  3. 将生成的 build 文件夹 copy 至 pocassist/web/ , 此时 build 文件夹的路径为 pocassist/web/build

  4. 安装go-bindata-assetfs (opens new window),安装方式点击 (opens new window)

  5. 将静态文件转为bindata.go

    cd pocassist
    go-bindata-assetfs -o web/bindata.go -pkg web web/build/...
    
    1
    2
  6. 此时会生成一个pocassist/web/bindata.go文件

  7. go build编译成go二进制

TIP

gin 加载 bindata.go 的逻辑在 /api/ui.go中。使用 goland 查看这段代码是会被标红:

Asset:     web.Asset,
AssetDir:  web.AssetDir,
AssetInfo: web.AssetInfo,
1
2
3

原因为bindata.go文件太大,goland 不会做代码分析关联,不影响正常编译运行。

# 2-4 前后端分离部署(nginx)

  1. 编辑前端源码,本地运行通过

  2. 打包。yarn build

  3. 将 build 文件夹 上传至服务器

  4. 安装 nginx

  5. 修改 nginx.conf 反向代理后端

    pstream pocassistAPI {
    				# pocassist api 端口
            server 127.0.0.1:1231;
        }
    server {
            listen       80;
            location / {
            		# 配置build文件夹路径
                root /opt/pocassistWEB/build/;
            }
            location /api/ {
                proxy_pass http://pocassistAPI/api/;
            }
            error_page 404 /404.html;
                location = /40x.html {
            }
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20