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服務,操作上非常不方便

解決方案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就正常運行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章