目录
- 一、PHP的运行方式
- 1. 命令行运行
- 2. 服务器端执行
- 二、整合套件,懒人必备
- 1. wampserver
- 2. phpStudy
- 3. MAMP
- 三、Docker,强烈推荐
- 1. composer.yml的结构
- 2. LNMP环境的配置文件
- 四、虚拟机
- 五、总结
一、PHP的运行方式
你好,我是小雨青年,一名程序员。
今天我们来学习如何在本地搭建PHP的运行环境,在这之前我们先来看下PHP的怎么跑起来的。
前面我们提到过,PHP是一种脚本语言,不需要编译即可执行。
1. 命令行运行
在本地安装完成PHP之后,可以直接在命令行运行 php xxx.php
运行文件。
php test.php
这种场景一般用在临时执行脚本,或者需要定时任务调用。
2. 服务器端执行
作为Web服务端PHP,绝大多数还是作为Web服务的。
目前Web端运行PHP有两种形式,这两种形式也分别对应了程序连接PHP的两种形式。
- Apache模式,以Apache的模块运行
- FastCGI模式,一般通过Nginx服务器调用
关于这两种运行模式,我们会在后续详细说明,本篇的目的是教你如何在本地搭建起PHP的运行环境。
二、整合套件,懒人必备
1. wampserver
Windows 平台上推荐使用的套件,支持切换PHP版本,自带MySQL数据库,并且支持比较老的WIn版本。
这个套件是法国人开发的,官网支持英文。官网地址是 https://www.wampserver.com/en/ 。
这里注意,我们在学习中免不了要下载一些的东西,建议你直接去找源头渠道,即官网,这样可以免去很多弯路,并且不会被错误的信息引导。
2. phpStudy
phpStudy 算是国内做集成环境很早的软件了,并且现在还在更新,现在叫小皮面板。
官网链接 https://www.xp.cn/download.html
3. MAMP
MAMP 是 MacOS 上的集成环境,同时也有win版本。
官网链接 https://www.mamp.info/en/mamp/mac/
关于集成环境,友好的图形界面就是最好的教程,如果你对哪个操作有疑问,可以在评论下列出。
如果你正在使用哪些集成环境,可以在评论区和我一起讨论。
三、Docker,强烈推荐
docker 的优势在于对于原生系统的入侵程度低,如果你的系统装的软件过于复杂,就会在原生安装的时候出现各种问题。
还有一个原因,docker 作为开发环境,可以通过docker-compose.yml
放在代码库中,方便团队内成员同步开发环境,不管是更新配置文件还是增加redis
或者memcached
都很方便。
使用Docker配置环境,你可以很清晰地知道你的PHP、Nginx的配置情况,并且因为和本地环境隔离,不会有冲突的风险。
这是一份很完整的PHP的docker-compose配置,包括了
- elasticsearch
- kibana
- php
- nginx
version: "3"
services:
elastic:
image: elasticsearch:6.7.0
ports:
- "9200:9200"
environment:
- bootstrap.system_call_filter=false
volumes:
- ../elasticsearch-local/data:/usr/share/elasticsearch/data
networks:
web:
ipv4_address: 172.25.0.3
kibana:
image: kibana:6.7.0
environment:
- I18N_LOCALE=zh-CN
- ELASTICSEARCH_HOSTS=http://172.25.0.3:9200
- ELASTICSEARCH_URL=http://172.25.0.3:9200
ports:
- "5601:5601"
networks:
- web
php:
image: crunchgeek/php-fpm:7.0
volumes:
- ./yii_env.php:/var/www/yii_env.php
- ./php.ini:/usr/local/etc/php/php.ini
- ./:/var/www/html
networks:
- web
web:
image: nginx
ports:
- "8001-8009:8001-8009"
volumes:
- ./yii_env.php:/var/www/yii_env.php
- ./:/var/www/html
- ./default:/etc/nginx/conf.d/default.conf
- ./localcerts:/etc/nginx/certs
networks:
- web
networks:
web:
ipam:
driver: default
config:
- subnet: "172.25.0.0/16"
那你可能要问了,诶,MySQL呢?我不需要elasticsearch啊?别急,下面我们一步步地从零开始编写属于自己的本地PHP的docker-compose文件。
1. composer.yml的结构
你要想使用docker作为开发环境,就需要简单了解一下docker和docker-compose文件的基本构成。
Docker是一个容器平台,可以把应用软件和基础架构区分开,并可以通过管理应用软件的方式管理基础架构,可以理解为配置即服务。下图为Docker的架构图,你可以看到,Docker占用的系统资源相对于虚拟机来说更少。
什么是docker-compose呢?你可以理解为对docker命令的打包,由于一套环境涉及到多种软件,并且会挂载到不同目录和不同的配置,那么docker-compose就可以把所有相关的配置放在一个文件中,这样仅需一个命令即可启动整套环境。
version: "3"
最新的版本已经弃用,version 指的是docker使用的版本,目前的最新版本是3.8
,如果你对于docker的要求不高,建议你使用上面的版本描述,在没有小数点的情况下,这样的写法默认是version: "3.0"
。
services:
services 是 docker-compose 中必需的内容,是你的应用程序需要的服务,每个服务里可以配置使用的镜像、挂载、配置文件,docker-compose中存在多个服务,都可以单独配置。
php:
image: crunchgeek/php-fpm:7.0
volumes:
- ./yii_env.php:/var/www/yii_env.php
- ./php.ini:/usr/local/etc/php/php.ini
- ./:/var/www/html
networks:
- web
这里我们可以看到,这个名为php的服务使用的镜像是crunchgeek/php-fpm:7.0
,挂载了三个目录,分别是配置文件、项目的配置文件、项目文件,启用的网络名称是web
。
networks:
web:
ipam:
driver: default
config:
- subnet: "172.25.0.0/16"
networks 是配置的网络,我这里是名为web的网络配置,也是上面php服务使用的,这里指定了子网ip,如果不需要可以不指定。
2. LNMP环境的配置文件
下面是一套完整的本地LNMP配置文件,你需要把他放在本地项目的根目录,然后修改项目入口文件位置即可使用。
services:
php:
image: crunchgeek/php-fpm:7.0
volumes:
- ./:/var/www/html
networks:
- nmp
mysql:
image: mysql:5.7
ports:
- "3309:3306"
volumes:
- ./mysql/data:/var/lib/mysql/:rw
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: "Asia/Shanghai"
networks:
- nmp
web:
image: nginx
ports:
- "8010:8010"
volumes:
- ./:/var/www/html
- ./default:/etc/nginx/conf.d/default.conf
networks:
- nmp
depends_on:
- mysql
networks:
nmp:
同级目录下的nginx配置文件default
,你也可以把他放在单独的文件夹内。
server {
listen 8010;
index index.php index.html;
server_name _;
root /var/www/html;
location /status {
fastcgi_pass php:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Nginx对外暴露端口为8010,浏览器可以访问。
MySQL我们配置的对外暴露端口为3009,为的是和本地不冲突,也是可以访问成功的。
MySQL的挂载目录为项目目录下的MySQL文件夹,但是实际项目中不推荐这样做,因为不同的开发人员的本地测试数据会不一样,不需要同步。
四、虚拟机
虚拟机这种方式不建议你作为本地开发环境使用,占用系统资源比较多,项目代码的更新也多麻烦一些。
但是,虚拟机作为给实际项目的部署工作练手,是很好的方式。
目前常用的虚拟机有一下几种
- Virtualbox 。Oracle 出品的虚拟机,免费。推荐。 https://www.virtualbox.org/wiki/Downloads
- Vmware 。 也是老牌的虚拟机,需要付费。 https://customerconnect.vmware.com/en/downloads
- Parallels Desktop。MacOS专用的虚拟机,兼容性最好,也是需要付费的。 https://www.parallels.cn/products/desktop/trial/
五、总结
目前PHP网站的主流使用Nginx作为web服务,本地开发环境优先使用docker环境。