[记录]Nginx 指令 Map 应用场景之: 统一 PHP 开发环境

在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.

大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.

这里尝试给出另外一个方案, 个人觉得可行性还是很大的.

本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7

思路

  1. 开发人员通过 Samba 共享代码
  2. 服务器分别挂载开发人员共享到服务器
  3. 服务器配置根据开发者 IP 使用不同的代码

准备工作:

  1. Linux 测试服务一台.
  2. 开发机一台.

开发机配置

  1. 开发机使用固定 IP, 可在本机自行设置, 也可网络管理人员在路由器设置.
  2. 开发机通过共享把代码根目录共享出来, 如 E:\WerServer\CompanyA,
    公司的全部项目代码都在 E:\WerServer\CompanyA\wwwroot 下.
  3. 开发机指定 Host, 如 172.16.66.120 test.abc.com

Windows 下通过 Guest 用户或你日常登录的用户共享.
如何共享文件, 以及防火墙的设置, 请自行通过搜索引擎解决.

服务器配置

服务器根据公司业务和技术需要配置好环境, 唯一的要求是使用 Nginx, 可选安装 echo-nginx-module

安装 Samba/CIFS 工具包:

sudo apt-get install cifs-utils -y

新建一个目录, 并挂载开发人员共享出来的文件:

sudo mkdir -p /var/development/fengqi
sudo mount -t cifs //172.16.66.112/wwwroot /var/development/fengqi
sudo mount -t cifs //172.16.66.211/wwwroot /var/development/diewu

Nginx 在 http 段内, server 段外加入如下配置:

map $remote_addr $dev_user {
    "172.16.66.112" "fengqi";
    "172.16.66.211" "diewu";
    default "default";
}

这段配置的意思是, 根据开发机的 IP 来设置一个变量 $dev_user, 后面会用到.

Nginx 的 Server 配置做如下变更:

server {
    listen 80;
    server_name test.abc.com;
    
    root /var/development/$dev_user/test.abc.com;
    
    #... 其他配置
    
}

如果有安装 echo-nginx-module 模块, 可通过如下配置来快速测试:

# nginx
location /t {
    default_type text/plain;
    echo $dev_user;
}

# shell
> curl test.abc.com/t
fengqi

现在大家在开发过程中虽然使用的都是同一个域名, 指向的 IP 都是服务器,
但是因为大家的电脑的 IP 不一样, 所以实际执行的代码其实是自己本地的.

这里使用 IP 识别出来用户, 动态的切换根目录, 但是有个前提,
大家使用固定 IP, 一样的目录结构, 一样的测试域名,而且全部 Host 指向服务器.

Map 指令还可以做其它的很多东西, 可自行开下脑洞.

参考资源:

  1. Nginx 变量漫谈(四)
  2. Nginx Map 模块

标签: php, nginx, map, php-fpm

添加新评论