Files
SiteProxy/deploy.sh
2025-12-15 01:38:38 +08:00

269 lines
6.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# deploy.sh - Deployment script for SiteProxy
# Usage: ./deploy.sh [start|stop|restart|logs|status]
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置
PROJECT_NAME="siteproxy"
COMPOSE_FILE="docker-compose.yml"
ENV_FILE=".env"
ENV_EXAMPLE=".env.example"
# 打印带颜色的消息
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# 打印标题
print_header() {
echo ""
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE} $1${NC}"
echo -e "${BLUE}================================${NC}"
echo ""
}
# 检查依赖
check_dependencies() {
print_info "Checking dependencies..."
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose is not installed"
exit 1
fi
print_success "All dependencies found"
}
# 检查环境文件
check_env_file() {
print_info "Checking environment configuration..."
if [ ! -f "$ENV_FILE" ]; then
print_warning "$ENV_FILE not found"
if [ -f "$ENV_EXAMPLE" ]; then
print_info "Copying $ENV_EXAMPLE to $ENV_FILE"
cp "$ENV_EXAMPLE" "$ENV_FILE"
print_warning "Please edit $ENV_FILE and configure your settings"
print_warning "Especially change AUTH_PASSWORD and SESSION_SECRET"
exit 1
else
print_error "$ENV_EXAMPLE not found"
exit 1
fi
fi
# 检查是否使用默认密码
if grep -q "your_secure_password_here" "$ENV_FILE"; then
print_error "Default password detected in $ENV_FILE"
print_warning "Please change AUTH_PASSWORD before deploying"
exit 1
fi
if grep -q "change_this_to_random_string" "$ENV_FILE"; then
print_error "Default session secret detected in $ENV_FILE"
print_warning "Please change SESSION_SECRET before deploying"
exit 1
fi
print_success "Environment configuration OK"
}
# 启动服务
start_service() {
print_header "Starting $PROJECT_NAME"
check_dependencies
check_env_file
print_info "Building and starting containers..."
docker-compose -f "$COMPOSE_FILE" up -d --build
print_success "Service started successfully"
echo ""
print_info "Service is running at: http://localhost:8080"
print_info "View logs with: ./deploy.sh logs"
print_info "Check status with: ./deploy.sh status"
}
# 停止服务
stop_service() {
print_header "Stopping $PROJECT_NAME"
print_info "Stopping containers..."
docker-compose -f "$COMPOSE_FILE" down
print_success "Service stopped"
}
# 重启服务
restart_service() {
print_header "Restarting $PROJECT_NAME"
stop_service
sleep 2
start_service
}
# 查看日志
view_logs() {
print_header "Viewing $PROJECT_NAME Logs"
print_info "Press Ctrl+C to exit"
echo ""
docker-compose -f "$COMPOSE_FILE" logs -f --tail=100
}
# 查看状态
check_status() {
print_header "$PROJECT_NAME Status"
if docker-compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
print_success "Service is running"
echo ""
docker-compose -f "$COMPOSE_FILE" ps
echo ""
# 检查健康状态
if docker-compose -f "$COMPOSE_FILE" ps | grep -q "healthy"; then
print_success "Health check: PASSED"
else
print_warning "Health check: PENDING or FAILED"
fi
# 显示资源使用
echo ""
print_info "Resource usage:"
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" $(docker-compose -f "$COMPOSE_FILE" ps -q)
else
print_warning "Service is not running"
echo ""
docker-compose -f "$COMPOSE_FILE" ps
fi
}
# 更新服务
update_service() {
print_header "Updating $PROJECT_NAME"
print_info "Pulling latest changes..."
git pull
print_info "Rebuilding containers..."
docker-compose -f "$COMPOSE_FILE" build --no-cache
print_info "Restarting service..."
docker-compose -f "$COMPOSE_FILE" up -d
print_success "Update complete"
}
# 清理
cleanup() {
print_header "Cleaning up $PROJECT_NAME"
print_warning "This will remove all containers, volumes, and images"
read -p "Are you sure? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Stopping and removing containers..."
docker-compose -f "$COMPOSE_FILE" down -v
print_info "Removing images..."
docker-compose -f "$COMPOSE_FILE" down --rmi all
print_success "Cleanup complete"
else
print_info "Cleanup cancelled"
fi
}
# 显示帮助
show_help() {
echo "Usage: ./deploy.sh [command]"
echo ""
echo "Commands:"
echo " start Start the service"
echo " stop Stop the service"
echo " restart Restart the service"
echo " logs View service logs"
echo " status Check service status"
echo " update Update and restart service"
echo " cleanup Remove all containers and images"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " ./deploy.sh start"
echo " ./deploy.sh logs"
echo " ./deploy.sh status"
}
# 主逻辑
main() {
case "${1:-start}" in
start)
start_service
;;
stop)
stop_service
;;
restart)
restart_service
;;
logs)
view_logs
;;
status)
check_status
;;
update)
update_service
;;
cleanup)
cleanup
;;
help|--help|-h)
show_help
;;
*)
print_error "Unknown command: $1"
echo ""
show_help
exit 1
;;
esac
}
# 执行主函数
main "$@"