本篇文章將和大家一起認識一個軟體名叫EpiiServer,他可以更快捷更方便的為php nginx多應用部署環境,非常適合開發者使用,有興趣的朋友可以了解一下。
EpiiServer是什麼
更快速更方便的php nginx多應用部署環境。
github倉庫首頁
https://github.com/epaii/epii-server
gitee倉庫
https://gitee.com/ epii/epii-server
特性:
- 多應用快速部署,網域自動產生。
- 每個應用程式可設定自己php的版本。
- 每個應用程式可設定自己的環境變數。
- 網域名稱與目錄自動綁定,支援5級網域自動綁定目錄。
- 與wamp等整合環境相比,更專注於客製化配置,而非環境的安裝。
解決了什麼問題?
先不說怎麼安裝,先看看你是否需要本應用程式。
1、本地多個網站,網域自動產生。
也許你會說直接用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
EpiiServer根目錄下的web
目錄為app的專案集合目錄,只要你把你的app放進這個目錄,自動就會產生上述的網域。
疑問1
上面中網域名稱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
- 如果你用dns伺服器來實現網域的泛解析那麼你將不需要在
hosts
檔案中設定域名指向。 - 任何
app
皆以根網域
為基礎產生的多層網域。其它格式的域名不支援。 -
如果某個app有另一個網域如
www.web.com
那麼您可以在dns服務商使用cname的方式解析到本app的本機網域。疑問2
也許你會問,我的專案都在另一個目錄下面,是不是必須複製到EpiiServer根目錄下的web
目錄下才行呢?當然不是。
只需在config.ini
的[server]
下設定
[server] www_dir=/path/to/your/www
#www_dir為絕對路徑,一定不要包含中文
疑問3
按照上述方法設定了我的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
疑問4
直接存取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,直接存取網域也可以
2、多個php版本共存。
多年的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版本
3、环境变量设置。
大家肯定会遇到这些问题
- app的开发和部署使用的数据库参数不一样。如何有效分离。
- 很多人在使用
git
作为团队合作方式。如何让重要的账号和密码不受版本控制。
上述问题,有很多解决方案,但更方便更科学的方式为通过环境变量
设置账号和密码,使得程序和重要账号完全分离
。
在不同的环境下(window,linux,iis,apache,nginx)设置php环境变量
的方式不一样,
但
在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
仓库首页
gitee仓库
https://gitee.com/epii/epii-server
github仓库首页
https://github.com/epaii/epii-server
下载或clone到本地后,
1、请复制config.ini.example
为 config.ini
,按照配置文件的提示配置自己的项目。
2、请运行项目下install/install.php
文件进行安装
path/to/php ./install/install.php
安装只需一次,安装后,会自动生成启动,停止运行文件。
window自动生成的文件为:
- start.bat 启动服务
- stop.bat 停止服务
linux unix 自动生成的文件为:
- start.sh 启动服务
- stop.sh 停止服务
配置文件修改后记得 先关闭服务,再启动。
配置文件
[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中文網其他相關文章!

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器