#!/bin/bash # PolyHermes 一体化部署脚本 # 将前后端一起部署到一个 Docker 容器中 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印信息 info() { echo -e "${GREEN}[INFO]${NC} $1" } warn() { echo -e "${YELLOW}[WARN]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 Docker 环境 check_docker() { if ! command -v docker &> /dev/null; then error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null; then error "Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi info "Docker 环境检查通过" } # 生成随机字符串 generate_random_string() { local length=${1:-32} openssl rand -hex $length 2>/dev/null || \ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $length | head -n 1 } # 创建 .env 文件(如果不存在) create_env_file() { if [ ! -f ".env" ]; then warn ".env 文件不存在,创建示例文件..." # 生成随机值 DB_PASSWORD=$(generate_random_string 32) JWT_SECRET=$(generate_random_string 64) ADMIN_RESET_KEY=$(generate_random_string 32) cat > .env </dev/null || echo "dev") # 如果分支名包含 /,替换为 -(Docker tag 不支持 /) DOCKER_VERSION=$(echo "$CURRENT_BRANCH" | tr '/' '-') info "构建 Docker 镜像(本地构建,版本号: ${DOCKER_VERSION})..." # 设置构建参数(通过环境变量传递给 docker-compose.yml) export VERSION=${DOCKER_VERSION} export GIT_TAG=${DOCKER_VERSION} export GITHUB_REPO_URL=https://github.com/WrBug/PolyHermes docker-compose build fi info "启动服务..." docker-compose up -d info "等待服务启动..." sleep 5 info "检查服务状态..." docker-compose ps info "查看日志: docker-compose logs -f" info "停止服务: docker-compose down" } # 主函数 main() { echo "==========================================" echo " PolyHermes 一体化部署脚本" echo "==========================================" echo "" # 解析参数 if [ "$1" = "--use-docker-hub" ] || [ "$1" = "-d" ]; then export USE_DOCKER_HUB=true info "将使用 Docker Hub 镜像(生产环境推荐)" echo "" fi check_docker create_env_file deploy echo "" info "部署完成!" info "访问地址: http://localhost:${SERVER_PORT:-80}" echo "" if [ "$USE_DOCKER_HUB" != "true" ]; then CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "dev") DOCKER_VERSION=$(echo "$CURRENT_BRANCH" | tr '/' '-') info "提示:本地构建的版本号为当前分支名: ${DOCKER_VERSION}" info "生产环境推荐使用 Docker Hub 镜像:" info " ./deploy.sh --use-docker-hub" info " 或修改 docker-compose.yml 使用 image: wrbug/polyhermes:latest" fi } main "$@"