树莓派LNMP + wordpress简易搭建

? 目标:

  • 使用 32GB microSD 卡(无需 SSD,但会优化性能)
  • 安装 轻量级系统 + 高效 Web 服务
  • 部署 WordPress 博客(主流、易用)
  • 通过 cpolar 内网穿透实现外网访问
  • 全程图形化或简单命令操作,适合新手

? 第一步:准备工作

所需硬件

  • 树莓派 4B(4GB)
  • 32GB 或更大 microSD 卡(建议 Class 10 / A2 级别,如 SanDisk Ultra)
  • 读卡器(用于电脑写入系统)
  • 电源(5V/3A 官方电源最佳)
  • 网线(推荐有线连接,更稳定)

所需软件(在 Windows 电脑上操作)

  1. Raspberry Pi Imager (官方烧录工具)
    ? 下载地址:https://www.raspberrypi.com/software/
  2. SD 卡格式化工具(可选)
    ? https://www.sdcard.org/downloads/formatter/

? 第二步:烧录轻量系统到 SD 卡

我们选择 Raspberry Pi OS Lite(64位) ------ 无图形界面,节省内存和 CPU。

操作步骤:

  1. 格式化 SD 卡(可选但推荐)

    • 插入 SD 卡 → 打开 SDFormatter → 选择"Overwrite format" → 格式化
    • 如果写入失败,多使用quick format,按照提示操作多试几遍

  2. 打开 Raspberry Pi Imager

    • Device选择:** raspberrypi Pi 4**
    • 点击 CHOOSE OS
    • 选择:Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit)
  3. 点击 存储设备CHOOSE STORAGE → 选择你的 SD 卡

  4. 关键:

    • 勾选:
      • ? 启用 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
  5. 点击 SAVE → 开始写入

    • 等待 5~10 分钟,完成后弹出 SD 卡

如果WIFI 无法连接,执行以下操作:修改wifi

  1. 配置树莓派:sudo raspi-config
  2. 配置国家: Localisation options -> WLAN country
  3. 确认无线模块是否使能nmcli radio wifi,如果没有使能,将无线模块使能nmcli radio wifi on
  4. 查找wifi信号nmcli dev wifi list
  5. 连接wifisudo nmcli --ask dev wifi connect <example_ssid>
  6. 输入密码

?? 第三步:首次启动树莓派并更新系统

  1. 将 SD 卡插入树莓派,接通电源和网线(或 Wi-Fi)
  2. 等待 1~2 分钟启动完成
  3. 在电脑上用 SSH 工具 (如 Windows 自带的 PowerShell 或 PuTTY)连接:
bash 复制代码
ssh lnh@raspberrypi-blog.local
# 或直接用 IP(可在路由器后台查看,如 192.168.1.100)
ssh lnh@192.168.1.100

输入你设置的密码。

  1. 更新系统(重要!)
  • 更换软件源
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
  1. 设置时区(可选但推荐)
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!"

  • 如果打不开:
    1. 检查树莓派和电脑是否在同一局域网
    2. 运行 ip a 查看树莓派 IP(通常是 eth0 或 wlan0 下的 inet 192.168.x.x)
    3. 检查防火墙: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 端口"分两步

  1. 让 FTP 服务真正跑起来(安装并启动 vsftpd 或 proftpd)。
  2. 让系统防火墙(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 最方便。

  1. 备份原文件
bash 复制代码
sudo cp /etc/nftables.conf /etc/nftables.conf.bak
  1. 在文件里找到

    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
  1. 重载生效
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

路由器端口映射(仅外网访问需要)
  1. 给树莓派设固定 LAN IP(DHCP 静态分配或在 /etc/dhcpcd.conf 里写 static)。
  2. 在路由器里把
    • 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 账号

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 可实现。


相关推荐
6v6-博客2 天前
一个完全本地运行的视频转文字工具:Vid2X
网站
0和1的舞者13 天前
《SpringBoot 入门通关指南:从 HelloWorld 到问题排查全掌握》
java·spring boot·后端·网络编程·springboot·开发·网站
程序员鱼皮18 天前
学妹给我 100,帮她分析个网站?
计算机·程序员·网站·编程经验
程序员鱼皮1 个月前
颜色网站为啥都收费?自己做个要花多少钱?
计算机·程序员·互联网·编程·网站
彩旗工作室2 个月前
WordPress 本地开发环境完全指南:从零开始理解 Local by Flywhee
前端·wordpress·网站
唯之为之3 个月前
VitePress 添加友链界面
vitepress·网站
知了一笑3 个月前
从视觉、文案到交互:三步彻底去除产品AI味
ai编程·网站·manus
程序员鱼皮3 个月前
AI 应用开发,不就是调个接口么?
计算机·ai·程序员·互联网·编程·网站