175 lines
4.7 KiB
Bash
175 lines
4.7 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# Sentry Self-Hosted 部署脚本
|
|
# =============================================================================
|
|
# 使用方法:
|
|
# ./deploy.sh init # 首次初始化 (创建管理员账号)
|
|
# ./deploy.sh up # 启动服务
|
|
# ./deploy.sh down # 停止服务
|
|
# ./deploy.sh logs # 查看日志
|
|
# ./deploy.sh status # 查看状态
|
|
# ./deploy.sh upgrade # 升级 Sentry
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 检查 .env 文件
|
|
check_env() {
|
|
if [ ! -f .env ]; then
|
|
echo -e "${YELLOW}未找到 .env 文件,正在从模板创建...${NC}"
|
|
cp .env.example .env
|
|
|
|
# 生成随机密钥
|
|
RANDOM_KEY=$(openssl rand -hex 32 2>/dev/null || head -c 64 /dev/urandom | base64 | tr -d '\n' | head -c 64)
|
|
sed -i "s/please_change_this_to_a_random_string_at_least_50_chars/$RANDOM_KEY/" .env
|
|
|
|
echo -e "${GREEN}.env 文件已创建,请检查并修改配置后重新运行${NC}"
|
|
echo -e "${YELLOW}特别注意修改: SENTRY_SECRET_KEY 和 SENTRY_DB_PASSWORD${NC}"
|
|
fi
|
|
}
|
|
|
|
# 初始化 Sentry (首次运行)
|
|
init() {
|
|
echo -e "${GREEN}=== 初始化 Sentry ===${NC}"
|
|
check_env
|
|
|
|
echo -e "${YELLOW}1. 启动依赖服务...${NC}"
|
|
docker compose up -d sentry-redis sentry-postgres sentry-kafka sentry-zookeeper sentry-clickhouse
|
|
|
|
echo -e "${YELLOW}等待服务就绪...${NC}"
|
|
sleep 30
|
|
|
|
echo -e "${YELLOW}2. 运行数据库迁移...${NC}"
|
|
docker compose run --rm sentry-web upgrade --noinput
|
|
|
|
echo -e "${YELLOW}3. 创建管理员账号...${NC}"
|
|
echo -e "${GREEN}请按提示输入管理员邮箱和密码${NC}"
|
|
docker compose run --rm sentry-web createuser --superuser
|
|
|
|
echo -e "${GREEN}=== 初始化完成 ===${NC}"
|
|
echo -e "${YELLOW}运行 './deploy.sh up' 启动所有服务${NC}"
|
|
}
|
|
|
|
# 启动服务
|
|
up() {
|
|
echo -e "${GREEN}=== 启动 Sentry ===${NC}"
|
|
check_env
|
|
docker compose up -d
|
|
echo -e "${GREEN}Sentry 已启动${NC}"
|
|
echo -e "Web UI: http://localhost:${SENTRY_PORT:-9000}"
|
|
echo -e "Relay: http://localhost:${SENTRY_RELAY_PORT:-3000}"
|
|
}
|
|
|
|
# 停止服务
|
|
down() {
|
|
echo -e "${YELLOW}=== 停止 Sentry ===${NC}"
|
|
docker compose down
|
|
echo -e "${GREEN}Sentry 已停止${NC}"
|
|
}
|
|
|
|
# 查看日志
|
|
logs() {
|
|
SERVICE=${1:-}
|
|
if [ -z "$SERVICE" ]; then
|
|
docker compose logs -f --tail=100
|
|
else
|
|
docker compose logs -f --tail=100 "$SERVICE"
|
|
fi
|
|
}
|
|
|
|
# 查看状态
|
|
status() {
|
|
echo -e "${GREEN}=== Sentry 服务状态 ===${NC}"
|
|
docker compose ps
|
|
}
|
|
|
|
# 升级
|
|
upgrade() {
|
|
echo -e "${YELLOW}=== 升级 Sentry ===${NC}"
|
|
|
|
echo "1. 停止服务..."
|
|
docker compose down
|
|
|
|
echo "2. 拉取最新镜像..."
|
|
docker compose pull
|
|
|
|
echo "3. 运行数据库迁移..."
|
|
docker compose run --rm sentry-web upgrade --noinput
|
|
|
|
echo "4. 启动服务..."
|
|
docker compose up -d
|
|
|
|
echo -e "${GREEN}=== 升级完成 ===${NC}"
|
|
}
|
|
|
|
# 生成 Relay 凭证
|
|
generate_relay_credentials() {
|
|
echo -e "${YELLOW}=== 生成 Relay 凭证 ===${NC}"
|
|
docker compose run --rm sentry-relay credentials generate --stdout > relay/credentials.json
|
|
echo -e "${GREEN}凭证已生成到 relay/credentials.json${NC}"
|
|
}
|
|
|
|
# 帮助信息
|
|
help() {
|
|
echo "Sentry Self-Hosted 部署脚本"
|
|
echo ""
|
|
echo "用法: ./deploy.sh <命令>"
|
|
echo ""
|
|
echo "命令:"
|
|
echo " init 首次初始化 (创建管理员账号)"
|
|
echo " up 启动所有服务"
|
|
echo " down 停止所有服务"
|
|
echo " logs [service] 查看日志 (可指定服务)"
|
|
echo " status 查看服务状态"
|
|
echo " upgrade 升级 Sentry"
|
|
echo " generate-relay 生成 Relay 凭证"
|
|
echo " help 显示此帮助信息"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " ./deploy.sh init # 首次安装"
|
|
echo " ./deploy.sh up # 启动"
|
|
echo " ./deploy.sh logs sentry-web # 查看 Web 服务日志"
|
|
}
|
|
|
|
# 主入口
|
|
case "${1:-help}" in
|
|
init)
|
|
init
|
|
;;
|
|
up)
|
|
up
|
|
;;
|
|
down)
|
|
down
|
|
;;
|
|
logs)
|
|
logs "$2"
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
upgrade)
|
|
upgrade
|
|
;;
|
|
generate-relay)
|
|
generate_relay_credentials
|
|
;;
|
|
help|--help|-h)
|
|
help
|
|
;;
|
|
*)
|
|
echo -e "${RED}未知命令: $1${NC}"
|
|
help
|
|
exit 1
|
|
;;
|
|
esac
|