docker 搭建LNMP環境
php7
blog.jkdev.cn/index.php/archives/230
https://www.bilibili.com/video/BV1Mv411q7de?from=search&seid=3698297787679581674
https://www.bilibili.com/video/BV115411W7ga?from=search&seid=3698297787679581674
https://www.bilibili.com/video/BV1ta4y147FE?t=1618
https://www.runoob.com/docker/docker-install-php.html
啟動php
docker pull php:7.3-fpm
docker run \
--name myphp73-fpm \
-p 9001:9000 \
-v /root/docker/nginx/www:/usr/share/nginx/html \
--restart always \
--link mysql-service5.7:mysql-service5.7 \ #mysql容器的名字
-d php:7.3-fpm
建立 ~/nginx/conf/conf.d 目錄:
mkdir -p /root/docker/nginx/{www,logs,conf}
啟動nginx
docker pull nginx docker run \ --name mynginx \ -p 8081:80 \ -p 443:443 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/nginx/www:/usr/share/nginx/html \ -v /root/docker/nginx/conf:/etc/nginx \ -v /root/docker/nginx/logs:/var/log/nginx \ --restart always \ --link myphp73-fpm:myphp73-fpm \ #php容器的名字 -d nginx #說明 --link myphp-fmt:php :把php-fpm的網路併入nginx,並通過修改nginx的/etc/hosts, 把域名php對映成127.0.0.1,讓nginx通過php:9000訪問php-fmt 訪問站點:http://ip:8083/index.php顯示phpinfo資訊
新增nginx的配置檔案
在該目錄下新增 /root/docker/nginx/conf/conf.d/test-php.conf 檔案,內容如下:
vim /root/docker/nginx/conf/conf.d/test-php.conf
server { listen 80; server_name localhost; access_log /var/log/nginx/localhost.access.log; error_log /var/log/nginx/localhost.error.log; root /usr/share/nginx/html; 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$ { fastcgi_pass myphp73-fpm:9000; #myphp73-fpm容器的名字 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
curl localhost:8081/index.php
122.114.30.38:8081/index.php
http://122.114.30.38:8081/1.php
documentroot
documentrootfastcgi_script_name;
fastcgi_pass 172.17.0.3:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
出現502 gateway錯誤
這裡的fastcgi_pass要是phprpm容器的內網ip地址,而不是127.0.0.1
出現404 file not found
其實nginx版本不通,document_root高版本已不支援,寫成絕對路徑,但大部署介紹寫的是宿主機路徑,這是錯的。要寫成phpfpm容器內的路徑,如:/var/www/html
還有我在安裝phpfpm時掛載檔案時-v宿主機要寫到:後面
還碰到進容器後無許可權,要在-v掛載後加–privileged=true
有的說要去修改phpfpm的配置檔案把listen 127.0.0.1改成0.0.0.0這是不需要的
以上應該就能訪問通了
如果部署的時候有許可權不足
那要把宿主機對應的html資料夾設定成777
有的需要php特殊外掛
phpfrm內有docker-php-ext-install命令
進入phpfrm容器內執行即可,如擴充套件mysql執行 docker-php-ext-install pdo pdo_mysql
如果ext裡面沒有還可以用如下的
apt update #更新軟體源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安裝各種庫
docker-php-source extract #解壓原始碼
cd /usr/src/php/ext/gd #gd原始碼資料夾
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #準備編譯
docker-php-ext-install gd #編譯安裝
php -m | grep gd
在所有環境都成功部署好後,有的在執行應用時,會出現"Primary script unknown"錯誤,一般這是由於nginx和php-fpm的使用者不同導致的。把nginx.conf和php-fpm.d/www.conf 的user設為同一個就可以了。