Docker-compose安装typecho保姆级教程
前言
Typecho 浑身都透着她简洁的性格,就像一个苗条的美女那样吸引着你。以下内容全部在 Debian 11
,架构为 x86_64
的服务器上进行(架构可以使用 arch
命令进行查看)。其他系统的服务器一般不会有太大的问题,如果有问题可以在下面留言,我尽力提供帮助
安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# 安装完成后,可以用这个命令来验证是否安装成功:
docker -v
安装 Docker-Compose
可以在这里找到最新的版本,截至 2024 年 3 月24 日最新版本为 2.26.0,请自行寻找对应版本的链接
# 下载docker-compose可执行文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
#验证
docker-compose --version
部署 Typecho
创建目录
# 这个命令在data不存在时,会同时创建 /data 和 /data/blog
mkdir -p /data/blog
然后在/blog
目录下面创建以下内容
.
├── docker-compose.yml
├── logs
├── mysql
├── mysql.env
├── nginx
│ └── default.conf
├── php
│ └── Dockerfile
|── typecho
└── npm
编写./docker-compose.yml
version: "3"
services:
nginx:
image: nginx:1.22.0
container_name: nginx-blog
ports:
- "8001:80"
restart: always
environment:
- TZ=Asia/Shanghai
- PUID=0 # 想切换为哪个用户来运行程序,该用户的uid
- PGID=0 # 想切换为哪个用户来运行程序,该用户的gid
volumes:
- ./typecho:/var/www/html
- ./nginx:/etc/nginx/conf.d
- ./logs:/var/log/nginx
depends_on:
- php
networks:
- web
php:
build: php
restart: always
container_name: php-blog
expose:
- "9000"
volumes:
- ./typecho:/var/www/html
environment:
- TZ=Asia/Shanghai
- PUID=0 # 想切换为哪个用户来运行程序,该用户的uid
- PGID=0 # 想切换为哪个用户来运行程序,该用户的gid
- PHP_MAX_EXECUTION_TIME=600
- PHP_MEMORY_LIMIT=128m
- PHP_MAX_POST_BODY=10m
depends_on:
- mysql
networks:
- web
mysql:
# mysql的版本可以根据自己的喜欢去替换,内存大于或等于8GB的服务器可以使用8.0
image: mysql:5.7
restart: always
container_name: mysql-blog
environment:
- TZ=Asia/Shanghai
- PUID=0 # 想切换为哪个用户来运行程序,该用户的uid
- PGID=0 # 想切换为哪个用户来运行程序,该用户的gid
expose:
- "3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
env_file:
- mysql.env
networks:
- web
npm:
# npm反代
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
container_name: npm-blog
ports:
- '80:80' # 保持默认即可,不建议修改左侧的80
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 保持默认即可,不建议修改左侧的443
volumes:
- /data/blog/npm/data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- /data/blog/npm/letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
networks:
web:
编写./mysql.env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=blog
MYSQL_USER=username
MYSQL_PASSWORD=user_password
编写./php/Dockerfile
其中 php 目录为 php-fpm
的 Dockerfile,在官方镜像的基础上,添加了 PDO_MYSQL
(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer
为 4kb
,即一个内存页。同时设置了时区为 RPC
,来源于 issue: https://github.com/typecho/typecho/issues/1090,同时考虑到部分主题可能会用到redis加速缓存,因此添加了redis扩展的安装和启用步骤。
BASH
FROM php:7.4-fpm-buster
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.ini
RUN pecl install redis \
&& docker-php-ext-enable redis \
编写./nginx/default.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;
}
}
放置./typecho文件
下载 [Typecho](https://typecho.org/download)
博客的目录文件放置于这个目录下面
注意:如果 VPS 的内存比较小 ,推荐设置一下 SWAP,一般为内存的 1-1.5 倍即可~
wget https://www.moerats.com/usr/shell/swap.sh && bash swap.sh
启动与更新
需要在 docker-compose.yml
所在目录下面进行
# 启动
docker-compose up -d
# 停止
docker-compose stop
# 更新并启动
docker-compose pull
docker-compose up -d
NPM反向代理配置
Nginx proxy manager(以下简称 NPM)是一个很简单的反向代理工具。在添加反向代理之前,确保你已经完成了域名解析。因为前文中docker-compose文件已经包含了NPM镜像的构建,因此,理论上我们就可以输入 http://ip:81 访问了
#默认登陆名和密码:
admin@example.com
changeme
注意:
NPM会用到
80
、443
端口,所以本机不能占用(比如原来就有 Nginx)
1.添加反向代理
2.添加域名
3.配置SSL证书
然后就可以用域名来安装并访问typecho后台了。
typecho后台安装配置
1.数据库对接
此处需要注意,严格按照./mysql.env
中的字段进行填写,填写无误后,点击开始安装,就可以进入控制台页面。
2.地址重写功能
至此,大功告成,enjoy~
那些年踩过的坑
踩坑一
对接数据库之后点击开始安装,可能会出现如下报错:
解决办法:在typecho根目录创建config.inc.php
,并复制图中代码便可继续安装。
cd /data/blog/typecho
nano config.inc.php
踩坑二
无法上传图片
解决办法:
sudo chmod -R 777 /path/to/typecho/usr/uploads
踩坑三
数据库无法连接
解决办法:需要将./typecho/config.inc.php
里面的'host' => 'localhost'
修改为'host' => 'mysql'
参考资料:
1、《博客搭建 | Docker-Compose 部署》https://p3ter.me/posts/docker_compose_build_blog.html
2、【好玩儿的 Docker 项目】10 分钟搭建一个 Typecho 博客|太破口!念念不忘,必有回响!https://blog.laoda.de/archives/docker-compose-install-typecho/#7-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B