- ci.yml 增加 deploy job:verify 全绿后 rsync 到 /opt/kanban/dist 并做线上自检 - runner 与站点同机(host 模式),部署直接写本地目录,不依赖 SSH 密钥与 Secrets - 站点目录是容器 bind mount,必须原地同步;manual deploy.sh 同步改为 rsync 语义 - 新增 deploy/:容器版 nginx 配置、runner 配置与 systemd 单元、服务器初始化脚本 - README 更新实际部署架构(1Panel + Nginx Proxy Manager 反代)与 runner 说明
74 lines
2.3 KiB
Bash
74 lines
2.3 KiB
Bash
#!/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"
|