Skip to content
JKX'home|金开心的博客
Go back

lxc部署博客推荐方案

Updated:

在 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 服务器。

  1. 在本地电脑上完成文章的编写。
  2. 在本地电脑上运行 npm run build
  3. 通过 rsyncscp 命令,将本地生成的 dist 文件夹推送到 LXC 容器的 /var/www/astropaper/dist 目录下。 示例命令 (在本地终端运行):
    rsync -avz --delete dist/ root@<LXC_IP>:/var/www/astropaper/
  4. LXC 容器内的 Nginx 配置与【方案一】完全相同。

为什么推荐方案二?


补充说明:关于 SSR (服务器端渲染) 如果你修改了 AstroPaper 的默认配置,启用了 Node.js Adapter 进行 SSR(比如接入了动态数据库或 API),那么你不能只用 Nginx 托管。你需要用 PM2 等进程守护工具在 LXC 内运行 Node.js 服务,然后再用 Nginx 做反向代理。不过对于 99% 的 AstroPaper 博客来说,保持默认的纯静态 (SSG) 就足够了。

你更倾向于把编译过程(运行 npm run build)放在本地电脑上,还是直接在 LXC 容器里面进行呢?


Share this post on:

Previous Post
VPP连接虚机实验