Wie man C++-Entwickler wird: Tipps und Lebenslauf für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Vom lokalen Build zur Produktionsveröffentlichung einer C++-Anwendung

Die Entwicklung einer C++-Anwendung ist nur die eine Hälfte. Der zweite, ebenso wichtige Teil ist die zuverlässige und sichere Bereitstellung auf einem entfernten Server (VPS). In diesem Artikel behandeln wir einen fortschrittlichen Ansatz zur Bereitstellung von C++-Anwendungen, der über das einfache Kopieren einer Binärdatei hinausgeht. Sie lernen, wie Sie automatische Builds einrichten, die Anwendung als Systemdienst ausführen, einen Reverse Proxy über Nginx organisieren und grundlegendes Monitoring implementieren.

Dieser Artikel richtet sich an Entwickler, die bereits mit C++ und den Grundlagen der Arbeit mit Linux vertraut sind. Wir verwenden moderne Tools: CMake, systemd, Nginx und Git.



1. Build-Automatisierung und Vorbereitung der Umgebung auf dem VPS

1.1. Installieren von Abhängigkeiten und Compiler

Stellen Sie vor der Bereitstellung sicher, dass ein aktueller Compiler (g++ oder clang) und die erforderlichen Bibliotheken auf dem Server installiert sind. Für einen Produktionsserver wird statisches Linken oder Containerisierung empfohlen, aber im Rahmen dieses Artikels betrachten wir den klassischen Ansatz.

# Pakete aktualisierensudo apt update && sudo apt upgrade -y

# Compiler und Build-Tools installierensudo apt install build-essential cmake git -y

# Zusätzliche Bibliotheken installieren (Beispiel für Boost)sudo apt install libboost-all-dev -y


1.2. Erstellen eines Build-Skripts mit CMake

Verwenden Sie CMake zur Verwaltung des Builds. Dies gewährleistet Portabilität und vereinfacht die Integration mit CI/CD. Beispiel 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)

# Optimierung für den Produktionsbuildset(CMAKE_BUILD_TYPE Release)

# Externe Bibliotheken findenfind_package(Boost REQUIRED COMPONENTS system filesystem)

# Ausführbare Datei erstellenadd_executable(${PROJECT_NAME} src/main.cpp src/server.cpp)target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::filesystem pthread)

# Binärdatei im System installiereninstall(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin)

Nach der Erstellung der CMakeLists.txt führen Sie den Build auf dem Server durch:

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


2. Konfigurieren von systemd für die Prozessverwaltung

Das Ausführen der Anwendung im Hintergrund und ihr automatischer Neustart bei einem Fehler ist von entscheidender Bedeutung. Verwenden Sie systemd, um einen stabilen Dienst zu erstellen.



2.1. Erstellen einer Unit-Datei

Erstellen Sie die Datei /etc/systemd/system/myapp.service:

[Unit]Description=Meine C++ ProduktionsanwendungAfter=network.target

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

# SicherheitNoNewPrivileges=trueProtectSystem=fullProtectHome=true

[Install]WantedBy=multi-user.target


2.2. Starten und Überprüfen des Dienstes

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

Ihre C++-Anwendung wird nun automatisch beim Systemstart gestartet und im Falle eines Fehlers neu gestartet.



3. Reverse Proxy über Nginx und HTTPS-Konfiguration

Der direkte Zugriff auf den Anwendungsport ist unsicher und unpraktisch. Verwenden Sie Nginx als Reverse Proxy, um statische Dateien, SSL-Terminierung und Lastenausgleich zu handhaben.



3.1. Installieren und Konfigurieren von Nginx

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

Erstellen Sie die Konfiguration /etc/nginx/sites-available/myapp:

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

location / { pr

Blogs

Buchempfehlungen