Auf der Suche nach der "perfekten" Entwicklungsumgebung für die Webentwicklung habe ich mir meine eigene Lösung gebaut.
Folgende Ziele waren mir dabei wichtig:
- Nutzung eines Linux-Servers
- Einsatz von Docker (Compose)
- keine manuelle Änderung an DNS Einträgen
- keine manuelle Konfiguration von vHost Einträgen
- mehrere PHP Versionen parallel (über Port-Angaben)
- MailHog als E-Mail-Server
- lokales Entwickeln (Remote SSH per VS Code)
- "Freischalten" der Seiten, um sie öffentlich erreichbar zu machen
- schnell muss es sein :-)
- automatische Backups
Mein aktueller Workflow:
- mit VS Code Remote/SSH auf den Server verbinden
- Ordner erstellen, z.B. contao-test
- im Terminal
composer create-project contao/managed-edition . 4.13
ausführen - 2 Sekunden!! warten
- fertig :-)
- Contao ist nun schon unter
contao.local.contao4you.de
erreichbar (nur lokal)
bzw. für PHP 7.4 untercontao.dev.contao4you.de:8074
Da ich mit drei verschiedenen Endgeräten arbeite (Macbook, Windows-Notebook und ein Windows-Desktop) habe ich jetzt überall den gleichen Entwicklungsstand. Ich muss keine "Zwischenversionen" auf einem Entwicklungsserver deployen, etc.
Im Prinzip reicht jede x-beliebige Linux-Kiste. Um das ganze komfortabel (und schnell) zu gestalten, habe ich mich für einen "fetten" i5 mit 64 GB RAM und einer SSD mit 8 GB/s entschieden. Ist so ein netter Cube und steht im Regal :-) Eingesetzt habe ich Ubuntu und darauf Proxmox. In Proxmox habe ich dann für die Entwicklung einen Ubuntu-Container erstellt mit Docker, Portainer und SMB. In einem zweiten Container habe ich per Docker den nginx Proxy Manager installiert. Und nur mal so nebenbei: ich wüsste gar nicht, wie ich früher ohne Proxmox leben konnte.
Ich nutze die folgende Verzeichnisstruktur, um ein paar Configs abzulegen bzw. mit docker-compose einzubinden:
/var/www/bin/backup.sh
/var/www/database_backups
/var/www/html
/var/www/mysql/config.cnf
/var/www/nginx/nginx-conf/nginx.conf
/var/www/php/74/php.ini
/var/www/php/74/www.conf
/var/www/php/74/xdebug.ini
/var/www/php/81/php.ini
/var/www/php/81/www.conf
/var/www/php/81/xdebug.ini
/var/www/php/php81-fpm-docker
/var/www/docker-compose.yml
/var/www/rsync-excludes
(beim nächsten Mal würde ich vermutlich einiges unter /var/www/configs zusammenfassen...)
In meinem Fall habe ich alle Dateien (Configs) in /var/www
angelegt.
Mit docker-compose up -d
werden die Container gestartet.
Die PHP Images baue ich selbst.
Um nicht für jede Domain einen Eintrag in eine hosts-Datei vornehmen zu müssen, habe ich zwei Wildcard-Domains zu meiner Domain eingerichtet:
*.local.contao4you.de => 192.168.1.7 (Homeserver) *.dev.contao4you.de => IP-Adresse meiner FritzBox (Portweiterleitung auf die 192.168.1.8)
Das erspart mit die manuelle Konfiguration eines DNS Servers sowie die Anpassung von DNS Einträgen an meinen Notebooks bzw. der FritzBox.
Auf 192.168.1.8 (bei mir) läuft ein nginx Proxy Manager (Proxmox Container bzw. Portainer). Sobald ich die Domain hier eintrage, ist sie öffentlich erreichbar:
contao.dev.contao4you.de (Standard PHP Version) oder contao.dev.contao4you.de:8074 (für z.B. PHP 7.4)
Und mit einem Klick sind alle Domains per Lets-Encrypt per SSL abgesichert.
Und mit Visual Studio Code lässt es sich per SSH Remote so entwickeln, als wäre alles lokal installiert.
Ist in meinem Beispiel unter 192.168.1.7:8025
erreichbar.
Für mein Backup nutze ich einen herkömmlichen Cron-Job und rsync. Als Speicher nutze ich eine Storagebox von Hetzner. Einfach die bin/backup.sh z.B. alle vier Stunden ausführen.
In der Storagebox können tägliche Snapshots aktiviert werden. Somit sind auch die letzten 7 Tage kein Problem.
I have to ddev start for each project? And a new Database (and so on) Container for each Project? I don't like that. In my Environment i have to setup everything once. Ok, that's a bit of work. But it's worth the work (in my opinion). After that, you doesn't to configure anything. Everything works out of the box. And you have ONE Database, ONE PHP 8.1 Container and so on.