在 Ubuntu 上部署 C++ 程序的标准流程
一 准备与构建
sudo apt update && sudo apt install -y build-essential cmakegcc --version、g++ --version、cmake --versionsudo apt install g++sudo apt install clangg++ main.cpp -o myapp -O2 -Wall -g -std=c++17cmake_minimum_required(VERSION 3.10)
project(MyApp LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Release)
add_executable(myapp src/main.cpp src/foo.cpp)
mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j$(nproc)二 运行与进程管理
./myappnohup ./myapp > /var/log/yourapp/app.log 2>&1 &ss -ltnp | grep 8080、ps aux | grep myapp创建服务:`sudo tee /etc/systemd/system/yourapp.service >/dev/null <<‘EOF’ [Unit] Description=My C++ Application After=network.target
[Service] Type=simple ExecStart=/opt/yourapp/bin/myapp WorkingDirectory=/opt/yourapp User=www-data Group=www-data Restart=always RestartSec=5 StandardOutput=journal StandardError=journal Environment=APP_ENV=production
[Install] WantedBy=multi-user.target EOF`
启用与启动:sudo systemctl daemon-reload && sudo systemctl enable --now yourapp
常用运维:sudo systemctl status yourapp、sudo journalctl -u yourapp -f
三 网络发布与反向代理
app.port(8080).multithreaded().run();sudo apt install -y nginxserver {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginxfastcgi_pass 转发到应用监听的 Unix socket 或 TCP。四 依赖处理与交付方式
-DBUILD_SHARED_LIBS=OFF 并链接静态库),但注意许可与体积权衡。FROM ubuntu:22.04
RUN apt update && apt install -y g++ cmake && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
RUN mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j$(nproc)
CMD ["./build/myapp"]
docker build -t yourapp:latest . && docker run -d -p 8080:8080 --name yourapp yourapp:latest五 验证与常见问题
curl -I http://localhost/、ss -ltnp | grep 8080sudo journalctl -u yourapp -ftop/htop、/proc/<pid>/statussudo lsof -iTCP:8080 -sTCP:LISTEN 或 ss -ltnp | grep 8080ldd myapp 输出、或 /etc/ld.so.conf.d/