在win7中搭建Linux+PHP 开发环境


Posted in PHP onOctober 08, 2014

我用了 3 年多的 Linux 桌面,很是不爽,主要是各个软件的体验不够统一,太分裂,太多选择让人无从选择。
而回到 Windows, 则更糟糕,使用 *nix 工具集变得非常折腾,部署 Web 环境也很麻烦,而且我的服务器都是 Linux 的,代码里有些功能是不能运行在 Windows 上的。

因为我偶尔还打打游戏,一个月前,我还是选择回到 Windows 桌面。
但我下面的这些软件几乎都是跨平台的,如果你使用 Linux 桌面,也不会有什么影响的。

我的主机是 Windows 7 x64, 然后跑一个 Arch 的虚拟机,所有代码的运行和调试都在虚拟机中进行。

Arch 虚拟机

Arch 安装略折腾,但我喜欢它 KISS 的哲学,我用 VirtualBox, 分配 512MiB 甚至 256MiB 就够用了。
网络改成「桥接网卡」然后在路由器设置一个 MAC 绑定的固定 IP, 我给虚拟机的是 192.168.0.105, 而我主机的是 192.168.0.100.

需要装的软件包最核心的有:openssh, nginx, mariadb, php, xdebug.
至于其他一些:vim, mongodb, php-mongo, phpmyadmin 就看个人需要了。

直接在 VirtualBox 的虚拟机窗口上敲命令很不方便,我会装一个叫 VirtuaWin 的虚拟桌面软件,类似于 KDE 的 Workspace(工作区), 把 VirtualBox 的窗口丢到另一个桌面。
然后用 XShell 连 SSH 上去敲命令。

当然你还需要建一个非 root 账户来日常使用,我建了一个 jysperm.
然后你可以修改 /etc/php/php-fpm.conf:

user = jysperm
group = jysperm
这样 PHP-FPM 的进程会以你的用户来跑,读写文件不会遇到任何权限问题。

作为开发服务器,可能同时需要开发测试多个项目,每次都要去 Nginx 里面新建站点是很折腾的事情,下面的配置文件可以让你一劳永逸:

server {

    listen 80;

    server_name ~(?<dir>.*)\.ab\.jyprince\.me$;
    access_log /home/jysperm/nginx.access.log;

    error_log /home/jysperm/nginx.error.log;
    index index.html index.php;

    autoindex on;
    root /home/jysperm/$dir;
    location / {

        try_files $uri $uri/ /index.php?$args;

    }
    location ~ \.php$ {

        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;

        include fastcgi_params;

    }

}

*.ab.jyprince.me 这个域名被我解析到了 192.168.0.105, 这样下来,只需访问 test.ab.jyprince.me, 就相当于访问位于 /home/jysperm/test 中的文件了,以后就不用再修改 Nginx 的配置文件了。

PHPStorm

我见过最好的 IDE 是 PHPStorm.

PHPStorm 的 Deployment 功能可以在你每次修改文件后自动部署到服务器,你只需建一个 SFTP 类型的服务器,并把 Arch 虚拟机的信息填上去,然后勾选 Automatic Upload 就好。
每一个项目都上传到 /home/jysperm 下的一个文件夹。

然后访问 项目名.ab.jysperm.me 就行了,一切都是自动的。

远程调试

在 Arch 虚拟机中修改 /etc/php/conf.d/xdebug.ini:

zend_extension=/usr/lib/php/modules/xdebug.so

xdebug.remote_enable=on

xdebug.idekey=jysperm

xdebug.remote_host=192.168.0.100

xdebug.remote_port=9000

然后在 PHPStorm 中新建一个 PHP Remote Debug 即可。
需要调试时,先在 PHPStorm 中打开调试,设上断点,然后让请求带上 XDEBUG_SESSION=jysperm 的 Cookie 即可。
调试页面的时候,可以用 这个工具 生成书签,点击书签就可以控制调试的开关了。

调试 RESTful API 的话我一般会用一个叫 Postman 的 Chrome 扩展,这个应用似乎没有编辑 Cookie 的功能,这样的话,在 HTTP Header 里加上一项 Cookie:XDEBUG_SESSION=jysperm 就行了。

其他推荐

Robomogo - 跨平台的 Mongo GUI 客户端
SourceTree - Windows 下的 Git GUI
Secure Shell - Chrome 中的 SSH
Clover - 让 Windows 的资源管理器像 Chrome 一样
FileZilla - 跨平台的 FTP 客户端
SmartGit - 跨平台的 Git GUI
Sublime Text - 好用的跨平台编辑器

PHP 相关文章推荐
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
PHP之短标签开启设置
Jun 17 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
使用PHP编写发红包程序
Jul 22 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
PHP微信开发之有道翻译
Jun 23 PHP
PHP asXML()函数讲解
Feb 03 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
两千行代码的PHP学习笔记汇总
Oct 05 #PHP
PHP实现定时执行任务的方法
Oct 05 #PHP
PHP实现图片旋转效果实例代码
Oct 01 #PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 #PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 #PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 #PHP
php中文字符串截取方法实例总结
Sep 30 #PHP
You might like
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
图片按比例缩放函数
2006/06/26 Javascript
js的写法基础分析
2011/01/17 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
python 域名分析工具实现代码
2009/07/15 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
中学老师的自我评价
2013/11/07 职场文书
会务接待方案
2014/02/27 职场文书
教室布置标语
2014/06/26 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
新年寄语2016
2015/08/17 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
Python 中的Sympy详细使用
2021/08/07 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python