Python: Verbeterde versie van Makefile
Deze documentatie maakt deel uit van de Geavanceerde toepassingen-gids. Bekijk de volledige gids hier: Verder gaan met uw Python-deployments.
👋 Welkom bij de Stackhero-documentatie!
Stackhero biedt een kant-en-klare Python cloud oplossing die uw deploymentproces vereenvoudigt:
- Deploy uw applicatie naar productie in enkele seconden met een simpele
git push.- Gebruik uw eigen domeinnaam, met automatische HTTPS-certificaatconfiguratie voor veilige verbindingen die volledig voor u geregeld worden.
- Profiteer van automatische back-ups, one-click updates en voorspelbare prijzen, zodat u zich kunt richten op uw code en niet op infrastructuurbeheer.
- Geniet van uitstekende performance en security op een private, dedicated infrastructuur. Uw omgeving is geïsoleerd en beveiligd.
Bespaar tijd en vereenvoudig uw workflow: uw code draait binnen 5 minuten op Stackhero's Python cloud hosting.
Hieronder staat een verbeterde Makefile die meerdere regels ondersteunt:
make dev(of gewoonmake): Start de applicatie in ontwikkelingsmodus.make deploy: Deploy de applicatie naar de remote genaamdstackhero. Dit werkt goed wanneer u een enkele Stackhero-instantie heeft.make deploy-production: Deploy de applicatie naar de remote genaamdstackhero-production.make deploy-staging: Deploy de applicatie naar de remote genaamdstackhero-staging.
Deze
Makefileis ontworpen om situaties te behandelen waarin de code niet is gewijzigd door de "Everything up-to-date" fout te vermijden.
Kopieer en plak de volgende inhoud als uw nieuwe Makefile:
# Standaardregel om uit te voeren bij het aanroepen van "make" zonder argument
.DEFAULT_GOAL := dev
# Stackhero voor Python zal de "run" regel op uw instantie uitvoeren.
# Dit is het commando om uit te voeren op zowel uw productie- als staging-omgevingen.
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# Het commando om te gebruiken in de ontwikkelingsomgeving
dev:
python app.py
# Regel "deploy" om te deployen naar de instantie "stackhero".
# Geschikt als u slechts één instantie heeft.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# De "deploy-*" regels deployen naar een instantie genaamd "stackhero-*".
# Bijvoorbeeld, het uitvoeren van "make deploy-production" deployt naar "stackhero-production",
# of "make deploy-staging" deployt naar "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Interne deploymentregel. Niet wijzigen.
deploy-script:
@echo "Deployen van branch \"${DEPLOY_BRANCH}\" naar \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Kan niet deployen omdat er niet-gecommitte wijzigingen zijn:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "U kunt dit commando gebruiken om de wijzigingen te committen:"; \
echo "git add -A . && git commit -m \"Uw bericht\""; \
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 "Niets nieuws om te deployen... Forceer deploy (dit zal een nieuwe commit maken)? (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 "Niets om te deployen!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}