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.6app9支持版本为php7.1app10支持版本为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.6app9支持版本为php7.1app10支持版本为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能给您带来帮助。让您更多的时间去研发产品,而非环境搭建。
EpiiServer 更快捷更方便的php+nginx环境定制化方案的更多相关文章
- chrome快捷键,让开发更快捷:
9:18 2015/12/9chrome快捷键,让开发更快捷:部分:按住 Ctrl 键,然后点击链接 从后台在新标签页中打开链接,但您仍停留在当 前标签页中 按住 Ctrl+Shift 键,然后点击链 ...
- 微信ios版6.2更新 聊天记录迁移更快捷朋友圈可翻译
微信iPhone版昨日发布更新,版本号为微信 6.2 for iOS,主要特性有聊天记录迁移.发送图片更快捷.支持朋友圈翻译.手机充值可充流量查余额.可以通过展示二维码来收钱,和ytkah一起来瞧瞧吧 ...
- List<List<model>>如何更快捷的取里面的model?
访问接口返回数据类型为List<List<model>>,现在想将其中的model插入数据库,感觉一点点循环有点傻,0.0...,各位有没有其他的方法? List<Lis ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析
默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...
- 采用ADM2483磁隔离器让RS485接口更简单更安全
采用ADM2483磁隔离器让RS485接口更简单更安全 摘要:本文介绍RS485的特点及应用,指出了普通RS485接口易损坏的问题,针对存在的问题介绍了以ADM2483为核心的磁隔离解决方案. 关键词 ...
- ELK学习笔记之F5 DNS可视化让DNS运维更安全更高效-F5 ELK可视化方案系列(3)
0x00 概述 此文力求比较详细的解释DNS可视化所能带来的场景意义,无论是运维.还是DNS安全.建议仔细看完下图之后的大篇文字段落,希望能引发您的一些思考. 在“F5利用Elastic stack( ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...
- 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)
本文作者:丁同舟,来自金蝶随手记技术团队. 1.前言 本文接上篇<金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)>,以iOS端的Objective-C代 ...
随机推荐
- Jenkins新建节点,启动方式没有“通过Java Web启动代理”选项怎么办?
在Jenkins中,打开“系统管理”→“管理节点”→“新建节点”页面时,“启动方式”选项没有“通过Java Web启动代理”,怎么办? 打开“系统管理”,进入“全局安全配置”页面. 1. “JNLP代 ...
- 在linux环境下搭建java web测试环境(非常详细!)
一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...
- 如何将bug杀死在摇篮里?
阿里妹导读:在欧洲中世纪的传说中,有一种叫“人狼”的妖怪,就是人面狼身.它们会讲人话,专在月圆之夜去袭击人类.而且传说中对“人狼”用一般的枪弹是不起作用的,普通子弹都伤不到也打不死它,只有一种用银子作 ...
- 解决Image在canvas以及audio、video在AudioContext下跨域问题
媒体元素嘛,在对应的标签或对象上加上 crossOrigin = 'anonymous' 即可. 例如 Image 在canvas 上绘制时会跨域: <img crossOrigin=" ...
- 爬虫入门之urllib库(一)
1 爬虫概述 (1)互联网爬虫 一个程序,根据Url进行爬取网页,获取有用信息 (2)核心任务 爬取网页 解析数据 难点 :爬虫和反爬虫之间的博弈 (3)爬虫语言 php 多进程和多线程支持不好 ja ...
- Vue项目中引入mockjs
前提:创建好的vue项目 前言: 为什么引入mockjs:为了实现前后端分离,开发工作可以异步进行 其他工具:axios 一般的前后端交互过程:前端 --> ajax请求 --> 网络协议 ...
- FIFO认识(一)
1.什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据 ...
- caffe整体框架的学习的博客,这个博客山寨了一个caffe框架
http://www.cnblogs.com/neopenx/default.html?page=1 这个博主很牛逼,写的东西也很好,多学学,无论是对框架,还是对自己学习c++帮助都非常大
- Spring Boot 推荐的基础 POM 文件
名称 说明 spring-boot-starter 核心 POM,包含自动配置支持.日志库和对 YAML 配置文件的支持. spring-boot-starter-amqp 通过 spring-rab ...
- Webpack2入门
webpack 2 将在其文档完成之后正式发布.但这并不意味着不可以开始使用它,如果你知道怎么配置的话. 什么是 Webpack? 简单来说,Webpack 就是一个针对 JavaScript 代码的 ...