本篇文章將和大家一起認識一個軟體名叫EpiiServer,他可以更快捷更方便的為php nginx多應用部署環境,非常適合開發者使用,有興趣的朋友可以了解一下。
更快速更方便的php nginx多應用部署環境。
https://github.com/epaii/epii-server
https://gitee.com/ epii/epii-server
先不說怎麼安裝,先看看你是否需要本應用程式。
也許你會說直接用http://localhost/app1
和http://localhost/app2
來訪問兩個網站不就行了。
確實可以。但如果各自設定自己的網域呢?例如 http://app1.loc.com
和 http://app2.loc.com
,如果你有這個想法,本軟體很輕鬆可幫你實現。
如下目錄
web -- App集合目录 app3 index.php --入口文件 app4 application public index.php --入口文件 app5 dir1 dir2 dir3 index.php --入口文件
網域自動為
http://app3.loc.com http://public.app4.loc.com http://dir3.dir2.app5.loc.com
#你需要做的事情(唯一要做的)只是在host檔案中讓
app3 .loc.com
和public.app4.loc.com
,dir3.dir2.app5.loc.com
指向你的ip
web
目錄為app的專案集合目錄,只要你把你的app放進這個目錄,自動就會產生上述的網域。 上面中網域名稱loc.com
是什麼?
他是你所有app
的根網域。任何一個app將子對轉換為網域名稱 {appname}.loc.com
,目錄存取自動為 dir3.dir2.dir1.{appname}.loc.com
。
如果想設定自己的根網域只需在config.ini
(下載後請複製config.ini.example
為config.ini
)在[server]
下設定
[server] domain_this=you.domain.com
hosts
檔案中設定域名指向。 app
皆以根網域
為基礎產生的多層網域。其它格式的域名不支援。 如果某個app有另一個網域如www.web.com
那麼您可以在dns服務商使用cname的方式解析到本app的本機網域。
也許你會問,我的專案都在另一個目錄下面,是不是必須複製到EpiiServer根目錄下的web
目錄下才行呢?當然不是。
只需在config.ini
的[server]
下設定
[server] www_dir=/path/to/your/www
#www_dir為絕對路徑,一定不要包含中文
按照上述方法設定了我的app集合目錄,但仍有個別app(或很多)分佈在其它目錄,是不是需要複製到app集合目錄下?當然不是。
例如我的app6
放在了另一個目錄"c:\workplace\app6"
,只需在config.ini
的[app_dir]
下設定
[app_dir] app6=c:\workplace\app6 app7=/path/to/app7
目錄為絕對路徑,不包含中文。
這種情況下網域名稱 app6.loc.com
,app7.loc.com
將指向你設定的路徑。同樣支援子目錄轉換為域名,
如app6
的入口檔案為c:\workplace\app6\public\index.php
,則存取
http://public.app6.loc.com
其實上述設定是不科學的,直接把app6的目錄指向public
更好
[app_dir] app6=c:\workplace\app6\public
這樣你的網域將簡化為app6.loc.com
在上面web下app5中,为了访问入口文件 我们需要 访问 `http://dir3.dir2.app5.loc.com` 这个域名才可以,如果想简化为 `http://app5.loc.com`, 只需把 dir3的绝对路径设置为`app5`的路径即可。app5=/path/to/app5/dir2/dir3
直接存取ip會怎麼樣?
直接存取ip和其它繼承環境一樣了。
http://127.0.0.1/app1 http://127.0.0.1/app2/dir1/dir2/index.php
能不能當我訪問ip的時候,預設指定一個app
呢。例如存取ip直接存取app1
,
只需在config.ini
的[server]
下設定
[server] default_app=app1
設定完後,當訪問http://127.0.0.1/
時候將直接指向了app1
。
ip 存取的作用在於別人對你電腦的存取。當然別人也可以在他
hosts
檔案中綁定 app1.loc.com 到你的ip,直接存取網域也可以
多年的php工作者,對著php技術更新,及php版本的更新。你的專案分別設定了不同的php的最低版本。
例如
app8
支持版本为php5.6
app9
支持版本为php7.1
app10
支持版本为php7.2
如果这些应用共存,您有什么解决方法。
解决方法很简单。首先下载多个版本的php。然后在config.ini
的[php]
模块设置。
window
使用的是php-cgi.exe
,所以只需要指定每一个php版本的php-cgi.exe
路径,及端口即可。
[php] php_cgi[0] = c:\path\to\php5.6\php-cgi.exe port[0] = 9000 php_cgi[1] = c:\path\to\php7.1\php-cgi.exe port[1] = 9001 php_cgi[2] = c:\path\to\php7.3\php-cgi.exe port[2] = 9002
linux
,unix
下使用的是php-fpm
(php-cgi,fastcgi,php-fpm的区别,大家自己查)
[php] php_cgi[0] = /path/to/php5.6/sbin/php-fpm port[0] = 9000 php_cgi[1] =/path/to/php7.1/sbin/php-fpm port[1] = 9001 php_cgi[2] = /path/to/php7.2/sbin/php-fpm port[2] = 9002
注意:php-fpm的配置文件
php-fpm.conf
里设置了端口。上面设置的端口一定要和各个版本的php-fpm.conf
中的端口一致。而php-cgi
只需设置端口即可。
通过上述设置php
多版本后,默认的所有应用都设置为第一个php版本,即php_cgi[0]
的设置。
为了实现
app8
支持版本为php5.6
app9
支持版本为php7.1
app10
支持版本为php7.2
需在在config.ini
的[app_php_select]
模块设置各自的php版本id
[app_php_select] app9=1 app0=2
app8无需设置,因为所有的应用默认都使用第一个php版本
大家肯定会遇到这些问题
git
作为团队合作方式。如何让重要的账号和密码不受版本控制。上述问题,有很多解决方案,但更方便更科学的方式为通过环境变量
设置账号和密码,使得程序和重要账号完全分离
。
在不同的环境下(window,linux,iis,apache,nginx)设置php环境变量
的方式不一样,
但
这样使得我们的应用程序代码无需任何修改,只需在环境中设置了环境变量即可。
php中通过 $_EVN,或者 getenv() 来获取指定的环境变量值。
现有的方式设置的环境变量,往往是针对所有app都生效的。这意味着如果我有多个项目,每一个项目都是共享这些环境变量,这样的结果为:
app11
,app12
的数据库名称,我们必须设置两个环境变量,如 DBNAMA_APP11
, DBNAMA_APP12
。然后分别获取。app11
中仍然可以获取到app12
的环境变量。EpiiServer
这些问题将变得很容易解决。我们的需求是:
1、app11
需要把数据库信息设置为环境变量 分别为
DB_HOST=192.168.1.100 DB_NAME=ceshi DB_USER=username DB_PWD=password
2、app12
需要把数据库信息设置为环境变量 分别为
DB_HOST=192.168.1.102 DB_NAME=ceshi2 DB_USER=username2 DB_PWD=password2
我们只需在config.ini
的[php_env]
模块设置各自的环境变量
[php_env] app11[DB_HOST] = 192.168.1.100 app11[DB_NAME] = ceshi app11[DB_USER] = username app11[DB_PWD] = password app12[DB_HOST] = 192.168.1.102 app12[DB_NAME] = ceshi2 app12[DB_USER] = username2 app12[DB_PWD] = password2
在程序中使用 $_ENV['DB_HOST'] 即可获取到相应的 DB_HOST
阿里云和微软云等云平台都有设置环境变量的方法。
EpiiServer
侧重的是nginx
php
安装后的灵活配置,而非 nginx
php
本身的安装。
所以在安装EpiiServer
之前你需要(必须)
1、根据自己的系统下载nginx
,并且明白安装路径及配置文件路径。
2、根据自己的需要下载安装php
,可下载多个版本。
3、window 用户须知道安装的各个php版本路径及php-cgi
的位置,并且每个版本可以成功运行
/path/to/php-cgi.exe -b 127.0.0.1:9000
4、linux,unix 用户须知道安装的各个php版本路径及php-fpm
的位置和php-fpm.conf
的路径,分别修改php-fpm.conf
文件 ,并成功运行
/path/to/php-fpm
EpiiServer
仓库首页
https://gitee.com/epii/epii-server
https://github.com/epaii/epii-server
下载或clone到本地后,
1、请复制config.ini.example
为 config.ini
,按照配置文件的提示配置自己的项目。
2、请运行项目下install/install.php
文件进行安装
path/to/php ./install/install.php
安装只需一次,安装后,会自动生成启动,停止运行文件。
window自动生成的文件为:
linux unix 自动生成的文件为:
配置文件修改后记得 先关闭服务,再启动。
[server] ;本机ip地址和端口 this_ip = 192.169.0.169 this_port = 6688 ;本机域名前缀 domain_this = this.jt ;web项目路径,此路径下每一个文件夹会当做一个应用,如果某一个项目不想放在此目录下,可以再app_dir中单独设置 ;www_dir 为网站根目录,默认为web目录,如果设置请设置绝对路径 ;www_dir = /Users/mrren/Documents/phpworkspace/EpiiWeb/web ;default_app = web1 ;本程序以php为脚本安装和启动服务,指定php命令地址,一般为php.exe的文件路径 php_cmd=php [nginx] ;nginx 文件地址; linux or unix 请指定nginx文件地址即可 cmd = /usr/local/Cellar/nginx/1.15.0/bin/nginx nginx_config_file = /usr/local/etc/nginx/nginx.conf [php] ;window下 php-cgi.exe 的路径,linux 下 php-fpm 路径 php_cgi[0] = /usr/local/Cellar/php\@7.1/7.1.19/sbin/php-fpm ;如果使用php-cgi,设置的端口将被启用。如果是php-fpm 请确保此端口和php-fpm.conf中一致(php-fpm.conf 需手动修改,多个php版本一定要设置不同的端口) port[0] = 9000 php_cgi[1] = php-fpm port[1] = 9001 [app_dir] ;如果你的应用不在www_dir下,请指定项目路径(必须为绝对路径) ;app1 = /Users/mrren/Documents/phpworkspace/jianguan ;epiiadmin=/Users/mrren/Documents/phpworkspace/EpiiWeb/web/epiiadmin/public [app_php_select] ;默认所有的php版本自动为php_cgi[0] 的版本,如果有特殊需求请在这里设置 epiiadmin = 1 [php_env] epiiadmin[db_hostname] = zhengxin
大部分参数在上述教程已经涉及到。重点介绍
[server]
下的 php_cmd
[server] php_cmd=php
EpiiServer
本身是基于php的(并非你的网站),如果你的php在环境变量PATH下,则直接为默认配置即可。 如果不是。linux,unix 用户 为path/to/php
,window用户为paht/to/php.exe
最后希望
EpiiServer
能给您带来帮助。让您更多的时间去研发产品,而非环境搭建。
相关教程:PHP视频教程
以上是EpiiServer 簡易的php+nginx環境客製化方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!