em Netcup-VPS erfolgreich per SFTP in VS Code bearbeiten konnte – Eine vollständige Schritt-für-Schritt-Dokumentation

Der Zugriff auf die WordPress-Dateien eines Coolify-Deployments ist nicht so einfach wie bei klassischem Webhosting. WordPress läuft in einem Docker-Container, die Dateien liegen in einem Volume, und normale Benutzer haben keinen Zugriff.
Zusätzlich verursacht Windows manchmal Probleme mit SSH-Tools wie ssh-keygen.

In diesem Artikel dokumentiere ich komplett und im Detail, wie ich es geschafft habe, auf die WordPress-Dateien in Coolify per SFTP in Visual Studio Code zuzugreifen – inklusive aller Stolpersteine, Fehlermeldungen und Lösungen.


1. Ausgangssituation

Ich hatte:

  • Einen Netcup VPS
  • Eine WordPress-Installation, bereitgestellt über Coolify
  • Zugriff per SSH über den Benutzer deploy
  • Visual Studio Code unter Windows
  • Den Wunsch, meine WordPress-Dateien direkt in VS Code zu bearbeiten

Das Problem:
Coolify legt WordPress in Docker-Volumes ab – nicht im normalen Dateisystem. SFTP-Plugins sehen die Dateien deshalb nicht.


2. Ermitteln, wo WordPress wirklich liegt

Zuerst musste ich herausfinden, wo Coolify WordPress tatsächlich speichert.

Dafür habe ich mich per SSH auf den Server verbunden und folgende Befehle ausgeführt:

docker ps

Dort habe ich den WordPress-Container identifiziert. Danach:

docker inspect <container-id> --format '{{json .Mounts}}'

Die Ausgabe zeigte unter anderem:

"Type": "volume",
"Name": "d80kgw4s8ccs0ssssow40s8g_wordpress-files",
"Source": "/var/lib/docker/volumes/d80kgw4s8ccs0ssssow40s8g_wordpress-files/_data",
"Destination": "/var/www/html"

Das bedeutet:

  • WordPress liegt in einem Docker-Volume
  • Der echte Pfad auf dem Host lautet:
/var/lib/docker/volumes/d80kgw4s8ccs0ssssow40s8g_wordpress-files/_data

3. Problem: Der Benutzer „deploy“ sieht keine Dateien

Wenn ich mich per deploy verbunden habe und versuchte:

ls /var/lib/docker/volumes/d80kgw4s8ccs0ssssow40s8g_wordpress-files/_data

bekam ich:

„Permission denied“
oder
gar keine Dateien sichtbar

Der Grund:

  • /var/lib/docker gehört root
  • normale User dürfen die Ordner nicht einmal betreten
  • Docker-Volumes gehören ebenfalls root und sind nicht für User sichtbar

Ich musste dem Benutzer deploy gezielt Zugang zu genau diesem Volume geben – ohne Sicherheit oder Docker-Eigentümer durcheinanderzubringen.


4. Lösung: ACL-Rechte für den WordPress-Ordner vergeben

Standardrechte (chmod/chown) wären unsauber und gefährlich.
Die korrekte Lösung ist:

✔ Zugriff nur per ACL erlauben

✔ Elternverzeichnisse nur zum „Durchschreiten“ freigeben
✔ Volume selbst lesbar und beschreibbar machen
✔ Automatische Berechtigungsvererbung für neue Dateien

Dazu habe ich zuerst ACLs installiert:

sudo apt install acl

Dann:

WPPATH="/var/lib/docker/volumes/d80kgw4s8ccs0ssssow40s8g_wordpress-files/_data"

sudo setfacl -m u:deploy:--x /var/lib/docker
sudo setfacl -m u:deploy:--x /var/lib/docker/volumes
sudo setfacl -m u:deploy:--x /var/lib/docker/volumes/d80kgw4s8ccs0ssssow40s8g_wordpress-files

sudo setfacl -R -m u:deploy:rwX "$WPPATH"
sudo setfacl -R -d -m u:deploy:rwX "$WPPATH"

Jetzt konnte deploy auf die Dateien zugreifen – zumindest über SSH.


5. WordPress-Pfad in das Home-Verzeichnis mounten

Damit SFTP-Tools und VS Code besser mit dem Volume umgehen können, habe ich das Volume an eine viel besser erreichbare Stelle eingebunden:

sudo mkdir -p /home/deploy/wp
sudo mount --bind "$WPPATH" /home/deploy/wp

Dann dauerhaft gemacht über /etc/fstab:

