In den dunklen Zeiten bestand meine übliche Einrichtung für die Entwicklung von LAMP-Webanwendungen darin, lokal auf meinem Computer zu testen. PHP (in meinem Fall), die Datenbank und der Webserver wurden alle nativ installiert.
Der Server wurde mit Standardinstallationen von Apache und MySQL eingerichtet, und ich hatte mehrere virtuelle Hosts für verschiedene Teile der Web-App. Wenn ich mit den Ergebnissen auf meinem lokalen Computer zufrieden war, loggte ich mich beim Server und git pull
in der Staging-Umgebung ein. Angenommen, auf dem Server funktioniert alles genauso gut wie auf meinem Computer, würde ich das Gleiche für die Produktion tun.
Neue Anfänge…
Jetzt starte ich eine brandneue Webanwendung von Grund auf neu und möchte sie "richtig" machen. Ich habe über Docker, Vagrant und Puppet (und Chef, obwohl ich persönlich das Abhängigkeitssystem von Puppet dem iterativen Prozess von Chef vorziehe) gelesen. Trotz all meiner Nachforschungen scheint es immer noch einige Fragen zu geben, auf die ich keine Antworten finden kann:
Sollte es separate Docker-Container für den Webserver (wie Apache), den Datenbankserver (wie MySQL) und jeden Teil der Webanwendung geben?
Wenn ich über Teile der Webanwendung spreche , meine ich Dinge wie mysite.com , controlpanel.mysite.com usw. Diese "Teile" teilen sich dieselbe Datenbank.
Da Docker vorgefertigte Container für Web- und Datenbankserver bereitzustellen scheint, sollten sich diese Dinge zumindest in separaten Containern befinden. Sollten sich die verschiedenen Teile meiner Web-App auch in separaten Containern befinden?
Docker-Container scheinen austauschbar zu sein, anstatt dass ich die darin enthaltene Software aktualisieren muss. Was ist mit den Daten, die sie schreiben und die ich nicht verlieren möchte?
Der Datenbankserver verwaltet Dateien, die sich auf den Inhalt meiner Datenbank beziehen (die ich sichern möchte). Der Webserver erstellt Protokolle, und meine Webanwendungen verwalten verschiedene Dateien und Caches usw. Alle diese Dateien müssen außerhalb der Container der Anwendung geschrieben werden (da ich sie beim Aktualisieren möglicherweise ersetzen kann?). Wohin gehen sie also? ? Direkt in das Dateisystem der Host-Computer? Oder in ein separates "Docker Volume"? Wenn sie in Docker-Volumes gehen, sollte ich ein separates Volume für die Datenbank, den Webserver, die Anwendung usw. verwenden? Kann ich von meinem lokalen Computer aus wie immer noch problemlos über SFTP auf die Inhalte zugreifen? Ich möchte hier keine Bequemlichkeit verlieren!
Ist es eine gute Idee, Puppet zum Erstellen und Verwalten der Docker-Container sowohl für den Entwicklungsserver als auch für den Produktionsserver zu verwenden?
Es scheint, dass Puppet die direkte Verwaltung von Docker-Containern unterstützt. Dies scheint also eine einigermaßen gute Möglichkeit zu sein, einen Server oder die Produktionsumgebung (mit Vagrant) einfach von Grund auf neu einzurichten.
Hoffentlich habe ich einige relevante Fragen gestellt; Es wäre großartig, einige geeignete "Best Practices" für die Entwicklung und Produktion von LAMP-ähnlichen Web-Apps zu erhalten. Es scheint nur nicht viel zu geben, was ich gefunden habe!