Golang打包部署可执行文件

背景

小编之前使用 Golang + Gin,结合gorilla/websocket 搭建了一个简易的聊天室后台服务。接下来,给大家再介绍下我是如何把 go 代码写的服务部署到服务器上的。

方案

  1. 打包

在项目根目录执行

Windows 下打包 Linux 可执行文件

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

Mac 下打包 Linux 可执行文件

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

生成 main 文件(没有后缀)

  1. 上传到服务器

使用 FTP 工具比如 FileZilla,传输 main 文件到服务器任意空白目录,比如 /software/go-api

修复 Permission denied问题

cd /software/go-api
chmod 777 main
  1. 启动
cd /software/go-api
#保持后台运行
nohup ./main >main.out 2>&1 &

执行后 Ctrl+C 退出交互即可

查询是否启动成功

ps aux|grep main

打印出类似这样的信息就是启动成功

root     15448  0.0  0.0 241388  4280 pts/0    T    11:21   0:00 sudo nohup ./main
opensou+ 15479  0.0  0.0 112812   980 pts/0    S+   11:21   0:00 grep --color=auto main

第二个参数 15448 表示 进程 pid,如果程序更新了,上传新的 main 文件后,需要停掉旧的进程,使用

kill -9 15448

然后再用 nohup ./main >main.out 2>&1 & 重新启动新的进程

  1. 修改前端 ws 地址
// 100.2.3.4改为你自己的服务器IP地址
var ws = new WebSocket("ws://100.2.3.4:8448/ws");

如果 websocket 连接不上,先检查下 IP 是否能连通

ping 100.2.3.4

再检查服务器安全组是否开放了 8448 端口。

  1. nginx 配置(可选)

如果你只是做本地测试,IP 地址就可以用了,如果需要部署生产正规使用,通常会配合原有的 nginx 来做转发。

编辑你自己的 nginx 配置文件,将myapi.mydomain.com/ws请求转发到内部的100.1.2.3:8448地址上

先找到你的 nginx 配置文件,用 vim 编辑它

cd /software/nginx/conf.d
vim myapi.mydomain.com.conf

vim 基本使用,i进入编辑,Esc退出编辑,Shift + : 进入命令模式 命令模式下,保存退出:wq,强制退出:q!

加入自己的配置

upstream go_ws {
      #ip_hash;
      server 100.1.2.3:8448;
}

server {
    #监听IP端口
    listen       80;
    #域名
    server_name myapi.mydomain.com;
    #其他配置

    location /ws {
        proxy_pass http://go_ws/ws;

        proxy_set_header Host $host;
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 1800s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
        #websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

重启 nginx,比如我用的 docker

docker restart my-nginx

这时候,前端修改地址测试下

// myapi.mydomain.com改为你自己的服务器IP地址
var ws = new WebSocket("ws://myapi.mydomain.com/ws");

总结

以上就是小编打包发布go后端可执行文件的一点经验,教程比较基础,如有不足,欢迎指出。

参考

评论