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 的数据库,则需安装此扩展),并设置 buffer4kb,即一个内存页。同时设置了时区为 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

填入提示内容,然后点击继续安装即可。


文章目录