[Docker] Typecho 博客部署
Typecho 是一款基于 PHP 的博客软件,旨在成为世界上最强大的博客引擎。 Typecho 是根据 GNU 通用公共许可证 2.0 发布的。
官网:https://typecho.org/
Github:https://github.com/typecho/typecho
主要特性
- 支持多种数据库(MySQL、SQLite、PostgreSQL)
- 支持 Markdown
- 支持插件
- 支持主题
- 自定义字段
- 自定义页面
部署环境
- 系统:Debian
- 域名一个,并解析到服务器
- 安装好 Docker、Docker-compose,见VPS部署
- 安装好 Caddy,反向代理
部署
升级 packages,
apt update -y
安装常用的软件,
apt install wget curl sudo vim git
创建安装目录,
mkdir -p /root/data/docker/typecho
cd /root/data/docker/typecho
mysql
创建并编辑 mysql.env
,
MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=typecho
MYSQL_USER=username
MYSQL_PASSWORD=password
php-fpm
其中 php 目录为 php-fpm
的 Dockerfile,在官方镜像的基础上,添加了 PDO_MYSQL
(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer
为 4kb
,即一个内存页。同时设置了时区为 RPC
,来源于 issue: https://github.com/typecho/typecho/issues/1090
cd /root/data/docker/typecho
mkdir php & cd php
创建并编辑 Dockerfile
,
FROM php:8.2.7-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.ini
nginx
nginx 的配置要注意的是需要有 rewrite
规则(后续 typecho 后台有一个地址重写功能),如果需要指定域名的话,需要写 server_name
字段。这里我并没有指定 443
端口,因为我们后面用到了反向代理。
cd /root/data/docker/typecho
mkdir nginx & cd 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
创建目录,
cd /root/data/docker/typecho
mkdir typecho & cd typecho
下载源码,
wget https://github.com/typecho/typecho/releases/download/v1.2.0/typecho.zip
apt install zip -y
unzip typecho.zip
创建并编辑 docker-compose.yml
,
cd /root/data/docker/typecho
vim docker-compose.yml
version: "3"
services:
nginx:
image: nginx
ports:
- "8001: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"
volumes:
- ./typecho:/var/www/html
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- web
mysql:
image: mysql
restart: always
environment:
- TZ=Asia/Shanghai
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
networks:
web:
启动,
docker-compose up -d
升级 Typecho
备份 typecho 文件夹,
cd /root/data/docker/typecho
cp -r typecho typecho.old
删除如下目录和文件,
/admin/
/var/
/index.php
/install.php
cd typecho
rm -rf admin var index.php install.php
下载最新版本并解压替换,
wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip
unzip -n typecho.zip
重启 docker,
cd /root/data/docker/typecho
docker-compose down
docker-compose up -d
更新
进入 docker-compose.yml
所在的文件夹,
cd /root/data/docker/typecho
拉取最新的镜像,
docker-compose pull
重新更新当前镜像,
docker-compose up -d
卸载
进入 docker-compose 所在的文件夹,
cd /root/data/docker/typecho
停止容器,此时不会删除映射到本地的数据,
docker-compose down
完全删除映射到本地的数据,
cd
rm -rf /root/data/docker/typecho
反向代理
进入目录 /etc/caddy/sites
,创建并编辑 blog.amaranthinking.eu.org.conf
,
# Uncomment this in addition with the import admin_redir statement allow access to the admin interface only from local networks
# (admin_redir) {
# @admin {
# path /admin*
# not remote_ip private_ranges
# }
# redir @admin /
# }
blog.amaranthinking.eu.org {
log {
level INFO
output file /root/data/docker/typecho/blog.log {
roll_size 10MB
roll_keep 10
}
}
# Uncomment this if you want to get a cert via ACME (Let's Encrypt or ZeroSSL).
# tls {$EMAIL}
# Or uncomment this if you're providing your own cert. You would also use this option
# if you're running behind Cloudflare.
# tls {$SSL_CERT_PATH} {$SSL_KEY_PATH}
# This setting may have compatibility issues with some browsers
# (e.g., attachment downloading on Firefox). Try disabling this
# if you encounter issues.
encode gzip
# Uncomment to improve security (WARNING: only use if you understand the implications!)
# If you want to use FIDO2 WebAuthn, set X-Frame-Options to "SAMEORIGIN" or the Browser will block those requests
header {
# Enable HTTP Strict Transport Security (HSTS)
Strict-Transport-Security "max-age=31536000;"
# Enable cross-site filter (XSS) and tell browser to block detected attacks
X-XSS-Protection "1; mode=block"
# Disallow the site to be rendered within a frame (clickjacking protection)
X-Frame-Options "SAMEORIGIN"
# Prevent search engines from indexing (optional)
X-Robots-Tag "none"
# Server name removing
-Server
}
# Uncomment to allow access to the admin interface only from local networks
# import admin_redir
# Proxy everything to Rocket
reverse_proxy 127.0.0.1:8001 {
# Send the true remote IP to Rocket, so that it can put this in the
# log, so that fail2ban can ban the correct IP.
header_up X-Real-IP {remote_host}
}
}
修改权限
访问域名,出现报错:上传目录无法写入, 请手动将安装目录下的 /usr/uploads 目录的权限设置为可写然后继续升级
。
给该目录及子文件赋予所有权限,
chmod -R 777 /root/data/docker/typecho/typecho/usr/uploads
初始化配置,
数据库前缀:typecho_
数据库地址:mysql
数据库用户名:username
数据库密码:password
数据库名:typecho
cd /root/data/docker/typecho/typecho
vim config.inc.php
填入提示内容,然后点击继续安装即可。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