? 目标:
- 使用 32GB microSD 卡(无需 SSD,但会优化性能)
- 安装 轻量级系统 + 高效 Web 服务
- 部署 WordPress 博客(主流、易用)
- 通过 cpolar 内网穿透实现外网访问
- 全程图形化或简单命令操作,适合新手
? 第一步:准备工作
所需硬件
- 树莓派 4B(4GB)
- 32GB 或更大 microSD 卡(建议 Class 10 / A2 级别,如 SanDisk Ultra)
- 读卡器(用于电脑写入系统)
- 电源(5V/3A 官方电源最佳)
- 网线(推荐有线连接,更稳定)
所需软件(在 Windows 电脑上操作)
- Raspberry Pi Imager (官方烧录工具)
? 下载地址:https://www.raspberrypi.com/software/ - SD 卡格式化工具(可选)
? https://www.sdcard.org/downloads/formatter/
? 第二步:烧录轻量系统到 SD 卡
我们选择 Raspberry Pi OS Lite(64位) ------ 无图形界面,节省内存和 CPU。
操作步骤:
-
格式化 SD 卡(可选但推荐)
- 插入 SD 卡 → 打开 SDFormatter → 选择"Overwrite format" → 格式化
-
如果写入失败,多使用quick format,按照提示操作多试几遍
-
打开 Raspberry Pi Imager
- Device选择:** raspberrypi Pi 4**
- 点击 CHOOSE OS
- 选择:Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit)
-
点击 存储设备CHOOSE STORAGE → 选择你的 SD 卡
-
关键:
- 勾选:
- ? 启用 SSH 和配置 Wi-Fi(可选)
- ? Set hostname :
raspberrypi-blog - ? Enable SSH : 选择 Use password authentication
- ? Set username and password :
- 用户名:
lnh(或其他你喜欢的,如admin) - 密码:设置一个强密码(记住!)
- 用户名:
- ? Configure wireless LAN (如果你不用网线)
- SSID: 你的 Wi-Fi 名称
- Password: Wi-Fi 密码
- Country: China
- 勾选:
-
点击 SAVE → 开始写入
- 等待 5~10 分钟,完成后弹出 SD 卡
如果WIFI 无法连接,执行以下操作:修改wifi
- 配置树莓派:
sudo raspi-config - 配置国家: Localisation options -> WLAN country
- 确认无线模块是否使能
nmcli radio wifi,如果没有使能,将无线模块使能nmcli radio wifi on - 查找wifi信号
nmcli dev wifi list - 连接wifi
sudo nmcli --ask dev wifi connect <example_ssid> - 输入密码
?? 第三步:首次启动树莓派并更新系统
- 将 SD 卡插入树莓派,接通电源和网线(或 Wi-Fi)
- 等待 1~2 分钟启动完成
- 在电脑上用 SSH 工具 (如 Windows 自带的 PowerShell 或 PuTTY)连接:
bash
ssh lnh@raspberrypi-blog.local
# 或直接用 IP(可在路由器后台查看,如 192.168.1.100)
ssh lnh@192.168.1.100
输入你设置的密码。
- 更新系统(重要!)
- 更换软件源
bash
sudo nano /etc/apt/sources.list.d/debian.sources
# 将deb.debian.org 为 mirrors.aliyun.com
- 更新系统
bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y vim git curl wget ufw
- 设置时区(可选但推荐)
bash
sudo timedatectl set-timezone Asia/Shanghai
? 第四步:安装轻量 Web 环境(LEMP)
LEMP = Linux + Nginx + MariaDB + PHP
比 Apache 更省资源!
1. 安装 Nginx
bash
sudo apt install -y nginx
sudo systemctl enable nginx
2. 安装 MariaDB(数据库)
- 有些OS的数据库操作不同,查看OS版本信息
cat /etc/os-release
安装数据库
bash
# 安装MariaDB
sudo apt install -y mariadb-server
# 启动并启用服务
sudo systemctl enable --now mariadb
# 直接以 root 身份登录(无需密码,因默认使用 unix socket 认证)
sudo mysql -u root
sudo mysql -u root -p
MariaDB 安全配置
sql
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 禁止 root 远程登录(安全!)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- 刷新权限
FLUSH PRIVILEGES;
-- (可选)为 root 设置密码(非必须,但建议)
-- 如果你希望以后能用密码登录 root,取消下面注释:
-- ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
EXIT;
3. 安装 PHP(含必要扩展)
bash
sudo apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
4. 配置 Nginx 支持 PHP
编辑默认站点配置:
bash
sudo nano /etc/nginx/sites-available/default
找到 location ~ \.php$ 部分,取消注释并修改为:
nginx
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 注意版本号,可用 ls /run/php/ 查看
}
保存(Ctrl+O → Enter → Ctrl+X)
测试配置并重启:
bash
sudo nginx -t
sudo systemctl reload nginx
确认Nginx 正常运行
bash
sudo systemctl status nginx
确认 Nginx 正常运行显示 active (running)
没有红色错误(如 failed、cannot bind to port)
? 此时访问 http://树莓派IP 应看到 "Welcome to nginx!"
- 如果打不开:
- 检查树莓派和电脑是否在同一局域网
- 运行 ip a 查看树莓派 IP(通常是 eth0 或 wlan0 下的 inet 192.168.x.x)
- 检查防火墙:sudo ufw status(如果启用了,确保放行 80 端口)
检查 PHP-FPM 是否运行
bash
# 查看php版本
php --version # 或 ls /etc/php/
sudo systemctl status php8.4-fpm # 注意:版本可能是 8.4 或 8.3
确认 PHP-FPM 正常运行显示 active (running)
没有红色错误(如 failed、cannot bind to port)
测试 Nginx + PHP 能否协同工作
- 排查错误
bash
# 查看 PHP-FPM 实际 socket 路径
sudo ls /run/php/
# 或者
sudo find /run -name "*fpm.sock" 2>/dev/null
# 通常类似:php8.4-fpm.sock
- 排查 Nginx 配置
sudo nano /etc/nginx/sites-available/default # 找到server { ... }确保关键部分: 注意location的最后一个大括号}
Nginx
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock; # ← 这里必须匹配你的实际 socket!
}
- 测试 Nginx 配置并重载:
bash
# 检查语法是否正确
sudo nginx -t
正常输出:
bash
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
-
重载配置:
sudo systemctl reload nginx
-
测试 PHP
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/test.php
?浏览器访问:http://你的树莓派IP/test.php,预期结果:
显示 PHP 信息页面(包含 PHP 版本、模块列表等)
页面中有 mysql, mysqli, pdo_mysql, gd, mbstring 等模块(说明扩展已加载)
? 如果显示"File not found"或下载文件:
→ 说明 Nginx 没正确处理 .php 请求,回到第四步检查 Nginx 配置(特别是 fastcgi_pass 的 socket 路径是否匹配)。
- 测试完记得删除:
bash
sudo rm /var/www/html/test.php
? 第五步:安装 WordPress 博客
1. 创建数据库
用 root 登录
bash
sudo mysql -u root
? 能直接进入 MariaDB [(none)]> 提示符 → 成功!
创建 WordPress 数据库
sql
-- 创建数据库
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '你的强密码';
-- 给用户授权
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
-- 查看数据
SELECT User, Host FROM mysql.user WHERE User = 'wpuser';
-- 查看用户权限
SHOW GRANTS FOR 'wpuser'@'localhost';
EXIT;
用 wpuser 测试连接(模拟 WordPress 行为)
bash
mysql -u wpuser -p wordpress
→ 输入你设置的密码
? 预期结果:
成功进入 MariaDB 命令行
提示符显示 MariaDB [wordpress]>
输入 EXIT; 退出。
? 如果提示"Access denied":
→ 回到数据库步骤,重新检查:
sql
-- 确保用户存在
SELECT User, Host FROM mysql.user WHERE User = 'wpuser';
-- 确保权限正确
SHOW GRANTS FOR 'wpuser'@'localhost';
检查文件权限(WordPress 安装必需),
WordPress 需要写入 /var/www/html 目录。
bash
ls -ld /var/www/html
? 预期结果:
drwxr-xr-x 2 www-data www-data 4096 ...
如果不是 www-data:www-data,修复:
bash
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
?? 不要设 777!755 + 正确属主足够安全。
? 如果以上检查全部成功,恭喜你!LEMP 环境已完美就绪。
2. 下载 WordPress
bash
cd /var/www/html
sudo rm index.html # 删除 nginx 默认页
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz --strip-components=1
sudo chown -R www-data:www-data /var/www/html
3. 访问安装向导
- 检查 Nginx 是否配置了 index.php 为首页
bash
sudo nano /etc/nginx/sites-available/default
# 检查index关键字
index index.php index.html index.htm; # ← 必须有 index.php 在前面!
- 保存后重载 Nginx:
bash
sudo nginx -t && sudo systemctl reload nginx
- 在电脑浏览器打开: ?
http://树莓派IP
按提示填写:
- 数据库名:
wordpress - 用户名:
wpuser - 密码:你刚才设的密码
- 数据库主机:
localhost - 表前缀:默认
wp_
然后设置网站标题、管理员账号(不要用 admin!)、邮箱等。
? 安装完成!你现在有了一个本地可访问的博客。
在树莓派(Raspberry Pi)上"打开 FTP 端口"分两步
- 文件传输 filezilla
- 让 FTP 服务真正跑起来(安装并启动 vsftpd 或 proftpd)。
- 让系统防火墙(nftables/ufw)和路由器把 21 端口(以及被动模式端口段)放开。
下面给出最常用、最轻量的方案:vsftpd + nftables(Pi OS 12 Bookworm 默认防火墙)。
安装 vsftpd
bash
sudo apt update
sudo apt install vsftpd
配置 vsftpd(/etc/vsftpd.conf)
bash
sudo nano /etc/vsftpd.conf
把下面 6 行取消注释或手动写入,其余保持默认即可:
conf
listen=YES # 独立模式,监听 IPv4
listen_ipv6=NO # 若只用 IPv4 可关掉
anonymous_enable=NO # 禁止匿名
local_enable=YES # 允许系统用户登录
write_enable=YES # 允许上传/写
local_umask=022
保存后重启服务:
bash
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
此时 vsftpd 已监听 21 端口:
bash
sudo ss -ltnp | grep :21
放行防火墙(nftables)
Bookworm 默认使用 nftables,规则写进 /etc/nftables.conf 最方便。
- 备份原文件
bash
sudo cp /etc/nftables.conf /etc/nftables.conf.bak
-
在文件里找到
chain input {
type filter hook input priority 0; policy drop;
段落,在下方插入三行(21 端口 + 被动模式 50000-51000):
tcp dport 21 accept comment "FTP control"
tcp dport 50000-51000 accept comment "FTP passive"
ct state established,related accept
- 重载生效
bash
sudo systemctl restart nftables
被动模式端口段(可选但强烈建议)
继续在 /etc/vsftpd.conf 末尾追加:
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
pasv_address=你的公网IP或留空 # 若只做局域网可省略
保存后再次重启 vsftpd:
bash
sudo systemctl restart vsftpd
路由器端口映射(仅外网访问需要)
- 给树莓派设固定 LAN IP(DHCP 静态分配或在
/etc/dhcpcd.conf里写 static)。 - 在路由器里把
- TCP 21
- TCP 50000-51000
转发到树莓派 LAN IP。
验证
局域网内:
bash
ftp 树莓派IP
输入系统用户名/密码,能登录即成功。
外网:
bash
ftp 你的公网IP
若路由器已做映射,也能连上。
安全提醒
- FTP 是明文协议,公网使用请换成 SFTP(OpenSSH 内置)或 FTPS(vsftpd 支持 TLS)。
- 若只需文件传输,最简单其实是:
bash
sudo systemctl enable ssh
然后用任何 SFTP 客户端(WinSCP、FileZilla、macOS 终端 sftp lnh@IP)连 22 端口,无需额外配置。
? 第六步:启用内网穿透(外网访问)
由于家庭宽带无公网 IP,我们用 cpolar(免费、简单)
1. 注册 cpolar 账号
- 访问:https://www.cpolar.com/
- 注册并登录,获取 authtoken(在 dashboard → auth token)
- 在树莓派安装 cpolar
2. 在树莓派安装 cpolar
bash
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
cpolar version
# 或者知道具体版本,也可以用 wget
wget -O cpolar-linux-arm64.deb https://static.cpolar.com/downloads/releases/3.3.11/cpolar_3.3.11_linux_arm64.deb
sudo dpkg -i cpolar-linux-arm64.deb
3. 配置 authtoken
bash
cpolar authtoken 你的_authtoken_字符串
4. 启动 HTTP 隧道(临时测试)
bash
cpolar http 80
你会看到类似:
Forwarding http://xxxx.cpolar.cn -> http://localhost:80
? 复制这个 http://xxxx.cpolar.cn 链接,在手机 4G 网络下打开,就能访问你的博客!
5. 设置开机自启(长期使用)
创建配置文件:
bash
mkdir -p ~/.cpolar
nano ~/.cpolar/cpolar.yml
写入:
yaml
authtoken: 你的_authtoken_字符串
tunnels:
blog:
proto: http
addr: 80
region: cn # 中国节点更快
保存后,创建 systemd 服务:
bash
sudo nano /etc/systemd/system/cpolar.service
内容:
ini
[Unit]
Description=cpolar tunnel
After=network.target
[Service]
Type=simple
User=lnh
ExecStart=/usr/bin/cpolar start-all --config /home/lnh/.cpolar/cpolar.yml
Restart=always
[Install]
WantedBy=multi-user.target
启用服务:
bash
sudo systemctl daemon-reexec
sudo systemctl enable cpolar
sudo systemctl start cpolar
查看隧道地址:
bash
cpolar status
? 免费版每次重启会变域名。如需固定域名,可升级(约 ?50/年),或用 Cloudflare Tunnel(更复杂)。
?? 第七步:安全与优化(关键!)
1. 启用防火墙
bash
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS(未来可加)
sudo ufw enable
2. 安装缓存插件(提升速度)
- 登录 WordPress 后台 → 插件 → 搜索安装 WP Super Cache
- 启用即可大幅减少 PHP 和数据库压力
3. 定期备份(重要!)
bash
# 备份数据库
mysqldump -u wpuser -p wordpress > /home/lnh/wordpress_$(date +%F).sql
# 备份网站文件
tar -czf /home/lnh/wp_files_$(date +%F).tar.gz /var/www/html
可配合 cron 每周自动备份。
? 最终效果
- 你的博客地址:
http://随机字符串.cpolar.cn - 可在外网(手机 4G、朋友电脑)访问
- 资源占用低(空闲时内存 < 500MB,CPU < 5%)
- 功能完整(支持文章、图片、评论、插件)
?常见问题
Q:为什么不用静态博客(如 Hugo)?
A:静态博客更省资源,但需要手动部署,不适合"写文章就发布"的小白。WordPress 更直观。
Q:SD 卡会坏吗?
A:频繁写入可能缩短寿命。建议:
- 禁用日志:
sudo nano /etc/nginx/nginx.conf→ 关闭 access_log - 使用
tmpfs挂载临时目录(进阶)
Q:能加 HTTPS 吗?
A:可以!但 cpolar 免费版不支持自定义证书。付费版或改用 Cloudflare + Argo Tunnel 可实现。