跳到主要内容
lanzai.co
返回

Astro 博客部署到服务器(nginx)

Astro 构建出的纯静态站点非常适合放到 nginx 上。

本地构建

npm install
npm run build
# 产物在 dist/

构建前确认 astro.config.mjs 里的 site 是真实域名,否则 sitemap 和 hreflang 链接会指向错误地址。

上传到服务器

rsync -avz --delete dist/ user@server:/var/www/blog/

nginx 站点配置

/etc/nginx/sites-available/blog.conf:

server {
    listen 80;
    server_name blog.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name blog.example.com;

    root /var/www/blog;
    index index.html;

    gzip on;
    gzip_types text/css application/javascript application/json image/svg+xml;

    # 静态资源长缓存
    location ~* \.(js|css|png|jpg|svg|woff2|ico)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # 干净 URL 的支持
    location / {
        try_files $uri $uri/ $uri.html =404;
    }
}

启用并签发证书

sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d blog.example.com

自动更新流程

服务器上写一个部署脚本 deploy.sh:

#!/usr/bin/env bash
set -e
cd /path/to/blog
git pull
npm ci
npm run build
rsync -avz --delete dist/ /var/www/blog/

配合 cron 或 Webhook 即可实现”推送即发布”。

常见问题


分享这篇文章:

上一篇
besttrace.sh 回程路由一键测试脚本
下一篇
acme.sh 安装与 Cloudflare 域名自动续签