美文网首页
CentOS 7 使用 docker 安装 typecho 博客

CentOS 7 使用 docker 安装 typecho 博客

作者: 幻影翔 | 来源:发表于2020-01-01 12:18 被阅读0次

    原文地址 https://segmentfault.com/a/1190000020606057

    前言

    我的博客 https://jack006.com 用的是 typecho,一直使用的是 阿里云ECS 直接安装的 MySQL 和 PHP,由于买的时间比较早,当时用的是 CentOS 6.5。后来想玩 docker,发现 docker 只支持 CentOS 7+,加上之前的系统上东西太乱了,所以这次有时间就将数据库和 typecho 源码备份了一下,然后换了一个纯净的 CentOS 7.6 的镜像。由于我买的 ECS 是 1CPU 1GB 内存,之前还一直担心跑不起来 docker,这次升级完之后发现完全没问题,内存用了一半都不到哈~于是记录下这个过程,说不定可以帮到其他小伙伴。

    升级系统,建议备份好数据,由于我的 ECS 上面主要就一个博客,所以直接用全新的镜像,安装完后啥都木有,当然也可以直接将快照创建为自定义镜像,然后升级系统的时候选择即可该快照即可。

    本人也是 docker 小白,如果对 docker 不熟悉,可以先看笔者的另一篇文章:

    写给前端工程师的 docker 入门

    下面开搞:

    配置新用户

    如果想要用非 root 用户执行 docker 命令,请参考此步骤。
    新增的用户名叫 savokiss。
    下面的命令使用 root 执行。

    添加用户

    useradd savokiss
    

    修改密码

    passwd savokiss
    

    加入 sudo 权限

    visudo
    

    找到下面两行,将新用户写入,如:

    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    savokiss ALL=(ALL) ALL
    

    创建 docker 用户组

    groupadd docker
    

    将新用户加入 docker 组

    usermod -aG docker savokiss
    

    让变更生效:

    newgrp docker
    

    然后用户 savokiss 执行 docker 命令时就不用加 sudo 了

    安装 docker

    以下命令均以 root 用户执行

    下载安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    添加国内 yum 源

    yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    

    更新缓存,安装 docker-ce

    yum makecache fast
    yum install docker-ce
    

    启动 docker

    systemctl enable docker
    systemctl start docker
    
    docker run hello-world
    

    hello-world 是官方的测试镜像。

    国内镜像源加速

    如果启动失败的话可以更换为 daocloud 的 docker 源,然后重新 run:

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
    

    也可以直接修改 /etc/docker/daemon.json 中的 registry(文件不存在就新建一个)

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com"
      ]
    }
    

    修改后重启服务

    systemctl daemon-reload
    systemctl restart docker
    

    如果能看到以下界面,就说明 hello world 成功咯:

    $ docker run hello-world
    
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    ca4f61b1923c: Pull complete
    Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1\. The Docker client contacted the Docker daemon.
     2\. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3\. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4\. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://cloud.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/engine/userguide/
    

    配置容器

    这里主要获取 nginx@1.16.1、mysql@5.7、php@7.2 三个镜像,如有需要可以自行修改版本号。

    获取 MySQL 镜像

    docker pull mysql:5.7
    

    创建容器 main_mysql

    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name main_mysql mysql:5.7
    

    参数说明:

    • -d 代表 daemon,即后台运行
    • -p 是设置宿主机和容器的端口号
    • -e 设置 mysql 密码
    • --name 给当前 container 起一个名字

    获取 PHP 镜像

    docker pull php:7.2-fpm
    

    创建容器 main_phpfpm

    docker run -d -v /home/savokiss/www:/var/www/html -p 9000:9000 --link main_mysql:mysql --name main_phpfpm php:7.2-fpm
    

    参数说明:

    • -v 代表 volumes,即挂载宿主机和容器的目录映射
    • --link 代表链接外部 container,本例中即 main_mysql

    测试目录映射

    先进到容器内部:

    docker exec -it main_phpfpm /bin/bash
    

    这句话简单来说就是将容器中的 /bin/bash 连接到你当前的命令行,相当于进入容器中执行命令。

    执行完后会进入容器的 /var/www/html
    然后来创建个文件:

    touch test.php
    exit
    

    然后在宿主机中的 /home/savokiss/www 目录下就会发现一个 test.php,说明映射目录成功啦~

    PHP 扩展安装

    由于 typecho 需要使用 mysql pdo。再次用上面的命令进入 main_phpfpm 容器,然后执行:

    docker-php-ext-install pdo_mysql
    

    然后执行 php -m 就可以看到已经安装的扩展

    获取 nginx 镜像

    docker pull nginx:1.16.1
    

    创建 nginx 容器

    docker run -d -p 80:80 -p 443:443 --name main_nginx -v /home/savokiss/www:/var/www/html -v /home/savokiss/conf/nginx:/etc/nginx/conf.d --link main_phpfpm:phpfpm --name main_nginx nginx:1.16.1
    

    这里由于网站配置了 https,所以需要打开 443 端口,并且除了挂载网站目录,也将 nginx 的 conf.d 目录挂载到了宿主机

    然后到 /home/savokiss/conf/nginx 目录下,

    1. 新建 jack006.com.conf 文件,内容如下,已经开启了 https 和伪静态:
    server {
        listen 80;
        listen 443 ssl http2 reuseport;
        server_name jack006.com www.jack006.com;
        root /var/www/html/jack006.com;
        index index.php index.html index.htm;
        include /etc/nginx/conf.d/ssl.config;
    
        access_log /var/log/nginx/typecho_access.log main;
    
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
    
        if ($server_port !~ 443){
            rewrite ^(/.*)$ https://$host$1 permanent;
        }
    
        location ~ .*\.php(\/.*)*$ {
            include        fastcgi_params;
            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;
            fastcgi_index  index.php;
    
            fastcgi_pass   phpfpm:9000;
        }
    
       location / {
                    index index.html index.php;
                    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;
                    }
            }
    
    }
    
    1. 新建 ssl.config 文件
        ssl_certificate /etc/nginx/conf.d/cert/perm.pem;
        ssl_certificate_key /etc/nginx/conf.d/cert/perm.key;
        ssl_session_cache shared:SSL:1m;
        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;
    
    1. 创建 cert 文件夹,将 https 证书 perm.pem, perm.key 放进去

    如果不需要 https,上面的配置文件就不需要后面这两步,同时 conf 文件内容适当删减即可。

    注意:上面的配置文件中的路径都是对于容器内部来说的。

    提示:如果启动失败,可以使用 docker logs main_nginx 查看错误日志,启动成功后是可以进入到容器内部的。修改配置文件后可能需要进入容器内部执行 nginx -s reload,或者直接在宿主机 docker restart main_nginx 即可。

    部署 typecho

    由于笔者是迁移,typecho 源码都在 github 上,所以直接 git clone 到 /home/savokiss/www/ 中即可。然后用工具连接数据库将 sql 导入就完成啦。

    相关文章

      网友评论

          本文标题:CentOS 7 使用 docker 安装 typecho 博客

          本文链接:https://www.haomeiwen.com/subject/tfwwoctx.html