温馨提示×

如何在linux部署c++服务

小樊
35
2026-10-05 02:20:04
栏目: 编程语言

在 Linux 上部署一个 C++ 服务,通常包含:开发/编译 → 可执行文件 → 后台运行 → 进程管理 → 日志/监控 → 开机自启。下面我按实战流程给你一个完整指南。


一、准备环境

1. 安装编译工具

# Ubuntu / Debian
sudo apt update
sudo apt install -y build-essential gdb cmake

# CentOS / Rocky
sudo yum groupinstall "Development Tools"

2. 确认架构

uname -m
# x86_64 / aarch64

二、编译 C++ 服务

方式一:g++ 直接编译

g++ -O2 -std=c++17 -o my_server main.cpp

方式二:CMake(推荐)

cmake_minimum_required(VERSION 3.10)
project(my_server)

set(CMAKE_CXX_STANDARD 17)
add_executable(my_server main.cpp)
mkdir build && cd build
cmake ..
make -j

三、运行 C++ 服务

1. 前台运行(测试)

./my_server

2. 后台运行(简单)

nohup ./my_server > server.log 2>&1 &

查看:

ps -ef | grep my_server
tail -f server.log

⚠️ 不推荐生产环境长期使用


四、生产级部署方案(推荐)

✅ 方案 1:systemd(最常用)

1. 创建服务文件

sudo vim /etc/systemd/system/my_server.service
[Unit]
Description=My C++ Server
After=network.target

[Service]
ExecStart=/opt/my_server/my_server
WorkingDirectory=/opt/my_server
User=appuser
Restart=always
RestartSec=3
StandardOutput=append:/var/log/my_server.log
StandardError=append:/var/log/my_server.log

[Install]
WantedBy=multi-user.target

2. 部署程序

sudo mkdir -p /opt/my_server
sudo cp my_server /opt/my_server/
sudo useradd -r -s /bin/false appuser

3. 启动服务

sudo systemctl daemon-reload
sudo systemctl enable my_server
sudo systemctl start my_server

4. 查看状态

systemctl status my_server
journalctl -u my_server -f

✅ 方案 2:Docker(更现代)

Dockerfile

FROM ubuntu:22.04
WORKDIR /app
COPY my_server .
EXPOSE 8080
CMD ["./my_server"]
docker build -t my_server .
docker run -d --name myserver -p 8080:8080 my_server

五、网络与端口

开放端口

sudo ufw allow 8080

或 firewalld:

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

六、日志与监控

日志建议

  • 不要只写 stdout
  • 使用 spdlog / glog
  • 日志按天分割

进程监控

  • systemd(自带)
  • supervisor
  • Prometheus + metrics

七、常见 C++ 服务类型

类型 示例
HTTP 服务 Drogon / Pistache
RPC 服务 gRPC
消息服务 ZeroMQ / RabbitMQ
游戏服务 自研 TCP

八、部署检查清单 ✅

  • [ ] 编译无警告
  • [ ] core dump 已开启
  • [ ] 非 root 用户运行
  • [ ] 开机自启
  • [ ] 日志可观测
  • [ ] 崩溃自动重启

如果你愿意,可以告诉我:

  • 你的 C++ 服务类型(HTTP / TCP / RPC)
  • 使用的 框架
  • 目标系统是 Ubuntu / CentOS / 容器

我可以直接给你一套可复制的部署模板。

0 踩