CentOS 上 C++ 项目的部署与配置全流程
一 环境准备与编译器安装
sudo yum update -ysudo yum groupinstall -y "Development Tools";补充 sudo yum install -y cmake make gitsudo yum install -y openssl-devel libcurl-devel libxml2-devel pcre-devel zlib-develsudo yum install -y centos-release-scl scl-utils-buildsudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++scl enable devtoolset-9 bash(当前会话生效;如需持久,可写入 ~/.bashrc 的 source /opt/rh/devtoolset-9/enable)gcc --version、g++ --version、cmake --version 应返回预期版本号。二 构建与依赖管理
g++ -O2 -o myapp main.cpp;若有依赖,使用 pkg-config 管理编译/链接参数:g++ -O2 -o myapp main.cpp $(pkg-config --cflags --libs mylib)mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
CMakeLists.txt 中显式声明标准:set(CMAKE_CXX_STANDARD 11)(或更高)-devel 包(提供头文件与链接库),例如:sudo yum install -y openssl-devel-l库名 指定,必要时配合 -L/自定义库路径;运行时确保库路径可被解析(见第四部分)。三 运行与进程托管
chmod 755 myapp./myapp;后台运行:nohup ./myapp > app.log 2>&1 &sudo vim /etc/systemd/system/myapp.service[Unit]
Description=My C++ Application
After=network.target
[Service]
Type=simple
User=appuser
Group=appgroup
ExecStart=/opt/myapp/bin/myapp
WorkingDirectory=/opt/myapp
Environment=MY_VAR=1
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl status myapp
journalctl -u myapp -f(实时查看)、journalctl -u myapp --since today。四 运行环境与库路径配置
~/.bashrc 或 /etc/profile.d/myapp.sh):
export PATH=/opt/myapp/bin:$PATHexport LD_LIBRARY_PATH=/opt/myapp/lib:$LD_LIBRARY_PATHsource ~/.bashrc/usr/lib64、/lib64)Environment=LD_LIBRARY_PATH=... 注入,或在 /etc/ld.so.conf.d/myapp.conf 中写入 /opt/myapp/lib 后执行 sudo ldconfigsudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload五 生产部署要点与容器化
-O2/-O3),关闭调试信息以减小体积FROM centos:7
RUN yum update -y && \
yum groupinstall -y "Development Tools" && \
yum install -y cmake openssl-devel libcurl-devel && \
yum clean all
WORKDIR /app
COPY . /app
RUN mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j$(nproc)
ENV MY_VAR=1
CMD ["./build/myapp"]
docker build -t myapp:1.0 .
docker run -d --name myapp -p 8080:8080 myapp:1.0