nginx容器安装php-fpm

原因

很多情况下,使用LNMP可以直接下载lnmp的容器,不过这些容器个头都太大,基本有2G左右,如果想做个集群测试,那是非常痛苦的,所以需要一个比较精简,安装方便的容器来实现Nginx+php-fpm,所以就有了本文墂的目标

初步安装容器中的模块

下载nginx镜像

# docker pull nginx
# docker run  --name 容器名称 docker.io/nginx

安装相关问题

Docker的Debian容器不支持汉字的问题
VIM配色方案
docker.io/nginx 修改apt源后提示Certificate verification failed: The certificate is NOT trusted

安装php相关模块

# apt-get install php php-fpm php-mysql

检查一下php-fpm服务是否可以启动

# service php7.3-fpm start
# service php7.3-fpm status
[ ok ] php-fpm7.3 is running.

从返回结果上看,php-fpm可以启动了

使用一个相对复杂的办法配置服务启动

一个不好的现象

# service nginx stop

这时运行这个命令会导致容器关闭,对于需要调试程序,经常修改配置的情况下,使用非常不方便,下面介绍一个办法来配置服务的启动,虽然相对复杂,但是对于将来的工作来说提供了长期的方便,还是值得的,下面来继续操作,检查镜像的配置

# docker image inspect docker.io/nginx
......
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
......

注意到这一段,找到文章
docker运行nginx为什么要使用 daemon off,了解到是因为容器是把nginx启动为PID=1的进程,所以nginx退出,容器便退出。

解决方案1

Docker(十七)-修改Docker容器启动配置参数
这个方法在测试的时候非常麻烦,docker服务会定时自动更新配置文件,刚做完修改,文件就会被改变,容易引起问题,因此要修改配置文件之前,需要关闭docker服务,改完后再重启docker服务,在测试的过程中需要频繁启动关闭docker服务,操作上非常不方便,因此很不推荐这种方式

解决方案2

把容器保存为镜像,通过修改镜像脚本,来实现调整服务的目的,创建自己的镜像,在镜像脚本中设置php-fpm、nginx协同启动

保存临时镜像

# docker commit 容器名称 新镜像文件名称(mytmp1)

创建Dockerfile

# vi Dockerfile
FROM mytmp1

ENTRYPOINT service php7.3-fpm start && service nginx start && bash

创建工作镜像

# docker build -t docker.io/nginx/mywork1 .

注意标点符号哦

用新的镜像完成最后的配置工作

启动镜像

docker run \
    -v /root/work:/root/work \
    -v /var/www:/var/www \
    --name myWork1 \
    -p 80:80 \
    -p 433:433 \
    -dt docker.io/nginx/mywork1

适当给启动的新容器添加端口,映射些主机目录,方便容器将来的使用,避免把文件拷贝来拷贝去的

检查服务启动状态

# service nginx status
[ ok ] nginx is running.
# service php7.3-fpm status
[ ok ] php-fpm7.3 is running.

从这里看,服务启动正常了

修改php-fpm配置文件

# vi /etc/php/7.3/fpm/pool.d/www.conf
listen = /run/php/php7.3-fpm.sock
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx

本文只关注这些项,其他项的值请保留哦,这里的要点:nginx的权限与php-fpm启动的权限一致时,才能正确连接

修改nginx配置

# vi /etc/nginx/conf.d/default.conf
    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

要注意检查端口号和网站的根目录,最好与php的根目录一致

    listen       80;
    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

做测试文件检查php

# vi /var/www/html/info.php
<?php
phpinfo();

用浏览器查看,页面返回错误信息
错误信息
由此可见,nginx并未正确连接上php-fpm

检查错误并处理

## ls -l /var/log/nginx/
total 0
lrwxrwxrwx 1 root root 11 May 15 20:15 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 May 15 20:15 error.log -> /dev/stderr

错误信息是输出到输出设备的,那如何查看呢?这时要返回主机

查看错误信息

# docker logs myWork1 --tail 20
173.154.216.1, server: localhost, request: "GET /i.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.3-fpm.sock:", host: "173.154.216.147"
173.154.216.1 - - [19/May/2020:14:04:49 +0000] "GET /i.php HTTP/1.1" 502 494 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0" "-"

处理错误

每个人的情况都不一样,根据错误信息就可以去处理错误了,顺利的话,PHP就正常运行了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值