利用 Docker 搭建 WordPress 平台(仅需五分钟即可搭建属于自己的博客网站)

阅读: 评论:0

利用 Docker 搭建 WordPress 平台(仅需五分钟即可搭建属于自己的博客网站)

利用 Docker 搭建 WordPress 平台(仅需五分钟即可搭建属于自己的博客网站)

仅需五分钟即可搭建属于自己的博客网站

  • 前期准备
  • 搭建思路
  • 演示地址
  • Docker 环境搭建
      • 安装 Docker
      • 安装 Docker-Compose
      • 镜像加速
  • 代码编写
      • 证书相关
      • Nginx 配置文件
      • 容器编排文件
      • 自动部署脚本
  • 项目启动
      • 初始化 Docker 集群
      • 部署
  • 问题排查
      • Docker 容器相关命令
          • 进入容器
          • 退出容器
          • 查看所有容器
          • 停止容器
          • 重新启动容器
          • 删除容器
          • 查看容器日志
          • 检查容器底层信息

前期准备

  1. 一台云服务器 (centos 系统,本文整体以 centos7 系统为例)
  2. 一个备案过的域名

搭建思路

wordpress 是非常著名的博客平台,由php语言编写,对于小白(非php开发人员)来说去从零搭建有些困难,需要了解php以及其相关组件。利用 Docker 容器化技术就可以跳过这一环节,仅仅需要熟悉 Docker 容器以及 Docker 集群相关知识即可。
本文案例利用 Docker Swarm 集群管理将 Wordpress、MySQL、Nginx 镜像写入编排文件并编写 Bash 脚本成功搭建 WordPress 博客系统,并且实现数据持久化以及自动化部署。

演示地址

孙先森的博客

Docker 环境搭建

安装 Docker

# 卸载已有docker
yum remove docker  docker-common docker-selinux docker-engine
# 安装需要的软件包 yum-util提供yum-config-manager功能 另外两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 阿里云源
yum-config-manager --add-repo .repo
# 查看仓库中docker 的版本
yum list docker-ce --showduplicates | sort -r
# 安装最新稳定版
yum install docker-ce
# 开机启动
systemctl start docker
systemctl enable docker
# 查看是否安装成功 输入下面命令后 出现版本信息即可
docker version

安装 Docker-Compose

# 安装docker-compose
curl -L ".29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看是否安装成功
docker-compose --version

镜像加速

Docker 仓库中的镜像大部分国内拉取速度非常慢 所以这里配置一下国内镜像

# 编辑配置文件
vim /etc/docker/daemon.json
# 加入以下内容 这是json格式,如果已经有其他配置则仅加入 "registry-mirrors" 字段即可
{"registry-mirrors": ["/"]
}

代码编写

在本地新建自己的项目目录本文案例代码中的目录均以 /project 作为项目根目录。

证书相关

域名备案后将 Nginx 相关证书文件放入 /project/nginx/configs/ 目录下

/project/nginx/keys/
/project/nginx/keys/p.key

Nginx 配置文件

在 /project 目录新建 /nginx/f 文件

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/pes;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;client_max_body_size 10M;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;# 不要拉掉这一行 用于导入 目录下所有的 .confinclude /etc/nginx/conf.d/*.conf;
}

在 /project 目录新建 /nginx/f文件,监听 80 端口 普通访问

