#!/bin/bash # Gitea卸载脚本 # 作者:AI助手 # 日期:2025-03-13 set -e echo "===== Gitea卸载脚本 =====" echo "此脚本将卸载Gitea服务及其相关配置" echo "警告:此操作将删除Gitea的所有数据,请确保已备份重要数据" # 检查是否有root权限 if [ "$(id -u)" != "0" ]; then echo "此脚本需要root权限运行" 1>&2 exit 1 fi # 检查Nginx容器 NGINX_CONTAINER=$(docker ps | grep nginx | head -1 | awk '{print $1}') if [ -z "$NGINX_CONTAINER" ]; then echo "警告: Nginx容器未找到,部分卸载步骤可能无法完成" 1>&2 else NGINX_CONTAINER_NAME=$(docker inspect --format='{{.Name}}' $NGINX_CONTAINER | sed 's/\///') echo "找到Nginx容器: $NGINX_CONTAINER_NAME" # 检查Nginx容器的挂载点 echo "检查Nginx容器的挂载点..." SSL_MOUNT=$(docker inspect -f '{{range .Mounts}}{{if eq .Destination "/ssl"}}{{.Source}}{{end}}{{end}}' $NGINX_CONTAINER) CONF_MOUNT=$(docker inspect -f '{{range .Mounts}}{{if eq .Destination "/etc/nginx/conf.d"}}{{.Source}}{{end}}{{end}}' $NGINX_CONTAINER) if [ -z "$SSL_MOUNT" ]; then echo "警告: 未找到Nginx容器的SSL挂载点,将使用默认路径" SSL_MOUNT="/opt/dnmp/services/nginx/ssl" else echo "找到Nginx SSL挂载点: $SSL_MOUNT" fi if [ -z "$CONF_MOUNT" ]; then echo "警告: 未找到Nginx容器的配置挂载点,将使用默认路径" CONF_MOUNT="/opt/dnmp/services/nginx/conf.d" else echo "找到Nginx配置挂载点: $CONF_MOUNT" fi fi # 设置变量 DOMAIN="gitea.mzh.one" NGINX_CONF_DIR="${CONF_MOUNT:-/opt/dnmp/services/nginx/conf.d}" SSL_DIR="${SSL_MOUNT:-/opt/dnmp/services/nginx/ssl}/$DOMAIN" # 询问安装目录 INSTALL_DIR="/opt/gitea" read -p "请输入Gitea的安装目录 [默认: $INSTALL_DIR]: " INPUT_INSTALL_DIR if [ ! -z "$INPUT_INSTALL_DIR" ]; then INSTALL_DIR=$INPUT_INSTALL_DIR fi # 检查安装目录是否存在 if [ ! -d "$INSTALL_DIR" ]; then echo "错误: 安装目录 $INSTALL_DIR 不存在" 1>&2 exit 1 fi # 确认卸载 read -p "确定要卸载Gitea吗?此操作将删除所有数据 [y/N]: " CONFIRM if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then echo "卸载已取消" exit 0 fi # 停止并删除容器 echo "停止并删除Gitea容器..." cd $INSTALL_DIR docker-compose down # 删除Nginx配置 echo "删除Nginx配置..." if [ -f "$NGINX_CONF_DIR/$DOMAIN.conf" ]; then rm -f "$NGINX_CONF_DIR/$DOMAIN.conf" # 重新加载Nginx配置 if [ ! -z "$NGINX_CONTAINER" ]; then echo "重新加载Nginx配置..." docker exec -it $NGINX_CONTAINER nginx -s reload else echo "警告: Nginx容器未找到,请手动重新加载Nginx配置" 1>&2 fi else echo "警告: Nginx配置文件不存在: $NGINX_CONF_DIR/$DOMAIN.conf" fi # 询问是否删除数据库 read -p "是否删除Gitea数据库?[y/N]: " DELETE_DB if [ "$DELETE_DB" == "y" ] || [ "$DELETE_DB" == "Y" ]; then echo "删除Gitea数据库..." MYSQL_CONTAINER=$(docker ps | grep -E 'mysql|mariadb' | head -1 | awk '{print $1}') if [ ! -z "$MYSQL_CONTAINER" ]; then MYSQL_CONTAINER_NAME=$(docker inspect --format='{{.Name}}' $MYSQL_CONTAINER | sed 's/\///') echo "找到MySQL容器: $MYSQL_CONTAINER_NAME" read -sp "请输入MySQL root密码: " MYSQL_ROOT_PASSWORD echo "" docker exec -i $MYSQL_CONTAINER mysql -uroot -p$MYSQL_ROOT_PASSWORD <&2 fi fi # 询问是否删除SSL证书 read -p "是否删除SSL证书?[y/N]: " DELETE_CERT if [ "$DELETE_CERT" == "y" ] || [ "$DELETE_CERT" == "Y" ]; then echo "删除SSL证书..." if [ -d "$SSL_DIR" ]; then rm -rf "$SSL_DIR" echo "SSL证书目录已删除: $SSL_DIR" else echo "警告: SSL证书目录不存在: $SSL_DIR" fi # 询问是否删除Let's Encrypt证书 read -p "是否同时删除Let's Encrypt证书?[y/N]: " DELETE_LE_CERT if [ "$DELETE_LE_CERT" == "y" ] || [ "$DELETE_LE_CERT" == "Y" ]; then certbot delete --cert-name $DOMAIN fi fi # 询问是否删除安装目录 read -p "是否删除安装目录 $INSTALL_DIR?[y/N]: " DELETE_DIR if [ "$DELETE_DIR" == "y" ] || [ "$DELETE_DIR" == "Y" ]; then echo "删除安装目录..." rm -rf $INSTALL_DIR fi echo "===== Gitea卸载完成 ====="