> ### 线上环境部署
* 线上服务器不需要安装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
;stdout_logfile=/usr/local/runtime.log ; 配置日记(点Name的时候可以看到对应终端输出)
;
directory=/var/local/gopath/src ;在这个目录下运行(程序引入静态文件时)
[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
~~~
> ### 访问服务
![](https://img.kancloud.cn/55/08/55087a4bc9642753368f307cc5258cdc_675x480.png)
> ### 图形界面(修改inet\_http\_server模块)
![](https://img.kancloud.cn/a7/90/a7908b4ae430391726d5e756e9086751_618x88.png)
![](https://img.kancloud.cn/c0/b0/c0b049c4b43745fbb552ec6c9488c182_1307x310.png)
> ### 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)
- 第一例 留言板
- 第二例 gRPC使用例子
- 第三例 基于go-micro做服务注册和服务发现
- 第四例 聊天室
- 第五例 工具库 第五例 并发安全字典
- dao
- common
- common.go
- config
- config.go
- gorm
- grom.go
- sqlx
- sqlx.go
- kafka
- kafka.go
- log
- log.go
- log2.go
- redis
- redis.go
- zookeeper
- zookeeper.go
- init
- main.go
- 第六例 原生sql操作
- 第七例 sqlx操作
- 第八例 Redis数据库(gomodule/redigo)
- 第九例 Redis消息队列
- 第十例 Redis集群连接
- 第十一例 Zookeeper操作
- 第十二例 Kafka操作
- 第十三例 NSQ操作
- 第十四例 二分查找
- 第十五例 交换排序 - 冒泡排序
- 第十六例 插入排序 - 直接插入排序
- 第十七例 插入排序 - 希尔排序
- 第十八例 交换排序 - 快速排序
- 第十九例 算法求解应用
- 第二十例 pprof性能分析
- 第二一例 CPU信息采集
- 第二二例 Heap信息采集
- 第二三例 Http信息采集
- 第二四例 单元测试(功能测试)
- 第二五例 基准测试(压力测试/性能测试)
- 第二六例 gdb调试
- 第二七例 json序列化和反序列化
- 第二八例 protobuf序列化和反序列化
- 第二九例 包管理工具 go vendor
- 第三十例 包管理工具 go mod
- 第三一例 zip压缩
- 第三二例 交叉编译
- 第三三例 线上环境部署
- 第三四例 业务:实现固定周期维护
- 第三五例 聊天室(精简版)
- 第三六例 并发安全字典
- 第三七例 导出Excel表格
- 第三八例 导出CSV表格
- 第三九例 聊天室(高并发)
- 第四十例 JWT (Json Web Token)
- 第四一例 雪花算法生成 Id
- 第四二例 对称加密 AES
- 第四三例 非对称加密 RSA
- 第四四例 签名算法 SHA1
- 第四五例 数据库操作 gorm
- 第四六例 数据库操作 gorm 集合
- 数据库连接和创建表
- 查询 - 分页
- 查询所有数据
- 查询单条数据
- 插入一条或多条数据
- 更新一条或多条数据
- 更新一条或多条数据(有零值)
- 第四七例 RSA(MD5WithRSA 算法)签名和验签方式
- 第四八例 线上部署脚本
- 第四九例 Elasticsearch
- 第五十例 对象池
- 第五十一例 相关阅读