server {listen       80;listen  [::]:80;# 域名server_name  p; location / {# 在 docker 集群访问容器名相当于访问IPproxy_pass   blog/;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

在 /project 目录新建 /nginx/f文件,监听 443 端口 https 访问

server {listen       443 ssl;server_name  p;server_tokens off;# 证书相关文件 这些并不在 nginx 容器中# 稍后利用编排文件做本地文件映射ssl_certificate /etc/nginx/conf.d/;  ssl_certificate_key /etc/nginx/conf.d/p.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;charset utf-8;location / {proxy_pass   blog/;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

容器编排文件

在 /project 目录新建 docker-compose.yaml 文件

version: "1.0"services: # Nginx 容器nginx:image: nginx:1.21.0# 本地映射到容器的目录volumes:# nginx 日志数据持久化 可以不写- /project/nginx/log:/var/log/nginx# nginx 配置文件- /project/nginx/f:/etc/f- /project/nginx/f:/etc/nginx/conf.f- /project/nginx/f:/etc/nginx/conf.f# https 证书- /project/nginx/keys/:/etc/nginx/conf.d/- /project/nginx/keys/p.key:/etc/nginx/conf.d/p.key# 端口映射ports:- 80:80- 443:443# 依赖depends_on:- blog# 网络networks:- frontend# 容器启动配置deploy:# 容器启动个数 默认 1replicas: 1# MySQL 容器blog-db:image: mysql:5.7restart: alwaysports:- 3306:3306volumes:# MySQL 数据持久化- /project/mysql/conf:/etc/mysql/conf.d- /project/mysql/data:/var/lib/mysql  environment:# root 用户密码MYSQL_ROOT_PASSWORD: rootPwd# 普通用户名、密码MYSQL_USER: shyMYSQL_PASSWORD: shyPwd# 新增数据库 databaseMYSQL_DATABASE: blognetworks:- backend# WordPress 容器blog:image: wordpress:5.9.3environment:# 操作数据库的用户、密码 跟上面 MySQL 容器配置要一致WORDPRESS_DB_USER: shy WORDPRESS_DB_PASSWORD: shyPwd# 数据库 host docker 集群中用容器名即可访问到WORDPRESS_DB_HOST: blog-db# 数据库 database 跟上面 MySQL 容器配置要一致WORDPRESS_DB_NAME: blog# 数据表名前缀 可以不写默认好像是 wp_WORDPRESS_TABLE_PREFIX: blog_volumes:# WordPress 数据持久化- /project/wordpress:/var/www/htmldepends_on:- blog-dbnetworks:- frontend- backend# 新建两个网络
networks:# 名称自定义 frontend 代表前端容器使用 backend 代表后端frontend:backend:

自动部署脚本

建议所有代码托管至 github 仓库,以便后续在集群中加入其他容器或服务。本案例提供一个自动化部署 bash 脚本,在 /project 目录下新建 build.sh 文件

#!/bin/bash
# 进入项目目录
cd /project# 拉取远端仓库最新代码
git pull origin master# 删除无用镜像文件
docker image prune -a -f # 拉取相关镜像
docker pull wordpress:5.9.3
docker pull mysql:5.7
docker pull nginx:1.21.0# 重启集群 最后一个参数 sunhy 为名称
docker stack deploy -c /project/docker-compose.yaml sunhy

项目启动

初始化 Docker 集群

# 初始化
docker swarm init

部署

# 运行编写的部署脚本
bash /project/build.sh
# 脚本运行结束后 查看服务状态
docker service ls

访问配置的域名即可进入 WordPress 安装页面,根据提示完成操作登陆后台即可管理博客网站。

问题排查

本人搭建过程中走了一些弯路,当 docker 容器启动不了或者搭建失败报错时,要根据自己的判断找出出错的容器,用 docker 命令查看容器日志输出,如果容器可以运行则可以利用命令进入容器,在容器中排查错误或尝试修改找到问题解决办法。

Docker 容器相关命令

进入容器
# attach 命令进入容器后 如果终端退出 则容器随之停止
docker attach <容器 ID>
# exec 命令进入容器后 终端退出 容器继续后台运行
docker exec -it <容器 ID> /bin/bash
退出容器
# 直接输入 exit
exit
查看所有容器
# 输出所有容器 包括已停止
docker ps -a
停止容器
# 根据 docker ps -a 输出的信息 通过 容器id 停止容器
docker stop <容器 ID>
重新启动容器
# 通过 容器id 重启容器
docker restart <容器 ID>
删除容器
docker rm -f <容器 ID>
查看容器日志
# -f 容器内部的标准输出
docker logs -f <容器 ID>
检查容器底层信息
# 以json形式输出 容器信息
docker inspect <容器 ID>

本文发布于:2024-01-30 03:49:23,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170655776719017.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23