使用service部署
1. 创建 Systemd 服务文件
文件名及内容根据自己修改,存放路径为:/etc/systemd/system/myapp.service
,内容参考:
# /etc/systemd/system/myapp.service
[Unit]
Description=myapp
After=network.target
[Service]
Type=simple
User=www
Group=www
ExecStart=/home/www/myapp/target/release/myapp
Restart=always
ReStartSec=5
Environment=RUST_LOG=info
[Install]
WantedBy=multi-user.target
其中ExecStart
路径为rust build后二进制文件路径,一般为项目目录下的/target/release/项目名称
,如果是win下会带.exe
后缀;
User
、Group
,根据自己系统用户修改,如不知道则设置为root
。
2. 重新加载 Systemd 配置
在创建或修改 systemd
服务文件后,需要重新加载 systemd
配置。
systemctl daemon-reload
3. 创建部署脚本
在项目根目录下新建deploy.sh
文件,内容如下:
#!/bin/bash
# 设置应用名称
SERVICE_NAME=myapp
# 拉取最新代码,如果使用git仓库
echo "git fetch..."
git fetch --all
git reset --hard origin/master
git pull
# 编译Rust
echo "Starting cargo build --release..."
cargo build --release
# 授权
echo "Starting chown..."
# 如果service中用root用户,则注释掉下面一行
chown -R www ./target
chmod -R 755 ./target
# 停用服务
echo "Stopping and disabling service..."
systemctl stop $SERVICE_NAME
# 等待几秒钟以确保服务完全停止
sleep 2
# 启用服务
echo "Enabling and starting service..."
systemctl enable $SERVICE_NAME
systemctl start $SERVICE_NAME
# 检查服务状态
echo "Checking service status..."
systemctl status $SERVICE_NAME
4. 执行部署脚本
在项目跟目录执行部署脚本deploy.sh
:
./deploy.sh
如果遇上权限不足,则先执行下面这行再执行上面脚本:
chmod 755 ./deploy.sh
5. 检查
可以执行journalctl -u myapp -f
查看服务日志,如果正常启动,则访问网站查看是否正常运行。
6. nginx代理规则
参考规则
location / {
proxy_pass http://127.0.0.1:7878;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Host $host:$server_port;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Done!