C++项目在Ubuntu上的部署上线流程
在Ubuntu系统上部署C++项目前,需先安装编译工具链和常用依赖库,确保项目能正常编译运行。
build-essential(包含gcc、g++、make等核心工具),这是编译C++项目的必备环境:sudo apt update && sudo apt install -y build-essential
Boost、OpenSSL),可通过apt安装对应开发包(以Boost为例):sudo apt install -y libboost-all-dev libssl-dev
若依赖较新版本的库或非系统库,可使用vcpkg(微软开源的C++库管理器)或Conan(跨平台包管理器)进行管理。根据项目构建系统(如Makefile、CMake)编译代码,生成适用于Ubuntu的可执行文件。
make命令,生成可执行文件(如myapp):cd /path/to/project
make
build目录(隔离构建环境),再依次运行cmake生成Makefile,最后编译:mkdir build && cd build
cmake .. # 生成Makefile,需确保CMakeLists.txt配置正确
make # 编译项目,生成可执行文件
编译时需添加-std=c++11(或更高标准)和-pthread(多线程支持)等选项,例如:g++ main.cpp -o myapp -std=c++17 -pthread
将编译好的可执行文件上传至Ubuntu服务器,可选择以下方式:
scp):scp /local/path/to/myapp user@server_ip:/remote/path/to/deploy/
chmod +x /remote/path/to/deploy/myapp
libboost_system.so),需确保服务器上有对应库文件。可通过ldd命令检查依赖:ldd /remote/path/to/deploy/myapp
若缺少库,可通过apt安装(如sudo apt install libboost-system-dev)或设置LD_LIBRARY_PATH环境变量指向库所在目录。/remote/path/to/deploy/myapp
nohup或systemd:
nohup /remote/path/to/deploy/myapp > /path/to/log.log 2>&1 &
/etc/systemd/system/myapp.service),实现开机自启、故障自动重启:[Unit]
Description=My C++ Application
After=network.target
[Service]
ExecStart=/remote/path/to/deploy/myapp
Restart=always
User=www-data # 指定运行用户(建议用非root)
WorkingDirectory=/remote/path/to/deploy/
[Install]
WantedBy=multi-user.target
启用并启动服务:sudo systemctl daemon-reexec
sudo systemctl enable myapp.service # 开机自启
sudo systemctl start myapp.service # 立即启动
sudo systemctl status myapp.service # 查看状态
Dockerfile(示例):FROM ubuntu:22.04
ENV TZ=Asia/Shanghai
RUN apt update && apt install -y build-essential cmake libboost-all-dev
WORKDIR /app
COPY . . # 复制项目文件
RUN cmake . && make # 编译
CMD ["./myapp"] # 运行
构建并运行镜像:docker build -t my-cpp-app .
docker run -d -p 8080:8080 --name myapp my-cpp-app
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到C++应用端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重启Nginx生效:sudo systemctl restart nginx
tail命令实时查看程序日志(如nohup输出的log.log):tail -f /path/to/log.log
top、htop查看CPU/内存占用,netstat查看端口监听情况:top
netstat -tuln | grep 8080
gdb调试(编译时加-g选项):gdb ./myapp
(gdb) run
(gdb) bt # 查看崩溃时的调用栈
以上流程覆盖了C++项目在Ubuntu上的完整部署上线步骤,从环境准备到生产优化,可根据项目规模(如是否为Web应用、是否需要容器化)调整具体环节。