企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> ### 线上服务器的部署 * 线上服务器不需要安装Go的开发环境, 也不用将源码上传上去 * 只需要找一台和线上服务器相同的操作系统, 安装GO环境, 上传源码, 生成可执行文件, 将生成的可执行文件放到线上服务器(避免线上服务器出现漏洞时, 被人盗窃源码, 找出漏洞, 进一步遭受攻击) * 将本地可执行文件上传到线上服务器时, 如果用到相对路径, 那线上服务器放可执行文件的文件, 要和本地生成可执行文件的位置相同 > ### 准备工作 * 说明: 用supervisor 来管理不同服务间的单个或多个实例, 用nginx负载均衡到多个实例 * 定义三个服务, 端口为9001~9003, 将生成的可执行文件放到线上服务器(名称http-login1, http-login2, http-login3) ~~~ package main import ( "net/http" "fmt" ) func login(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World")) } func main() { http.HandleFunc("/login", login) if err := http.ListenAndServe(":9001", nil); err != nil { fmt.Println(err) } } ~~~ > ### 安装supervisor 进程管理工具 * supervisord:运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。 * supervisorctl:是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。 ~~~ [root@VM_0_17_centos gopath]# yum install supervisor [root@VM_0_17_centos gopath]# systemctl start supervisord.service [root@VM_0_17_centos gopath]# vim /etc/supervisord.conf //systemctl restart supervisord.service (修改完配置没生效的话重启下) //找到 ;[program:theprogramname]栏目, 在下一个栏目前添加 //相关配置说明可以看最下方的相关阅读 [program:golang-http-login1] command=/var/local/gopath/src/http-login1 autostart=true autorestart=true startsecs=10 [program:golang-http-login2] command=/var/local/gopath/src/http-login2 autostart=true autorestart=true startsecs=10 [program:golang-http-login3] command=/var/local/gopath/src/http-login3 autostart=true autorestart=true startsecs=10 [root@VM_0_17_centos gopath]# supervisorctl update golang-http: stopped golang-http: removed process group golang-http-login1: added process group golang-http-login2: added process group golang-http-login3: added process group #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。 //supervisorctl update #启动进程 //supervisorctl start golang-http-login1 #重启进程 //supervisorctl restart golang-http-login1 #停止进程 //supervisorctl stop golang-http-login1 #启动全部进程 //supervisorctl start all #设置开机启动 //systemctl enable supervisord.service ~~~ > ### 查看服务状态 ~~~ [root@VM_0_17_centos gopath]# supervisorctl status golang-http-login1 RUNNING pid 15112, uptime 0:01:03 golang-http-login2 RUNNING pid 15113, uptime 0:01:03 golang-http-login3 RUNNING pid 15114, uptime 0:01:03 [root@VM_0_17_centos src]# netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2897/sshd tcp6 0 0 :::9001 :::* LISTEN 15112/http-login1 tcp6 0 0 :::9002 :::* LISTEN 15113/http-login2 tcp6 0 0 :::9003 :::* LISTEN 15114/http-login3 ~~~ > ### 访问服务 ![img](https://box.kancloud.cn/f49ea3043426d6eb2938187c90ad00a6_675x480.jpg) > ### 图形界面(修改inet\_http\_server模块) ![img](https://box.kancloud.cn/5d409595ea44710696632c8c40135f57_618x88.jpg) ![img](https://box.kancloud.cn/924a1d21f86daa902fad7fff904b1a8f_1307x310.jpg) > ### 配置日记(点Name的时候可以看到对应终端输出) ~~~ [program:golang-http-login3] command=/var/local/gopath/src/http-login3 autostart=true autorestart=true startsecs=10 stdout_logfile=/usr/local/runtime.log ~~~ > ### nginx负载均衡 ~~~ upstream golang-http-login { server 123.207.79.96:9001; server 123.207.79.96:9002; server 123.207.79.96:9003; } server { listen 9000; location / { proxy_pass http://golang-http-login; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ~~~ > ### 相关阅读 * [supervisor的安装与简单介绍](https://www.cnblogs.com/Dicky-Zhang/p/6171954.html)