在 Proxmox VE (PVE) 的 LXC 容器中部署 AstroPaper 博客是一个非常棒的选择。LXC 极其轻量(通常只需要分配 1 核 CPU 和 512MB 内存即可流畅运行),非常适合用来跑个人博客。
AstroPaper 是基于 Astro 框架构建的,默认采用的是静态站点生成 (SSG) 模式。这意味着它最终会被编译成纯粹的 HTML、CSS 和 JavaScript 静态文件。
因此,最推荐、最稳定且资源占用极低的方法是:编译出静态文件后,使用 Nginx 或 Caddy 等轻量级 Web 服务器进行托管。
这里为你提供两种最主流的部署思路,推荐根据你的习惯选择:
方案一:在 LXC 中直接编译并用 Nginx 托管(适合新手,All-in-One)
这种方法会将源码拉取到 LXC 容器中,在容器内进行编译,然后用 Nginx 托管。
1. 准备 LXC 容器环境 建议创建一个 Debian 12 或 Ubuntu 22.04/24.04 的 LXC 容器。进入容器控制台,更新系统:
apt update && apt upgrade -y
2. 安装必要的基础软件 你需要安装 Nginx 用来做 Web 服务器,安装 Git 用来拉取代码,以及安装 Node.js(用于编译 Astro)。
# 安装 Nginx 和 Git
apt install nginx git -y
# 安装 Node.js (推荐使用 NodeSource 安装较新版本,如 Node 20)
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
3. 拉取代码并编译
# 将代码克隆到你的用户目录或 /var/www 目录下
cd /var/www
git clone <你的 AstroPaper 仓库地址> astropaper
cd astropaper
# 安装依赖并打包构建
npm install
npm run build
构建完成后,你的项目目录下会生成一个 dist 文件夹,这就是最终的静态网站内容。
4. 配置 Nginx
将 Nginx 的根目录指向刚才生成的 dist 文件夹。
nano /etc/nginx/sites-available/astropaper
写入以下配置(将 your_domain.com 替换为你的域名或 LXC 的 IP 地址):
server {
listen 80;
server_name your_domain.com; # 填入你的域名或 LXC 的内网 IP
root /var/www/astropaper/dist; # 指向你刚刚 build 出来的 dist 目录
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
启用配置并重启 Nginx:
ln -s /etc/nginx/sites-available/astropaper /etc/nginx/sites-enabled/
nginx -t # 测试配置是否正确
systemctl restart nginx
方案二:本地编译 + 上传到纯 Nginx LXC 容器(进阶推荐,极致轻量)
这种方法更符合 DevOps 的理念。你的 LXC 容器不需要安装 Node.js,只安装 Nginx,把容器打造成一个纯粹的静态 Web 服务器。
- 在本地电脑上完成文章的编写。
- 在本地电脑上运行
npm run build。 - 通过
rsync或scp命令,将本地生成的dist文件夹推送到 LXC 容器的/var/www/astropaper/dist目录下。 示例命令 (在本地终端运行):rsync -avz --delete dist/ root@<LXC_IP>:/var/www/astropaper/ - LXC 容器内的 Nginx 配置与【方案一】完全相同。
为什么推荐方案二?
- 极致轻量:LXC 容器内剥离了 Node.js 等开发环境,内存占用可以低至 50MB-100MB 左右。
- 安全性高:生产环境中没有多余的依赖和源码,即使被攻破也只是纯静态文件。
- 方便配合 CI/CD:以后可以用 GitHub Actions 自动完成“拉取 -> 编译 -> 部署到 LXC”的流水线。
补充说明:关于 SSR (服务器端渲染)
如果你修改了 AstroPaper 的默认配置,启用了 Node.js Adapter 进行 SSR(比如接入了动态数据库或 API),那么你不能只用 Nginx 托管。你需要用 PM2 等进程守护工具在 LXC 内运行 Node.js 服务,然后再用 Nginx 做反向代理。不过对于 99% 的 AstroPaper 博客来说,保持默认的纯静态 (SSG) 就足够了。
你更倾向于把编译过程(运行 npm run build)放在本地电脑上,还是直接在 LXC 容器里面进行呢?