astro-yukunhh-blog/deploy/ip-preview.sh
2026-08-27 22:02:30 +08:00

107 lines
3.9 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
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"
# 备案期间评论区用 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 ""
echo "✓ 完成!访问 http://${REMOTE_HOST}:8321"
echo " 备案完成后ssh 到服务器执行 sudo rm /etc/nginx/conf.d/ip-preview.conf && sudo systemctl reload nginx 即可移除"