#!/bin/bash # 部署Gitea的脚本 # 作者:AI助手 # 日期:2025-03-13 set -e echo "===== 开始部署Gitea =====" # 设置变量 DOMAIN="gitea.mzh.one" DNMP_DIR="/opt/dnmp" NGINX_CONF_DIR="$DNMP_DIR/services/nginx/conf.d" SSL_DIR="$DNMP_DIR/services/nginx/ssl/$DOMAIN" WWW_DIR="$DNMP_DIR/www" # 自动检测MySQL容器 MYSQL_CONTAINER="mysql" # 默认MySQL容器名 AUTO_DETECT_MYSQL=$(docker ps | grep -E 'mysql|mariadb' | head -1 | awk '{print $1}') if [ ! -z "$AUTO_DETECT_MYSQL" ]; then DETECTED_MYSQL_NAME=$(docker inspect --format='{{.Name}}' $AUTO_DETECT_MYSQL | sed 's/\///') MYSQL_CONTAINER=$DETECTED_MYSQL_NAME echo "自动检测到MySQL容器: $MYSQL_CONTAINER" fi # 自动检测Nginx容器 NGINX_CONTAINER="nginx" # 默认Nginx容器名 AUTO_DETECT_NGINX=$(docker ps | grep nginx | head -1 | awk '{print $1}') if [ ! -z "$AUTO_DETECT_NGINX" ]; then DETECTED_NGINX_NAME=$(docker inspect --format='{{.Name}}' $AUTO_DETECT_NGINX | sed 's/\///') NGINX_CONTAINER=$DETECTED_NGINX_NAME echo "自动检测到Nginx容器: $NGINX_CONTAINER" fi # 1. 创建必要的目录 echo "1. 创建必要的目录..." mkdir -p conf/nginx/conf.d conf/gitea data/gitea data/mysql mkdir -p $SSL_DIR mkdir -p $WWW_DIR # 2. 确保MySQL数据库已准备好 echo "2. 准备MySQL数据库..." # 假设MySQL已经在DNMP环境中运行 # 创建gitea数据库和用户 cat < create_db.sql CREATE DATABASE IF NOT EXISTS gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'gitea'@'%' IDENTIFIED BY 'gitea_password'; GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'%'; FLUSH PRIVILEGES; EOF echo "请手动执行以下命令创建数据库(如果尚未创建):" echo "docker exec -i $MYSQL_CONTAINER mysql -uroot -p < create_db.sql" # 3. 申请SSL证书 echo "3. 申请SSL证书..." echo "请确保域名$DOMAIN已正确解析到服务器IP" echo "请手动执行以下命令申请证书:" echo "certbot certonly --webroot -w $WWW_DIR -d $DOMAIN" echo "然后复制证书到指定目录:" echo "cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $SSL_DIR/$DOMAIN.pem" echo "cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $SSL_DIR/$DOMAIN.key" # 4. 启动Gitea服务 echo "4. 启动Gitea服务..." docker-compose up -d echo "5. 配置Nginx..." # 假设Nginx配置文件已经创建好 echo "请确保Nginx配置文件已正确加载" echo "请将gitea.conf复制到DNMP的nginx配置目录:" echo "cp conf/nginx/conf.d/$DOMAIN.conf $NGINX_CONF_DIR/" echo "然后重启Nginx:docker exec -it $NGINX_CONTAINER nginx -s reload" echo "===== Gitea部署完成 =====" echo "请访问 https://$DOMAIN 完成初始化设置" echo "初始化时,请使用以下数据库设置:" echo "数据库类型:MySQL" echo "主机:$MYSQL_CONTAINER:3306" echo "用户名:gitea" echo "密码:gitea_password" echo "数据库名:gitea" echo "注意:首次访问时,您将被引导完成Gitea的初始化设置,包括创建管理员账户"