在VPS上部署C++应用程序:从A到Z的分步指南

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

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

开始课程

引言:为什么要在VPS上部署C++应用程序?

\n

C++仍然是最具性能的编程语言之一。如果您创建了高负载服务器、解析器、游戏引擎或基于C++的微服务,迟早会面临将其发布到互联网的问题。租用VPS(虚拟专用服务器)是此类任务的最佳选择:您可以完全控制环境,这对于编译型语言至关重要。

\n

在本文中,我们将介绍完整的流程:从配置空服务器到在systemd下启动C++二进制文件并通过Nginx发布。所有代码示例均经过测试,并在Ubuntu 22.04上验证。

\n\n

1. 准备VPS并安装工具

\n\n

1.1. 连接到服务器

\n

购买VPS后,您将获得IP地址、登录名(通常为root)和密码。通过SSH连接:

\n
ssh root@您的服务器IP
\n

建议立即更新软件包数据库并安装基本工具:

\n
apt update && apt upgrade -y\napt install git curl wget build-essential -y
\n\n

1.2. 安装编译器和CMake

\n

要构建C++项目,需要g++和cmake:

\n
apt install g++ cmake -y\ng++ --version  # 检查版本
\n

如果您需要更新版本的GCC(例如,用于C++20),请添加PPA:

\n
add-apt-repository ppa:ubuntu-toolchain-r/test -y\napt install g++-13 -y\nupdate-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100
\n\n

2. 编写测试C++应用程序(HTTP服务器)

\n

为了演示,我们将使用套接字创建一个简单的C++ HTTP服务器。它将监听8080端口并响应"Hello from C++ VPS!"。

\n\n

2.1. 项目结构

\n
mkdir ~/cpp-server && cd ~/cpp-server\nnano main.cpp
\n\n

2.2. 源代码(main.cpp)

\n
#include <iostream>\n#include <string>\n#include <sstream>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n\nint main() {\n    int server_fd, new_socket;\n    struct sockaddr_in address;\n    int opt = 1;\n    int addrlen = sizeof(address);\n    char buffer[1024] = {0};\n\n    // 创建套接字\n    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {\n        perror("socket failed");\n        exit(EXIT_FAILURE);\n    }\n\n    // 绑定端口\n    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {\n        perror("setsockopt");\n        exit(EXIT_FAILURE);\n    }\n    address.sin_family = AF_INET;\n    address.sin_addr.s_addr = INADDR_ANY;\n    address.sin_port = htons(8080);\n\n    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {\n        perror("bind failed");\n        exit(EXIT_FAILURE);\n    }\n\n    if (listen(server_fd, 3) < 0) {\n        perror("listen");\n        exit(EXIT_FAILURE);\n    }\n\n    std::cout << "Server listening on port 8080..." << std::endl;\n\n    while (true) {\n        if ((new_socket = accept(server_fd, (struct sockaddr *)&address,\n                                 (socklen_t*)&addrlen)) < 0) {\n            perror("accept");\n            continue;\n        }\n\n        read(new_socket, buffer, 1024);\n        std::string response = "HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\n\\r\\nHello from C++ VPS!";\n        send(new_socket, response.c_str(), response.length(), 0);\n        close(new_socket);\n    }\n    return 0;\n}
\n\n

2.3. 构建项目

\n

使用优化和静态链接进行编译(如果需要):

\n
g++ -O2 -std=c++17 main.cpp -o server\nls -la server  # 检查二进制文件
\n\n

3. 部署:systemd + Nginx反向代理

\n\n

3.1. 创建systemd服务

\n

为了确保应用程序在服务器启动时自动运行且不会崩溃,我们将创建一个systemd单元:

\n
nano /etc/systemd/system/cpp-server.se                

博客

书籍推荐