echo "$WPPATH /home/deploy/wp none bind 0 0" | sudo tee -a /etc/fstab

Ab jetzt befanden sich alle WordPress-Dateien unter:

/home/deploy/wp

Das ist für SFTP perfekt!


6. Problem: Unter Windows funktionieren ssh, ssh-keygen, ssh-copy-id nicht

Obwohl Windows anzeigte, dass der OpenSSH-Client installiert war, bekam ich Fehlermeldungen wie:

“ssh-keygen: command not found”
“ssh: command not found”

Auch der direkte Pfad funktionierte nicht:

C:\Windows\System32\OpenSSH\ssh-keygen.exe fehlt oder ist nicht verknüpft

Das passiert häufig unter Windows 10/11.


7. Lösung: Git Bash installieren

Git Bash beinhaltet eigene, voll funktionsfähige Versionen von:

  • ssh
  • ssh-keygen
  • ssh-copy-id
  • scp

Ich habe Git installiert und dann Git Bash geöffnet.


8. SSH-Schlüssel erfolgreich erzeugen

In Git Bash:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
ssh-keygen -t ed25519 -C "deploy@152.53.106.224" -f ~/.ssh/id_deploy_netcup

Dadurch wurden erzeugt:

~/.ssh/id_deploy_netcup
~/.ssh/id_deploy_netcup.pub

9. Public Key auf den VPS hochladen

Weiter in Git Bash:

cat ~/.ssh/id_deploy_netcup.pub | ssh deploy@152.53.106.224 \
'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

Beim ersten Mal kam:

Are you sure you want to continue connecting (yes/no)?

yes

Dann musste ich ein einziges Mal das Passwort eingeben.


10. Testen, ob SSH mit Key funktioniert

ssh -i ~/.ssh/id_deploy_netcup deploy@152.53.106.224

Jetzt:

  • keine Passwortabfrage mehr
  • direkter SSH-Login

Damit ist alles für SFTP bereit.


11. Problem: Welches VS-Code-Plugin?

Das Plugin ftp-simple war:

  • veraltet
  • schlecht bewertet
  • instabil

Ich habe mich deshalb für das moderne, gepflegte Plugin entschieden:

✔ SFTP (Natizyskunk)

(Die beste Wahl für SSH-basiertes Arbeiten)


12. SFTP-Konfiguration in VS Code

Ich habe in VS Code:

  1. irgendeinen lokalen Ordner geöffnet
  2. Strg + Shift + P gedrückt
  3. SFTP: Config ausgeführt

Dadurch wurde erstellt:

.vscode/sftp.json

In diese Datei kam:

{
  "name": "Netcup WordPress",
  "protocol": "sftp",
  "host": "152.53.106.224",
  "port": 22,
  "username": "deploy",
  "privateKeyPath": "C:\\Users\\<DEINUSER>\\.ssh\\id_deploy_netcup",
  "remotePath": "/home/deploy/wp",
  "uploadOnSave": true,
  "syncMode": "update",
  "ignore": [
    ".vscode",
    ".git",
    "node_modules",
    "wp-content/cache",
    "wp-content/uploads/backups"
  ]
}

Wichtig:

  • Der Pfad zum privaten Schlüssel muss unter Windows escaped sein
  • Der Remote-Pfad ist der gemountete Volume-Pfad /home/deploy/wp

13. WordPress-Dateien herunterladen und bearbeiten

Dank der Konfiguration konnte ich:

Projekt herunterladen:

SFTP: Download Project

Dateien automatisch hochladen:

uploadOnSave: true

Dateien eins zu eins synchronisieren:

SFTP: Sync Local -> Remote
SFTP: Sync Remote -> Local

Jetzt fühlte es sich an, als würde WordPress lokal auf meinem PC liegen – nur eben direkt mit dem Server verknüpft.


Fazit

So habe ich es geschafft, meine WordPress-Installation aus Coolify über SFTP in VS Code zu bearbeiten, indem ich:

  • das Docker-Volume identifiziert habe
  • gezielt ACL-Rechte für den Benutzer deploy eingerichtet habe
  • das Volume ins Home-Verzeichnis gemountet habe
  • Git Bash genutzt habe, um funktionsfähige SSH-Tools zu bekommen
  • ein Schlüsselpaar erstellt und auf dem Server hinterlegt habe
  • das VS-Code-Plugin (SFTP – Natizyskunk) verwendet habe
  • eine funktionierende sftp.json konfiguriert habe

Mit dieser Lösung kann ich meine WordPress-Dateien so einfach bearbeiten wie auf einem normalen Webspace – mit allen Vorteilen von Docker und Coolify