Docker 安装 typecho

in Docker with 0 commentand 27 read

准备换一个博客系统,发现 typecho 挺不错,刚好又学习了 Docker,所以决定使用 Docker 跑 typecho。本文使用的系统为 Ubuntu 18.04。

构建 php 镜像

由于官方的 PHP 镜像中没有安装 pdo_mysql 扩展,因此我们需要自行构建一个带有 pdo_mysql 的 PHP 镜像。

进入某个文件夹(随便哪个文件夹都行)

cd /home/app

新建 Dockerfile 文件

vim Dockerfile

填写如下内容,保存

FROM php:7.2-fpm
MAINTAINER zaobai <imzaobai@gmail.com>

RUN apt-get update \
  && docker-php-ext-install pdo_mysql \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

构建镜像

docker build -t zaobai/php:7.2-fpm .

接着 docker images 就能看到我们自己构建的镜像

REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
zaobai/php                                      7.2-fpm             2f37dc09991e        4 days ago          367MB
php                                             7.2-fpm             2657319eef49        9 days ago          367MB

准备各种配置文件

也是在 /home/app 文件夹下面,准备如下文件和文件夹

# app文件夹下
- docker-compose.yml
- mysql(mysql文件夹,用来存放mysql数据)
- mysql.env(mysql镜像的环境变量配置文件)
- typecho.conf(nginx配置文件)
- typecho(typecho的安装文件,github下载即可)

mysql.env 内容如下

# MySQL的root用户默认密码
MYSQL_ROOT_PASSWORD=123456
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=123456

typecho.conf 内容如下

server {
    listen 80;
    
    server_name nextyu.com;

    index index.html index.htm index.php;

    access_log  /var/log/nginx/typecho_access.log  main;


    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
    }

    location ~ .*\.php(\/.*)*$ {
        include fastcgi.conf;
        fastcgi_pass   php-fpm:9000;
    }
}

docker-compose.yml 内容如下

version: '2'
services:
  nginx:
    image: nginx:1.13.9-alpine
    ports:
      - "80:80"
    restart: always
    volumes:
      - ./typecho:/app
      - ./typecho.conf:/etc/nginx/conf.d/default.conf
      - logs:/var/log/nginx
    links:
      - php-fpm
    depends_on:
      - php-fpm
  php-fpm:
    image: zaobai/php:7.2-fpm
    restart: always
    volumes:
      - ./typecho:/app
    links:
      - db
    depends_on:
      - db
  db:
    image: mysql:5.7.23
    restart: always
    ports:
      - 3306:3306
    volumes:
      - ./mysql:/var/lib/mysql
      - logs:/var/logs/mysql
    env_file:
      - mysql.env
volumes:
  logs:

接着下载 typecho 源码

git clone https://github.com/typecho/typecho typecho

启动 typecho

也是在 /home/app 文件夹下面

启动容器

docker-compose up -d

查看容器状态

docker-compose ps

我们会看到一共跑起来了三个容器,分别是:mysql、nginx、php

           Name                         Command              State                    Ports
-------------------------------------------------------------------------------------------------------------
app_db_1_65b8f2ab4e04        docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp
app_nginx_1_c1bfa62e209d     nginx -g daemon off;            Up      0.0.0.0:80->80/tcp
app_php-fpm_1_ee33b833fbe4   docker-php-entrypoint php-fpm   Up      9000/tcp

配置 typecho

打开浏览器,输入域名,或者ip,进入 typecho 页面。

!!!注意

配置界面的数据库地址一定要填写 docker-compose ps 命令展示的 MySQL 容器的名称 app_db_1_65b8f2ab4e04

接着一路配置下去就行了。

一些命令

进入容器

docker exec -it [container_id/container_name] /bin/bash

alpine linux(特殊)

docker exec -it [container_id/container_name] sh
docker-compose up -d
docker-compose stop
docker-compose ps

参考资料

评论