使用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后缀;

UserGroup,根据自己系统用户修改,如不知道则设置为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!