Add local production test environment setup
- docker-compose.local.yml: 本番Dockerfile使用・Traefikなし・ポート直接公開 - deploy_local.sh: ローカル環境のビルド・起動スクリプト - sync_db.sh: サーバーDBダンプをローカルに取り込むスクリプト - document/20_ローカルテスト環境.md: 手順ドキュメント Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
37
deploy_local.sh
Executable file
37
deploy_local.sh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ローカル本番同等環境の起動スクリプト
|
||||||
|
# 使用: bash deploy_local.sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
echo "=== KeinaSystem ローカル本番環境 ==="
|
||||||
|
|
||||||
|
# .env ファイル確認
|
||||||
|
if [ ! -f ".env" ]; then
|
||||||
|
echo "エラー: .env ファイルがありません"
|
||||||
|
echo " .env.production.example を .env にコピーして値を設定してください"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[1/4] 停止..."
|
||||||
|
docker compose -f docker-compose.local.yml down
|
||||||
|
|
||||||
|
echo "[2/4] ビルド..."
|
||||||
|
docker compose -f docker-compose.local.yml build
|
||||||
|
|
||||||
|
echo "[3/4] 起動..."
|
||||||
|
docker compose -f docker-compose.local.yml up -d
|
||||||
|
|
||||||
|
echo "[4/4] マイグレーション..."
|
||||||
|
sleep 5
|
||||||
|
docker compose -f docker-compose.local.yml exec backend python manage.py migrate
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== 起動完了 ==="
|
||||||
|
docker compose -f docker-compose.local.yml ps
|
||||||
|
echo ""
|
||||||
|
echo " フロントエンド: http://localhost:3000"
|
||||||
|
echo " バックエンドAPI: http://localhost:8000/api/"
|
||||||
|
echo ""
|
||||||
|
echo "DBをサーバーと同期する場合: bash sync_db.sh"
|
||||||
59
docker-compose.local.yml
Normal file
59
docker-compose.local.yml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# ローカルでの本番同等テスト用
|
||||||
|
# Traefikなし、ポート直接公開、本番用Dockerfileを使用
|
||||||
|
# 使用: docker compose -f docker-compose.local.yml up -d
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgis/postgis:16-3.4
|
||||||
|
container_name: keinasystem_db
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: keinasystem
|
||||||
|
POSTGRES_USER: keinasystem
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
volumes:
|
||||||
|
- postgres_data_local:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U keinasystem -d keinasystem"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: ./backend
|
||||||
|
dockerfile: Dockerfile.prod
|
||||||
|
container_name: keinasystem_backend
|
||||||
|
environment:
|
||||||
|
DB_NAME: keinasystem
|
||||||
|
DB_USER: keinasystem
|
||||||
|
DB_PASSWORD: ${DB_PASSWORD}
|
||||||
|
DB_HOST: db
|
||||||
|
DB_PORT: 5432
|
||||||
|
SECRET_KEY: ${SECRET_KEY}
|
||||||
|
DEBUG: "False"
|
||||||
|
ALLOWED_HOSTS: localhost,127.0.0.1
|
||||||
|
CORS_ALLOWED_ORIGINS: http://localhost:3000
|
||||||
|
MAIL_API_KEY: ${MAIL_API_KEY}
|
||||||
|
FRONTEND_URL: http://localhost:3000
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
build:
|
||||||
|
context: ./frontend
|
||||||
|
dockerfile: Dockerfile.prod
|
||||||
|
args:
|
||||||
|
NEXT_PUBLIC_API_URL: http://localhost:8000
|
||||||
|
container_name: keinasystem_frontend
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data_local:
|
||||||
92
document/20_ローカルテスト環境.md
Normal file
92
document/20_ローカルテスト環境.md
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# ローカルテスト環境(Ubuntu PC)
|
||||||
|
|
||||||
|
本番同等の環境をローカルで起動し、サーバーのデータで動作確認するための手順。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 構成
|
||||||
|
|
||||||
|
| ファイル | 用途 |
|
||||||
|
|---------|------|
|
||||||
|
| `docker-compose.local.yml` | 本番用Dockerfileを使用、Traefikなし、ポート直接公開 |
|
||||||
|
| `deploy_local.sh` | ローカル環境のビルド・起動 |
|
||||||
|
| `sync_db.sh` | サーバーのDBダンプをローカルに取り込む |
|
||||||
|
| `.env` | 本番と同じ環境変数(git管理外) |
|
||||||
|
|
||||||
|
アクセス先:
|
||||||
|
- フロントエンド: http://localhost:3000
|
||||||
|
- バックエンドAPI: http://localhost:8000/api/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 初回セットアップ
|
||||||
|
|
||||||
|
### 1. .env を作成
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.production.example .env
|
||||||
|
# .env に本番と同じ値を設定する
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. ローカル環境を起動
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash deploy_local.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
ビルド(初回は10〜15分)→ 起動 → マイグレーションが自動実行される。
|
||||||
|
|
||||||
|
### 3. サーバーのDBを同期
|
||||||
|
|
||||||
|
**サーバー側で実行**(keinasystemユーザーで):
|
||||||
|
```bash
|
||||||
|
docker exec keinasystem_db pg_dump -U keinasystem keinasystem > /tmp/keinasystem_dump.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
**ローカル側で実行**:
|
||||||
|
```bash
|
||||||
|
bash sync_db.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2回目以降の起動
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 停止中の場合は起動
|
||||||
|
docker compose -f docker-compose.local.yml up -d
|
||||||
|
|
||||||
|
# 停止
|
||||||
|
docker compose -f docker-compose.local.yml down
|
||||||
|
```
|
||||||
|
|
||||||
|
コードを変更した場合は再ビルドが必要:
|
||||||
|
```bash
|
||||||
|
bash deploy_local.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DBの再同期
|
||||||
|
|
||||||
|
サーバーのデータをローカルに反映したい時。
|
||||||
|
|
||||||
|
**サーバー側**(keinasystemユーザーで):
|
||||||
|
```bash
|
||||||
|
docker exec keinasystem_db pg_dump -U keinasystem keinasystem > /tmp/keinasystem_dump.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
**ローカル側**:
|
||||||
|
```bash
|
||||||
|
bash sync_db.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
> **注意**: ローカルのDBデータは上書きされる。ローカルで加えた変更は失われる。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 注意事項
|
||||||
|
|
||||||
|
- `.env` は gitignore 対象(コミットしない)
|
||||||
|
- ローカルDBは `postgres_data_local` ボリュームに保存(本番の `postgres_data` とは別)
|
||||||
|
- `sync_db.sh` は SSH設定 `keinafarm`(`~/.ssh/config`)を使用
|
||||||
46
sync_db.sh
Executable file
46
sync_db.sh
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# サーバーのDBをローカルに同期するスクリプト
|
||||||
|
#
|
||||||
|
# 事前準備(サーバー側でkeinasystemユーザーとして実行):
|
||||||
|
# docker exec keinasystem_db pg_dump -U keinasystem keinasystem > /tmp/keinasystem_dump.sql
|
||||||
|
#
|
||||||
|
# 使用: bash sync_db.sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REMOTE_HOST="keinafarm"
|
||||||
|
LOCAL_DUMP="/tmp/keinasystem_dump.sql"
|
||||||
|
|
||||||
|
echo "=== DBSync: サーバー → ローカル ==="
|
||||||
|
|
||||||
|
# 1. サーバーからdumpファイルをscpで取得
|
||||||
|
echo "[1/4] サーバーからダンプファイルを取得..."
|
||||||
|
scp "$REMOTE_HOST:/tmp/keinasystem_dump.sql" "$LOCAL_DUMP"
|
||||||
|
echo " → ダンプ取得完了: $LOCAL_DUMP ($(du -sh $LOCAL_DUMP | cut -f1))"
|
||||||
|
|
||||||
|
# 2. ローカルのDBコンテナが起動しているか確認
|
||||||
|
echo "[2/4] ローカルDBコンテナを確認..."
|
||||||
|
if ! docker compose -f docker-compose.local.yml ps db 2>/dev/null | grep -q "running"; then
|
||||||
|
echo " → ローカルDBコンテナが起動していません。起動します..."
|
||||||
|
docker compose -f docker-compose.local.yml up -d db
|
||||||
|
echo " → DB起動待機中..."
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 既存データをドロップして復元
|
||||||
|
echo "[3/4] ローカルDBにリストア(既存データをリセット)..."
|
||||||
|
# DBを一旦削除して再作成してからリストア
|
||||||
|
docker compose -f docker-compose.local.yml exec -T db \
|
||||||
|
psql -U keinasystem -d postgres -c "DROP DATABASE IF EXISTS keinasystem;" --quiet
|
||||||
|
docker compose -f docker-compose.local.yml exec -T db \
|
||||||
|
psql -U keinasystem -d postgres -c "CREATE DATABASE keinasystem OWNER keinasystem;" --quiet
|
||||||
|
cat "$LOCAL_DUMP" | docker compose -f docker-compose.local.yml exec -T db \
|
||||||
|
psql -U keinasystem -d keinasystem --quiet
|
||||||
|
echo " → リストア完了"
|
||||||
|
|
||||||
|
# 4. クリーンアップ
|
||||||
|
echo "[4/4] 一時ファイル削除..."
|
||||||
|
rm -f "$LOCAL_DUMP"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== 同期完了 ==="
|
||||||
|
echo "ローカルでの起動: bash deploy_local.sh"
|
||||||
Reference in New Issue
Block a user