使用 Docker 搭建 Typecho 个人博客

news/2025/11/7 20:07:33/文章来源:https://www.cnblogs.com/hanzhe/p/19200774

Typecho 是一款开源的博客项目、它轻量精美且五脏俱全,在这里分享一下搭建过程希望可以帮到别人,文章中涉及到的文件都会提供下载地址,如果忘记放置链接或者失效请联系我补充

本文会分享三种基于 Docker 搭建 Typecho 博客的方案,演示环境为 CentOS7 虚拟机,默认你已经安装好 Docker 环境

手动部署

对于这种部署简单的项目来说,我喜欢亲自感受一下部署过程,所以把手动部署放在了最上面,仅作参考不建议使用该方式部署,如果你想快速部署请下滑参考其他方案

创建 Docker 网桥,用于不同容器之间的交互

# 创建Docker网桥用于组网,网桥名称channel,可自定义
$ docker network create channel

下载并运行 Nginx 作为 WEB 容器,这里使用 Nginx1.22.0,并指定项目目录为宿主机的/opt/docker/nginx/webs

# 下载镜像
$ docker pull nginx:1.22.0# 初始化Nginx目录
$ mkdir -p /opt/docker/nginx
$ cd /opt/docker/nginx# 裸启容器
$ docker run -d --name nginx nginx:1.22.0# 拷贝配置文件等等
$ docker cp nginx:/etc/nginx /opt/docker/nginx
$ mv nginx conf
$ docker cp nginx:/usr/share/nginx /opt/docker/nginx
$ mv nginx webs# 删除裸启的容器
$ docker rm -f nginx# 正式启动容器
$ docker run --name nginx \-p 80:80 \--restart always \--network channel \-v /opt/docker/nginx/conf/:/etc/nginx \-v /opt/docker/nginx/webs/:/usr/share/nginx \-v /opt/docker/nginx/logs/:/var/log/nginx \-d nginx:1.22.0

下载并运行 PHP,这里使用 PHP7.2 版本,并指定项目目录与 Nginx 一致

# 下载镜像
$ docker pull php:7.2-fpm# 初始化PHP配置目录
$ mkdir -p /opt/docker/php# 裸启容器
$ docker run -d --name php php:7.2-fpm# 将容器内的配置文件拷贝出来
$ docker cp php:/usr/local/etc/php /opt/docker/php/
$ mv /opt/docker/php/php/ /opt/docker/php/conf# 删除裸启的容器
$ docker rm -f php# 正式启动容器
$ docker run -d --name php \--restart always \--network channel \-v /opt/docker/nginx/webs:/var/www/html \-v /opt/docker/php/conf:/usr/local/etc/php \php:7.2-fpm

将 typecho.zip 上传至服务器项目目录下,进入项目目录后执行解压缩,并授予目录权限

# 系统中没有zip命令请安装
$ yum install -y zip unzip# 解压typecho.zip文件
$ cd /opt/docker/nginx/webs/
$ unzip typecho.zip# 授予typecho目录权限,不然安装网站时写入配置会报错,权限不是很懂这里直接给到最大,有懂的评论区可以指点下
$ chmod -R 777 typecho

项目上传完毕,然后创建 Nginx 的 Typecho 配置文件

vim /opt/docker/nginx/conf/conf.d/typecho.conf

在 typecho.conf 中添加如下内容

