Init project
This commit is contained in:
344
start.sh
Normal file
344
start.sh
Normal file
@@ -0,0 +1,344 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Email to Discord Monitor - Linux起動スクリプト
|
||||
|
||||
set -e # エラー時に終了
|
||||
|
||||
# 色付きメッセージ用の定数
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# ログ関数
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
log_blue() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
# ヘルプメッセージ
|
||||
show_help() {
|
||||
echo "Email to Discord Monitor - 起動スクリプト"
|
||||
echo ""
|
||||
echo "使用方法:"
|
||||
echo " $0 [オプション]"
|
||||
echo ""
|
||||
echo "オプション:"
|
||||
echo " build Dockerイメージをビルド"
|
||||
echo " start コンテナを起動"
|
||||
echo " stop コンテナを停止"
|
||||
echo " restart コンテナを再起動"
|
||||
echo " logs ログを表示"
|
||||
echo " logs-f ログをリアルタイムで表示"
|
||||
echo " status コンテナの状態を確認"
|
||||
echo " clean 停止済みコンテナとイメージを削除"
|
||||
echo " setup 初期セットアップ(.envファイル作成)"
|
||||
echo " compose-up docker-compose で起動"
|
||||
echo " compose-down docker-compose で停止"
|
||||
echo " python Python直接実行"
|
||||
echo " help このヘルプを表示"
|
||||
echo ""
|
||||
echo "例:"
|
||||
echo " $0 setup # 初期セットアップ"
|
||||
echo " $0 build # イメージをビルド"
|
||||
echo " $0 start # コンテナを起動"
|
||||
echo " $0 logs-f # ログをリアルタイム表示"
|
||||
}
|
||||
|
||||
# 必要なツールの確認
|
||||
check_requirements() {
|
||||
local missing_tools=()
|
||||
|
||||
if ! command -v docker &> /dev/null; then
|
||||
missing_tools+=("docker")
|
||||
fi
|
||||
|
||||
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
||||
missing_tools+=("docker-compose")
|
||||
fi
|
||||
|
||||
if [ ${#missing_tools[@]} -ne 0 ]; then
|
||||
log_error "以下のツールがインストールされていません: ${missing_tools[*]}"
|
||||
log_info "Dockerのインストール: https://docs.docker.com/get-docker/"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# .envファイルのセットアップ
|
||||
setup_env() {
|
||||
log_info "初期セットアップを開始します..."
|
||||
|
||||
if [ -f ".env" ]; then
|
||||
log_warn ".envファイルが既に存在します"
|
||||
read -p "上書きしますか? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
log_info "セットアップをキャンセルしました"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f ".env.example" ]; then
|
||||
log_error ".env.exampleファイルが見つかりません"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp .env.example .env
|
||||
log_info ".envファイルを作成しました"
|
||||
|
||||
log_blue "以下の設定を.envファイルに入力してください:"
|
||||
echo ""
|
||||
echo "1. EMAIL_USER=your-email@gmail.com"
|
||||
echo "2. EMAIL_PASSWORD=your-app-password"
|
||||
echo "3. DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
|
||||
echo ""
|
||||
log_warn "設定完了後、'$0 build' でイメージをビルドしてください"
|
||||
}
|
||||
|
||||
# Dockerイメージをビルド
|
||||
build_image() {
|
||||
log_info "Dockerイメージをビルドしています..."
|
||||
docker build -t email-to-discord .
|
||||
log_info "ビルドが完了しました"
|
||||
}
|
||||
|
||||
# コンテナを起動
|
||||
start_container() {
|
||||
log_info "コンテナを起動しています..."
|
||||
|
||||
# 既存のコンテナを確認
|
||||
if docker ps -a --format "table {{.Names}}" | grep -q "^email-monitor$"; then
|
||||
log_warn "既存のコンテナを削除します..."
|
||||
docker rm -f email-monitor 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# .envファイルの確認
|
||||
if [ ! -f ".env" ]; then
|
||||
log_error ".envファイルが見つかりません"
|
||||
log_info "'$0 setup' を実行して設定を行ってください"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 環境変数を読み込み
|
||||
source .env
|
||||
|
||||
# 必須変数の確認
|
||||
if [ -z "$EMAIL_USER" ] || [ -z "$EMAIL_PASSWORD" ] || [ -z "$DISCORD_WEBHOOK_URL" ]; then
|
||||
log_error "必須の環境変数が設定されていません"
|
||||
log_info ".envファイルを確認してください"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# コンテナを起動
|
||||
docker run -d \
|
||||
--name email-monitor \
|
||||
--restart unless-stopped \
|
||||
--env-file .env \
|
||||
email-to-discord
|
||||
|
||||
log_info "コンテナが起動しました"
|
||||
log_blue "ログを確認するには: $0 logs-f"
|
||||
}
|
||||
|
||||
# コンテナを停止
|
||||
stop_container() {
|
||||
log_info "コンテナを停止しています..."
|
||||
docker stop email-monitor 2>/dev/null || log_warn "コンテナが実行されていません"
|
||||
docker rm email-monitor 2>/dev/null || log_warn "削除するコンテナがありません"
|
||||
log_info "コンテナを停止しました"
|
||||
}
|
||||
|
||||
# コンテナを再起動
|
||||
restart_container() {
|
||||
log_info "コンテナを再起動しています..."
|
||||
stop_container
|
||||
sleep 2
|
||||
start_container
|
||||
}
|
||||
|
||||
# ログを表示
|
||||
show_logs() {
|
||||
if [ "$1" = "-f" ]; then
|
||||
log_info "ログをリアルタイムで表示します (Ctrl+C で終了)"
|
||||
docker logs -f email-monitor
|
||||
else
|
||||
log_info "ログを表示します"
|
||||
docker logs email-monitor
|
||||
fi
|
||||
}
|
||||
|
||||
# コンテナの状態を確認
|
||||
check_status() {
|
||||
log_info "コンテナの状態を確認しています..."
|
||||
|
||||
if docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -q "email-monitor"; then
|
||||
log_info "コンテナは実行中です"
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" | grep email-monitor
|
||||
else
|
||||
log_warn "コンテナは実行されていません"
|
||||
if docker ps -a --format "table {{.Names}}" | grep -q "email-monitor"; then
|
||||
log_info "停止済みコンテナが存在します"
|
||||
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" | grep email-monitor
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# クリーンアップ
|
||||
cleanup() {
|
||||
log_info "クリーンアップを実行しています..."
|
||||
|
||||
# コンテナを停止・削除
|
||||
docker stop email-monitor 2>/dev/null || true
|
||||
docker rm email-monitor 2>/dev/null || true
|
||||
|
||||
# イメージを削除
|
||||
docker rmi email-to-discord 2>/dev/null || log_warn "削除するイメージがありません"
|
||||
|
||||
# 未使用のリソースを削除
|
||||
docker system prune -f
|
||||
|
||||
log_info "クリーンアップが完了しました"
|
||||
}
|
||||
|
||||
# docker-compose で起動
|
||||
compose_up() {
|
||||
log_info "docker-compose でサービスを起動しています..."
|
||||
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose up -d
|
||||
else
|
||||
docker compose up -d
|
||||
fi
|
||||
|
||||
log_info "サービスが起動しました"
|
||||
log_blue "ログを確認するには: $0 compose-logs"
|
||||
}
|
||||
|
||||
# docker-compose で停止
|
||||
compose_down() {
|
||||
log_info "docker-compose でサービスを停止しています..."
|
||||
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose down
|
||||
else
|
||||
docker compose down
|
||||
fi
|
||||
|
||||
log_info "サービスを停止しました"
|
||||
}
|
||||
|
||||
# Python直接実行
|
||||
run_python() {
|
||||
log_info "Python環境で直接実行します..."
|
||||
|
||||
# Python3の確認
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
log_error "Python3がインストールされていません"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# pipの確認
|
||||
if ! command -v pip3 &> /dev/null; then
|
||||
log_error "pip3がインストールされていません"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 依存関係のインストール
|
||||
log_info "依存関係をインストールしています..."
|
||||
pip3 install -r requirements.txt
|
||||
|
||||
# .envファイルの確認
|
||||
if [ ! -f ".env" ]; then
|
||||
log_error ".envファイルが見つかりません"
|
||||
log_info "'$0 setup' を実行して設定を行ってください"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 環境変数を読み込んで実行
|
||||
log_info "アプリケーションを起動しています..."
|
||||
export $(cat .env | xargs)
|
||||
python3 app.py
|
||||
}
|
||||
|
||||
# メイン処理
|
||||
main() {
|
||||
case "$1" in
|
||||
"build")
|
||||
check_requirements
|
||||
build_image
|
||||
;;
|
||||
"start")
|
||||
check_requirements
|
||||
start_container
|
||||
;;
|
||||
"stop")
|
||||
stop_container
|
||||
;;
|
||||
"restart")
|
||||
check_requirements
|
||||
restart_container
|
||||
;;
|
||||
"logs")
|
||||
show_logs
|
||||
;;
|
||||
"logs-f")
|
||||
show_logs -f
|
||||
;;
|
||||
"status")
|
||||
check_status
|
||||
;;
|
||||
"clean")
|
||||
cleanup
|
||||
;;
|
||||
"setup")
|
||||
setup_env
|
||||
;;
|
||||
"compose-up")
|
||||
check_requirements
|
||||
compose_up
|
||||
;;
|
||||
"compose-down")
|
||||
compose_down
|
||||
;;
|
||||
"compose-logs")
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
docker-compose logs -f
|
||||
else
|
||||
docker compose logs -f
|
||||
fi
|
||||
;;
|
||||
"python")
|
||||
run_python
|
||||
;;
|
||||
"help"|"--help"|"-h")
|
||||
show_help
|
||||
;;
|
||||
"")
|
||||
log_error "引数が指定されていません"
|
||||
echo ""
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
log_error "不明なオプション: $1"
|
||||
echo ""
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# スクリプト実行
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user