Ubuntu Rust项目如何部署上线

举报
林太白 发表于 2025/11/21 17:28:16 2025/11/21
【摘要】 Ubuntu Rust项目如何部署上线

Ubuntu Rust项目如何部署上线

上线地址

http://xx.xx.xx:3300/

1、打包构建项目

cargo build --release 

这个时候在我们的项目路径下就生成可执行文件

生成的可执行文件位于target/release/目录

2、部署服务器

这里我们以Ubuntu服务器为例子进行部署上线

进入我们的控制台,这里我使用xshell进行连接,连接成功以后进入我们的根目录下载,这个过程持续挺久的

环境安装

//更新服务器
apt list --upgradable

//更新系统
sudo apt upgrade -y

//更新系统
sudo apt update && sudo apt upgrade -y

//安装必要工具
sudo apt install -y curl wget build-essential

sudo apt install -y curl wget build-essential git


// 安装Rust环境
使用rustup安装Rust工具链,自动配置环境变量

//使用官方安装脚本
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  
source $HOME/.cargo/env


// 使用阿里云安装脚本
curl --proto '=https' --tlsv1.2 -sSf https://mirrors.aliyun.com/repo/rust/rustup-init.sh | sh

提示我们的信息,这里我安装了几次才成功,安装稳定版本

latest update on 2025-11-10, rust version 1.91.1

rustup default stable

// 提示信息
stable-x86_64-unknown-linux-gnu installed - rustc 1.91.1 (ed61e7d7e 2025-11-07)

验证安装:
rustc --version

// 提示信息
// rustc 1.91.1 (ed61e7d7e 2025-11-07)

cargo --version
// 提示信息
// cargo 1.91.1 (ea2d97820 2025-10-10)

项目编译运行

接下来我们的项目传到我们服务器上,然后进入项目跟目录进行编译

// 没有编译的先在自己项目中编译一下
cargo build --release 


ubuntu系统编译完成以后我们的项目是这样子的,注意这是在服务器ubuntu上编译完成的

/opt/nexus-rust-api/target/release

    nexus-rust-api
    nexus-rust-api.d

服务器命令行操作上传项目

// 创建目录
mkdir -p ~/nexus-api

// 使用 SCP 上传编译好的二进制文件
// 在 XShell 中执行以下命令(替换 your_username 为你的服务器用户名):

scp D:/LTB/code/NexusRustApi/target/release 用户名@服务器IP:~/nexus-api/

这个时候给了我一个这个提示

Host key verification failed.

原因

ubuntu 系统不能root操作,需要新给一个用户

# 替换 username 为你想要的用户名
sudo useradd -m 新用户名称

//添加用户密码
sudo passwd 新用户名称
//输入新的密码


// 将用户添加到 sudo 组(可选,但推荐)
sudo usermod -aG sudo 新用户名称

// 切换到新用户
su - 新用户名称
密码xxx
# 使用 -o 选项跳过主机密钥检查
scp -o StrictHostKeyChecking=no 
  D:/LTB/code/NexusRustApi/target/release root@xxx:~/nexus-api/

部署方案

使用反向代理 + Rust 应用(推荐方案)

Nginx + Rust 应用(Linux)
安装 Nginx

# Ubuntu
sudo apt install nginx

// 配置 Nginx
sudo nano /etc/nginx/sites-available/nexusrust

# 先在本地打包项目
tar -czf nexusrust.tar.gz -C path/to/your/rust/project .

# 然后上传到服务器
scp nexusrust.tar.gz username@39.102.58.130:/home/username/nexusrust

# 在服务器上解压
tar -xzf nexusrust.tar.gz

添加用户

# 创建新用户,这里以"rustuser"为例
sudo adduser lintaibai

# 将用户添加到sudo组,以便必要时可以执行管理员命令
sudo usermod -aG sudo lintaibai

# 切换到新用户
su - lintaibai

环境配置

使用 nexus-rust-api 作为项目名
# 更新系统
sudo apt update

# 安装基础工具
sudo apt install -y build-essential curl git

# 安装MySQL客户端
sudo apt install -y mysql-client

# 安装开发工具
sudo apt install -y pkg-config libssl-dev

# 安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

curl --proto '=https' --tlsv1.2 -sSf 
  https://mirrors.aliyun.com/repo/rust/rustup-init.sh | sh

