Einleitung: Warum VPS die ideale Lösung für PHP-Projekte ist
\nDie Entwicklung einer PHP-Anwendung ist nur die halbe Miete. Der zweite, ebenso wichtige Teil ist die fachgerechte Bereitstellung auf dem Server. Ein virtueller privater Server (VPS) bietet Flexibilität, Kontrolle und Leistung, die bei Shared Hosting nicht verfügbar sind. Sie erhalten Root-Zugriff, die Möglichkeit zur Feinabstimmung der Umgebung und vollständige Ressourcenisolierung.
\nIn dieser Anleitung gehen wir den Weg vom Serverkauf bis zur funktionierenden Anwendung am Beispiel von PHP 8.x, Nginx, MySQL und Git. Alle Schritte sind für das Betriebssystem Ubuntu 22.04 LTS beschrieben – die beliebteste Distribution für Webserver.
\n\n1. Ersteinrichtung des VPS und Verbindung
\n\n1.1. Auswahl und Kauf eines VPS
\nFür eine PHP-Anwendung sind die Mindestanforderungen: 1 vCPU, 1 GB RAM, 20 GB SSD. Wir empfehlen Anbieter mit gutem Ruf: DigitalOcean, Linode, Vultr oder die heimischen Timeweb, Beget.
\nNach dem Kauf erhalten Sie eine IP-Adresse, ein Root-Passwort (oder einen SSH-Schlüssel).
\n\n1.2. SSH-Verbindung und Benutzererstellung
\nVerbinden Sie sich mit dem Server (ersetzen Sie 192.168.1.1 durch Ihre IP):
ssh root@192.168.1.1\nErstellen Sie einen unprivilegierten Benutzer für die tägliche Arbeit:
\nadduser deployer\nusermod -aG sudo deployer\nRichten Sie SSH-Schlüssel für sicheren Zugang ein:
\nmkdir -p /home/deployer/.ssh\ncp ~/.ssh/authorized_keys /home/deployer/.ssh/\nchown -R deployer:deployer /home/deployer/.ssh\nchmod 700 /home/deployer/.ssh\nchmod 600 /home/deployer/.ssh/authorized_keys\nDeaktivieren Sie den Root-Login über Passwort, bearbeiten Sie /etc/ssh/sshd_config:
PermitRootLogin prohibit-password\nPasswordAuthentication no\nStarten Sie SSH neu: systemctl restart sshd
1.3. Grundlegende Serversicherheit
\n- \n
- Pakete aktualisieren:
apt update && apt upgrade -y\n - fail2ban installieren:
apt install fail2ban -y\n - UFW (Firewall) konfigurieren: \n
ufw allow OpenSSH\nufw allow 'Nginx Full'\nufw enable\n\n2. Installation und Konfiguration des LEMP-Stacks (Linux, Nginx, MySQL, PHP)
\n\n2.1. Installation von Nginx
\napt install nginx -y\nsystemctl enable nginx\nsystemctl start nginx\nÜberprüfen Sie die Funktion, indem Sie im Browser die IP-Adresse des Servers öffnen. Sie sollten die Begrüßungsseite von Nginx sehen.
\n\n2.2. Installation von PHP 8.x und PHP-FPM
\nFügen Sie das Repository für die aktuelle PHP-Version hinzu:
\napt install software-properties-common -y\nadd-apt-repository ppa:ondrej/php -y\napt update\napt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y\nÜberprüfen Sie den Status von PHP-FPM:
\nsystemctl status php8.2-fpm\n\n2.3. Installation von MySQL (MariaDB)
\napt install mariadb-server -y\nsystemctl enable mariadb\nsystemctl start mariadb\nFühren Sie das Sicherheitsskript aus:
\nmysql_secure_installation\nErstellen Sie eine Datenbank und einen Benutzer für die Anwendung:
\nmysql -u root -p\nCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';\nGRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n\n2.4. Konfiguration des virtuellen Nginx-Hosts
\nErstellen Sie eine Konfigurationsdatei für Ihre Domain (z.B. myapp.com):
nano /etc/nginx/sites-available/myapp\nInhalt der Datei:
\nserver {\n listen 80;\n server_name myapp.com www.myapp.com;\n root /var/www/myapp/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass unix: