So installierst du Strapi CMS unter Ubuntu 22.04
Strapi ist ein quelloffenes, headless Content Management System (CMS), das mit JavaScript entwickelt wurde. Wie andere Headless CMS kommt Strapi nicht mit einem Frontend aus der Box. Es nutzt eine API für sein Frontend, so dass du die Website mit gängigen Frameworks wie React und Next.js erstellen kannst. Strapi basiert auf einem Plugin-System und ist ein flexibles CMS, dessen Admin-Panel und API erweiterbar sind – und dessen einzelne Teile an jeden Anwendungsfall angepasst werden können. Strapi verfügt außerdem über ein eingebautes Benutzersystem, mit dem du detailliert verwalten kannst, worauf die Administratoren und Endnutzer Zugriff haben.
In diesem Tutorial erfährst du, wie du die Community-Version von Strapi CMS auf einem Ubuntu 22.04 Server installierst, zusammen mit Nginx als Reverse-Proxy-Server.
Voraussetzungen
- Ein Server mit Ubuntu 22.04.
- Ein Nicht-Root-Benutzer mit sudo-Rechten.
- Ein vollständig qualifizierter Domainname (FQDN) wie
strapi.example.com
. - Stelle sicher, dass alles auf dem neuesten Stand ist.
$ sudo apt update $ sudo apt upgrade
- Einige wenige Pakete, die dein System benötigt.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Einige dieser Pakete sind vielleicht schon auf deinem System installiert.
Schritt 1 – Firewall konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.
Überprüfe, ob die Firewall läuft.
$ sudo ufw status
Du solltest die folgende Ausgabe erhalten.
Status: inactive
Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.
$ sudo ufw allow OpenSSH
Lasse auch HTTP- und HTTPS-Ports zu.
$ sudo ufw allow http $ sudo ufw allow https
Aktiviere die Firewall
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Überprüfe den Status der Firewall erneut.
$ sudo ufw status
Du solltest eine ähnliche Ausgabe sehen.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Schritt 2 – PostgreSQL installieren und konfigurieren
Strapi funktioniert mit PostgreSQL 11 und höher. Ubuntu 22.04 wird standardmäßig mit PostgreSQL 14 ausgeliefert. Wir werden PostgreSQL 15 für unser Tutorial verwenden.
Führe den folgenden Befehl aus, um den PostgreSQL GPG-Schlüssel hinzuzufügen.
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Füge das APT-Repository zu deiner Quellenliste hinzu.
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Aktualisiere das System-Repository.
$ sudo apt update
Jetzt kannst du PostgreSQL mit folgendem Befehl installieren.
$ sudo apt install postgresql postgresql-contrib
Das Paket postgresql-contrib
enthält einige zusätzliche Hilfsprogramme.
Überprüfe den Status des PostgreSQL-Dienstes.
$ sudo systemctl status postgresql ? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s ago Main PID: 4119 (code=exited, status=0/SUCCESS) CPU: 2ms Dec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS... Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.
Du kannst sehen, dass der Dienst aktiviert ist und standardmäßig läuft.
Starte die PostgreSQL-Shell.
$ sudo -i -u postgres psql
Erstelle die Strapi-Datenbank.
postgres=# CREATE DATABASE strapidb;
Erstelle den Benutzer Strapi und wähle ein sicheres Passwort.
postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';
Ändere den Eigentümer der Datenbank in den Benutzer Strapi.
postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;
Beende die Shell.
postgres-# \q
Überprüfe, ob deine Anmeldedaten funktionieren.
$ psql --username strapiuser --password --host localhost strapidb Password: psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1)) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. strapidb=>
Beende die Shell, indem du \q
eingibst.
Schritt 3 – Node.js installieren
Ubuntu 22.04 wird mit Node v12 ausgeliefert, das nicht mehr aktuell ist. Wir werden die neueste LTS-Version von Node installieren, die zum Zeitpunkt der Erstellung dieses Tutorials v18 ist.
Hol dir den Node v18 Installer von Nodesource.
$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
Führe das Installer-Skript aus.
$ sudo bash nodesource_setup.sh
Installiere Node.js.
$ sudo apt install nodejs
Überprüfe die Node.js-Version.
$ node -v v18.12.1
Lösche die Installer-Datei.
$ rm nodesource_setup.sh
Schritt 4 – Installiere Strapi
Führe den folgenden Befehl aus, um Strapi zu installieren.
$ npx create-strapi-app@latest howtoforge-project Need to install the following packages: create-strapi-app@4.5.5 Ok to proceed? (y) y
Gib y
ein, um mit der Installation fortzufahren. Als nächstes wirst du aufgefordert, den Installationstyp auszuwählen. Wähle Benutzerdefiniert, um fortzufahren und beantworte die folgenden Fragen.
? Choose your installation type Custom (manual settings) ? Choose your preferred language JavaScript ? Choose your default database client postgres ? Database name: strapidb ? Host: 127.0.0.1 ? Port: 5432 ? Username: strapiuser ? Password: Your_Password ? Enable SSL connection: No
Je nach deinen Anforderungen kannst du entweder Typescript oder JavaScript als Sprache für Strapi wählen.
Sobald die Installation abgeschlossen ist, kannst du dein Strapi-Projekt erstellen.
Wechsle in das Projektverzeichnis.
$ cd howtoforge-project
Führe den folgenden Befehl aus, um das Projekt zu erstellen, einschließlich der Strapi Admin UI.
$ NODE_ENV=production npm run build
Starte den Strapi-Server mit dem folgenden Befehl.
$ node ~/howtoforge-project/node_modules/.bin/strapi start
Deine Anwendung sollte unter der URL http://<yourserverIP>:1337
sichtbar sein. Aber zuerst musst du den Port in der Firewall öffnen.
$ sudo ufw allow 1337
Sobald du die URL geöffnet hast, solltest du den folgenden Bildschirm erhalten.
Drücke Strg + C im Terminal, um den Server zu stoppen. Du solltest die Firewall-Regel löschen, weil wir sie nicht mehr brauchen.
$ sudo ufw delete allow 1337
Schritt 5 – PM2 installieren und konfigurieren
Anstatt den Server manuell zu starten, können wir PM2 (Process Manager 2) verwenden, um den Prozess zu verwalten und einen systemd-Dienst dafür zu erstellen.
Wechsle in das Home-Verzeichnis.
$ cd ~
Installiere PM2.
$ sudo npm install pm2@latest -g
Erstelle und öffne die PM2-Konfigurationsdatei zum Bearbeiten.
$ sudo nano ecosystem.config.js
Füge den folgenden Inhalt in die Datei ein. Achte darauf, dass du den richtigen Verzeichnisnamen und die Postgres-Zugangsdaten eingibst.
module.exports = { apps: [ { name: 'strapi', cwd: '/home/navjot/my-project', script: 'npm', args: 'start', env: { NODE_ENV: 'production', DATABASE_HOST: 'localhost', DATABASE_PORT: '5432', DATABASE_NAME: 'strapidb', DATABASE_USERNAME: 'strapiuser', DATABASE_PASSWORD: 'Your_Password', }, }, ], };
Speichere die Datei, indem du die Tastenkombination Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Führe deine Strapi-Instanz mit PM2 im Hintergrund aus.
$ pm2 start ecosystem.config.js
Du wirst die folgende Ausgabe erhalten.
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ Runtime Edition PM2 is a Production Process Manager for Node.js applications with a built-in Load Balancer. Start and Daemonize any application: $ pm2 start app.js Load Balance 4 instances of api.js: $ pm2 start api.js -i 4 Monitor in production: $ pm2 monitor Make pm2 auto-boot at server restart: $ pm2 startup To go further checkout: http://pm2.io/ ------------- [PM2] Spawning PM2 daemon with pm2_home=/home/navjot/.pm2 [PM2] PM2 Successfully daemonized [PM2][WARN] Applications strapi not running, starting... [PM2] App [strapi] launched (1 instances) ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? 0 ? strapi ? default ? N/A ? fork ? 4824 ? 0s ? 0 ? online ? 0% ? 31.9mb ? navjot ? disabled ? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Anwendungen, die unter PM2 laufen, werden automatisch neu gestartet, wenn sie abstürzen oder beendet werden.
Erstelle ein systemd-Startskript mit dem folgenden Befehl.
$ pm2 startup
Du erhältst die folgende Ausgabe.
[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
Kopiere den Befehl aus der obigen Ausgabe und führe ihn aus.
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
Speichere die PM2-Prozessliste.
$ pm2 save
Dein Strapi-Dienst läuft jetzt im Hintergrund im Produktionsmodus.
Schritt 6 – Nginx installieren
Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.
Importiere den Signierschlüssel von Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Füge das Repository für die stabile Version von Nginx hinzu.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Aktualisiere die System-Repositories.
$ sudo apt update
Installiere Nginx.
$ sudo apt install nginx
Überprüfe die Installation.
$ nginx -v nginx version: nginx/1.22.1
Starte den Nginx-Server.
$ sudo systemctl start nginx
Schritt 7 – SSL installieren
Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.
Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist. Vergewissere dich, dass deine Version von Snapd auf dem neuesten Stand ist.
$ sudo snap install core $ sudo snap refresh core
Installiere Certbot.
$ sudo snap install --classic certbot
Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt wird, indem du einen symbolischen Link zum Verzeichnis /usr/bin
erstellst.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d strapi.example.com
Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/strapi.example.com
auf deinem Server heruntergeladen.
Erstelle ein Diffie-Hellman-Gruppenzertifikat.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.
$ sudo certbot renew --dry-run
Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.
Schritt 8 – Nginx konfigurieren
Öffne die Datei /etc/nginx/nginx.conf
zum Bearbeiten.
$ sudo nano /etc/nginx/nginx.conf
Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf;
ein.
server_names_hash_bucket_size 64;
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Erstelle und öffne die Datei /etc/nginx/conf.d/strapi.conf
zum Bearbeiten.
$ sudo nano /etc/nginx/conf.d/strapi.conf
Füge den folgenden Code in die Datei ein.
server { # Redirect any http requests to https listen 80; listen [::]:80; server_name strapi.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name strapi.example.com; access_log /var/log/nginx/strapi.access.log; error_log /var/log/nginx/strapi.error.log; # TLS configuration ssl_certificate /etc/letsencrypt/live/strapi.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/strapi.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/strapi.example.com/chain.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:1337; } }
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Überprüfe die Syntax der Nginx-Konfigurationsdatei.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Starte den Nginx-Dienst neu.
$ sudo systemctl restart nginx
Du kannst nun über die URL https://strapi.example.com
auf Strapi CMS zugreifen. Du wirst die folgende Seite sehen, die zeigt, dass Strapi im Produktionsmodus läuft.
Besuche die URL https://strapi.example.com/admin
, um einen Administrator-Benutzer anzulegen.
Gib deine Administratorendaten ein und klicke auf die Schaltfläche Los geht ’s, um zum Administrator-Dashboard zu gelangen.
Von hier aus kannst du mit der Erstellung von Inhalten in Strapi beginnen.
Schritt 9 – Strapi aktualisieren
Der erste Schritt beim Upgrade von Strapi ist das Beenden des Servers.
$ cd ~ $ pm2 stop ecosystem.config.js
Wechsle in das Projektverzeichnis und öffne die Datei package.json
zur Bearbeitung.
$ cd howtoforge-project $ nano package.json
Aktualisiere alle Versionsnummern der Strapi-Pakete auf die neueste stabile Strapi-Version. Die neueste verfügbare Version findest du auf der GitHub-Releaseseite von Strapi.
"devDependencies": {}, "dependencies": { "@strapi/strapi": "4.5.5", "@strapi/plugin-users-permissions": "4.5.5", "@strapi/plugin-i18n": "4.5.5", "pg": "8.6.0" },
Hier musst du 4.5.5
auf die neueste stabile Version ändern. Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du danach gefragt wirst.
Installiere die aktualisierte Version.
$ npm install
Erstelle das Administrationspanel neu.
$ NODE_ENV=production npm run build
Starte den Server erneut.
$ cd ~ $ pm2 start ecosystem.config.js
Deine Strapi-Installation ist nun aktualisiert und läuft.
Fazit
Damit ist unsere Anleitung zur Installation von Strapi CMS auf einem Ubuntu 22.04 Server und Nginx als Reverse Proxy Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.