docker-compose搭建个人博客

发布于 2020-03-20  654 次阅读


之前在俱乐部教过大家如何在宿主机中直接搭建wordpress博客,这里我们换一种方式:使用 docker-compose

如果不了解docker的话可以先康康我前面几篇博客,比如 docker入门

如果想直接用docker搭建博客的话可以自行百度,具体流程和俱乐部上课讲的差不多:构建服务器、构建数据库、构建wordpress,只是构建过程有些许差异

聊聊 docker-compoes :

docker-compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。可以理解为docker的“管家”,将配置docker的过程程序化,保留配置文件(.yml)使得配置过程能够轻松复现。

docker 和 docker-compose
docker-compose概念模型

简单来说,docker-compose 就是docker的集成管理器,协调部署多个docker或者docker集群

而搭建一个个人博客,大致需要服务器、数据库、博客模板这三个模块,所以用docker-compose搭建比直接使用docker搭建会方便一些。


话不多说,直接上项目地址: https://github.com/xiabee/docker-ngixn

使用方法:

  • 将整个项目拷贝到目标文件夹
  • apt install docker-compose 安装docker-compose
  • docker-compose up -d,以守护进程模式构建docker
  • 等待镜像下载,等待镜像构建
  • 完成之后,进入nginx文件夹,删除nginx_https.conf文件,保留nginx.conf(如果你想搭建hppts网站那另外说)
  • 确保nginx文件夹内有配置文件 *.conf!!!!
  • 如果是手动拷贝的conf文件,需要重启docker:docker-compose restart
  • 然后浏览器访问你的ip地址/域名,能看到wordpress的安装界面:这里面的账号密码是博客的账号密码,和文件里设置的数据库账号密码没有毛线关系
查看容器是否正常运行:docker-compose ps

代码详解:

docker-compose.yml:注意空格和缩进的对齐

分为三个模块,分别为三个对应服务:mysql, nginx, wordpress

① mysql 模块:

mysql:
        # 选中mariadb的最新版本
        image: mariadb:latest
        # 端口
        expose:
          - "3306"
        #映射本地 当前目录下mysql文件夹持久化
        volumes:
          - ./mysql:/var/lib/mysql
        #环境变量设置用户名密码
        environment:
          - MYSQL_ROOT_PASSWORD=    #这里设置密码
          - MYSQL_USER=wordpress
          - MYSQL_PASSWORD=    #这里设置密码
          - MYSQL_DATABASE=wordpress
          - MYSQL_RANDOM_ROOT_PASSWORD=1

        #这里使用命令登陆,删除后可能于新版mysql不兼容
        command: [--default-authentication-plugin=mysql_native_password, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci]
        #挂掉自动重启
        #restart: always
  • image:选择镜像,这里直接选择最新版即可
  • expose:开放端口,数据库常用端口为3306
  • volume:数据卷挂载,将docker容器内的文件映射到宿主机中,实现文件共享,同时方便后期的修改和维护
  • environment:设置环境变量,设置用户名和密码,设置数据库(DB),这里预设置为wordpress用户,使用wordpress数据库,密码自定义
  • command:博主测试,新版数据库可能不兼容wordpress,直接连接会卡bug,这里使用命令连接尽量避免出bug导致断线
  • restart:断线重启,根据个人需要自行取消注释

② wordpress 模块

 wordpress:
        # 选中带有php-fpm 的版本,wordpress docker上有很多版本,根据自己情况选择需要的版本
        image: wordpress:5.3.2-php7.2-fpm
        # 把wordpress的主体文件夹映射到本地 wordpress目录
        volumes:
            - ./wordpress:/var/www/html
        # 环境变量 根据mysql 设置的填入
        environment:
            - WORDPRESS_DB_HOST=mysql
            - WORDPRESS_DB_NAME=wordpress
            - WORDPRESS_DB_USER=wordpress
            - WORDPRESS_DB_PASSWORD=    #这里填写密码
        # 设置依赖
        depends_on:
            - mysql
        #restart: always
  • image:选择镜像,这里要选带有 fpm 的版本,因为 wordpress 原装镜像是为了兼容Apache的,而我们选择了抗并发的 nginx 作服务器,而nginx本身不支持动态的wordpress,所以需要附加 fpm 支持,这里选择的是 wordpress:5.3.2-php7.2-fpm ,这个版本是博主建站时的最新版本,可以根据需求自行修改
  • volumes:这里直接把整个网站目录挂载在宿主机中,方便后期权限管理
  • environment:设置环境变量,注意这里密码要和上面设置的密码一致
  • depends_on:设置依赖,wordpress需要与mysql共同运行
  • restart:同上,自行选择

③nginx 模块 (核心模块):

nginx:
        image: nginx:latest
        ports:
            - '80:80'
            - '443:443'
        # 映射本地,加载本地的配置
        volumes:
            - ./nginx:/etc/nginx/conf.d    #注意服务器配置文件的映射位置,如果需要修改配置,直接修改映射的文件即可
            - ./logs/nginx:/var/log/nginx
            - ./wordpress:/var/www/html  #这里选择本地wordpress即 wordpress。docker中的目录
        depends_on:
            - wordpress
        #restart: always
  • ports:端口映射,这里映射常用的80端口和443端口,分别对应http服务和https服务
  • volumes:注意,会生成一个nginx文件夹,服务器的配置文件会映射在这个文件夹内,所以修改这个文件夹的文件内容等效于直接修改配置文件

④ docker内网模式:

  • 因为懒得给网卡取名,所以使用了默认的连接方式
  • 什么都不写,它会自动生成桥接模式内网,保证容器之间的通信畅通
  • 如果需要修改连接模式可以自行添加网卡模块

nginx.conf :

server {
listen 80;              #设置监听端口,http默认端口为80
server_name localhost;

    root /var/www/html;
    index index.php;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
  • server:服务模块,一个conf文件里面可以配置多个server,这里只写了一个
  • listen:监听端口,这里我们建立http服务,所以监听80端口(如果需要建立hppts服务则需要监听443端口)
  • server_name:网站域名,这里可以直接用localhost代替
  • root /var/www/html:根目录
  • xxx_log xxx_log:文件映射,同volume,映射到本地方便查看日志
  • location:路径设置

注意!!!

docker-compose up -d之后,一定记得把nginx.conf放到宿主机nginx文件夹里面!!!因为nginx镜像直接运行时没有配置文件的......

忘记放配置文件的话......大概会和沙雕的博主一样痛苦维修一两天,然后再也不会忘了:一个nginx.conf引发的惨案

----------------------------------------------分割线-------------------------------------------

如果一切顺利的话,直接访问ip就已经可以搭建博客了......

如果不顺利的话,八成是docker-compose build失败,或者防火墙没开......

build失败可以查看日志docker-compose logs,康康报错具体内容,然后再build一次

防火墙的问题......先检查服务器防火墙,然后检查云平台防火墙:打开80端口和443端口(如果其他端口有服务需要打开话也一起打开

阿里云平台防火墙管理

(我的阿里云是要手动打开端口的,之前一直找不到原因,就很智熄

http服务的网站直接这样搭建就可以了,https的网站请看这里: 告别浏览器警告,全站开启https


"May there be enough clouds, to make a beautiful sunset."