fix: update deploy.sh to generate .env with MySQL configuration

- Generate .env with random MySQL password on first deploy
- Update PORT in .env instead of modifying docker-compose.yml directly
- Wait for MySQL container healthcheck before checking app status
- Skip .env generation if file already exists
This commit is contained in:
2026-06-20 22:52:27 +08:00
parent 00c1839635
commit 95519963c3
+64 -12
View File
@@ -78,36 +78,89 @@ setup_go_proxy() {
} }
# ---------------------------------------------------------- # ----------------------------------------------------------
# 4. 配置服务端口 # 4. 生成 .env 配置文件
# ---------------------------------------------------------- # ----------------------------------------------------------
setup_port() { setup_env() {
local port="${1:-9050}" local port="${1:-9050}"
local compose_file="docker-compose.yml"
info "配置服务端口为 ${port}..." if [ -f ".env" ]; then
sed -i "s/- \"8080:8080\"/- \"${port}:8080\"/" "$compose_file" warn ".env 文件已存在,跳过生成"
info "端口配置完成: ${port}" # 确保端口是最新的
if grep -q "^PORT=" .env; then
sed -i "s/^PORT=.*/PORT=${port}/" .env
else
echo "PORT=${port}" >> .env
fi
return
fi
info "生成 .env 配置文件..."
# 生成随机 MySQL 密码
local mysql_password
mysql_password=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9' | head -c 20)
cat > .env <<EOF
# Server
PORT=${port}
GIN_MODE=release
SESSION_SECRET=
# Data directory
DATA_DIR=data
# MySQL
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=${mysql_password}
MYSQL_DATABASE=pr_helper
EOF
info ".env 文件已生成"
info "MySQL 密码: ${mysql_password}"
warn "请妥善保管 .env 文件中的数据库密码!"
} }
# ---------------------------------------------------------- # ----------------------------------------------------------
# 5. 构建并启动服务 # 5. 构建并启动服务
# ---------------------------------------------------------- # ----------------------------------------------------------
build_and_start() { build_and_start() {
local port="${1:-9050}"
info "构建 Docker 镜像(首次可能需要几分钟)..." info "构建 Docker 镜像(首次可能需要几分钟)..."
docker compose build docker compose build
info "启动服务..." info "启动服务..."
docker compose up -d docker compose up -d
info "等待服务启动..." info "等待 MySQL 就绪..."
local retries=30
while [ $retries -gt 0 ]; do
if docker compose exec -T mysql mysqladmin ping -h localhost --silent 2>/dev/null; then
info "MySQL 就绪"
break
fi
retries=$((retries - 1))
sleep 2
done
if [ $retries -eq 0 ]; then
warn "MySQL 启动超时,继续等待应用自行重连..."
sleep 10
fi
info "等待应用启动..."
sleep 3 sleep 3
if docker compose ps | grep -q "running\|Up"; then if docker compose ps | grep -q "running\|Up"; then
info "==========================================" info "=========================================="
info " PR-Helper 部署成功!" info " PR-Helper 部署成功!"
info "==========================================" info "=========================================="
info "访问地址: http://$(hostname -I | awk '{print $1}'):${PORT:-9050}" info "访问地址: http://$(hostname -I | awk '{print $1}'):${port}"
info "本地访问: http://localhost:${PORT:-9050}" info "本地访问: http://localhost:${port}"
info ""
info "数据库配置: .env"
info "" info ""
info "常用命令:" info "常用命令:"
info " 查看日志: docker compose logs -f" info " 查看日志: docker compose logs -f"
@@ -124,7 +177,6 @@ build_and_start() {
# ---------------------------------------------------------- # ----------------------------------------------------------
main() { main() {
local port="${1:-9050}" local port="${1:-9050}"
export PORT="$port"
info "开始部署 PR-Helper..." info "开始部署 PR-Helper..."
info "目标端口: ${port}" info "目标端口: ${port}"
@@ -132,8 +184,8 @@ main() {
check_docker check_docker
setup_docker_mirror setup_docker_mirror
setup_go_proxy setup_go_proxy
setup_port "$port" setup_env "$port"
build_and_start build_and_start "$port"
} }
main "$@" main "$@"