astro-yukunhh-blog/deploy/ip-preview.sh

108 lines
3.9 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# 备案期间:临时用 http://<服务器IP>:8321 访问博客(不走域名/80/443
#
# 用法: ./deploy/ip-preview.sh
# 前置: ① 服务器安全组/防火墙放行 TCP 8321
# ② 本机配好到服务器的 SSH 免密REMOTE_HOST 连不通时改成服务器 IP
# 幂等可重跑:每次重新构建同步 + 重写 8321 配置。
set -euo pipefail
# ====== 配置区(与 deploy.sh 保持一致ssh 不通时 REMOTE_HOST 填服务器 IP ======
REMOTE_USER="root" # SSH 用户(服务器是 ubuntu 用户的话改成 ubuntu
2026-08-27 14:02:30 +00:00
REMOTE_HOST="106.54.37.223" # VPS 地址(备案期间用 IP备案完成后改回 sausagetoast.cloud
REMOTE_DIR="/var/www/yukun" # 博客站点根目录
# ==============================================================================
SSH_TARGET="${REMOTE_USER}@${REMOTE_HOST}"
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
SSH_OPTS="-o StrictHostKeyChecking=accept-new"
echo "==> [1/3] 构建站点 (astro build)..."
cd "$ROOT_DIR"
2026-08-27 14:02:30 +00:00
# 备案期间评论区用 IP 直连(无需子域名):
# REMOTE_HOST 是 IPv4 时自动注入评论后端地址 http://<IP>:8080
# 如需自定义(比如端口不同),可提前手动 export PUBLIC_ARTALK_SERVER 覆盖
if [[ "$REMOTE_HOST" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] && [ -z "${PUBLIC_ARTALK_SERVER:-}" ]; then
export PUBLIC_ARTALK_SERVER="http://${REMOTE_HOST}:8080"
echo " 评论服务地址: ${PUBLIC_ARTALK_SERVER} (deploy/artalk/)"
fi
npm run build
[ -d "$ROOT_DIR/dist" ] || { echo "✗ 构建失败dist 不存在"; exit 1; }
echo "==> [2/3] 同步到 ${SSH_TARGET}:${REMOTE_DIR} ..."
rsync -avz --delete --human-readable \
"$ROOT_DIR/dist/" "${SSH_TARGET}:${REMOTE_DIR}/"
echo "==> 生成 8321 访问配置并上传 ..."
cat > /tmp/yukun-ip-preview.conf <<'NGINX'
# 备案期间:临时用 http://<服务器IP>:8321 访问博客(由 deploy/ip-preview.sh 生成)
# 不监听 80/443与正式站点配置互不干扰备案完成后删除此文件即可。
server {
listen 8321;
server_name _;
root /var/www/yukun;
index index.html;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
image/svg+xml;
location ~* \.(?:css|js|woff2?|ttf|otf|svg|png|jpg|jpeg|gif|webp|ico|avif)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
location = /sitemap-index.xml { add_header Cache-Control "no-cache"; }
location ~ ^/sitemap.* { add_header Cache-Control "no-cache"; }
location / {
try_files $uri $uri/ $uri.html =404;
}
error_page 404 /404.html;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
access_log /var/log/nginx/yukun.access.log;
error_log /var/log/nginx/yukun.error.log;
}
NGINX
scp $SSH_OPTS /tmp/yukun-ip-preview.conf "$SSH_TARGET:/tmp/yukun-ip-preview.conf"
rm -f /tmp/yukun-ip-preview.conf
echo "==> [3/3] 远端启用 8321 配置 ..."
ssh $SSH_OPTS "$SSH_TARGET" "bash -s" <<'REMOTE'
set -euo pipefail
SUDO=""
[ "$(id -u)" -ne 0 ] && SUDO="sudo"
$SUDO cp /tmp/yukun-ip-preview.conf /etc/nginx/conf.d/ip-preview.conf
rm -f /tmp/yukun-ip-preview.conf
echo "==> 测试 nginx 配置 ..."
$SUDO nginx -t
echo "==> reload nginx ..."
$SUDO systemctl reload nginx || $SUDO systemctl restart nginx
REMOTE
echo ""
2026-08-27 14:02:30 +00:00
echo "✓ 完成!访问 http://${REMOTE_HOST}:8321"
echo " 备案完成后ssh 到服务器执行 sudo rm /etc/nginx/conf.d/ip-preview.conf && sudo systemctl reload nginx 即可移除"