前言
最近因为工作需要开始折腾PHP,兵马未动,粮草先行,先整个PHP的环境为上!
工作环境:MAC+Docker
部署思路:
1.通过Docker进行环境的部署,这样省的将垃圾文件污染本地系统。就行启动一个VM环境将需要的东西部署在VM虚拟机中,本地远程调用VM虚拟机。Docker:使用Docker Desktop进行容器的管理。(安装步骤:略)
2.在Docker环境下部署一台Ngnix容器和一台PHP的容器,在Nginx上通过反向代理连接到PHP容器上,完成Nginx+php的环境部署。
3.完成Docker Desktop安装之后,正式开始。
1. 在本地工作目录设置文件映射
为什么要设置映射?将相关的config文件、log文件和web目录映射到本地,这样就不用登陆docker进行部署维护了。
/**
*根据大家喜好设置路径,我的默认路径为:/opt
* pwd // 显示当前路径
*/
sudo mkdir -p ~/Docker/nginx/{conf,html,logs}
2. 在本地目录中配置config文件
这些文件主要是nginx的默认配置文件。大家可以从安装好的nginx中获取。
配置文件有2个:
- 原生nginx目录下的:/etc/nginx/nginx.conf
- 原生nginx目录下的:/etc/nginx/conf.d/default.conf
注:一下提供的配置文件内容均为nginx:1.19 版本的原生内容
nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
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;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
3.开始安装PHP-fpm环境
在DockerHub中搜索PHP镜像.
默认情况下可以直接通过建议的docker pull php 命令来安装php,但是由于要部署的是开发环境,所以还是需要找到一个对用的tags包。
Docker中PHP各版本的说明:
https://www.debian.org/releases/
alpine: 精简版
buster(stable): 当前稳定版
stretch(oldstable):旧的稳定版
jessie(oldoldstable):更旧的稳定版
所以本人选择的是:
//注:后续将不在提供类似截图,直接贴命令。。。
/**
*此命令意思是将 php:8.0-rc-fpm-buster 版本的景象下载到本地
*/
docker pull php:8.0-rc-fpm-buster
//通过 docker images 可以看到在本地的docker景象
docker images
/*
命令执行的结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
php 8.0-rc-fpm-buster b110f3c0e013 28 hours ago 405MB
*/
/**
安装php
命令解释:
docker run :启动docker景象
-d:后台启动
-p:设置端口映射,即将容器的9000端口映射到本地的9000端口。
注意:本地端口:容器端口 (第一个9000是本地的端口,第二个9000是容器的端口)
--name:给容器命名
-v 配置文件映射
~/Docker/nginx/nginx/html:/var/www/html(将php目录的/var/www/html 映射到 /opt/nginx/html)
~/Docker/nginx/nginx/logs/:/var/log (将php目录的/var/log 映射到 /opt/nginx/logs/)
--privileged=true 获取宿主机root权限(特殊权限)
b110f3c0e013:参照docker ps命令对应的php的 IMAGE ID
*/
docker run -d -p 9000:9000 --name php8.0 -v ~/Docker/nginx/html:/var/www/html -v ~/Docker/nginx/logs/:/var/log --privileged=true b110f3c0e013
打开Docker Desktop的Dashboard面板:
4.安装nginx环境
//下载nginx容器景象
docker pull nginx
//启动nginx容器
/*
重点配置详解(注意路径位置):
1.将nginx.conf 映射为我们在本地的nginx.conf
~/Docker/nginx/nginx.conf:/etc/nginx/nginx.conf
2.nginx的代理配置文件
~/Docker/nginx/conf:/etc/nginx/conf.d
3.输出到本地,参考php可以看出,将php和nginx的log统一输出到了
~/Docker/nginx/logs 路径下
~/Docker/nginx/logs:/var/log/nginx 将nginx的log
4.web文件的目录映射到~/Docker/nginx/html,同样可以看到将php的/var/www/html文件和 nginx的文件/usr/share/nginx/html 均映射在一个地址下。
~/Docker/nginx/html:/usr/share/nginx/html
5.将nginx的80端口映射成本地的8080端口
特别注意:
nginx.conf 在~/Docker/nginx 路径下
default.conf 文件是配置在~/Docker/nginx/conf下
*/
docker run -d --name nginx -p 8080:80 -v ~/Docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v ~/Docker/nginx/logs:/var/log/nginx -v ~/Docker/nginx/html:/usr/share/nginx/html -v ~/Docker/nginx/conf:/etc/nginx/conf.d --privileged=true nginx
5.配置反向代理
nginx的反向代理主要是通过修改default.conf文件实现。
//1.查找php容器的ip地址
/*
最后面的的php8.0 是在前面php时,设置的容器名称,可以回看php的安装命令
*/
docker inspect --format='{{.NetworkSettings.IPAddress}}' php8.0
/*
结果(可以看到容器的IP地址为172.17.0.2):
% docker inspect --format='{{.NetworkSettings.IPAddress}}' php8.0
172.17.0.2
*/
配置default.conf文件
server {
listen 80;
listen [::]:80;
server_name localhost;
#设置字符集 UTF-8
charset utf-8;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
###
###在这里追加 index.php
###
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
###
###打开php的反向代理注解
###
location ~ \.php$ {
# 设置web资料路径,注意这个路径是php的web资源路径
root /var/www/html;
#设置php容器的ip地址。
#通过docker inspect --format='{{.NetworkSettings.IPAddress}}' php8.0 得到
fastcgi_pass 172.17.0.2:9000;
fastcgi_index index.php;
# 设置CGI解释器
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
6.测试
在本地:~/Docker/nginx/html 文件夹下创建2个文件
index.html 和 1.php 进行验证
不再详细写html和php的页面,简单写下进行验证环境。
index.html
测试
这是一个HTML的静态页面
1.php
%