在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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php测试kafka项目示例
Feb 06 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
收音机指标测试方法及仪器
2021/03/01 无线电
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
《我的第一本书》教学反思
2014/02/15 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
村容村貌整治方案
2014/05/21 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2015年材料员工作总结
2015/04/30 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
Python基础之数据结构详解
2021/04/28 Python
Python+Appium实现自动抢微信红包
2021/05/21 Python