Python: Verbesserte Version des Makefile
Diese Dokumentation ist Teil des Erweiterte Anwendungen-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Weiterführende Schritte mit Ihren Python-Bereitstellungen.
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Python Cloud-Lösung, die Ihren Deployment-Prozess vereinfacht:
- Deployen Sie Ihre Anwendung in die Produktion in Sekunden mit einem einfachen
git push.- Verwenden Sie Ihre eigene Domain, mit automatischer HTTPS-Zertifikatskonfiguration – sichere Verbindungen werden für Sie eingerichtet.
- Profitieren Sie von automatischen Backups, One-Click-Updates und planbaren Kosten, damit Sie sich auf Ihren Code konzentrieren können, nicht auf das Infrastrukturmanagement.
- Nutzen Sie starke Performance und Sicherheit auf einer privaten, dedizierten Infrastruktur. Ihre Umgebung ist isoliert und geschützt.
Sparen Sie Zeit und vereinfachen Sie Ihren Workflow: Ihr Code läuft mit Stackheros Python Cloud Hosting in nur 5 Minuten.
Unten ist ein verbessertes Makefile, das mehrere Regeln unterstützt:
make dev(oder einfachmake): Startet die Anwendung im Entwicklungsmodus.make deploy: Stellt die Anwendung auf dem Remote namensstackherobereit. Dies funktioniert gut, wenn Sie nur eine Stackhero-Instanz haben.make deploy-production: Stellt die Anwendung auf dem Remote namensstackhero-productionbereit.make deploy-staging: Stellt die Anwendung auf dem Remote namensstackhero-stagingbereit.
Dieses
Makefileist so konzipiert, dass es Situationen handhabt, in denen sich der Code nicht geändert hat, indem es den "Everything up-to-date" Fehler vermeidet.
Kopieren Sie den folgenden Inhalt und fügen Sie ihn als Ihr neues Makefile ein:
# Standardregel, die ausgeführt wird, wenn "make" ohne Argument aufgerufen wird
.DEFAULT_GOAL := dev
# Stackhero für Python wird die "run" Regel auf Ihrer Instanz ausführen.
# Dies ist der Befehl, der sowohl in Ihren Produktions- als auch in Ihren Staging-Umgebungen ausgeführt wird.
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# Der Befehl, der in der Entwicklungsumgebung verwendet wird
dev:
python app.py
# Regel "deploy" zur Bereitstellung auf der Instanz "stackhero".
# Geeignet, wenn Sie nur eine Instanz haben.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# Die "deploy-*" Regeln stellen auf einer Instanz bereit, die "stackhero-*" heißt.
# Zum Beispiel, das Ausführen von "make deploy-production" stellt auf "stackhero-production" bereit,
# oder "make deploy-staging" stellt auf "stackhero-staging" bereit.
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Interne Bereitstellungsregel. Nicht ändern.
deploy-script:
@echo "Bereitstellung des Branches \"${DEPLOY_BRANCH}\" auf \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Kann nicht bereitstellen, da es nicht festgeschriebene Änderungen gibt:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Sie können diesen Befehl verwenden, um die Änderungen festzuschreiben:"; \
echo "git add -A . && git commit -m \"Ihre Nachricht\""; \
echo "\e[0m"; \
exit 1; \
fi
@git push --dry-run ${DEPLOY_REMOTE} ${DEPLOY_BRANCH} 2>&1 | grep -q -F "Everything up-to-date"; \
EXIT_CODE=$$?; \
if [ $$EXIT_CODE -eq 0 ]; then \
echo -n "Nichts Neues zu bereitstellen... Bereitstellung erzwingen (dies wird einen neuen Commit erstellen)? (y/N) "; \
read answer && \
case $$answer in \
y|Y|yes|YES) \
git commit --allow-empty -m "Force update for deploy purpose to \"${DEPLOY_REMOTE}\"" ; \
;; \
*) \
echo "Nichts zu bereitstellen!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}