安装和配置PHP开发环境

1 本文是《安装和运行“Web应用”》系列的第一篇,旨在通过分析不同复杂种类的“Web应用” 的安装,来掌握 Web应用程序的实质,和解释 如何和为何 安装 配置PHP开发环境 2023-2-5

2 本文创见是提出 ,web应用 (或网站)也是一种应用程序 ,像一般桌面应用一样有一个安装的过程 ,只是web app本身的分布式架构 ,安装非常的复杂

3 其次 分析了 “Web应用 ”的一些形式特征,尝试总结理论

首先,本文标题意为“在本地机器安装配置PHP开发环境”。这个表述对于PHP初学者(或PHP开发者)是友好的,但其实这一种安装和运行“Web应用”的过程。

什么是 “Web应用”

“Web应用” 这个概念越来越流行,但其实它是传统网站概念的新发展。Web应用程序 与桌面应用有很多不同点,最大区别在:

  1. 第一,基于http通信的分布式结构;
  2. 第二,在浏览器上交互使用,有一个URL地址,是一种web GUI应用;
  3. 第三,有一个web server 后端;这个后端一般有动态编程生成应用页面;

对于开发者,“Web应用” 还一个不同,在本地机器上安装和运行 Web应用程序很繁琐。如果你有过在不同机器上开发和测试一个PHP 应用就会有体会。

安装和运行 Web应用程

Web应用需要安装?这里需要解释一下。

这里想突出一点,就是配置环境是用来运行程序的,网站(或web应用)也是一种程序,而「开发」和「运行」应用程序 都是需要 相同的环境条件的

其次,强调PHP+WEB,因为PHP可以用来开发非Web应用(例如桌面应用),开发Web应用的也不是只有PHP。

本文介绍手动安装PHP Web开发和运行环境,最终的效果是可以通过 浏览器(或curl)输入一个网站域名访问一个简单的PHP Web程序。

手动安装

为什么选择手动安装?提起安装PHP开发环境,很多人应该都知道有工具,例如一些什么面板,XXAMP之类的安装包,各个OS平台都有,非常方便。我本人没有怎么用过,不知道可用性如何,但是我认为,除非你是绝对的小白,否则你是想学Web编程,不应知难而退,依赖这些“傻瓜式”配置工具,了解一些基本底层原理——Web应用程序的逻辑构成——那是你的专业所在。

支撑Web应用程序有很多技术可选,本文实验的是用nginx配置 web server ,和用PHP 动态生成页面的简单Web应用程序。

完整的商业web项目

商业web项目是很复杂的,是工程级项目,会引入种开发工具,框架结构和辅助工具,例如前端会有MVVM框架(例如React),后端MVC框架(例如 Laravel),大型关系数据库(Mysql),PHP依赖管理(Composer)等,为了篇幅和渐进学习规律,本系列文将分别介绍这些不同的开发环境条件,从简单到复杂:

  1. 网站:浏览器前端(一般只用到GET),后端只有web server 后端,没有CGI扩展处理,响应HTML等静态资源
  2. 动态网站:浏览器前端(用到FORM POST方法),后端web server, 后端需要CGI扩展处理 POST数据,响应HTML结果页
  3. Web应用:前端后分离,前端浏览器不限于使用FORM,还会用AJAX发出请求;服务器也不限于响应HTPM资源(URL定位),前后端以 JSON等格式交互数据
  4. 分布式系统(Serverless):前端不限于在本域内 请求数据(或功能),后端也不限只为前端提供响应,也可以向其它域发出请求来集成新的功能,也就是说 后端服务器也可以是一个HTTP前端。微服务兴起2022-07-22

目标和任务

本地开发和运行两个静态的简单“网站”:hello web 和 nakeman。

回应前面,要在一台机器运行这两个程序,我们要:

第一,安装和配置web server,本系列实践选择Nginx;

第二,配置Nginx,为两个程序分配不同的标识——一个应用一个服务名;

开发任务比较简单,两个“程序”都是只有一个页面,一个类似helloworld,一个是个人简介信息;

目标是,分别输入 hello.nginx.devl 和 nakeman.nginx.devl 分别访问这两个“程序”。

Nginx与Web服务

先安装配置 Nginx(/etc/nginx/nginx.conf)。在各大OS平台上安装 Nginx 应该是比较简单的,详细看这里。配置Nginx则需要一些知识和脑力,因为 Nginx 有灵活的模块化配置,并且是多功能的,既可以作http server,也有代理服务功能(正向反向都可)。 https://nginx.org/en/linux_packages.html

[radar@fedora ~]$ nginx -v
nginx version: nginx/1.22.0

安装好nginx后,在开始实操之前,先分析设计几个数据:应用程序名,和程序安装的文件目录(也就是网站root目录)。

虚拟主机与应用程序名

任何应用程序 都应该有一个唯一的标识,对于web应用,这个标识就是网站地址(形式如site.com)。如果我们要在本地开发(或测试)Web应用项目,为所有的web应用实例 都分配一个 Nginx 实例和 域名地址是不实际的,幸好 Nginx(其他http 服务器也可以)支持 虚拟主机。

在技术上, Nginx支持三种虚拟主机模式:多IP,多端口和多服务器名。用IP地址,和端口都对用户不太友好,怎么一个应用程序是一串数字呢?所以 服务器名(或自定义域名)是最佳标识 Web应用程序的方法。 https://petermaxdreyer.com/nginx-virtual-hosts/

安装位置

Web 应用的安装位置,一般web server软件有一默认位置,不过也可以自定义。这里有一个决策要考虑,就是到底安装在系统目录下(例如/var/www),还是在用户HOME目录里。如果有系统的应用,一般安装在系统目录下,但是考虑到我们是开发机器,数据应该属于开发者自己,也应该安装在用户HOME目录。

其实重点考虑不是数据位置,而是==数据的使用和安全==,就是数据是属于谁的(user or root),被谁使用(user edit , guest read),和怎么用(读,写还是执行) 。

与一般应用不同 ,Web应用使用用户不是开发者本人,甚至不在现场,而且同时有大量并发用户。当我们执行nginx时,是那个执行的系统账户(一般是nginx组的nginx)替代远程用户 在使用我们应用的数据,所以要让Web应用正常运行(远程用户打开我们的网站),nginx用户必须有打开(x)和读取(r) 根目录的权限,至于数据属谁都可以,由于需要本地开发,所以要属于开发者本人帐户的数据。关于系统数据权限管理,看这里(https://ryanstutorials.net/linuxtutorial/permissions.php )。

本地域名

nginx.conf 主要由几个逻辑配置块(block)组成: http, server, location等,Nginx 是通过 server block 配置虚拟主机的,默认一台主机。其中 listen 配置IP和端口,serever_name配置服务器名。三种虚拟主机模式中,本地开发,我们选择最简单的:单一IP(网卡)和端口,只用「服务器逻辑名」对 请求进行区分。

http {
    server {
	listen 			80;
	serever_name 	hello.nginx.dev;
	# a hello app 
	root			/home/kemin/webproj/hello.nginx.dev
    }

    server {
	listen 			80;
	serever_name 	diary.nginx.dev;
	# a diary app 
	root			/home/kemin/webproj/diary.nginx.dev]()
    }
}

为了支持这种模式,我们还必须配置本地DNS数据(/etc/hosts),这样当我们在浏览输入应用的名字(域名地址),浏览器才能解释到 IP 地址,和将名字附在请求报文的头部,Nginx就是通过这个头部数据对不同的虚拟主机进行辨别的。

127.0.0.1 hello.nginx.dev diary.nginx.dev

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.