14.4. 三种部署方式
说明
本节我们来讲解下 Go 应用部署的几种方式:
- 独立部署
- 代理部署
- 容器部署
1. 独立部署
独立部署有以下几个步骤:
1). 将编译好的应用程序上传到服务器上(SCP/SFTP/FTP);
2). 设置监听端口为 80 (HTTP) 或者 443(HTTPS);
3). 将应用程序作为后台守护进程运行即可。
在我们的 goblog 中,设置端口只需要通过修改 .env 文件里的 APP_PORT 即可。
关于守护进程
一般命令行运行 ./goblog
程序会持续运行,但是当退出命令行会话窗口时,程序会停止运行。所以在生产服务器上,我们不能使用这种方式。
要将命令作为守护进程运行,需要使用工具,通常会有以下几个可选:
- nohup —— Linux 系统内置,直接使用
nohup ./goblog &
命令即可; - systemctl —— Linux 系统内置,很多常见的服务都有使用 systemctl 管理,比如 MySQL、Nginx;
- supervisor —— 是用 Python 实现的一套通用进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。(推荐)
- go-supervisor —— Go 语言实现的 supervisor,好处是不需要安装 Python 环境。(推荐)
独立部署适合简单的项目,服务器只有一个站点的情况。
2. 代理部署
代理部署即前置一层第三方的 Web 服务器来处理所有的请求,将部分请求(往往是动态处理请求)交给后端的 Golang
应用程序执行。
推荐使用 Nginx 作为反向代理的前端接入层,目前来讲 Nginx 市场占有率非常高,性能也不错。
相对于独立部署,使用代理部署要灵活的多。
使用 Nginx 有以下优点:
- 一台服务器可运行多个站点;
- 可以做负载均衡;
- 静态文件直接加载,做到动静分离;
- 前端和后端分开部署,各自开发;
- 自动处理 gzip 、ssl 等。
代理部署因为其灵活性,尤其是单机部署的情况下。本课程我们将讲解这种部署方式。
3. 容器部署
容器部署即使用 Docker 化部署 Golang 应用程序,这是在云服务时代最流行的部署方式。
Docker 是一个开源的轻量级容器技术,允许我们打包应用以所需运行的环境到一个可移植的镜像中,然后发布到任何支持 Docker 的系统上运行。
在 Linux 系统里,通过容器技术,在几乎没有性能开销的情况下,Docker 为应用提供了一个隔离运行环境。
使用 Docker 有以下好处:
- 简化配置
- 代码流水线管理
- 隔离应用
- 快速、持续部署
- 配合 K8S ,可以很轻松实现集群部署
Docker 部署和集群部署,我们会在后面的系列课程中讲到,G01 是入门课,先不做讲解。