#!/usr/bin/env bash # 目标服务器初始化(只需执行一次) # # 安装 Nginx、建站点目录、写入 deploy/nginx.conf 对应的站点配置并 reload。 # 不会动 Nginx 里已有的其它站点。 # # 用法(本机执行): # scp deploy/server-init.sh deploy/nginx.conf root@<服务器IP>:/tmp/kanban-deploy/ # ssh root@<服务器IP> 'bash /tmp/kanban-deploy/server-init.sh kanban.example.com' # # 参数: # $1 域名或 IP,写进 server_name;省略则沿用 nginx.conf 里的值 # 环境变量: # WEB_ROOT 站点目录,默认 /var/www/kanban(要和 CI 里的 DEPLOY_PATH 一致) set -euo pipefail DOMAIN="${1:-}" WEB_ROOT="${WEB_ROOT:-/var/www/kanban}" CONF_DEST=/etc/nginx/conf.d/kanban.conf CONF_SRC="$(cd "$(dirname "$0")" && pwd)/nginx.conf" if [ "$(id -u)" -ne 0 ]; then echo "请用 root 执行(sudo bash $0 ${DOMAIN:-})" >&2 exit 1 fi if [ ! -f "$CONF_SRC" ]; then echo "找不到 $CONF_SRC —— server-init.sh 和 nginx.conf 需要放在同一目录" >&2 exit 1 fi echo "==> 安装 Nginx" if command -v nginx >/dev/null 2>&1; then echo " 已安装:$(nginx -v 2>&1)" elif command -v apt-get >/dev/null 2>&1; then apt-get update -qq apt-get install -y nginx elif command -v dnf >/dev/null 2>&1; then dnf install -y nginx else yum install -y nginx fi echo "==> 创建站点目录 $WEB_ROOT" mkdir -p "$WEB_ROOT" echo "==> 写入站点配置 $CONF_DEST" if [ -n "$DOMAIN" ]; then # 只替换 server_name 那一行,其余配置保持与仓库一致 sed -E "s/^([[:space:]]*)server_name[^;]*;/\1server_name ${DOMAIN};/" "$CONF_SRC" > "$CONF_DEST" else cp "$CONF_SRC" "$CONF_DEST" fi nginx -t systemctl enable nginx >/dev/null 2>&1 || true systemctl reload nginx 2>/dev/null || systemctl restart nginx if systemctl is-active --quiet firewalld 2>/dev/null; then echo "==> firewalld 放行 80/443" firewall-cmd --permanent --add-service=http >/dev/null firewall-cmd --permanent --add-service=https >/dev/null firewall-cmd --reload >/dev/null fi echo echo "完成。站点根目录:$WEB_ROOT" echo "server_name:${DOMAIN:-沿用 nginx.conf 默认值}" echo echo "还需要做两件事:" echo " 1. 腾讯云控制台 → 防火墙/安全组,放行 80(上 HTTPS 后再放行 443)" echo " 2. 把 CI 部署用的公钥追加到 ~/.ssh/authorized_keys"