138 lines
4.5 KiB
Bash
138 lines
4.5 KiB
Bash
#!/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卸载完成 =====" |