docker部署typecho
最近弄了一台azure
的学生机,虽然配置低了点,但是可以免费使用一年,用来部署一个博客是绰绰有余的。
因为我使用的博客一直都是typecho
,所以我这里记录下我使用docker
部署typecho
的全流程。
我使用的服务器是Ubuntu
系统,和CentOS
差别不是很大。
一、安装docker
无脑一键安装命令(只要你的系统支持curl命令)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
设置启动
# 设置开机自启
systemctl enable docker
# 启动服务
systemctl start docker
# 重启服务
systemctl restart docker
# 停止服务
systemctl stop docker
# 取消开机自启
systemctl disable docker
# 查看状态
systemctl status docker
安装docker-compose
docker-compose
能使我们更加方便的一次性启动多个容器
我们这里也是通过curl进行安装,docker-compose
各版本地址github
安装方式:
# 下面的仅适用x86_64的机器
curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 以下是通用的命令(主要加上了环境变量自动去获取对应架构的包)
curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
上述的下载地址和安装地址可以根据自身条件进行修改。
安装完后需要将安装目录的权限设置可执行:
chmod +x /usr/local/bin/docker-compose
创建软连接(你也可以直接将软件安装到/usr/bin/
目录下,这里相当于弄了个快捷链接过去):
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose --version
部署typecho
目录创建
首先按照以下目录结构创建目录/文件(主要是统一管理):
blog
docker-compose.yml
mysql
mysql.env
typecho
config.inc.php
编写docker-compose
docker-compose
内容如下:
version: '2'
services:
typecho:
image: joyqi/typecho:1.2.0-php7.4-apache
restart: always
ports:
- 8888:80
volumes:
- ./typecho:/app/usr
- ./config.inc.php:/app/config.inc.php
environment:
- TYPECHO_SITE_URL=http://azure.topzhang.cn
networks:
- zhangheng
db:
image: mysql:5.7.21
restart: always
ports:
- 13306:3306
volumes:
- ./mysql:/var/lib/mysql
env_file:
- mysql.env
networks:
- zhangheng
networks:
zhangheng:
# 该网络是外部的网络
driver: bridge
注意空格格式,docker-compose
内部的写法有兴趣可以自行了解。另外我们配置了network
选项这里我们就可以将mysql
数据库的配置名db
(不是固定的,可随意命名)作为mysql
的访问ip
了。即我们如果配置启动完后可以通过localhost:<端口>
访问,我们还可以使用db:<端口访问>
。注意db这种只能在docker
内部内网访问。后续我们在typecho上配置数据库地址的时候可以就使用db
。
编写mysql环境变量
# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=123456
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=123456
设置typecho的配置文件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' => '123456',
'charset' => 'utf8mb4',
'database' => 'typecho',
'engine' => 'InnoDB',
), \Typecho\Db::READ | \Typecho\Db::WRITE);
\Typecho\Db::set($db);
编写完上述的文件后执行以下命令启动所有服务:
docker-compose up -d
如需停止服务:
docker-compose down
注意事项:
- 启动完服务后注意使用
docker ps
检查下。 - 注意文件目录,根据自己的实际情况来
- 注意
docker
内外映射端口。 - 注意文件权限。
- 注意镜像文件是否有问题,有时候是镜像的版本不对导致的错误。可以去
dockerhub
上切换其他版本的镜像。 - 注意服务器开放对应端口。
- 注意系统防火墙是否开放端口。
- config.inc.php中尽量使用localhost或者docker内网别名连接,在测试过程中我有用外网ip连接导致网址访问奇慢
最后完事成功~~。