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连接导致网址访问奇慢

最后完事成功~~。

Last modification:June 30, 2024
如果觉得我的文章对你有用,请随意赞赏