在VPS上部署C++应用程序:高级水平(逐步指南)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:从本地构建到C++应用程序的生产发布

开发C++应用程序只是工作的一半。另一半同样重要的部分,是将其可靠且安全地部署到远程服务器(VPS)上。在本文中,我们将深入探讨一种高级的C++应用程序部署方法,它超越了简单的二进制文件复制。您将学习如何配置自动构建、将应用程序作为系统服务运行、通过Nginx组织反向代理,以及实现基本监控。

本文面向已经熟悉C++和Linux基础知识的开发者。我们将使用现代工具:CMake、systemd、Nginx和Git。



1. 自动化构建与在VPS上准备环境

1.1. 安装依赖项和编译器

在部署之前,请确保服务器上安装了最新的编译器(g++或clang)以及必要的库。对于生产服务器,建议使用静态链接或容器化,但在本文范围内,我们将探讨经典方法。

# 更新软件包sudo apt update && sudo apt upgrade -y

# 安装编译器和构建工具sudo apt install build-essential cmake git -y

# 安装额外的库(以Boost为例)sudo apt install libboost-all-dev -y


1.2. 使用CMake创建构建脚本

使用CMake管理构建过程。这将确保可移植性并简化与CI/CD的集成。示例 CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)project(MyCppApp VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 针对生产构建的优化set(CMAKE_BUILD_TYPE Release)

# 查找外部库find_package(Boost REQUIRED COMPONENTS system filesystem)

# 构建可执行文件add_executable(${PROJECT_NAME} src/main.cpp src/server.cpp)target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::filesystem pthread)

# 将二进制文件安装到系统中install(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin)

创建CMakeLists.txt后,在服务器上执行构建:

cd /opt/myappmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j$(nproc)sudo make install


2. 配置systemd以管理进程

在后台运行应用程序并在崩溃时自动重启是至关重要的任务。使用systemd创建一个稳定的服务。



2.1. 创建unit文件

创建文件 /etc/systemd/system/myapp.service:

[Unit]Description=My C++ Production ApplicationAfter=network.target

[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/usr/local/bin/MyCppApp --config /etc/myapp/config.jsonRestart=alwaysRestartSec=5StandardOutput=journalStandardError=journal

# 安全设置NoNewPrivileges=trueProtectSystem=fullProtectHome=true

[Install]WantedBy=multi-user.target


2.2. 启动并检查服务

sudo systemctl daemon-reloadsudo systemctl enable myapp.servicesudo systemctl start myapp.servicesudo systemctl status myapp.service

现在,您的C++应用程序将在系统启动时自动启动,并在发生故障时自动重启。



3. 通过Nginx配置反向代理和HTTPS

直接访问应用程序端口既不安全也不方便。使用Nginx作为反向代理来处理静态文件、SSL终止和负载均衡。



3.1. 安装并配置Nginx

sudo apt install nginx certbot python3-certbot-nginx -y

创建配置文件 /etc/nginx/sites-available/myapp:

server {    listen 80;    server_name myapp.example.com;

location / { pr

博客

书籍推荐