GG资源网

Docker Compose安装使用,及搭建nginx+php+mysql基础应用实例(WordPress如何调试和修复503服务不可错误?)

Docker Compose安装使用,及搭建nginx+php+mysql基础应用实例

当在容器搭建多个实例时,如果用run命令,需要很多遍,如搭建LNMP(nginx+php+mysql),这时可以考虑用Compose这个服务来搭建配置。

一、 Docker Compose简介:

Docker-Compose 是 Docker 的一种编排服务,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。compose、machine 和 swarm 是docker 原生提供的三大编排工具,又称docker三剑客。

通过 Docker-Compose 用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。

Compose 中有两个重要的概念:

  • 服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

运用Docker-Compose前提还要知道Dockerfile的运用,可参考另一篇文章中有介绍: dockerfile配置使用

二、 Docker Compose的安装使用:

1):安装

Docker Compose是独自产品,需要在安装docker后单独安装。相关官方文档查看: https://docs.docker.com/compose/

在github地址查看版本安装: https://github.com/docker/compose/releases

目前为止最新为1.29.2,安装此版本。

#下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

安装完成,查看版本

docker-compose --version

注意:如果安装完成后,docker-compose命令无法使用,请检查您的路径。您还可以/usr/bin在路径中创建一个软链接如下。

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2):基本命令使用

docker-compose up //启动yml文件定义的 container
docker-compose up -d //后台运行
docker-compose up --help //查看up帮助
docker-compose -f docker-compose.yml up //-f 指定yml文件
docker-compose stop //停止
docker-compose start
docker-compose ls //查看
docker-compose down //停止删除
docker-compose ps
docker-compose images
docker-compose exec {service_name} {bash}

三、Compose搭建nginx+php+mysql实例

安装版本如下:

centos 8 ,docker 20.10.7,docker-compose 1.29.2,nginx 1.20.1,php 8,mysql 5.7.34

1):构建目录结构

镜像版本,默认选择标签Tag为 latest 最新版本,别写错了,写错直接报错read: connection reset by peer

创建目录lnmp_compose,将相关配置文件放在此目录。

目录结构如下:

