ubuntu操作系统使用docker容器搭建typecho博客详细教程

ubuntu操作系统使用docker容器搭建typecho博客详细教程

Dawn
2021-02-26 / 0 评论 / 63 阅读 / 正在检测是否收录...

1.安装docker和docker-compose

这一步不再赘述,详情参考博客文章 ubuntu安装docker和docker-compose

2.需要的镜像

今天笔者这里使用以下三个镜像:

  • nginx
  • dawn/php:7.2.3-fpm
  • mysql:5.7

(PS:笔者这样做是为了留出单独的phpnginx环境以便后续使用,如果直接使用typecho镜像会更加简单,有兴趣的可以研究一下, 这里不做赘述!)

其中nginxmysql:5.7为官方镜像,dawn/php:7.2.3-fpm是在官方的基础上添加了pdo_mysql(这样可以使用mysql作为博客的数据库)

dawn/php:7.2.3-fpm的Dockerfile如下:

FROM php:7.2.3-fpm
LABEL maintainer="dawn" \
      email="****@qq.com" \
      version="7.2.3"

RUN apt-get update \
        && docker-php-ext-install pdo_mysql \
        && echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini

3.配置

新建blog文件夹,其目录结构如下:

|--mysql                    //mysql持久化目录
|    └──conf                //mysql配置目录
|    |--data                //mysql数据库目录
|    |--db                    //单独建的存放sql文件的目录
|    |--logs                //mysql日志目录
|--nginx                    //nginx 配置文件的持久化目录
|    └──conf                //nginx配置目录
|        └──nginx.conf        //nginx全局配置文件
|        |--blog.conf        //博客站点配置文件
|    |--logs                //nginx日志目录
|--ssl                        //SSL证书目录
|--www                        //php站点根目录
|--tomcat                    //tomcat持久化目录(博客用不到,不展开叙述)
|--docker-compose.yml        //docker-compose 配置文件
|--Dockerfile                //Dockerfile文件
|--mysql.env                //mysql配置信息
3.1 配置docker-compose.yml
version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./www/:/var/www/html
      - ./ssl/:/var/www/ssl
      - ./nginx/blog.conf:/etc/nginx/conf.d/blog.conf
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
    restart: always
    depends_on:
      - fpm
      - mysql
    environment:
      - TZ=Asia/Shanghai


  fpm:
    build: ./
    image: dawn/php:7.2.3-fpm
    container_name: php_fpm
    ports:
      - "9000:9000"
    volumes:
      - ./www/:/var/www/html
    restart: always
    depends_on:
      - mysql
    environment:
      - TZ=Asia/Shanghai


  mysql:
    image: mysql:5.7
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    restart: always
    env_file:
      - mysql.env

其中:

  • version 指定docker-compose版本
  • image 指定镜像名称
  • build 指定Dockerfile上下文目录
  • ports 指定端口映射
  • container_name 指定容器名字
  • volumes 指定文件挂载映射
  • depends_on 指定服务启动时的先后顺序,指定的服务会先于当前服务启动
3.2 配置nginx

全局配置文件nginx.conf,参考内容如下:

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

站点配置目录blog.conf,参考内容如下:

server {
        listen 80;
        server_name dawnsite.cn www.dawnsite.cn;  # 更换为你的站点域名
        # http重定向到https
        return 301 https://$host$request_uri;
}

server {
        listen 443;
        server_name dawnsite.cn www.dawnsite.cn;  # 更换为你的站点域名
        root /var/www/html/build;  # 有的为/var/www/html,这里视项目情况更改
        index index.php index.html index.htm;
        ssl on;
        ssl_certificate   /var/www/ssl/4884437_dawnsite.cn.pem;  # 更换为你的站点证书
        ssl_certificate_key  /var/www/ssl/4884437_dawnsite.cn.key;  # 更换为你申请的私钥
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        # 伪静态规则
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
        # 非www开头->www开头  更换为你的站点域名
        if ($host ~ '^dawnsite.cn'){
            return 301 https://www.dawnsite.cn$request_uri;
        }    

        location ~ \.php$ {
            fastcgi_pass   fpm:9000;
            fastcgi_index  index.php;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}
3.3 配置mysql

mysql配置信息mysql.env,参考内容如下:

# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=password
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=user
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=password
# 时区
TZ=Asia/Shanghai

4.安装

4.1 编排容器

blog目录下执行以下命令:

docker-compose up -d

查看进程

docker-compose ps
4.2 安装typecho
4.2.1 下载typecho

容器编排成功后,进入blog目录下的www目录开始下载typecho操作

wget http://typecho.org/downloads/1.1-17.10.30-release.tar.gz

解压

tar -xzvf 1.1-17.10.30-release.tar.gz

解压后所有文件会在一个build文件夹内,这也就是我为什么在blog.conf中那样配置root的原因,当然你也可以把他从build移出来放到www目录下,这样blog.conf就会变成大多数人说的那样啦

4.2.2 配置typecho

浏览器输入域名URL,进入typecho安装页面

image-20210226104203984

PS:数据库地址需填入mysql镜像的名称(与docker-compose.yml中的配置相对应),数据库名与 mysql.env 中创建的数据库名一致

image-20210226104610816

如果出现以上界面,只需要按照提示在你的typecho软件目录下新建config.inc.php文件,并写入内容即可

5.博客迁移

迁移时只需要把整个blog目录打包传输至安装有docker和docker-compose的新服务器,然后重新编排即可

docker-compose up -d

如果是将原有博客结构升级为docker容器的话,只需要将你的typecho文件夹复制到www文件夹中,然后将你的数据库sql文件导入到新建的数据库内即可!

PS:记得修改config.inc.php数据库配置和mysql.env对应噢,或者你直接把config.inc.php删掉,重新初始化一下

6.参考资料

0

评论 (0)

取消