- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
53
deploy_scripts/backup.sh
Normal file
53
deploy_scripts/backup.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
# backup.sh - 備份資料庫和重要檔案
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="$HOME/backups"
|
||||
APP_DIR="$HOME/momo_pro_system"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
echo "=========================================="
|
||||
echo "Momo Pro System - 備份"
|
||||
echo "=========================================="
|
||||
|
||||
# 建立備份目錄
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# 備份資料庫
|
||||
echo "💾 備份資料庫..."
|
||||
if [ -f "$APP_DIR/data/momo_database.db" ]; then
|
||||
cp "$APP_DIR/data/momo_database.db" "$BACKUP_DIR/momo_db_$DATE.db"
|
||||
echo "✅ 資料庫已備份到: $BACKUP_DIR/momo_db_$DATE.db"
|
||||
else
|
||||
echo "⚠️ 找不到資料庫檔案"
|
||||
fi
|
||||
|
||||
# 備份 .env 檔案
|
||||
echo "🔐 備份環境變數..."
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
cp "$APP_DIR/.env" "$BACKUP_DIR/env_$DATE.backup"
|
||||
echo "✅ .env 已備份"
|
||||
fi
|
||||
|
||||
# 備份日誌(最近 7 天)
|
||||
echo "📋 備份日誌..."
|
||||
if [ -d "$APP_DIR/logs" ]; then
|
||||
tar -czf "$BACKUP_DIR/logs_$DATE.tar.gz" -C "$APP_DIR" logs/
|
||||
echo "✅ 日誌已備份"
|
||||
fi
|
||||
|
||||
# 清理舊備份(保留最近 7 天)
|
||||
echo "🧹 清理舊備份..."
|
||||
find "$BACKUP_DIR" -name "momo_db_*.db" -mtime +7 -delete
|
||||
find "$BACKUP_DIR" -name "env_*.backup" -mtime +7 -delete
|
||||
find "$BACKUP_DIR" -name "logs_*.tar.gz" -mtime +7 -delete
|
||||
|
||||
# 顯示備份大小
|
||||
echo ""
|
||||
echo "📊 備份統計:"
|
||||
du -sh "$BACKUP_DIR"
|
||||
|
||||
echo ""
|
||||
echo "✅ 備份完成!"
|
||||
echo "備份位置: $BACKUP_DIR"
|
||||
108
deploy_scripts/deploy_cloudrun.sh
Executable file
108
deploy_scripts/deploy_cloudrun.sh
Executable file
@@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
# deploy_cloudrun.sh - 一鍵部署到 Google Cloud Run
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "部署 Momo Pro System 到 Cloud Run"
|
||||
echo "=========================================="
|
||||
|
||||
# 檢查是否已登入 gcloud
|
||||
if ! gcloud auth list --filter=status:ACTIVE --format="value(account)" | grep -q .; then
|
||||
echo "❌ 請先登入 gcloud:"
|
||||
echo " gcloud auth login"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 取得或設定專案 ID
|
||||
PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
|
||||
if [ -z "$PROJECT_ID" ]; then
|
||||
read -p "請輸入 GCP 專案 ID: " PROJECT_ID
|
||||
gcloud config set project $PROJECT_ID
|
||||
fi
|
||||
|
||||
echo "📋 使用專案: $PROJECT_ID"
|
||||
|
||||
# 設定區域
|
||||
REGION="asia-east1"
|
||||
SERVICE_NAME="momo-pro-system"
|
||||
|
||||
# 詢問是否需要設定環境變數
|
||||
echo ""
|
||||
read -p "是否需要設定環境變數?(y/n): " SETUP_ENV
|
||||
if [ "$SETUP_ENV" = "y" ]; then
|
||||
echo ""
|
||||
echo "請輸入環境變數(留空跳過):"
|
||||
read -p "EMAIL_USER: " EMAIL_USER
|
||||
read -sp "EMAIL_PASSWORD: " EMAIL_PASSWORD
|
||||
echo ""
|
||||
read -p "SMTP_SERVER (預設: smtp.gmail.com): " SMTP_SERVER
|
||||
SMTP_SERVER=${SMTP_SERVER:-smtp.gmail.com}
|
||||
read -p "SMTP_PORT (預設: 587): " SMTP_PORT
|
||||
SMTP_PORT=${SMTP_PORT:-587}
|
||||
fi
|
||||
|
||||
# 啟用必要的 API
|
||||
echo ""
|
||||
echo "📡 啟用必要的 GCP API..."
|
||||
gcloud services enable \
|
||||
run.googleapis.com \
|
||||
cloudbuild.googleapis.com \
|
||||
artifactregistry.googleapis.com
|
||||
|
||||
# 部署到 Cloud Run(直接從原始碼建立)
|
||||
echo ""
|
||||
echo "🚀 部署到 Cloud Run..."
|
||||
echo " 這可能需要幾分鐘時間..."
|
||||
|
||||
DEPLOY_CMD="gcloud run deploy $SERVICE_NAME \
|
||||
--source . \
|
||||
--region=$REGION \
|
||||
--allow-unauthenticated \
|
||||
--port=5000 \
|
||||
--memory=2Gi \
|
||||
--cpu=2 \
|
||||
--min-instances=0 \
|
||||
--max-instances=10 \
|
||||
--timeout=300"
|
||||
|
||||
# 添加環境變數
|
||||
if [ "$SETUP_ENV" = "y" ] && [ ! -z "$EMAIL_USER" ]; then
|
||||
DEPLOY_CMD="$DEPLOY_CMD --set-env-vars=EMAIL_USER=$EMAIL_USER,SMTP_SERVER=$SMTP_SERVER,SMTP_PORT=$SMTP_PORT"
|
||||
|
||||
# 處理密碼(使用 Secret Manager)
|
||||
if [ ! -z "$EMAIL_PASSWORD" ]; then
|
||||
echo "🔐 設定 Email 密碼到 Secret Manager..."
|
||||
echo -n "$EMAIL_PASSWORD" | gcloud secrets create email-password --data-file=- || \
|
||||
echo -n "$EMAIL_PASSWORD" | gcloud secrets versions add email-password --data-file=-
|
||||
|
||||
DEPLOY_CMD="$DEPLOY_CMD --set-secrets=EMAIL_PASSWORD=email-password:latest"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 執行部署
|
||||
eval $DEPLOY_CMD
|
||||
|
||||
# 取得服務 URL
|
||||
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME \
|
||||
--region=$REGION \
|
||||
--format='value(status.url)')
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ 部署成功!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "🌐 服務 URL: $SERVICE_URL"
|
||||
echo ""
|
||||
echo "📊 查看日誌:"
|
||||
echo " gcloud logging read \"resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME\" --limit=50"
|
||||
echo ""
|
||||
echo "🔄 更新服務:"
|
||||
echo " ./deploy_scripts/deploy_cloudrun.sh"
|
||||
echo ""
|
||||
echo "❌ 刪除服務:"
|
||||
echo " gcloud run services delete $SERVICE_NAME --region=$REGION"
|
||||
echo ""
|
||||
echo "💰 查看費用:"
|
||||
echo " https://console.cloud.google.com/billing"
|
||||
echo ""
|
||||
87
deploy_scripts/setup_autostart.sh
Executable file
87
deploy_scripts/setup_autostart.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# WOOO TECH - Momo Pro System
|
||||
# UAT VM 開機自動啟動 Docker 服務配置腳本
|
||||
# =============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "配置 Docker 開機自動啟動"
|
||||
echo "=========================================="
|
||||
|
||||
# 檢查是否為 root 或有 sudo 權限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "請使用 sudo 執行此腳本"
|
||||
echo "用法: sudo bash setup_autostart.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. 確保 Docker 服務開機自動啟動
|
||||
echo ""
|
||||
echo "[1/4] 啟用 Docker 服務開機自動啟動..."
|
||||
systemctl enable docker
|
||||
systemctl is-enabled docker
|
||||
|
||||
# 2. 確保 Docker 服務正在運行
|
||||
echo ""
|
||||
echo "[2/4] 確認 Docker 服務狀態..."
|
||||
systemctl start docker
|
||||
systemctl status docker --no-pager | head -5
|
||||
|
||||
# 3. 創建 Momo Pro System 的 systemd 服務
|
||||
echo ""
|
||||
echo "[3/4] 創建 Momo Pro System systemd 服務..."
|
||||
|
||||
# 獲取實際的安裝路徑
|
||||
INSTALL_PATH="${INSTALL_PATH:-/home/wooo/momo_pro_system}"
|
||||
|
||||
cat > /etc/systemd/system/momo-docker.service << EOF
|
||||
[Unit]
|
||||
Description=Momo Pro System Docker Compose
|
||||
Documentation=https://github.com/wooo-tech/momo-pro-system
|
||||
Requires=docker.service
|
||||
After=docker.service network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
WorkingDirectory=${INSTALL_PATH}
|
||||
ExecStart=/usr/bin/docker compose --profile monitoring up -d
|
||||
ExecStop=/usr/bin/docker compose --profile monitoring down
|
||||
ExecReload=/usr/bin/docker compose --profile monitoring restart
|
||||
TimeoutStartSec=300
|
||||
TimeoutStopSec=120
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "服務檔案已創建: /etc/systemd/system/momo-docker.service"
|
||||
|
||||
# 4. 啟用並啟動服務
|
||||
echo ""
|
||||
echo "[4/4] 啟用 Momo Pro System 服務..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable momo-docker.service
|
||||
systemctl is-enabled momo-docker.service
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ 配置完成!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "服務管理命令:"
|
||||
echo " 啟動服務: sudo systemctl start momo-docker"
|
||||
echo " 停止服務: sudo systemctl stop momo-docker"
|
||||
echo " 重啟服務: sudo systemctl restart momo-docker"
|
||||
echo " 查看狀態: sudo systemctl status momo-docker"
|
||||
echo " 查看日誌: sudo journalctl -u momo-docker -f"
|
||||
echo ""
|
||||
echo "驗證自動啟動配置:"
|
||||
echo " sudo systemctl is-enabled momo-docker"
|
||||
echo ""
|
||||
echo "如需修改安裝路徑,請設置環境變數:"
|
||||
echo " sudo INSTALL_PATH=/your/path bash setup_autostart.sh"
|
||||
echo ""
|
||||
73
deploy_scripts/setup_nginx.sh
Normal file
73
deploy_scripts/setup_nginx.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
# setup_nginx.sh - 設定 Nginx 反向代理
|
||||
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "設定 Nginx 反向代理"
|
||||
echo "=========================================="
|
||||
|
||||
# 詢問域名或 IP
|
||||
read -p "請輸入您的域名或 IP 地址 (例如: example.com 或 34.80.1.1): " DOMAIN
|
||||
|
||||
echo "📝 建立 Nginx 設定檔..."
|
||||
sudo tee /etc/nginx/sites-available/momo > /dev/null <<EOF
|
||||
server {
|
||||
listen 80;
|
||||
server_name $DOMAIN;
|
||||
|
||||
# 上傳大小限制
|
||||
client_max_body_size 50M;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:5000;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
|
||||
# WebSocket 支援(如果需要)
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
# 超時設定
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
# 靜態檔案快取
|
||||
location /static/ {
|
||||
alias /home/$USER/momo_pro_system/static/;
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# 建立軟連結
|
||||
echo "🔗 啟用站點..."
|
||||
sudo ln -sf /etc/nginx/sites-available/momo /etc/nginx/sites-enabled/
|
||||
|
||||
# 移除預設站點
|
||||
sudo rm -f /etc/nginx/sites-enabled/default
|
||||
|
||||
# 測試設定
|
||||
echo "🧪 測試 Nginx 設定..."
|
||||
sudo nginx -t
|
||||
|
||||
# 重啟 Nginx
|
||||
echo "🔄 重啟 Nginx..."
|
||||
sudo systemctl restart nginx
|
||||
sudo systemctl enable nginx
|
||||
|
||||
echo ""
|
||||
echo "✅ Nginx 設定完成!"
|
||||
echo ""
|
||||
echo "您的應用現在可以通過以下網址訪問:"
|
||||
echo " http://$DOMAIN"
|
||||
echo ""
|
||||
echo "如需設定 HTTPS (SSL),請執行:"
|
||||
echo " sudo apt install certbot python3-certbot-nginx"
|
||||
echo " sudo certbot --nginx -d $DOMAIN"
|
||||
73
deploy_scripts/setup_service.sh
Normal file
73
deploy_scripts/setup_service.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
# setup_service.sh - 設定 systemd 服務(需要 sudo 權限)
|
||||
|
||||
set -e
|
||||
|
||||
USER_NAME=$(whoami)
|
||||
APP_DIR="$HOME/momo_pro_system"
|
||||
|
||||
echo "=========================================="
|
||||
echo "設定 systemd 服務"
|
||||
echo "=========================================="
|
||||
|
||||
# 建立主服務檔案
|
||||
echo "📝 建立 momo.service..."
|
||||
sudo tee /etc/systemd/system/momo.service > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=Momo Pro System - Flask Application
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER_NAME
|
||||
WorkingDirectory=$APP_DIR
|
||||
Environment="PATH=$APP_DIR/venv/bin"
|
||||
ExecStart=$APP_DIR/venv/bin/python app.py
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 建立排程服務檔案
|
||||
echo "📝 建立 momo-scheduler.service..."
|
||||
sudo tee /etc/systemd/system/momo-scheduler.service > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=Momo Pro System - Scheduler
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER_NAME
|
||||
WorkingDirectory=$APP_DIR
|
||||
Environment="PATH=$APP_DIR/venv/bin"
|
||||
ExecStart=$APP_DIR/venv/bin/python scheduler.py
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 重新載入 systemd
|
||||
echo "🔄 重新載入 systemd..."
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 啟用服務
|
||||
echo "✅ 啟用服務..."
|
||||
sudo systemctl enable momo
|
||||
sudo systemctl enable momo-scheduler
|
||||
|
||||
echo ""
|
||||
echo "✅ 服務設定完成!"
|
||||
echo ""
|
||||
echo "可以使用以下指令:"
|
||||
echo " 啟動服務: sudo systemctl start momo"
|
||||
echo " 查看狀態: sudo systemctl status momo"
|
||||
echo " 查看日誌: sudo journalctl -u momo -f"
|
||||
echo " 重啟服務: sudo systemctl restart momo"
|
||||
59
deploy_scripts/setup_vm.sh
Normal file
59
deploy_scripts/setup_vm.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
# setup_vm.sh - 在 GCP VM 上執行此腳本來設定環境
|
||||
|
||||
set -e # 發生錯誤時停止
|
||||
|
||||
echo "=========================================="
|
||||
echo "Momo Pro System - VM 環境設定"
|
||||
echo "=========================================="
|
||||
|
||||
# 更新系統
|
||||
echo "📦 更新系統套件..."
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
# 安裝必要工具
|
||||
echo "🔧 安裝必要工具..."
|
||||
sudo apt install -y \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
git \
|
||||
nginx \
|
||||
chromium-browser \
|
||||
chromium-chromedriver \
|
||||
curl \
|
||||
wget
|
||||
|
||||
# 進入應用目錄
|
||||
cd ~/momo_pro_system
|
||||
|
||||
# 建立虛擬環境
|
||||
echo "🐍 建立 Python 虛擬環境..."
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# 安裝 Python 依賴
|
||||
echo "📚 安裝 Python 套件..."
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 初始化資料庫
|
||||
echo "💾 初始化資料庫..."
|
||||
python init_db.py
|
||||
|
||||
# 建立必要目錄
|
||||
echo "📁 建立必要目錄..."
|
||||
mkdir -p logs
|
||||
mkdir -p data
|
||||
mkdir -p backups
|
||||
|
||||
# 設定權限
|
||||
chmod +x start.sh
|
||||
|
||||
echo ""
|
||||
echo "✅ 環境設定完成!"
|
||||
echo ""
|
||||
echo "接下來請執行:"
|
||||
echo "1. 編輯 .env 檔案: nano .env"
|
||||
echo "2. 設定 systemd 服務: sudo ./deploy_scripts/setup_service.sh"
|
||||
echo "3. 啟動服務: sudo systemctl start momo"
|
||||
99
deploy_scripts/test_docker_local.sh
Executable file
99
deploy_scripts/test_docker_local.sh
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
# test_docker_local.sh - 本機測試 Docker 部署
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "本機 Docker 測試"
|
||||
echo "=========================================="
|
||||
|
||||
# 檢查 Docker 是否安裝
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "❌ Docker 未安裝"
|
||||
echo " 請安裝 Docker Desktop: https://www.docker.com/products/docker-desktop"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 檢查 Docker 是否運行
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker 未運行"
|
||||
echo " 請啟動 Docker Desktop"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 檢查 .env 檔案
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "⚠️ 找不到 .env 檔案"
|
||||
read -p "是否建立 .env 檔案?(y/n): " CREATE_ENV
|
||||
if [ "$CREATE_ENV" = "y" ]; then
|
||||
cat > .env <<EOF
|
||||
# Flask 設定
|
||||
FLASK_ENV=production
|
||||
SECRET_KEY=$(openssl rand -hex 32)
|
||||
|
||||
# Email 設定
|
||||
EMAIL_USER=your-email@gmail.com
|
||||
EMAIL_PASSWORD=your-app-password
|
||||
SMTP_SERVER=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
|
||||
# 資料庫
|
||||
DATABASE_PATH=data/momo_database.db
|
||||
EOF
|
||||
echo "✅ 已建立 .env 檔案,請編輯後再次執行此腳本"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 停止現有容器
|
||||
echo ""
|
||||
echo "🛑 停止現有容器..."
|
||||
docker-compose down 2>/dev/null || true
|
||||
|
||||
# 建立並啟動容器
|
||||
echo ""
|
||||
echo "🔨 建立 Docker 映像..."
|
||||
docker-compose build
|
||||
|
||||
echo ""
|
||||
echo "🚀 啟動容器..."
|
||||
docker-compose up -d
|
||||
|
||||
# 等待服務啟動
|
||||
echo ""
|
||||
echo "⏳ 等待服務啟動..."
|
||||
sleep 5
|
||||
|
||||
# 檢查容器狀態
|
||||
echo ""
|
||||
echo "📊 容器狀態:"
|
||||
docker-compose ps
|
||||
|
||||
# 測試健康檢查
|
||||
echo ""
|
||||
echo "🏥 測試健康檢查..."
|
||||
if curl -f http://localhost:80/health &>/dev/null; then
|
||||
echo "✅ 健康檢查通過"
|
||||
else
|
||||
echo "⚠️ 健康檢查失敗,查看日誌:"
|
||||
docker-compose logs --tail=20
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✅ Docker 容器已啟動!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "🌐 訪問應用: http://localhost"
|
||||
echo ""
|
||||
echo "📋 查看日誌:"
|
||||
echo " docker-compose logs -f"
|
||||
echo ""
|
||||
echo "🔍 進入容器:"
|
||||
echo " docker exec -it momo-pro-system bash"
|
||||
echo ""
|
||||
echo "🛑 停止容器:"
|
||||
echo " docker-compose down"
|
||||
echo ""
|
||||
echo "🗑️ 刪除所有數據:"
|
||||
echo " docker-compose down -v"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user