EpiiServer 簡易的php+nginx環境客製化化方案

2020-07-16 10:05:30
本篇文章將和大家一起認識一個軟體名叫EpiiServer,他可以更快捷更方便的為php+nginx多應用部署環境,非常適合開發者使用,感興趣的朋友可以了解一下。

EpiiServer是什麼

更快捷更方便的php+nginx多應用部署環境。

github倉庫首頁

https://github.com/epaii/epii-server

gitee倉庫

https://gitee.com/epii/epii-server

特性:

  1. 多應用快速部署,域名自動生成。
  2. 每個應用可設定自己php的版本。
  3. 每個應用可設定自己的環境變數。
  4. 域名與目錄自動系結,支援5級域名自動系結目錄。
  5. 與wamp等整合環境相比,更加側重客製化化設定,而非環境的安裝。

解決了什麼問題?

先不說怎麼安裝,先看看你是否需要本應用。

1、本地多個網站,域名自動生成。


也許你會說直接用 http://localhost/app1http://localhost/app2 來存取兩個網站不就行了。
確實可以。但如果各自設定自己的域名呢?比如 http://app1.loc.comhttp://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.compublic.app4.loc.comdir3.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.exampleconfig.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:workplaceapp6",只需在config.ini[app_dir]下設定

[app_dir]
app6=c:workplaceapp6
app7=/path/to/app7

目錄為絕對路徑,不包含中文。

這種情況下域名 app6.loc.com ,app7.loc.com 將指向你設定的路徑。同樣支援子目錄轉化為域名 ,
app6 的入口檔案為 c:workplaceapp6publicindex.php,則存取

http://public.app6.loc.com

其實上述設定是不科學的,直接把app6的目錄指向public更好

[app_dir]
app6=c:workplaceapp6public

這樣你的域名將簡化為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:pathtophp5.6php-cgi.exe
port[0] = 9000

php_cgi[1] = c:pathtophp7.1php-cgi.exe
port[1] = 9001

php_cgi[2] = c:pathtophp7.3php-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都生效的。這意味著如果我有多個專案,每一個專案都是共用這些環境變數,這樣的結果為:

  • 不方便。app11app12 的資料庫名稱,我們必須設定兩個環境變數,如 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.exampleconfig.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/[email protected]/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環境客製化化方案的詳細內容,更多請關注TW511.COM其它相關文章!