이 기사에서는 EpiiServer라는 소프트웨어를 소개합니다. 이 소프트웨어는 php+nginx 다중 애플리케이션용 환경을 보다 빠르고 편리하게 배포할 수 있으므로 관심 있는 친구들이 배울 수 있습니다.
더 빠르고 편리한 php+nginx 다중 애플리케이션 배포 환경.
https://github.com/epaii/epii-server
https://gitee.com/epii/epii-server
설치 방법에 대해 이야기하지 말고 먼저 이 애플리케이션이 필요한지 확인하세요.
어쩌면 http://localhost/app1
및 http://localhost/app2
를 사용하여 직접 액세스하라고 할 수도 있습니다. 두 개의 A 웹 사이트로는 충분하지 않습니다.
그렇습니다. 하지만 각각이 자신의 도메인 이름을 설정하면 어떻게 될까요? 예를 들어 http://app1.loc.com
및 http://app2.loc.com
에 대한 아이디어가 있다면 이 소프트웨어를 통해 쉽게 실현할 수 있습니다. 그것. 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:workplaceapp6"
,只需在config.ini
的[app_dir]
下设置
[app_dir] app6=c:\workplace\app6 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:\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
[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
[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
해야 할 일은 호스트 파일에 추가하기만 하면 됩니다.app3.loc.com
및public.app4.loc.com
,dir3.dir2.app5.loc.com는 귀하의 IP <p></p> <h4 id="epiiserver 루트 디렉터리 아래의 웹 디렉터리는 앱의 프로젝트 컬렉션 디렉터리입니다. 앱을 이 디렉터리에 넣는 한, 위의 도메인 이름은 자동으로 생성됩니다.">web</h4>
디렉터리는 앱의 프로젝트 컬렉션 디렉터리입니다. 앱을 이 디렉터리에 넣으면 위의 도메인 이름이 자동으로 생성됩니다. 자동으로 생성됩니다. #🎜🎜#질문 1#🎜🎜##🎜🎜#위의 도메인 이름
loc.com
이 무엇인가요?
그는 모든앱
의 루트 도메인 이름입니다. 모든 앱은 하위 쌍을 도메인 이름{appname}.loc.com
으로 변환하고 디렉터리 액세스는 자동으로dir3.dir2.dir1.{appname}.loc.com입니다. 코드>. #🎜🎜##🎜🎜#자신만의 루트 도메인 이름을 설정하려면 <code>config.ini.example
을.ini 다운로드 후 config
)에 복사하세요. code>[서버]#🎜🎜#[app_php_select] app9=1 app0=2#🎜🎜#DNS 서버를 사용하여 도메인 이름의 팬 해상도를 구현하는 경우 호스트 파일에 있습니다. #🎜🎜##🎜🎜# 모든
#🎜🎜#아마도 내 프로젝트가 모두 다른 디렉토리에 있는데 복사해야 하는지 물어보실 것입니다. ? EpiiServer 루트 디렉터리의앱
은루트 도메인 이름
을 기반으로 생성된 다중 레벨 도메인 이름입니다. 다른 형식의 도메인 이름은 지원되지 않습니다. #🎜🎜##🎜🎜##🎜🎜#앱에www.web.com
과 같은 다른 도메인 이름이 있는 경우 DNS 서비스 제공업체에서 cname을 사용하여 로컬 주소를 확인할 수 있습니다. 앱 도메인 이름의 #🎜🎜#질문 2#🎜🎜##🎜🎜#
web
디렉터리로 이동해 보시는 건 어떨까요? 물론 그렇지 않습니다. #🎜🎜##🎜🎜# #🎜🎜#DB_HOST=192.168.1.100 DB_NAME=ceshi DB_USER=username DB_PWD=password#🎜🎜#www_dir을config.ini
의[server]
아래 절대 경로로 설정하면 됩니다. must not be Chinese #🎜🎜##🎜🎜#질문 3#🎜🎜##🎜🎜# 위 방법으로 앱 모음 디렉토리를 설정했는데, 여전히 개별 앱이 있네요 (또는 다수)이 다른 디렉터리에 배포됩니다. 앱 컬렉션 디렉터리에 복사해야 합니까? 물론 그렇지 않습니다. #🎜🎜##🎜🎜#예를 들어 내
app6
이 다른 디렉터리"c:workplaceapp6"
에 있는 경우config에서만 설정하면 됩니다. .ini
[app_dir]
아래 #🎜🎜#DB_HOST=192.168.1.102 DB_NAME=ceshi2 DB_USER=username2 DB_PWD=password2#🎜🎜# 디렉토리를 절대 경로로 설정하고 중국어를 포함하지 않습니다. #🎜🎜##🎜🎜##🎜🎜#이 경우 도메인 이름app6.loc.com
및app7.loc.com
은 세트. 또한 하위 디렉터리를 도메인 이름으로 변환하는 기능도 지원합니다.
예를 들어app6
의 항목 파일이c:workplaceapp6publicindex.php
인 경우 #🎜🎜#[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를 방문하세요. #🎜🎜#사실 위 설정은 app6의 디렉토리를public
으로 직접 지정하는 것이 더 좋습니다.#🎜🎜#/path/to/php-cgi.exe -b 127.0.0.1:9000#🎜🎜#이렇게 하면 도메인 이름이 app6.loc.com#🎜🎜#팁#🎜🎜#
/path/to/php-fpm질문 4#🎜🎜##🎜🎜#어떻게 되나요? IP에 직접 접속한다면? #🎜🎜##🎜🎜#IP에 대한 직접 접근은 다른 상속 환경과 동일합니다. #🎜🎜#
https://gitee.com/epii/epii-server#🎜🎜#IP 주소 접속 시 기본으로앱
을 지정할 수 있나요? 예를 들어, IP에 접근하여app1
에 직접 접근하려면
config의 <code>[server]
아래에 #🎜🎜#https://github.com/epaii/epii-server#을 설정하기만 하면 됩니다. ini 🎜🎜#설정 후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=2app8无需设置,因为所有的应用默认都使用第一个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=password2、
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:90004、linux,unix 用户须知道安装的各个php版本路径及
php-fpm
的位置和php-fpm.conf
的路径,分别修改php-fpm.conf
文件 ,并成功运行/path/to/php-fpm
EpiiServer
仓库首页gitee仓库
https://gitee.com/epii/epii-servergithub仓库首页
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!