Setzen Sie WordPress auf Cipi ein: benutzerdefinierte App & GitHub automatische Bereitstellung
Von Andrea Pollastri · Letzte Aktualisierung: · Kostenlose Lektüre, keine Paywall
Cipi ist Laravel-zuerst, beherbergt aber auch WordPress als benutzerdefinierte App: isolierter Linux-Benutzer, PHP-FPM-Pool, Nginx vhost, Git-Pull in htdocs. Dieser Leitfaden führt Sie von einem leeren Ubuntu VPS zu einer Site, die sich bei jedem Push selbst bereitstellt main.
- Warum eine benutzerdefinierte App (nicht Laravel)
- So strukturieren Sie das WordPress-Repo
- Erstellen Sie die benutzerdefinierte App
- Datenbank, DNS und SSL
- Zuerst bereitstellen und wp-config.php
- GitHub Aktionspipeline (empfohlen)
- Einfacherer Weg: Git-Auto-Setup
- Cron, Backups und alltägliche Operationen
- FAQ
Warum eine benutzerdefinierte App (nicht Laravel)
Cipi unterstützt zwei App-Typen. Der Standardwert ist Laravel: eigener Systembenutzer, PHP-FPM oder Octane, MariaDB, .env, Supervisor Arbeiter, Crontab und Null Ausfallzeiten Bereitstellungsversionen unter current/shared. WordPress ist nichts davon.
A benutzerdefinierte App (cipi app create --custom) hat die richtige Form:
- Klassische Bereitstellung in
htdocs– neincurrent/sharedSymlink-Tausch.cipi deploy blogzieht das Repo hinein/home/blog/htdocs. - Nginx ist bereits WordPress-ready:
index index.html index.phpundtry_files $uri $uri/ /index.php?$args. - Git ist optional. Überspringen Sie das Repository für reine SFTP-Uploads. Befestigen Sie später eines mit
cipi app edit blog --repository=…. - Keine Datenbank, nein
.env, keine cron, keine Warteschlangen bis Sie sie hinzufügen. WordPress benötigt eine Datenbank – diese erstellen Sie im nächsten Schritt.
Benutzerdefinierte Bereitstellungen sind nicht Null Ausfallzeiten. Halten Sie die Theme- und Plugin-Unterschiede klein, sichern Sie die Datenbank vor riskanten Veröffentlichungen und lassen Sie GitHub Aktionen das Tor sein, damit nie ein roter Haken in die Produktion gelangt. Für Laravel Null-Ausfallzeit-Muster verwenden Sie dieCI/CD für Laravel Anleitung.
So strukturieren Sie das WordPress-Repo
Behandeln Sie Git als die Quelle der Wahrheit für Code, nicht für Geheimnisse oder Medien. Ein Repo, das die automatische Bereitstellung übersteht, sieht folgendermaßen aus:
wordpress-site/
.gitignore
.github/workflows/deploy.yml
wp-admin/
wp-includes/
wp-content/themes/your-theme/
wp-content/plugins/your-plugin/
wp-config-sample.php
index.php
…
Geben Sie das ein .gitignore Daher überschreibt ein Pull niemals den Status der Live-Site:
wp-config.php
wp-content/uploads/
wp-content/cache/
wp-content/upgrade/
wp-content/backup-db/
.htaccess
Weil benutzerdefinierte Apps eingebunden werden htdocs Anstatt ein Release-Verzeichnis auszutauschen, Nicht verfolgte Dateien bleiben auf der Festplatte. So werden Uploads und wp-config.php Überlebe jeden Einsatz.
- Kern in Gitist der einfachste Agentur-Workflow: Theme, Plugins und WordPress selbst gemeinsam versioniert.
- Composer / Bedrock Funktioniert auch – eingestellt
--docroot=web(oderpublic), wenn sich der Front-Controller nicht im Repo-Root befindet. - Machen Sie keine Produktionsgeheimnisse. Salze auf dem Server generieren; Schiebe niemals ein Leben
wp-config.php.
Erstellen Sie die benutzerdefinierte App
Cipi muss bereits auf einem frischen Ubuntu VPS installiert sein:
SSH in as cipi, dann sudo -s. Erstellen Sie die WordPress-App nicht interaktiv (PHP 8.3 passt sicher zu den aktuellen WordPress; später im laufenden Betrieb austauschen). cipi app edit):
$ cipi app create --custom --user=blog \
--domain=blog.example.com \
--repository=git@github.com:you/wordpress-site.git \
--branch=main \
--php=8.3
Das sieht vor:
- Linux-Benutzer
blogund Zuhause/home/blog - PHP-FPM-Pool auf 8.3 und ein Nginx vhost für
blog.example.com - SSH-Bereitstellungsschlüssel für das Repository
- Deployer-Konfiguration, die eingebunden wird
/home/blog/htdocs
Wenn Sie zuerst einen GitHub Personal Access Token gespeichert haben, fügt Cipi automatisch auch den Bereitstellungsschlüssel und einen Provider webhook hinzu:
$ cipi git github-token ghp_xxxxxxxxxxxxxxxxxxxx
$ cipi git status
Es werden feinkörnige Token benötigt Verwaltung und Webhooks eingestellt auf Lesen und schreiben auf dem Ziel-Repo; Klassische Token benötigen das repo Umfang. Einzelheiten finden Sie im Git-Auto-Setup Dokumente.
Nur SFTP (noch kein Git) – lassen Sie das Repository weg und laden Sie es hoch ~/htdocs als App-Benutzer:
$ cipi app create --custom --user=blog --domain=blog.example.com --php=8.3
Datenbank, DNS und SSL
Benutzerdefinierte Apps erhalten keine Datenbank. Erstellen Sie eine, nachdem die App existiert – MariaDB ist die Standardeinstellung und was WordPress erwartet:
$ cipi db create --name=blog
Cipi druckt den Datenbanknamen, den Benutzer, das Passwort und a mariadb+ssh:// URL für TablePlus oder DBeaver. Kopieren Sie diese Werte. sie gehen hinein wp-config.php auf dem Server, nicht in Git.
Punkt DNS A Aufzeichnungen für blog.example.com und www.blog.example.com am VPS, dann:
$ cipi alias add blog www.blog.example.com
$ cipi www add blog
$ cipi ssl install blog
cipi ssl install stellt ein Let’s Encrypt-Zertifikat aus, das jeden Alias (SAN) abdeckt, und aktiviert die HTTPS-Weiterleitung. cipi www Hält Apex und www kanonisch. Siehe SSL und www-Weiterleitungen.
Zuerst bereitstellen und wp-config.php
Rufen Sie das Repository einmal ab und schreiben Sie dann die Konfiguration als App-Benutzer, damit der Dateieigentum korrekt bleibt:
$ cipi deploy blog
$ su - blog
blog@server:~$ cd ~/htdocs
blog@server:~/htdocs$ cp wp-config-sample.php wp-config.php
blog@server:~/htdocs$ nano wp-config.php
Mindestproduktionswerte (verwenden Sie die Anmeldeinformationen von cipi db create):
define('DB_NAME', 'blog');
define('DB_USER', 'blog');
define('DB_PASSWORD', 'the-password-cipi-printed');
define('DB_HOST', '127.0.0.1');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
define('DISALLOW_FILE_EDIT', true);
define('DISABLE_WP_CRON', true);
define('WP_MEMORY_LIMIT', '256M');
Erzeugen Sie neue Salze aus api.wordpress.org/secret-key und fügen Sie sie anstelle der Platzhalter ein. Offen https://blog.example.com und beenden Sie den WordPress-Installer im Browser.
wp-config.php ist nicht verfolgt. Ein später cipi deploy werde es nicht löschen. Wenn Sie jemals das gesamte Home-Verzeichnis erneut klonen, erstellen Sie die Datei mit denselben Datenbankanmeldeinformationen neu (cipi db password blog wenn Sie sie verloren haben).
GitHub Aktionspipeline (empfohlen)
Der Laravel Agent webhook (https://your-app.com/cipi/webhook) ist eine Route drinnen eine Laravel-App. Es existiert nicht auf WordPress. Für die automatische Bereitstellung müssen Sie GitHub SSH auf dem Server haben und ausführen cipi deploy – das Gleiche Pipeline-SSH-Bereitstellung Cipi Dokumente für Gated Laravel Releases.
Wählen Sie einen Auslöser. Wenn Git Auto-Setup bereits einen Anbieter webhook erstellt hat, deaktivieren Sie ihn (oder erstellen Sie nie einen), bevor Sie Aktionen hinzufügen. Zwei Bereitstellungen im selben Push-Kampf um die Sperrdatei.
1. Dedizierter SSH-Schlüssel für CI
Generieren Sie einen ed25519-Schlüssel auf Ihrem Laptop. Fügen Sie die hinzu öffentlich Schlüssel zum Server; Speichern Sie die privat Schlüssel als GitHub-Geheimnis. Verwenden Sie Git-Bereitstellungsschlüssel oder Ihren persönlichen SSH-Schlüssel nicht wieder.
# on your laptop
$ ssh-keygen -t ed25519 -C "ci-deploy-blog" -f ~/.ssh/ci_deploy_blog -N ""
$ ssh-copy-id -i ~/.ssh/ci_deploy_blog.pub cipi@your-server-ip
$ cat ~/.ssh/ci_deploy_blog
Im GitHub-Repository: Einstellungen → Geheimnisse und Variablen → Aktionen. Erstellen:
SERVER_HOST— VPS IP oder HostnameSERVER_SSH_KEY— vollständiger Inhalt des privaten Schlüssels
2. Workflow-Datei
Geben Sie das hier ein .github/workflows/deploy.yml:
name: Deploy WordPress
on:
push:
branches: [main]
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Guard tracked secrets
run: |
if git ls-files --error-unmatch wp-config.php >/dev/null 2>&1; then
echo "wp-config.php must not be committed"
exit 1
fi
- name: PHP syntax
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
coverage: none
- name: Lint theme and plugins
run: |
find wp-content/themes wp-content/plugins -name '*.php' -print0 \
| xargs -0 -n1 php -l
deploy:
runs-on: ubuntu-latest
needs: check
steps:
- name: Deploy via Cipi
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: cipi
key: ${{ secrets.SERVER_SSH_KEY }}
script: sudo cipi deploy blog
Was Ihnen das bringt:
- Ein Qualitätstor – ein engagierter
wp-config.phpoder ein PHP-Analysefehler erreicht nie VPS. - Ein Befehl auf dem Server — Cipi Züge
mainhineinhtdocsmit der PHP-Binärdatei der App. - Manuelle Wiedergabe —
workflow_dispatchStellt denselben Commit ohne weiteren Push erneut bereit.
Schützen main: keine direkten Pushs, erforderliche Statusprüfungen, kurzlebige Zweige. Die gleichen stammbasierten Gewohnheiten wie die Laravel CI/CD Anleitung, ohne so zu tun, als hätte WordPress Pest und Pint.
Sehen Sie sich die Bereitstellung vom Server aus an:
$ cipi app logs blog --type=deploy
3. Optional: Backup vor der Veröffentlichung
WordPress Schemaänderungen sind oft irreversibel. Zuerst Snapshot MariaDB, dann bereitstellen:
script: |
sudo cipi db backup blog
sudo cipi deploy blog
Wiederherstellen mit cipi db restore blog backup.sql.gz wenn eine Veröffentlichung schlecht wird. Benutzerdefinierte Apps haben keinen Release-Symlink, auf den ein Rollback zurückgesetzt werden kann – der Datenbank-Dump ist Ihre Schaltfläche zum Rückgängigmachen. Siehe cipi db.
Einfacherer Weg: Git-Auto-Setup
Wenn Sie keine CI-Gates benötigen (Solo-Site, vertrauenswürdige Commits), überspringen Sie Aktionen und lassen Sie Cipi GitHub für Sie verdrahten:
$ cipi git github-token ghp_xxxxxxxxxxxxxxxxxxxx
$ cipi app create --custom --user=blog --domain=blog.example.com \
--repository=git@github.com:you/wordpress-site.git --branch=main --php=8.3
Auf app create, Cipi fügt den SSH-Bereitstellungsschlüssel und ein webhook zum Repository hinzu. Die Zusammenfassung zeigt automatisch konfiguriert ✓. Ein Anstoß dazu main dann läuft es genauso cipi deploy Pipeline ohne YAML-Datei.
Wenn Sie die App vor dem Speichern eines Tokens erstellt haben, drucken Sie die Werte aus und fügen Sie sie manuell hinzu:
$ cipi deploy blog --key # Settings → Deploy keys
$ cipi deploy blog --webhook # Settings → Webhooks
Verweisen Sie eine WordPress-Site nicht auf die Laravel-Agent-URL /cipi/webhook. Diese Route existiert erst nach Ihnen composer require cipi/agent in einer Laravel-App. WordPress nutzt den Anbieter webhook Cipi druckt oder GitHub Aktionen über SSH – nicht beides.
Cron, Backups und alltägliche Operationen
Ersetzen Sie WP-Cron durch System cron
Benutzerdefinierte Apps erhalten keine Crontab. Mit DISABLE_WP_CRON setzen, schlagen wp-cron.php aus der Crontab des App-Benutzers:
$ su - blog
blog@server:~$ crontab -e
*/5 * * * * /usr/bin/php8.3 /home/blog/htdocs/wp-cron.php >/dev/null 2>&1
Ordnen Sie die PHP-Binärdatei der Version zu, an die Sie übergeben haben app create. Nachher cipi app edit blog --php=8.4, aktualisieren Sie den Crontab-Pfad.
Backups
cipi db backup blog– Dump MariaDB (planen Sie es jede Nacht in Roots Crontab oder rufen Sie es über Aktionen auf).- Behalten
wp-content/uploadsauf dem Server (und in externen Backups). Es ist nicht in Git. - S3-kompatible Offsite-Backups:
cipi backup.
Nützliche Befehle
| Befehl | Was es bewirkt |
|---|---|
cipi deploy blog |
Ziehen main hinein htdocs |
cipi app logs blog --type=deploy |
Bereitstellungsverlauf |
cipi app logs blog --type=php |
PHP-FPM-Fehler |
cipi app edit blog --php=8.4 |
Hot-Swap PHP |
cipi app edit blog --branch=staging |
Ändern Sie den Bereitstellungszweig |
cipi db backup blog |
Wirf MariaDB ab |
cipi ssl install blog |
Let's Encrypt (SAN) erneuern |
Setzen Sie dies mit Cipi in die Tat um
Cipi ist der kostenlose, open-source bereitgestellte CLI, der in diesem Handbuch verwendet wird: Ein Befehl verwandelt einen frischen Ubuntu VPS in einen gehärteten Server für Laravel und Benutzerdefinierte PHP-Apps wie WordPress – Nginx, PHP-FPM, MariaDB, SSL und Git-Bereitstellungen sind enthalten.
Häufig gestellte Fragen
Soll ich WordPress als Laravel-App oder eine benutzerdefinierte App in Cipi erstellen?
Immer als individuelle App. Laravel Apps erwarten artisan, Composer, a .env Datei und die releases/current Layout. WordPress ist eine klassische PHP-Seite: cipi app create --custom Wird eingesetzt in htdocs wobei Nginx bereits eingestellt ist index.php.
Erstellt Cipi eine Datenbank für eine WordPress benutzerdefinierte App?
Nein. Benutzerdefinierte Apps werden ohne Datenbank ausgeliefert. .env, cron oder Warteschlangenarbeiter. Nachdem die App vorhanden ist, führen Sie sie aus cipi db create --name=<app> (standardmäßig MariaDB) und geben Sie diese Anmeldeinformationen ein wp-config.php auf dem Server.
Wird eine Git-Bereitstellung meine WordPress-Uploads löschen?
Nicht, wenn sie nicht verfolgt werden. Benutzerdefinierte Apps werden eingebunden htdocs anstatt einen Release-Symlink auszutauschen. Behalten wp-content/uploads und wp-config.php aus Git heraus, damit Medien und Geheimnisse alle überleben cipi deploy.
Kann ich den Cipi Agent webhook für WordPress verwenden?
Nein. Die /cipi/webhook Route lebt in einer Laravel-App über die cipi/agent Paket. Für WordPress lösen Sie Bereitstellungen von GitHub Aktionen über SSH mit aus sudo cipi deploy, oder verwenden Sie Cipi Git Auto-Setup (Bereitstellungsschlüssel plus Anbieter webhook), wenn Sie keine CI-Gates benötigen.
Wird WordPress auf Cipi ohne Ausfallzeit bereitgestellt?
Nein. Benutzerdefinierte Apps verwenden die klassische Bereitstellung htdocs – es gibt keine current/shared Symlink-Tausch. Halten Sie die Theme- und Plugin-Unterschiede klein, nehmen Sie ein cipi db backup vor riskanten Veröffentlichungen und verwenden Sie GitHub Aktionen, damit eine fehlgeschlagene Prüfung nie den Server erreicht.