[root@localhost lnmp_compose]# tree
.
|-- docker-compose.yml
|-- mysql
| -- conf.d
|
-- my.cnf
|-- nginx
| |-- conf.d
| | -- www.conf
|
-- Dockerfile
|-- php
| -- Dockerfile
-- www
|-- conn.php
`-- index.php
6 directories, 7 files

2):配置php的Dockerfile

因为php涉及到很多扩展库,所以我们需要用到Dockerfile配置扩展创建新的镜像。

vim /lnmp_compose/php/Dockerfile

输入以下内容,从centos镜像采用yum安装php8的版本。内容参考: yum方式安装php最新版

FROM centos
RUN groupadd -g 1002 www && useradd -u 1001 -g www -s /sbin/nologin www \\
&& yum -y install epel-release yum-utils \\
&& yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm \\
&& dnf -y module list php \\
&& dnf -y module enable php:remi-8.0 \\
&& dnf -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis --skip-broken \\
&& sed -i 's/user = apache/user = www/g' /etc/php-fpm.d/www.conf \\
&& sed -i 's/group = apache/group = www/g' /etc/php-fpm.d/www.conf \\
&& sed -i 's/listen = \\/run\\/php-fpm\\/www.sock/listen = 0.0.0.0:9000/g' /etc/php-fpm.d/www.conf \\
&& sed -i 's/listen.allowed_clients = 127.0.0.1/;listen.allowed_clients/g' /etc/php-fpm.d/www.conf \\
&& mkdir /run/php-fpm
CMD ["php-fpm","--nodaemonize"]

Dockerfile相关参数解释,创建www用户及www用户组,安装php扩展包。

需注意的坑:

  • 1. 创建www用户和组,uid和gid需要和宿主机www用户一致,宿主机 id www 查看gid和uid。这里宿主机gid 1002,uid 1001。
  • 2. /etc/php-fpm.d/www.conf 配置文件,默认监听 listen = run/php-fpm/www.sock 改为 listen = 0.0.0.0:9000 ,网上很多写127.0.0.1:9000也行,但是可能版本原因,我亲测不行。
  • 3. /etc/php-fpm.d/www.conf 配置文件,默认只允许本机IP,需要将 listen.allowed_clients = 127.0.0.1 改注释掉。
  • 4. 缺少 /run/php-fpm 文件夹,无法启动php-fpm,无法创建PID文件,在容器中php-fpm启动报错:ERROR: Unable to create the PID file (/run/php-fpm/php-fpm.pid).: No such file or directory (2)ERROR: FPM initialization failed,需自己创建 mkdir /run/php-fpm 。

3):配置nginx的Dockerfile

由于也需要更改www用户,所以需要Dockerfile文件重建镜像。

有两种,可以自行根据自己需求配置。

1:第一种,可以直接nginx官方镜像,默认最新版本,在里面更改配置文件。

同时更新apt-get,和安装vi,以便后续在容器中简单编辑配置文件。配置如下:

FROM nginx
RUN groupadd -g 1002 www && useradd -u 1001 -g www -s /sbin/nologin www \\
&& apt-get -y update && apt-get -y install vi \\
&& sed -i 's/user nginx/user www/g' /etc/nginx/nginx.conf

2:第二种,直接从centos镜像安装nginx指定版本,构建新的nginx镜像。

这种无需安装vi等命令,已具备基础的命令可操作性强一点。这里采用yum的安装方式。配置如下:

FROM centos
RUN groupadd -g 1002 www && useradd -u 1001 -g www -s /sbin/nologin www \\
&& yum install -y yum-utils \\
&& echo -e "[nginx-stable] \\
\\nname=nginx stable repo \\
\\nbaseurl=http://nginx.org/packages/centos/\\$releasever/\\$basearch \\
\\ngpgcheck=1 \\
\\nenabled=1 \\
\\ngpgkey=https://nginx.org/keys/nginx_signing.key \\
\\nmodule_hotfixes=true \\
\\n[nginx-mainline] \\
\\nname=nginx mainline repo \\
\\nbaseurl=http://nginx.org/packages/mainline/centos/\\$releasever/\\$basearch \\
\\ngpgcheck=1 \\
\\nenabled=0 \\
\\ngpgkey=https://nginx.org/keys/nginx_signing.key \\
\\nmodule_hotfixes=true" > /etc/yum.repos.d/nginx.repo \\
&& yum install -y nginx-1.20.1 \\
&& sed -i 's/user nginx/user www/g' /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]

需注意的坑:

  • 1. 同php一样,www用户和组,uid和gid需要和宿主机www用户一致。
  • 2. 配置文件 /etc/nginx/nginx.conf 中替换用户时, user nginx 中间是两个空格,不是一个。

4):配置nginx的www.conf文件

在宿主机,创建的 nginx/conf.d 中配置 www.conf 文件,内容如下:

server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \\.php$ {
root /var/www/html;
fastcgi_pass php_compose:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}

需注意的坑:

  • 1. 路径问题, location ~ \\.php$ 的root为php容器中的路径, location / 中的root为nginx容器中的路径,不能像装在同一机器下配置一样的路径,因为现在动静分离,需要考虑到对应容器是否存在这个默认路径,否则报404错误。
  • 2. fastcgi_pass 配置为 “容器名:端口” 方式。

5):配置yml文件

这里yml已命名为docker-compose.yml

vim docker-compose.yml

输入以下内容:

version: '3.8'
services:
nginx:
build: ./nginx
container_name: nginx_compose
ports:
- "80:80"
- "443:443"
volumes:
- "$PWD/nginx/conf.d:/etc/nginx/conf.d"
- "$PWD/www:/usr/share/nginx/html"
depends_on:
- "php"
- "mysql"
networks:
- lnmp
php:
build: ./php
container_name: php_compose
volumes:
- "$PWD/www:/var/www/html"
ports:
- "9000:9000"
networks:
- lnmp
mysql:
image: mysql:5.7.34
container_name: mysql_compose
ports:
- "3306:3306"
volumes:
- "$PWD/mysql/conf.d/my.cnf:/etc/mysql/conf.d/mysql.cnf"
networks:
- lnmp
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: lnmp
MYSQL_PASSWORD: lnmp123
networks:
lnmp:

相关参数说明:

  • version: '3':指的docker-compose 的版本,有1,2,3版本,对应docker版本,可参考:[https://docs.docker.com/compose/compose-file/compose-file-v3/](https://docs.docker.com/compose/compose-file/compose-file-v3/)
  • services:指的安装哪些服务,lnmp服务
  • container_name:容器的名字,docker ps -a 中的
  • image:引入镜像,若是本地没有,就去官网下载
  • networks:自定义网络,默认是桥接模式,可以用docker images ls 看
  • volumes:相当于bind这样的数据卷挂载,可以使用绝对或者相对路径
  • build:通过Dockerfile构建镜像
  • ports: 开放端口,比如3306:3306 ,那这样宿主机也可以连接管理
  • depends_on:依赖启动,先启动php,mysql,再启动nginx
  • environment :mysql参数设置,这里例子为,设置root密码,创建wordpress数据库,创建user用户及密码。

6):创建测试网页

在www创建index.php页面,测试php和nginx是否连接成功:

vim www/index.php

内容:

<?php
phpinfo();
?>

创建conn.php页面,测试php和mysql是否连接成功:

vim www/conn.php

内容:

<?php
$servername = "mysql_compose";
$username = "lnmp";
$password = "lnmp123";
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);
echo "连接mysql成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>

7):启动docker-compose并测试

后台启动:

docker-compose up -d

查看状态为up成功:

docker-compose ps

打开浏览器分别输入自己的服务器地址如: 127.0.0.1/index.php 和 127.0.0.1/conn.php 地址连接测试,成功如下图所示:

配置成功完成!!!

四:dnmp全家桶安装包(扩展)

DNMP(Docker + Nginx/Openresty + MySQL5,8 + PHP5,7,8 + Redis + ElasticSearch + MongoDB + RabbitMQ)是一款全功能的LNMP一键安装程序,支持Arm CPU

这套包含所有软件,根据自己选择需要的软件,配置docker-compose.yml和.env环境文件即可。

github地址:https://github.com/yeszao/dnmp

不用自己编写docker-compose.yml,方便试用。上手容易,测试环境,生成环境都可用。

WordPress如何调试和修复503服务不可错误?

在使用WordPress过程中,网站后台经常会出现白屏,并显示“503服务暂时不可用503 Service Unavailable Error”错误。那么WordPress如何调试和修复503服务不可错误?

“503服务不可用错误”表示您的网站处于活动状态,但由于特定原因而无法访问服务器。它使WordPress前后台都无法访问。根据服务器的配置,错误的提示方式可能有所不同。例如,您可能会看到下面的错误代码:

  •   503服务不可用
  •   Http/1.1服务不可用
  •   HTTP服务器错误503
  •   503错误
  •   HTTP 503
  •   HTTP错误503

导致这个错误一般由几种可能,可以从错误的WordPress插件或主题(行为不当的自定义PHP脚本)到服务器端问题几个方面去排查。但是,您不必担心,因为修复503服务不可用错误相对容易。

错误的原因可能有几个方面,所谓我们需要逐一进行排查,然后尝试各种解决方案来解决该问题。

原因1、错误的WordPress插件

如果在安装或更新特定插件后遇到503错误,则插件可能是罪魁祸首。只需删除对应的插件即可解决。但是,如果您不知道哪个插件引起了503错误,可以通过禁用所有插件来诊断问题的根源。

停用所有WordPress插件

插件冲突或损坏是WordPress 503错误的一个常见原因。因此,您需要停用有故障的插件。但是现在网站后台无法访问了,我们只能通过FTP或服务器文件管理器来禁用WordPress插件,具体方法如下:

1.使用FTP或文件管理器访问您网站的wp-content目录。

2.将plugins文件夹重命名为其他名称,比如 plugins123,这样就可以停用所有插件。然后尝试登录 通过网址您的域名/wp-admin/访问并登录后台,如果此操作解决了问题,则意味着您的插件有问题。我们现在需要做的就是找到确切的罪魁祸首。

WordPress如何调试和修复503服务不可错误? (https://www.wpmee.com/) WordPress使用教程 第1张

3.将plugins123文件夹更改回原来的名称plugins。这样,WordPress可以重新访问您的插件,但是所有插件仍处于非活动状态。

4.登录到您的WordPress仪表板,然后访问插件 > 已安装的插件,一次激活一个插件,然后刷新网站,如果激活某个插件后出现503错误,那说明就是这个插件导致的错误。

5.通过FTP或文件管理器,访问wp-content/plugins目录,删除有问题的插件即可。

原因2、错误的WordPress主题

如果主题有错误或已经损坏,也有可能会导致无法正常登录网站。所以我们可以禁用掉当前的主题,并恢复为默认主题。

方法1、通过FTP或文件管理器切换主题

1.使用FTP或文件管理器访问您网站的wp-content目录。

2.进入到themes目录下,重命名当前使用的主题。

倡萌建议一定要保留至少一个WordPress默认自带的主题,以便主题有问题的时候可以切换为自带主题。重命名主题文件夹以后,网站前台页面是无法访问的,但是可以直接访问后台 wp-admin 进行登录。

WordPress如何调试和修复503服务不可错误? (https://www.wpmee.com/) WordPress使用教程 第2张

3.重命名了主题以后,试下是否可以登录,如果可以登录,说明是主题有问题。登录后台以后,你可以在外观 - 主题,重新上传安装主题或者更换为其他主题。

方法2、通过phpMyAdmin更换主题

如果您不记得正在使用的主题名称,则无需担心。一般主机管理后台都会提供有phpMyAdmin等数据库管理界面,登录你的主机后台,进入到phpMyAdmin界面,然后按照下面的操作进行,假设你的wp-content/themes 目录中有一个WP自带的默认主题twentyseventeen:

1.在当前网站的数据库中,进入wp_options表,并通过翻页,找到template和stylesheet字段。

2.您当前使用的主题名称位于option_value列上。双击名称,并将其重命名为twentyseventeen(也就是主题文件夹的名称)。

WordPress如何调试和修复503服务不可错误? (https://www.wpmee.com/) WordPress使用教程 第3张

3.完成后,重新刷新您的网站。

如果停用当前使用的主题后 WordPress 503错误消失,说明当前使用的主题版本有错误,请尝试更新主题,或者换一个WordPress主题。

原因3、错误的自定义PHP代码

如果503服务不可用错误仍然存​​在,则可能是网站上某个地方的自定义PHP代码段有问题而引起的。

但是,您如何确定哪些第三方代码段是有问题的代码段?

因此,请尝试调试您的站点以诊断和修复有问题的地方。

启用WP_DEBUG调试模式

由于WordPress 503错误通常使您无法进入网站后台,因此请从FTP或文件管理器激活WP_DEBUG模式,以便您可以检查错误日志。请按照以下步骤操作:

1.通过FTP或文件管理器进入到网站的根目录文件夹。找到并打开wp-config.php文件,你可以在文件里找到一行代码:

define (\'WP_DEBUG\', false);

2.将上面的那行代码替换为:

define (\'WP_DEBUG\', true); //开启调试模式

define (\'WP_DEBUG_LOG\', true); //将调试日志写入文件

define (\'WP_DEBUG_DISPLAY\', false); //不要在网站前台显示错误代码

3.保存,然后刷新网站。然后通过文件管理器访问 wp-content 目录,应该可以看到一个名为debug.log的文件,下载后使用Excel打开就可以查看错误日志。

4.然后你就需要在错误日志中,查看具体的错误问题,并修复它们。

原因4、与服务器相关的问题

如果以上方法仍然没有结果,则问题可能出在您的Web服务器上。您可以尝试使用下面三种方法。

1、限制WordPress心跳

WordPress Heartbeat是一个内置API,可让您的网站具有自动保存文章功能。

要确定WordPress心跳是否是WordPress网站上“503服务暂时不可用”错误的原因,请在将下面的代码添加到主题的functions.php文件开头的<?php下面中:

add_action(\'init\', \'wpkj_stop_heartbeat\', 1);

function wpkj_stop_heartbeat(){

wp_deregister_script(\'heartbeat\');

}

保存后,请重新刷新网站并查看错误是否消失。如果它不能解决503WordPress错误,则WordPress心跳不是问题的根本原因。因此,不要忘记从functions.php文件中删除刚才添加的代码。

2、限制Google的最大抓取速度

Google和其他搜索引擎会抓取您的网站来索引您的内容-他们会定期访问您的网站以收集内容并确定其他排名指标。

此爬网过程可能会损害您的服务器资源。因此,它可能会降低您的网站速度,并导致503 WordPress错误。

幸运的是,将网站集成到Google Search Console后,您可以限制最大爬网速度。从“抓取速度设置”页面上执行此操作,或请求Google限制您的网站抓取速度。

您所做的更改将于三个月内生效。此外,如果您的网站具有非WWW和WWW版本,则必须同时执行这两个操作。

3、增加服务器资源

您是否一直收到WordPress 503错误?如果是这样,请检查您的Google Analytics获取其他流量统计根据。如果您获得网站的流量有一个比较大的提升,则肯定是服务器资源不足了。

但是,如果您没有多余的流量却仍然看到503错误,则可能是服务器内存不足或CPU占用过高。

如果您当前的托管计划不能支持较大流量,那么该是时候切换到新的WordPress托管服务或升级您的托管套餐了。

由于网站搬家,部分链接失效,如无法下载,请联系站长!谢谢支持!
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » Docker Compose安装使用,及搭建nginx+php+mysql基础应用实例(WordPress如何调试和修复503服务不可错误?)

发表回复

CAPTCHAis initialing...