GiteaDocker/uninstall.sh

138 lines
4.5 KiB
Bash
Raw 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
# 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 <<EOF
DROP DATABASE IF EXISTS gitea;
DROP USER IF EXISTS 'gitea'@'%';
FLUSH PRIVILEGES;
EOF
else
echo "警告: MySQL容器未找到请手动删除Gitea数据库" 1>&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卸载完成 ====="