admin 发布的文章

64MB NAT VPS部署Typecho博客完整教程

IPv6 + Cloudflare + Caddy + PHP-FPM + SQLite


一、前言

不少 NAT VPS 配置都很极限:

  • 64MB 内存
  • IPv4 只有端口
  • 提供完整 IPv6
  • 性能一般,但便宜、稳定

这种机器:

  • Docker 基本没戏
  • MySQL 吃内存
  • WordPress 很容易炸

但只要技术栈选对:
Alpine + Caddy + PHP-FPM + SQLite + Typecho
64MB 也能长期稳定运行。
这篇就是一次从 0 到上线的完整实战记录。


二、整体架构

浏览器
↓ HTTPS
Cloudflare(IPv6,橙云)
↓ HTTPS
Caddy(443)
↓ FastCGI
PHP-FPM(127.0.0.1:9000)

Typecho + SQLite

组件选择理由

组件原因
Alpine极简、省内存
Caddy自动 HTTPS,配置简单
PHP-FPM比 Apache/Nginx + mod_php 更省
SQLite单文件数据库
Typecho中文博客里最轻量

三、前置条件

服务器

  • Alpine Linux
  • ≥ 512MB 磁盘
  • 完整 IPv6
  • NAT IPv4(可忽略)

Cloudflare

  • DNS:AAAA → VPS IPv6
  • 状态:Proxied(橙云)
  • SSL/TLS:Full 或 Full (strict)

!!!不要用 Flexible(会无限重定向)


四、系统初始化 & Swap

更新系统

apk update
apk upgrade

开启 swap(防 OOM)

dd if=/dev/zero of=/swapfile bs=1M count=256
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

swap 是保命用的,不是提速工具。

五、安装 PHP-FPM(极限配置)

安装 PHP 及扩展

apk add \
php83 php83-fpm php83-pdo php83-pdo_sqlite php83-sqlite3 \
php83-json php83-mbstring php83-xml php83-curl php83-gd \
php83-ctype php83-session php83-tokenizer php83-fileinfo

启动服务

rc-update add php-fpm83
rc-service php-fpm83 start

限制进程数(关键)

sed -i 's/^pm = .*/pm = static/' /etc/php83/php-fpm.d/www.conf
sed -i 's/^pm.max_children = .*/pm.max_children = 1/' /etc/php83/php-fpm.d/www.conf
rc-service php-fpm83 restart

64MB 只能跑 1 个 PHP worker,不限必炸。

六、安装 Caddy

apk add caddy
rc-update add caddy

七、部署 Typecho

创建目录

mkdir -p /var/www/typecho
cd /var/www/typecho

下载官方版本

apk add unzip
wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip
unzip typecho.zip
rm -f typecho.zip

设置权限

chown -R nobody:nobody /var/www/typecho/usr
chmod -R 755 /var/www/typecho

PHP-FPM 默认以 nobody 运行:

ps -o user,group,comm -C php-fpm83

八、配置 Caddy

cat > /etc/caddy/Caddyfile <<'EOF'
your-domain.example {
    root * /var/www/typecho
    encode gzip
    php_fastcgi 127.0.0.1:9000
    file_server
}
EOF

启动并验证:

caddy validate --config /etc/caddy/Caddyfile
rc-service caddy start

确认监听:

ss -lntp | grep ':443'

九、安装 Typecho

浏览器访问:
https://你的域名
数据库配置:
类型:SQLite
前缀:typecho_
路径:默认自动生成即可

十、手动创建 config.inc.php(常见坑)

自动创建失败时:

cat > /var/www/typecho/config.inc.php <<'EOF'
<?php
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');
define('__TYPECHO_THEME_DIR__', '/usr/themes');
define('__TYPECHO_ADMIN_DIR__', '/admin/');
require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php';
\Typecho\Common::init();
$db = new \Typecho\Db('Pdo_SQLite', 'typecho_');
$db->addServer(array (
  'file' => '/var/www/typecho/usr/你的数据库文件.db',
), \Typecho\Db::READ | \Typecho\Db::WRITE);
\Typecho\Db::set($db);
EOF

权限修正:

chown nobody:nobody /var/www/typecho/config.inc.php
chmod 644 /var/www/typecho/config.inc.php

至此,一个 64MB Alpine NAT VPS + IPv6 的 Typecho 博客就稳定跑起来了。