使用 GoFrame 开发的应用程序可以独立地部署到服务器上,设置为后台守护进程运行即可。这种模式常用在简单的API服务项目中。
服务器我们推荐使用 *nix 服务器系列(包括: Linux, MacOS, *BSD),以下使用 Ubuntu 系统为例,介绍如何部署使用 GoFrame 框架开发的项目。
*nix
1. nohup
我们可以使用简单的 nohup 命令来运行应用程序,使其作为后台守护进程运行,即使远程连接的SSH断开也不会影响程序的执行。在流行的Linux发行版中往往都默认安装好了 nohup 命令工具。 命令如下:
nohup ./gf-app &
2. tmux
tmux 是一款 Linux 下的终端复用工具,可以开启不同的终端窗口来将应用程序作为后台守护进程执行,即使远程连接的 SSH 断开也不会影响程序的执行。 在 ubuntu 系统下直接使用 sudo apt-get install tmux 安装即可。使用以下步骤将应用程序后台运行。
- tmux new -s gf-app;
- 在新终端窗口中执行 ./gf-app即可;
- 使用 ctrl+B & D快捷键可以退出当前终端窗口;
- 使用 tmux attach -t gf-app可进入到之前的终端窗口;
3. supervisor
supervisor 是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。官方网站: http://supervisord.org/ 常见配置如下:
[program:gf-app]
user           = root
directory      = /var/www
command        = /var/www/main
stdout_logfile = /var/log/gf-app-stdout.log
stderr_logfile = /var/log/gf-app-stderr.log
autostart      = true
autorestart    = true
使用步骤如下:
- 使用 sudo service supervisor start启动supervisor服务;
- 创建应用配置文件 /etc/supervisor/conf.d/gf-app.conf, 内容如上;
- 使用 sudo supervisorctl进入supervisor管理终端;
- 使用 reload重新读取配置文件并重启当前supoervisor管理的所有进程;
- 也可以使用 update重新加载配置(默认不重启),随后使用start gf-app启动指定的应用程序;
- 随后可以使用 status指令查看当前supervisor管理的进程状态;
踩坑分享经验:
- conf配置文件变更后需要在- supervisorctl中执行- reload才能更新使用到最新的配置。
- directory配置一般是不能缺少的,指定当前的工作目录路径,且必须配置在- command之前。
- command命令需要使用绝对路径,否则会找不到执行文件。
4. systemctl
Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。
而 systemctl 是 Systemd 的主命令,用于管理系统。可以参考 阮一峰对于 Systemd 的解读 ,文章的第四、五章节。
其实我们大部分服务都有使用 systemctl 管理,比如 MySQL、Nginx 等等。
常见配置如下:
[Unit]
# 单元描述
Description=GF APP
# 在什么服务启动之后再执行本程序
After=mysql.service
[Service]
Type=simple
# 程序执行的目录
WorkingDirectory=/data/server/gfapp/
# 启动的脚本命令
ExecStart=/data/server/gfapp/gfapp
# 重启条件
Restart=always
# 几秒后重启
RestartSec=5
[Install]
WantedBy=multi-user.target
使用方法:
- 创建应用配置文件 /etc/systemd/system/gfapp.service, 内容如上;
- 使用 systemctl daemon-reload重新加载服务;
- 执行 systemctl start gfapp来启动服务;
- 最后执行 systemctl status gfapp来查看服务运行的状态信息;
- 执行 systemctl enable gfapp将服务添加到开机启动项;
- 注意:执行的 gfapp是使用文件名作为服务名;
- 常见的命令有: start(启动), stop(停止), restart(重启), status(查看运行状态), enable(添加到开机启动项), disable(将程序从开机启动中移除)
5. screen
Screen 是一款由 GNU 计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。 GNU Screen 可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
安装方式:
sudo apt install -y screen ( debian 系列)
sudo yum install -y screen  ( centos)
常用参数:
- screen -S yourname-> 新建一个叫 yourname 的 session
- screen -ls-> 列出当前所有的 session
- screen -r yourname-> 回到 yourname 这个 session
- screen -d yourname-> 远程detach某个 session
- screen -d -r yourname-> 结束当前 session 并回到 yourname 这个 session
使用方法:
- 使用命令 screen -S gfapp创建一个 session;
- 在新终端窗口中执行 ./gf-app即可;
- 执行 ctrl-a, ctrl-d暂时离开当前session;
- 执行 screen -r gfapp返回命令窗口; 若返回不成功, 可能是该窗口被占用(Attached)了, 可以尝试使用screen -Dr gfapp;
- 执行 screen -X -S gfapp quit结束程序;