1. 准备工作
- 购买服务器
- 购买域名,并解析到服务器上https://www.namesilo.com/
- 服务器安装好Docker和Docker-compose
- 【非必需】服务器安装好Nginx Proxy Manager
2. 搭建Typecho
创建安装目录
mkdir -p /root/data/docker_data/typecho
cd /root/data/docker_data/typecho2.1 mysql
cd /root/data/docker_data/typecho
vim mysql.env填入
MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=typecho
MYSQL_USER=username
MYSQL_PASSWORD=password2.2 php-fpm
cd /root/data/docker_data/typecho
mkdir php
cd php
vim DockerfileDockerfile输入
FROM php:7.3.29-fpm
RUN apt-get update \
&& docker-php-ext-install pdo_mysql \
&& echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini \
&& echo "date.timezone = PRC" >> /usr/local/etc/php/conf.d/php.ini2.3 nginx
nginx 的配置要注意的是需要有rewrite规则(后续typecho后台有一个地址重写功能),如果需要指定域名的话,需要写 server_name 字段。这里并没有指定443端口,因为后面用到了反向代理。cd /root/data/docker_data/typecho
mkdir nginx
cd nginx
vim default.confdefault.conf中输入
server {
listen 80 default_server;
root /var/www/html;
index index.php;
access_log /var/log/nginx/typecho_access.log main;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location / {
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}2.4 typecho
- 下载源码
mkdir typecho
cd /root/data/docker_data/typecho/typecho
wget https://github.com/typecho/typecho/releases/download/v1.2.0/typecho.zip
apt install zip -y
unzip typecho.zip- docker-compose
cd /root/data/docker_data/typecho
vim docker-compose.ymldocker-compose填入
version: "3"
services:
nginx:
image: nginx
ports:
- "8223:80" # 左边可以改成任意没使用的端口
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./typecho:/var/www/html
- ./nginx:/etc/nginx/conf.d
- ./logs:/var/log/nginx
depends_on:
- php
networks:
- web
php:
build: php
restart: always
expose:
- "9000" # 不暴露公网,故没有写9000:9000
volumes:
- ./typecho:/var/www/html
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- web
mysql:
image: mysql:5.7
restart: always
environment:
- TZ=Asia/Shanghai
expose:
- "3306" # 不暴露公网,故没有写3306:3306
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
env_file:
- mysql.env
networks:
- web
networks:
web:查看端口是否被占用
lsof -i:8223 #查看8223端口是否被占用,如果被占用,重新自定义一个端口- 运行
docker-compose up -d3. 更新typecho
cd /root/data/docker_data/typecho # 进入docker-compose所在的文件夹
docker-compose pull # 拉取最新的镜像
docker-compose up -d # 重新更新当前镜像4. 卸载typecho
sudo -i # 切换到root
cd /root/data/docker_data/typecho # 进入docker-compose所在的文件夹
docker-compose down # 停止容器,此时不会删除映射到本地的数据
cd ~
rm -rf /root/data/docker_data/typecho # 完全删除映射到本地的数据5. 反向代理
http//:ip:81进入Nginx Proxy Manager

ip填写:
如果Nginx Proxy Manager和reader在同一台服务器上,可以在终端输入:
ip addr show docker0查看对应的Docker容器内部IP。
6. 网页端安装typecho

- 数据库地址:填写容器名mysql
- 用户名和密码在mysql.env中查看
- 数据库名:typecho
若出现

cd /root/data/docker_data/typecho/typecho
vim config.inc.php然后填入以上内容,然后继续即可
7. 重定向次数太多
7.1 Cloudflare 的 SSL/TLS 设置
Cloudflare 提供不同的 SSL 模式(Flexible, Full, Full (Strict)):
- Flexible SSL:Cloudflare 会使用 HTTP 与你的服务器进行连接,而与客户端之间使用 HTTPS。这意味着当你的服务器没有配置 SSL 证书时,Cloudflare 会强制使用 HTTPS,而服务器只会处理 HTTP 请求。
- Full SSL:Cloudflare 与你的服务器之间使用 HTTPS,而与客户端之间依然是 HTTPS。
- Full (Strict) SSL:Cloudflare 使用 HTTPS 与服务器进行通信,并且要求服务器提供有效的 SSL 证书。
问题:
- 如果 Cloudflare 设置为
Flexible SSL,但你在 Nginx Proxy Manager 中启用了Force SSL,可能会出现 HTTP 与 HTTPS 的冲突,导致重定向循环。
解决方法:
- 如果你已经在 Nginx Proxy Manager 中启用了 SSL 并确保你的服务器上配置了有效的 SSL 证书,建议将 Cloudflare 的 SSL 设置更改为
Full或Full (Strict)。 - 在 Cloudflare 中,进入“SSL/TLS”选项卡,将 SSL 模式设置为
Full或Full (Strict),避免使用Flexible。
7.2 Cloudflare 的自动 HTTPS 重定向
Cloudflare 提供了一个选项叫做“Always Use HTTPS”,它会自动将所有 HTTP 请求重定向到 HTTPS。这可能与你在 Nginx Proxy Manager 中启用的“Force SSL”设置发生冲突。
问题:
- 如果你在 Cloudflare 中启用了
Always Use HTTPS,而 Nginx Proxy Manager 中也启用了Force SSL,可能导致重定向次数过多。
解决方法:
- 在 Cloudflare 控制台中,禁用
Always Use HTTPS选项。你可以在 Cloudflare 的“SSL/TLS”选项卡下找到这个设置。 - 确保只在 Nginx Proxy Manager 中启用
Force SSL,避免在 Cloudflare 中再做同样的重定向设置。
7.3 云端缓存问题
Cloudflare 使用 CDN 并会缓存一些内容。即使你在 Nginx Proxy Manager 中做了更改,Cloudflare 可能会缓存之前的 HTTP 重定向或错误配置。
解决方法:
- 清除 Cloudflare 的缓存,确保最新的配置生效。你可以在 Cloudflare 控制台的“Caching”部分,点击“Purge Everything”来清除缓存。
7.4 检查 DNS 设置
确保你的域名的 DNS 记录指向正确的服务器 IP 地址,且设置为通过 Cloudflare 代理(即 orange cloud 图标启用)。如果 DNS 记录未通过 Cloudflare 代理,可能会直接访问你的服务器而绕过 Cloudflare,导致配置不一致。
7.5 总结
- 将 Cloudflare 的 SSL 设置调整为
Full或Full (Strict)。 - 禁用 Cloudflare 的
Always Use HTTPS,只在 Nginx Proxy Manager 中启用Force SSL。 - 清除 Cloudflare 的缓存。
- 检查 Cloudflare 的 DNS 配置,确保它通过 Cloudflare 代理流量。
8. typecho地址重写

9. 更改主题
- 下载主题文件,一般为压缩包,解压得到主题文件夹;
- 将主题目录上传到/root/data/docker_data/typecho/typecho/usr/themes/中
- 进入网站后台:控制台 -> 外观,启用该主题即可。
10. 关于ip addr show docker0
以下内容来自DeepSeek

容器通过访问docker0地址即可访问宿主机