从零开始:RackNerd 服务器 + Ubuntu 18.04 搭建 Typecho 博客保姆级避坑指南(Docker 纯净版)
前言
前阵子入手了一台 RackNerd 服务器,系统装的是 Ubuntu 18.04 LTS。为了记录学习与成长,我决定在上面搭建大名鼎鼎的轻量级博客系统 —— Typecho。
原本以为几行命令就能轻松搞定,没想到一路上踩满了各种暗坑:从系统自带 PHP 版本太低导致代码崩溃(500 错误),到 GitHub 链接在终端被神秘截断,再到 Docker 容器与宿主机数据库的连接权限问题。
为了让后来的小伙伴少走弯路,我把这次历时数小时的“血泪史”整理成了一份绝对能成功的保姆级教程。我们采用 Docker(PHP 8.1)+ 宿主机 MySQL 的混编架构,既无视了老旧系统的限制,又保证了轻量与高效。
🛠️ 第一步:基础环境准备与 MySQL 数据库配置
首先,通过 SSH 工具登录你的服务器。
1. 更新系统包
sudo apt update && sudo apt upgrade -y2. 安装并配置 MySQL 数据库
由于 Typecho 需要存储数据,我们先在宿主机上安装 MySQL:
sudo apt install mysql-server -y接着登录 MySQL,创建博客专属的数据库和用户。
🔥 避坑红线 1:由于 Typecho 稍后将运行在 Docker 容器内,对宿主机 MySQL 来说属于“远程连接”。因此创建用户时,必须允许从任意 IP (%) 登录,不能写localhost!
sudo mysql -u root -p在 mysql> 提示符下输入以下命令:
-- 创建数据库
CREATE DATABASE typecho_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建允许远程连接的用户(请自行替换为你自己的安全密码)
CREATE USER 'typecho_user'@'%' IDENTIFIED BY 'your_password';
-- 全量授权
GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'%';
FLUSH PRIVILEGES;
EXIT;3. 解除 MySQL 仅限本地监听的限制
Ubuntu 默认限制 MySQL 只能本地访问,我们需要修改它。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf找到 bind-address = 127.0.0.1,将其修改为:
bind-address = 0.0.0.0保存退出(Ctrl+O -> Enter -> Ctrl+X),然后重启 MySQL:
sudo systemctl restart mysql📂 第二步:获取 Typecho 官方源码
🔥 避坑红线 2:很多时候在终端直接用 wget 长链接下载 GitHub 文件,会因为终端工具的换行或粘贴限制,导致链接被无故“截断”,最终只下载了一个坏掉的网页 HTML。稳妥方案:使用 Xftp 手动上传
- 在本地电脑的浏览器中,直接访问官方稳定版直链下载压缩包:
https://typecho.org - 打开 Xftp 连接服务器,在右侧(服务器端)进入或新建路径:
/var/www/typecho。 - 将下载好的
release.zip直接拖拽上传到该目录下。 回到 SSH 终端执行解压:
cd /var/www/typecho sudo apt install unzip -y sudo unzip release.zip rm -f release.zip
🐳 第三步:一键构建 Docker 容器环境(解决 PHP 版本冲突)
🔥 避坑红线 3:Ubuntu 18.04 官方自带的 PHP 7.2 版本太老,运行最新版 Typecho 会直接报PHP Parse error ... Response.php on line 73的 500 严重错误。而由于系统生命周期结束(EOL),我们无法直接 apt 升级 PHP。
终极解法:使用 Docker 容器隔离技术,直接拉取集成好的 PHP 8.1 环境!
1. 安装 Docker 与 Docker-Compose
sudo apt install docker.io docker-compose -y
sudo systemctl start docker && sudo systemctl enable docker(注意:如果之前服务器安装了自带的 nginx 或 php,请执行 sudo systemctl stop nginx 确保 80 端口被释放)
2. 编写 Docker 编排文件
cd /var/www
sudo nano docker-compose.yml粘贴以下内容:
version: '3'
services:
typecho-php:
image: php:8.1-fpm-alpine
container_name: typecho-php
restart: always
volumes:
- /var/www/typecho:/var/www/typecho
entrypoint: >
sh -c "docker-php-ext-install pdo_mysql && docker-php-entrypoint php-fpm"
typecho-nginx:
image: nginx:alpine
container_name: typecho-nginx
restart: always
ports:
- "80:80"
volumes:
- /var/www/typecho:/var/www/typecho
- /var/www/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- typecho-php3. 编写 Docker 内的 Nginx 配置文件
sudo nano /var/www/nginx.conf粘贴以下标准的 Typecho 转发与伪静态配置:
server {
listen 80;
server_name localhost;
root /var/www/typecho;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass typecho-php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}4. 彻底解决“上传目录无法写入”的权限坑
由于 Docker 容器内外的用户权限不一致,必须在宿主机上把博客目录权限完全放开:
sudo mkdir -p /var/www/typecho/usr/uploads
sudo chmod -R 777 /var/www/typecho5. 启动容器集群
cd /var/www
sudo docker-compose up -d输入 sudo docker ps,看到两个容器全部显示 Up,大功告成!
💻 第四步:浏览器可视化安装向导
现在,打开电脑浏览器,输入你的 服务器公网 IP 地址(http://your_server_ip),熟悉的红白相间 Typecho 安装界面就会瞬间弹出来!
填写数据库核心要点:
- 数据库驱动:务必选择 Pdo 驱动 MySQL。
- 数据库地址:由于是在 Docker 容器内访问外面的宿主机,这里请填写 Docker 的默认网关桥梁 IP:
172.17.0.1(或者直接填写你服务器的公网 IP)。 - 数据库用户名:
typecho_user - 数据库密码:
your_password(你在第一步中为该用户设置的密码) - 数据库名:
typecho_db
点击下一步,随后设置好你自己的管理员账号、密码和邮箱,点击确认——恭喜你,你的独立博客正式诞生了!
💡 总结与后记
回顾这次建站,其实真正的难点不在于技术多复杂,而在于在面对老旧的系统环境时,如何灵活地利用 Docker 去破局。
通过这套配置,整个博客不仅完美避开了版本冲突,而且日常运行内存占用极低(仅 200MB 左右),RackNerd 的小机器跑起来轻轻松松。
如果你也有一台闲置的服务器,别让它吃灰了,跟着这篇教程,一起加入独立博客的行列吧!