- Astro 5 static blog, zero runtime JS - Obsidian wikilink remark plugin (slug matches Astro content collection) - KaTeX math rendering, local search, TOC, archives, tags - 5 posts on math/physics/ML topics - deploy scripts for nginx + certbot + rsync
98 lines
3.4 KiB
Bash
Executable file
98 lines
3.4 KiB
Bash
Executable file
#!/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="sausagetoast.cloud" # VPS 地址(备案期间建议填服务器 IP)
|
||
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"
|
||
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://<服务器IP>:8321"
|
||
echo " 备案完成后:ssh 到服务器执行 sudo rm /etc/nginx/conf.d/ip-preview.conf && sudo systemctl reload nginx 即可移除"
|