rustup default stable

服务文件配置

#  部署项目
sudo mkdir -p /opt/nexus-rust-api
sudo chown $USER:$USER /opt/nexus-rust-api

# 复制编译好的二进制文件
cp target/release/nexus-rust-api /opt/nexus-rust-api/
sudo chmod +x /opt/nexus-rust-api/nexus-rust-api

sudo chmod +x /opt/nexus-rust-api/nexus-rust-api.exe
# 重命名文件
sudo mv /opt/nexus-rust-api/nexus-rust-api.exe /opt/nexus-rust-api/nexus-rust-api

# 设置正确的权限
sudo chmod +x /opt/nexus-rust-api/nexus-rust-api
sudo chown $USER:$USER /opt/nexus-rust-api/nexus-rust-api



# 创建服务文件
sudo nano /etc/systemd/system/nexus-rust-api.service

// 配置文件
[Unit]
Description=Nexus Rust API
After=network.target

[Service]
Type=simple
User=$USER
WorkingDirectory=/opt/nexus-rust-api
ExecStart=/opt/nexus-rust-api/target/release/nexus-rust-api
Restart=always
RestartSec=10
Environment=DATABASE_URL=mysql://数据库用户名:数据库密码@localhost:3306/nexus
Environment=BASE_URL=http://localhost:3300
Environment=BASE_URL_PREFIX=/api
Environment=PORT=3300
Environment=HOST=0.0.0.0

[Install]
WantedBy=multi-user.target


// 启动
# 启动服务

# 重新加载systemd配置
sudo systemctl daemon-reload
# 关闭再启动
sudo systemctl enable nexus-rust-api
sudo systemctl start nexus-rust-api

# 检查服务状态
sudo systemctl status nexus-rust-api

# 查看日志
sudo journalctl -u nexus-rust-api -f

# 实时查看日志
sudo journalctl -u nexus-rust-api.service -f

// 查看完整前端日志信息
sudo journalctl -u nexus-rust-api.service -n 50

# 停止服务
sudo systemctl stop nexus-rust-api

//  5配置防火墙
# 开放端口
sudo ufw allow 3300
sudo ufw enable


# 重启服务
sudo systemctl restart nexus-rust-api

浏览器直接打开测试一下我们的接口,这个时候我们接口已经可以成功访问了

http://服务器IP:3300/

3、Ubuntu服务器常用命令



df //磁盘空间概览
df -h //磁盘空间概览

//查看当前路径 
pwd 

// 查看文件是否存在
ls -la /opt/nexus-rust-api/

# 查看当前用户
whoami

# 检查服务配置中的用户
grep User /etc/systemd/system/nexus-rust-api.service


# 重新加载systemd
sudo systemctl daemon-reload

# 重启服务
sudo systemctl restart nexus-rust-api

# 检查状态
sudo systemctl status nexus-rust-api

# 检查防火墙状态 
sudo ufw status


适配当前的架构重新编译
# 确认目标架构
rustup target list
rustup target add x86_64-unknown-linux-gnu  # 如果是x86_64系统

# 清理之前的构建
cargo clean
# 编译 Linux 版本
cargo build --release --target x86_64-unknown-linux-gnu

4、docker部署项目

上面传统部署项目的缺点很容易我们就可以看出来 ,就是项目的依赖过大的时候,我们无法在服务器端加载和部署如此之大的依赖。

还有就是不同服务器我们需要安装和打不同的包,这时候我们就感受到了docker的魅力

使用官方 Docker 安装方式

win11电脑本地化部署docker

线下docker环境部署

// windows电脑docker下载地址
https://download.docker.com/win/static/stable/x86_64/


在本地构建镜像
docker build -t nexus-rust-api .

4、Docker部署

文件配置

根目录新建一个Dockerfile写入

# 构建阶段
FROM rust:1.70 as builder
WORKDIR /app
COPY Cargo.toml ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release
RUN rm -rf src
COPY src ./src
RUN cargo build --release

# 运行阶段 - 使用最小的基础镜像
FROM scratch
# 从构建阶段复制编译好的二进制文件
COPY --from=builder /app/target/release/nexus-rust-api /nexus-rust-api
# 暴露端口
EXPOSE 3300
# 运行应用
CMD ["/nexus-rust-api"]

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。