Python: 改良されたMakefileバージョン

このドキュメントは高度な使用法ガイドの一部です。完全なガイドはこちらからご覧いただけます:Pythonデプロイメントをさらに進める

👋 Stackhero ドキュメントへようこそ!

Stackhero は、デプロイ作業を効率化するために設計された、すぐに使える Python クラウド ソリューションを提供しています:

  • シンプルな git push だけで、数秒でアプリケーションを本番環境にデプロイできます。
  • ご自身のドメイン名を利用可能で、HTTPS 証明書の自動設定により安全な接続も自動で管理されます。
  • 自動バックアップワンクリックアップデート予測可能な料金体系により、インフラ管理ではなくコードに集中できます。
  • プライベートかつ専用インフラ上で、強力なパフォーマンスセキュリティを実現。お客様の環境は分離され、保護されています。

時間を節約し、ワークフローをシンプルに:Stackhero の Python クラウドホスティング なら、わずか 5分でコードを稼働させることができます。

以下は、複数のルールをサポートする改良されたMakefileです。

  • make dev(または単にmake):開発モードでアプリケーションを開始します。
  • make deploy:リモート名stackheroにアプリケーションをデプロイします。これは、Stackheroインスタンスが1つだけの場合に適しています。
  • make deploy-production:リモート名stackhero-productionにアプリケーションをデプロイします。
  • make deploy-staging:リモート名stackhero-stagingにアプリケーションをデプロイします。

このMakefileは、コードが変更されていない場合に「Everything up-to-date」エラーを回避するように設計されています。

以下の内容を新しいMakefileとしてコピーして貼り付けてください。

# 引数なしで"make"を呼び出すときにデフォルトで実行されるルール
.DEFAULT_GOAL := dev


# Stackhero for Pythonは、インスタンスで"run"ルールを実行します。
# これは、本番およびステージング環境で実行するコマンドです。
run:
  ENV=production gunicorn app:app \
    --error-logfile - \
    -b 0.0.0.0:8080


# 開発環境で使用するコマンド
dev:
  python app.py


# インスタンス"stackhero"にデプロイするためのルール"deploy"。
# インスタンスが1つだけの場合に適しています。
deploy:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main


# "deploy-*"ルールは、"stackhero-*"という名前のインスタンスにデプロイします。
# 例えば、"make deploy-production"を実行すると"stackhero-production"にデプロイされ、
# "make deploy-staging"を実行すると"stackhero-staging"にデプロイされます。
deploy-%:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main


# 内部デプロイルール。変更しないでください。
deploy-script:
  @echo "ブランチ\"${DEPLOY_BRANCH}\"を\"${DEPLOY_REMOTE}\"にデプロイしています..."
  @echo

  @if [ -n "$$(git status --porcelain)" ]; then \
    echo "未コミットの変更があるためデプロイできません:"; \
    echo "\e[0m"; \
    git status -s; \
    echo ""; \
    echo "\e[0;31m"; \
    echo "変更をコミットするにはこのコマンドを使用できます:"; \
    echo "git add -A . && git commit -m \"Your message\""; \
    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 "新しいものはありません... 強制デプロイしますか(これにより新しいコミットが作成されます)? (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 "デプロイするものはありません!"; \
      exit 1; \
      ;; \
    esac \
  fi

  git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}