wordpress 是非常著名的博客平台,由php语言编写,对于小白(非php开发人员)来说去从零搭建有些困难,需要了解php以及其相关组件。利用 Docker 容器化技术就可以跳过这一环节,仅仅需要熟悉 Docker 容器以及 Docker 集群相关知识即可。
本文案例利用 Docker Swarm 集群管理将 Wordpress、MySQL、Nginx 镜像写入编排文件并编写 Bash 脚本成功搭建 WordPress 博客系统,并且实现数据持久化以及自动化部署。
孙先森的博客
# 卸载已有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
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
在 /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 swarm init
# 运行编写的部署脚本
bash /project/build.sh
# 脚本运行结束后 查看服务状态
docker service ls
访问配置的域名即可进入 WordPress 安装页面,根据提示完成操作登陆后台即可管理博客网站。
本人搭建过程中走了一些弯路,当 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 条评论) |