Ich vermute, diese Frage wird für einige Leser unglaublich trivial erscheinen, aber als jemand, der Entwickler ist, aber wenig Erfahrung mit der Bereitstellung von Apps in etwas anderem als einem Handbuch hat, hoffe und hoffe, dass Sie verstehen, dass dies der Fall ist Es ist ziemlich entmutigend, die Anzahl der verschiedenen Ansätze und Tools zu sehen, daher könnte ich ein paar Ratschläge gebrauchen, um mich in die richtige Richtung zu bewegen.
Ich bin Entwickler, jetzt nur in meiner Freizeit, die begrenzt ist. Bis jetzt habe ich mit Java gearbeitet, Webanwendungen erstellt und war einigermaßen zufrieden mit der Bereitstellung einer Kriegsdatei in einer Tomcat-Umgebung, in der die Dinge gut gekapselt sind.
Ich arbeite jetzt in Python und Django, aber wenn ich mich dem Punkt nähere, an dem ich bereitstellen muss, möchte ich einen soliden Devops-Workflow einrichten, um so viel wie möglich zu automatisieren und sicherzustellen, dass ich zuverlässig bereitstellen kann Der Anwendungsfall ist relativ einfach. Ich möchte vermeiden, ein umfangreiches Toolset zu erlernen, das für meine Anforderungen überarbeitet wurde und viel Zeit erfordert. Ich würde lieber meine App codieren.
Daher suche ich nach einem Mittelweg, mit dem ich meine App (s) zuverlässig bereitstellen und verwalten kann, ohne viel Zeit für die Einrichtung und das Erlernen eines großen Devops-Ökosystems zu investieren.
Noch ein paar Details ...
Kontext
- Ich entwickle auf einem Mac mit PyCharm, um Django 2, Python 3 zu erstellen.
- Ich verwende git (aber nicht auf github), um die Softwareversionierung zu verwalten.
- Ich bin mit anderen Sprachen und Skriptsprachen vertraut und habe ein paar (wahrscheinlich ziemlich amateurhafte) Bash-Skripte geschrieben, obwohl ich Bash nicht mag. Ich habe mich auch mit Perl beschäftigt, was mir klar wurde, dass es keine wirkliche Sprache zum Spielen ist (dh Sie müssen Zeit damit verbringen, es richtig zu lernen).
- Ich beabsichtige, in einer VPS-Umgebung, wahrscheinlich DigitalOcean, bereitzustellen.
- Meine App ist nicht geschäftskritisch, aber es ist wichtig, dass ich weiß, ob die Site ausfällt, und eine Möglichkeit zur zuverlässigen Wiederherstellung haben muss, wenn dies der Fall ist, ob dies ein Neustart der App, ein Neustart des Servers oder ein Wechsel zu einem anderen Server ist ( oder andere).
Spezifische Anforderungen
Möglichkeit, eine neue Umgebung für den Empfang der App einzurichten.
Bis jetzt, während ich lerne, war dies manuell und jedes Mal, wenn ich es getan habe, habe ich mit einem neuen Droplet von vorne angefangen. Ich möchte, dass dies viel einfacher (automatisiert) ist, damit ich dies zuverlässig tun kann, wenn ich im Notfall eine neue Umgebung einrichten muss.
Möglichkeit, die App in einer Staging-Umgebung bereitzustellen, die so identisch wie möglich mit dem Live ist, idealerweise als automatisierter Prozess, der durch einen Git-Push unter Verwendung eines kontinuierlichen Integrationsansatzes ausgelöst wird (was ich noch nie zuvor getan habe).
Möglichkeit zum "Drücken der Taste", wenn ich mit der App in der Staging-Umgebung zufrieden bin, um idealerweise automatisch in eine Live-Umgebung zu wechseln.
Möglichkeit, die Site zu überwachen (nur eine Umfrage auf einer Seite reicht aus)
Möglichkeit, die Live-Site auf einen anderen Server umzustellen, wenn ich nach einem App- oder Serverfehler auf der Live-Site eine Wiederherstellung durchführen muss. Ich denke, vielleicht würde ein blau-grüner Ansatz für mich funktionieren?
Was habe ich versucht oder in Betracht gezogen?
Manuelles Einrichten der Live-Umgebung mit der Django-App, dann kopieren Sie die neue Codebasis manuell, wenn sich etwas ändert. Dies ist anfällig für menschliches Versagen, und ich befürchte, dass bei einer Bereitstellung ein Fehler gemacht wird, der zu einem nicht behebbaren Fehler führt.
Docker. Ich gebe zu, als ich von Docker erfuhr, schien ein Traum wahr zu werden, aber nach ein wenig Experimentieren und Nachforschen bin ich entmutigt, wie viel ich lernen und wissen muss, um dies zum Laufen zu bringen und zu verwalten. Es kann sein, dass sich das lohnt, denn sobald es funktioniert, ist das Risiko sehr gering, aber im Moment fühlt es sich wie eine größere Investition meiner Zeit an, als ich es mir erhofft habe.
Bash-Skripte. Verwenden Sie sie, um die ursprüngliche Umgebung einzurichten und für bestimmte Aufgaben wie das Aktualisieren der App. Ich mache mir darüber Sorgen, dass es sich bei den Skripten um Code handelt, der getestet werden muss, und ich befürchte, dass es viel Zeit in Anspruch nehmen würde, auf diese Weise ein zuverlässiges Toolset zu erstellen.
Ich habe mir die Optionen von Digital Ocean für schwebende IP-Adressen und die Möglichkeit angesehen, zwei Server für einen "blaugrünen" Ansatz zu haben, was durchaus sinnvoll erscheint. Wenn ich diesen Weg gehe, muss ich die Bereitstellung noch automatisieren können.
Also ... ich suche Rat zu einem Devops-Ansatz, der das richtige Gleichgewicht zwischen der Minimierung des Risikos (z. B. dem Risiko, die Live-App mit einem Update zu beschädigen, oder dem Risiko, sich nicht von einem Fehler erholen zu können) und der Minimierung der Zeit findet Ich muss investieren, um die Umgebungen und den Workflow einzurichten.