メディアボー環境セットアップガイド

サーバー上でコードを実行する必要があるプロジェクトでは、開発中もコードをサーバーへ同期する仕組みが不可欠です。同期手法として以下の3つが考えられます。

  • IDEのDeployment機能を使った同期
  • Git + 手動pull
  • Git + Webhook + 自動pull(CI/CDを模擬)

ローカル環境からGiteeへの同期

  1. ローカルマシンにGitをインストールする。
  2. Gitee上でアカウントを作成し、リポジトリを2つ用意する(例:Vueプロジェクト用のcity、Djangoプロジェクト用のmtb)。
  3. ローカルのコードをGiteeのリポジトリへプッシュする。
    # 初回のみGitの初期化とリモート設定
    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"
    
    cd /path/to/project
    git init
    git remote add origin https://gitee.com/username/mtb.git
    
    # コードの追加とプッシュ
    git add .
    git commit -m "Initial commit"
    git push -u origin master
    

Gitee Webhookの設定

Giteeのプロジェクト設定画面からWebhookを追加します。プッシュイベント発生時に指定したURLへPOSTリクエストが送信され、サーバー側で自動処理が可能になります。

自動デプロイスクリプト(Python + Flask)

サーバー上でFlaskアプリを常駐させ、GiteeからのWebhookを受信してコードの更新・依存パッケージのインストールを自動化します。サーバーには事前にGit、Python、Node.js(Vueプロジェクト用)およびFlaskをインストールしておきます。

import os
import subprocess
from flask import Flask, request

app = Flask(__name__)

PROJECT_CONFIG = {
    "mtb": {
        "base_dir": "/opt/projects",
        "install_cmd": "pip install -r requirements.txt"
    },
    "city": {
        "base_dir": "/opt/projects",
        "install_cmd": "npm install"
    }
}

@app.route("/hook", methods=["POST"])
def handle_webhook():
    payload = request.json
    full_path = payload["project"]["path"]       # 例: "username/mtb"
    repo_name = full_path.split("/")[-1]

    if repo_name not in PROJECT_CONFIG:
        return "Unsupported project", 400

    config = PROJECT_CONFIG[repo_name]
    base_directory = config["base_dir"]
    install_cmd = config["install_cmd"]
    target_dir = os.path.join(base_directory, repo_name)
    git_url = payload["project"]["git_http_url"]

    if not os.path.isdir(target_dir):
        subprocess.run(["git", "clone", git_url], cwd=base_directory, check=True)
    else:
        subprocess.run(["git", "pull", "origin", "master"], cwd=target_dir, check=True)

    subprocess.run(install_cmd.split(), cwd=target_dir, check=True)
    return "Deployment successful"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=9000)

上記スクリプトをdeploy.pyなどとして保存し、python deploy.pyで起動します。事前にGiteeのWebhook送信先をこのサーバーの9000番ポートに設定し、セキュリティグループでポートを開放してください。

データベースの準備

サーバー上でMySQLをセットアップし、Djangoプロジェクト用のデータベースとユーザーを作成します。

CREATE DATABASE mtb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'mtb_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON mtb.* TO 'mtb_user'@'%';
FLUSH PRIVILEGES;

Djangoプロジェクトのデータベース接続設定はlocal_settings.pyなどに記述し、バージョン管理から除外しておきます。設定例を以下に示します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mtb',
        'USER': 'mtb_user',
        'PASSWORD': 'StrongPassword123!',
        'HOST': 'your-server-ip',
        'PORT': 3306,
    }
}

その後、マイグレーションを実行してテーブルを作成します。

python manage.py makemigrations
python manage.py migrate

依存パッケージの管理

Pythonプロジェクトではpipreqsを使用してrequirements.txtを自動生成できます。

pip install pipreqs
pipreqs ./ --encoding=utf8 --force

生成されたファイルをリポジトリに含めることで、別環境での依存関係再現が容易になります。

アプリケーションの起動と開発ワークフロー

すべての準備が整ったら、サーバー上で各サービスを起動します。

  • 自動デプロイ用のFlaskアプリを常時稼働させる。
  • Djangoの開発サーバーを起動する(本番相当の検証用)。
    ALLOWED_HOSTS = ['*'] を設定し、python manage.py runserver 0.0.0.0:8000 で起動。
    サーバーのセキュリティグループで8000番ポートを開放する。
  • Vue開発サーバーを起動し、バックエンドAPIの向き先をサーバーのIPアドレスに変更する。
    npm run serve -- --port 80 などで起動。

以降の開発では、ローカルでコードを編集しGiteeにプッシュするだけで、Webhook経由でサーバー上のコードが自動更新され、すぐに動作確認が行えるようになります。これはオンライン開発マシンを構築した状態であり、実際の本番環境とはOSや実行方式が異なりますが、迅速な共同検証に役立ちます。

タグ: Gitee Webhook flask Python Django

10月13日 11:46 投稿