typecho 部署

zy2025
2025-06-18 / 0 评论 / 8 阅读 / 正在检测是否收录...

1.使用docker-compose部署

1.安装docker和docker-compose,博主# https://clouds.emal.cc/index.php/archives/13/ 这个地址有安装详情
2.这里将原有的typecho代理成了https
3.docker images下载地址
mysql: https://package.emal.cc/httpd/img/mysql.tar
typecho: https://package.emal.cc/httpd/img/typecho.tar
nginx: https://package.emal.cc/httpd/img/nginx.tar

2.准备目录

mkdir -p {certificates,mysql,typecho}
certificates 证书存放目录
mysql 数据库数据存放目录
typecho 博客主题插件存放目录

3.创建文件

config.inc.php php配置文件
mysql.env mysql配置文件
nginx.conf nginx配置文件

for i in config.inc.php mysql.env nginx.conf
do
touch $i
done

添加权限:
chmod -R 755 ./

4.文件内容

1.config.inc.php

<?php

//start debug
//define('__TYPECHO_DEBUG__', true);

// site root path
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

// plugin directory (relative path)
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');

// theme directory (relative path)
define('__TYPECHO_THEME_DIR__', '/usr/themes');

// admin directory (relative path)
define('__TYPECHO_ADMIN_DIR__', '/admin/');

// register autoload
require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php';
// init
\Typecho\Common::init();

// config db
$db = new \Typecho\Db('Pdo_Mysql', 'typecho_');
// 由于我们的typecho后续也是允许在docker里,所以根据之前的网络配置我们可以写db来连接同在docker部署的mysql,注意端口时docker内的端口,而不是映射到docker外的
$db->addServer(array (
'host' => 'db',
'port' => 3306,
'user' => 'root',
'password' => 'your_password',
'charset' => 'utf8mb4',
'database' => 'typecho',
'engine' => 'InnoDB',
), \Typecho\Db::READ | \Typecho\Db::WRITE);
\Typecho\Db::set($db);

/** &#x5F00;&#x542F;HTTPS */
define(&apos;__TYPECHO_SECURE__&apos;true);
define('__TYPECHO_SECURE__',true);

2.mysql.env

# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=your_password
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=your_password

3.nginx.conf
############################## 公共资源 ##############################
# SSL优化参数 共享SSL参数(减少重复配置)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

server {
  listen 443 ssl;
  server_name demo.cloud.com;

  ssl_certificate /etc/nginx/ssl/fullchain.pem; # 将这路径替换为你的证书路径
  ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 将这路径替换为你的证书私钥路径

  # 关闭直接IP访问
  if ($host != "demo.cloud.com") {
      return 444;
  }

  # 全站反向代理配置
  location / {
      proxy_pass http://10.1.8.2:8003;
  }

  # 强制HTTPS跳转
  error_page 497 https://$host$request_uri;
}

server {
  listen 8003;
  server_name demo.cloud.com;
  return 301 https://$server_name$request_uri;
}

############################## 公共资源 ##############################
# 公共代理参数文件 proxy_params
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 可选:WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

4.docker-compose.yml

version: '2.1'
services:
typecho:
  image: joyqi/typecho:1.2.0-php7.4-apache
  restart: always
  volumes:
    - ./typecho:/app/usr
  environment:
    - TYPECHO_SITE_URL=https://demo.cloud.com
  networks:
    xy:
      ipv4_address: 172.18.0.10
  logging:
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "3"

db:
  image: mysql:5.7.21
  restart: always
  ports:
    - 5425:3306
  volumes:
    - ./mysql:/var/lib/mysql
  env_file:
    - mysql.env
  networks:
    xy:
      ipv4_address: 172.18.0.11
  logging:
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "3"

nginx:
  image: nginx:latest
  restart: always
  ports:
    - 5424:80
    - 5423:443
  volumes:
    - ./nginx.conf:/etc/nginx/conf.d/default.conf
    - ./certificates:/etc/nginx/ssl
  networks:
    xy:
      ipv4_address: 172.18.0.12
  depends_on:
    - typecho

networks:
xy:
  driver: bridge
  ipam:
    config:
      - subnet: 172.18.0.0/16

5.typecho文件设置

编辑Typecho站点根目录下的文件config.inc.php加入下面一行配置,否则网站后台还是会调用HTTP资源。
/* 开启HTTPS /
define('__TYPECHO_SECURE__',true);

6.启动服务

docker-compose up -d

7.Typecho设置

登录Typecho后台 -> 设置 -> 基本设置 -> 站点地址改成https的域名是必须的

8.修改你们的地址和域名

wget https://packages.emal.cc/package/typecho/blogc-20250527.tar.gz

# 更换域名
sed -i 's/demo.cloud.com/你的域名/g' docker-compose.yml
sed -i 's/demo.cloud.com/你的域名/g' nginx.conf
sed -i 's/10.1.8.2/你部署机器的IP/g' nginx.conf

# 部署typecho
docker-compose up -d
1

评论 (0)

取消