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);
/** 开启HTTPS */
define('__TYPECHO_SECURE__'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
评论 (0)