Golang打包部署可执行文件
背景
小编之前使用 Golang + Gin,结合gorilla/websocket
搭建了一个简易的聊天室后台服务。接下来,给大家再介绍下我是如何把 go 代码写的服务部署到服务器上的。
方案
- 打包
在项目根目录执行
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 文件(没有后缀)
- 上传到服务器
使用 FTP 工具比如 FileZilla,传输 main
文件到服务器任意空白目录,比如 /software/go-api
修复 Permission denied
问题
cd /software/go-api
chmod 777 main
- 启动
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 &
重新启动新的进程
- 修改前端 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 端口。
- 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后端可执行文件的一点经验,教程比较基础,如有不足,欢迎指出。
评论