标签 建站教程 下的文章

前言

前阵子入手了一台 RackNerd 服务器,系统装的是 Ubuntu 18.04 LTS。为了记录学习与成长,我决定在上面搭建大名鼎鼎的轻量级博客系统 —— Typecho。

原本以为几行命令就能轻松搞定,没想到一路上踩满了各种暗坑:从系统自带 PHP 版本太低导致代码崩溃(500 错误),到 GitHub 链接在终端被神秘截断,再到 Docker 容器与宿主机数据库的连接权限问题。

为了让后来的小伙伴少走弯路,我把这次历时数小时的“血泪史”整理成了一份绝对能成功的保姆级教程。我们采用 Docker(PHP 8.1)+ 宿主机 MySQL 的混编架构,既无视了老旧系统的限制,又保证了轻量与高效。


🛠️ 第一步:基础环境准备与 MySQL 数据库配置

首先,通过 SSH 工具登录你的服务器。

1. 更新系统包

sudo apt update && sudo apt upgrade -y

2. 安装并配置 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 手动上传

  1. 在本地电脑的浏览器中,直接访问官方稳定版直链下载压缩包:
    https://typecho.org
  2. 打开 Xftp 连接服务器,在右侧(服务器端)进入或新建路径:/var/www/typecho。
  3. 将下载好的 release.zip 直接拖拽上传到该目录下。
  4. 回到 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-php

3. 编写 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/typecho

5. 启动容器集群

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 的小机器跑起来轻轻松松。

如果你也有一台闲置的服务器,别让它吃灰了,跟着这篇教程,一起加入独立博客的行列吧!