# Typecho博客
server {listen       80;# 这里改成自己服务器的IP地址server_name  192.168.1.251;# 路径匹配规则已支持伪静态location ~ .*\.php(\/.*)*$ {# 这里的php对应这docker中名为php的容器,php与nginx在同一网桥所以支持容器名访问,无需端口映射fastcgi_pass    php:9000;fastcgi_index   index.php;# 路径匹配规则已支持伪静态fastcgi_split_path_info   ^(.+?.php)(/.*)$;# 注意这里,SCRIPT_FILENAME后面跟着的路径地址需要符合PHP容器中的项目目录fastcgi_param   SCRIPT_FILENAME  /var/www/html/typecho/$fastcgi_script_name;include         fastcgi_params;}location / {# 这里的root需要对应nginx容器中项目目录root   /usr/share/nginx/typecho;index  index.html index.htm index.php;}}

这样一来项目就部署完成了,重启 Docker 容器后访问试试看

# 注意需要先重启php在重启nginx,因为nginx中访问了php,要保证重启nginx时php是好用的
$ docker restart php
$ docker restart nginx

![2023-02-02T03:25:53.png][https://img.hanzhe.site/i/2023/02/2291411466.png]

如果跟我一样打开的页面是 Nginx 的欢迎页,是因为 Nginx 默认的配置文件优先级比较高,这种情况只需要暂时关闭默认配置,只让 typecho.conf 生效,然后重新访问就可以了

# 将默认的default.conf文件加上.bak后缀让他失效
$ mv /opt/docker/nginx/conf/conf.d/default.conf /opt/docker/nginx/conf/conf.d/default.conf.bak
# 重启nginx容器
$ docker restart nginx

![2023-02-02T03:29:52.png][https://img.hanzhe.site/i/2023/02/1513091298.png]

网站安装向导已经显示出来了,可以正常使用了,如果想用 MySQL 作为数据库的话会发现向导中没有提供 MySQL 数据库适配器,那是因为 php 容器中没有启用 mysql 插件,可以参照我之前写的博客启用该插件 Docker PHP 如何启用 MySQL 扩展,然后重启 php 和 nginx 容器,数据库适配器中就多出 MySQL 的选项了

第三方镜像

第三方镜像的话个人推荐使用80x86/typecho这一款,这一款是第三方中使用人次最多的镜像且足够轻量

![2023-02-02T03:40:41.png][https://img.hanzhe.site/i/2023/02/943957783.png]

$ docker run --name=typecho \--restart always \--mount type=tmpfs,destination=/tmp \-v ./typecho:/data \-e PHP_TZ=Asia/Shanghai \-e PHP_MAX_EXECUTION_TIME=600 \-p 90:80 \-d 80x86/typecho:latest

2023-02-02T03:42:24.png

官方镜像部署

官方的 Docker 镜像叫joyqi/typecho,这里我并没有使用 latest 而是专门指定了版本号,因为他们的最新版是测试版并不是稳定版

$ docker run --name typecho \-e TIMEZONE=Asia/Shanghai \-e TYPECHO_SITE_URL=https://typecho.hanzhe.site \-p 91:80 \-v ./typecho:/app/usr \-d joyqi/typecho:1.2.1-php7.3-apache

文件下载地址

蓝蓝的地址点击下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P6954 [NEERC 2017] Connections 题解

P6954 [NEERC 2017] Connections 题解P6954 [NEERC 2017] Connections 题解 题目链接 我的博客 前言 本篇总结:清空! 思路 因为删边之后还需要保证所有强连通关系不变,所以我们可以想到所有强连通分量之间的边一定可…

高级程序语言设计个人作业第四次

这个作业属于哪个课程 <班级的链接>这个作业要求在哪里 <作业链接>学号 092300303姓名 池博洋@目录运行程序(1)(2)求π近似值while方式:do while方式:实现逻辑表达式中的运算符for循环输出六行for循…

AI的泡沫与机遇:从技术神话到现实挑战

标签:AI发展, 就业市场, 技术反思, 行业趋势最近刷到一堆AI相关的新闻,感觉这玩意儿真是火得不行,但仔细一看,里面藏着不少值得琢磨的东西。一边是牛津研究院说AI能力可能被测试夸大,另一边阿里巴巴和谷歌又在疯狂…

什么是 Feed 流?

什么是 Feed 流?什么是 Feed 流? 摘要Feed 源自“被投喂的更新条目”,流指“连续滚动的呈现与计算范式”;Feed 流就是平台按流式形态持续投喂个性化内容给用户的机制与界面。 本质上,它是一个在实时反馈下运行的序…

preeee - when

Instuctions.scals package componentsimport chisel3.util.BitPat/** * LoongArch-C3指令集定义 * * 定义了CPU支持的21条LoongArch指令的BitPat模式 * 这些模式用于指令译码器进行指令识别和分类 * * 指令分类: * -…

调整 Halo2 Joe 主题友情链接页面样式

本人之前是使用 Typecho 建站的,后来接触到了 Halo,权衡后将网站内容都迁移到 Halo 建站上了,无论是 Typecho 还是 Halo 都有一款 Joe 主题,我个人非常喜欢这款主题,决定迁移到 Halo 也是因为 Joe 主题移植的很成…

CF1463E Plan of Lectures

手伤了不是很能打代码,写短一点。 相邻限制缩一起,\(a_i \to i\) 连边跑拓扑序即可。

基于单片机的元胞自动机仿真系统设计 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

251107

251107我又分不清梦和现实,梦到死去的人我知道是假的,但如果梦到活人,我又该怎么分辨真假,说不定死去的人也是真的,只是我还没睡醒。最近我的食欲大了很多,烟开始抽的少了,没有一天是天亮,黑夜胜过白昼,偶尔见…

2025年防水补漏企业TOP5:漏水维修、防水翻新、漏水检测

在建筑维护领域,防水补漏是保障建筑安全与使用寿命的关键环节。据中国建筑防水协会2024年度报告显示,全国建筑渗漏率仍高达80%以上,其中因非专业施工导致二次渗漏的比例占65%。面对市场上鱼龙混杂的服务providers,…

(鲜花)万宁五子棋 v0.2

突然发现以前做的蛮有意思的一玩意。就一挺 naive 的东西,允许两个玩家在同一电脑上轮流下棋,W,A,S,D 移动棋子,Enter 下棋,会自动判定五子连珠,然后就没了。 后续可能会更新点人机什么的东西,看兴致。 源码如下…

ansible + docker compose, RustFS MNMD 架构的一键部署之道

RustFS 有三种安装模式:单机单盘(SNSD)、单机多盘(SNMD)以及多机多盘(MNMD)。其中多机多盘属于集群式安装,也是企业使用最多的模式。多机多盘意味着要在每个服务器上都安装 RustFS 实例,本文探索用 ansible +…

2025年海外仓服务最新推荐企业,欧洲海外仓、美国海外仓、亚马逊海外仓、TEMU海外仓、独立站海外仓服务商解析

当前跨境电商与外贸企业对海外仓的需求日益精细化,仓储成本控制、订单处理效率、本土化服务等核心诉求持续升级,但市场上服务商资质参差不齐,部分企业存在库内操作效率低、系统稳定性不足、售后响应滞后等问题,导致…

实用指南:RSA加密从原理到实践:Java后端与Vue前端全栈案例解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ubuntu 中创建全局可访问的共用目录

第一步:创建全局可访问的共用目录在根目录下创建目录(需 root 权限)执行以下命令在根目录(/)下创建名为shared的共用目录: sudo mkdir /shared 设置权限为 “任何人可访问”为确保所有用户(包括系统用户、普通用…

开源 C++ QT QML 开发(十五)通讯--http下载 - 实践

开源 C++ QT QML 开发(十五)通讯--http下载 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

2025年11月不锈钢加工装饰制品优质厂家推荐榜:加工、屏风、栏杆等品类精选

当前酒店、别墅、商业空间等场景对不锈钢装饰制品的需求愈发精细化,材质纯度、工艺精度、场景适配性等核心诉求不断升级,但市场上厂家资质良莠不齐,部分产品存在材质以次充好、焊接工艺粗糙、售后响应滞后等问题,导…

P3978 概率论

膜拜 wck做法 考虑一个经典问题:n个点的二叉树数量是多少。考虑转括号序,一个节点是一个括号,左子树放在括号内,右子树放在括号右侧。可得 \(n\) 个点二叉树数量为 \(Cat_n\)。 我们注意到叶子在括号序上形如 \(()…

从iPhone转移到itel手机的联系人转移指南 - 实践

从iPhone转移到itel手机的联系人转移指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

JT808,JT1078 —— AAC编码 —— 部标机语音对讲Java实现

一、基础知识1、JT808,JT1078 协议了解① JT/T 808 是中国交通运输行业关于车载终端与监管平台之间数据交换的通信协议,核心目标是实现车辆运行状态、报警事件、定位数据、远程控制等信息的标准化传输。 ② JT/T 1…