docker 部署 typecho 博客
教程文档:https://blog.laoda.de/archives/docker-compose-install-typecho
typecho 博客_后台地址:http://localhost:8223
一 、创建必要的文件
1 、创建 mysql.env
1 2 3 4 5 6 7 8
| mkdir -p /mnt/mydisk/home/typecho && \ touch /mnt/mydisk/home/typecho/mysql.env && \ cat > /mnt/mydisk/home/typecho/mysql.env <<'EOF' MYSQL_ROOT_PASSWORD=root_pass MYSQL_DATABASE=typecho MYSQL_USER=username MYSQL_PASSWORD=password EOF
|
2 、创建 php/Dockerfile
1 2 3 4 5 6 7 8 9
| mkdir -p /mnt/mydisk/home/typecho/php && \ touch /mnt/mydisk/home/typecho/php/Dockerfile && \ cat > /mnt/mydisk/home/typecho/php/Dockerfile <<'EOF' FROM php:7.3.29-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 EOF
|
3 、创建 nginx/default.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| mkdir -p /mnt/mydisk/home/typecho/nginx && \ touch /mnt/mydisk/home/typecho/nginx/default.conf && \ cat > /mnt/mydisk/home/typecho/nginx/default.conf <<'EOF' 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; } } EOF
|
二 、下载typecho源码
需要科学网络,不然就非常慢。
1 2 3 4
| mkdir -p /mnt/mydisk/home/typecho/typecho && \ cd /mnt/mydisk/home/typecho/typecho && \ wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip && \ unzip typecho.zip
|
uploads目录添加权限(附件目录)
1
| chmod -R 777 /mnt/mydisk/home/typecho/typecho/usr/uploads
|
三 、创建 docker-compose.yml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| mkdir -p /mnt/mydisk/home/typecho && \ cd /mnt/mydisk/home/typecho && \ touch docker-compose.yml && \ cat > docker-compose.yml <<'EOF' services: nginx: image: nginx ports: - "8223: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:5.7 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: EOF
docker-compose up -d
|
2 、拉取并运行
1
| cd /mnt/mydisk/home/typecho && docker-compose up -d
|
3 、停并止删除
1
| cd /mnt/mydisk/home/typecho && docker-compose down
|
4 、拉取镜像
1
| docker pull nginx:latest
|
四 、容器维护命令
1 、查所看有运行器容的名称
1
| docker ps -a --format "{{.Names}}"
|
2 、停止 typecho 容器
3 、启动 typecho 容器
4 、重启 typecho 容器
5 、进入 typecho 容器
1 2 3
|
docker exec -it typecho bash
|
五 、创建 config.inc.php 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| mkdir -p /mnt/mydisk/home/typecho/typecho && touch /mnt/mydisk/home/typecho/typecho/config.inc.php && cat > /mnt/mydisk/home/typecho/typecho/config.inc.php <<'EOF' <?php
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');
define('__TYPECHO_THEME_DIR__', '/usr/themes');
define('__TYPECHO_ADMIN_DIR__', '/jkadmin/');
define('__TYPECHO_GRAVATAR_PREFIX__', 'https://img1.baidu.com/it/u=184448109,1805815777&fm=253&fmt=auto?w=200&h=200');
require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php';
\Typecho\Common::init();
$db = new \Typecho\Db('Pdo_Mysql', 'typecho_'); $db->addServer(array ( 'host' => 'mysql', 'port' => 3306, 'user' => 'username', 'password' => 'password', 'charset' => 'utf8mb4', 'database' => 'typecho', 'engine' => 'InnoDB', 'sslCa' => '', 'sslVerify' => true, ), \Typecho\Db::READ | \Typecho\Db::WRITE); \Typecho\Db::set($db); EOF
|

六 、进入后台-配置数据库
后台地址:http://localhost:8223
初始化配置
- 数据库适配器:
Pdo驱动Mysql适配器
- 数据库前缀:
typecho_
- 数据库地址:
mysql
- 数据库用户名:
username
- 数据库密码:
password
- 数据库名:
typecho

七 、Typecho修改默认后台登陆地址路劲对后台登陆地址进行隐藏
在根目录下找到config.inc.php文件
/* 后台路径(相对路径) / define('__TYPECHO_ADMIN_DIR__', '/admin/');
把这个/admin/路径改成自己想要的路径就行了
八 、地址重写功能

九 、Typecho 升级 php 版本
1、首先停并止删除容器
1
| cd /mnt/mydisk/home/typecho && docker-compose down
|
2、修改 php/Dockerfile 文件
- 将你的 PHP 配置从 7.3.29-fpm 升级到 7.4-fpm,你需要修改 Dockerfile,并将基础镜像替换为 php:7.4-fpm。
1 2 3 4 5 6
| FROM php:7.3.29-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
|
修改为
1 2 3 4 5
| FROM php:7.4-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
|
3、拉取 php:7.4-fpm 镜像
4、拉取并运行
- 重新创建并启动容器,会自动重新构建 PHP 服务的镜像(构建时最好开代理-要不然巨慢)
1
| cd /mnt/mydisk/home/typecho && docker-compose up -d
|
5、手动重新构建 PHP 服务的镜像
- 在项目根目录下运行以下命令,重新构建 PHP 服务的镜像(构建时最好开代理-要不然巨慢)
1
| docker-compose build php
|
Nginx 配置
后台地址:https://typecho.example.com:666
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| mkdir -pm 755 /etc/nginx/conf.d && \ touch /etc/nginx/conf.d/typecho.conf && \ cat <<'EOF' | sed '1!{/^[[:space:]]*#/d;/^[[:space:]]*$/d}' > /etc/nginx/conf.d/typecho.conf
server { listen 666 ssl; listen [::]:666 ssl;
server_name typecho.example.com;
ssl_certificate /etc/nginx/keyfile/cert.pem; ssl_certificate_key /etc/nginx/keyfile/key.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5;
location / { proxy_pass http://10.10.10.251:8223; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_redirect off; proxy_buffering on; proxy_http_version 1.1; } charset utf-8; error_page 404 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html; } } EOF
sudo systemctl restart nginx
|