一直停留在windows,入了 jetbrains 的全家桶。准备入门 Swoole,不可能每做一点修改就 git push 运行一下。因此要在 windows 上配置 swoole 运行环境。对比了几种 windows 下 linux环境 的搭建

BashOnWindows

需要 windows 10

安装很简单,参考bash on windows 安装教程(win 10)

可能由于windows升级,我的版本在 CMD 输入 bash 后只提示去应用商店下载,没有 [Y/N] 选项。打开应用商店搜索下载 UBUNTU 就行了。

  1. # 先升级apt-get ,不然很多包会找不到
  2. sudo apt-get update
  3. sudo apt-get install php7.0 php7.0-curl #... 所有其他你需要的扩展
  4. # pecl 需要 php-pear
  5. sudo apt install php-pear
  6. # 可能提示 phpize 错误,需要 php-dev
  7. pecl install swoole
  8. # 按照提示安装 php7.0-dev
  9. sudo apt install php7.0-dev
  10. # 安装swoole
  11. pecl install swoole
  12. # 权限不够,直接 vi 新建
  13. # echo 'extension=swoole.so' >> /etc/php/7.0/mods-available/swoole.ini
  14. # 连接文件
  15. cd /etc/php/7.0/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
  16. # cd /etc/php/7.0/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini

升级apt-get,保证可以找到最新的包

/mnt/ 挂载了所有盘符,直接cd相应的目录开始吧

**官方说 BashOnWindows 需要关闭 daemonize **

BashOnWindows 环境下必须关闭 daemonize 选项

需要修改 config.h 关闭 HAVE_SIGNALFD

  1. # install 改为 download,因为需要手动修改一个配置
  2. pecl download swoole
  3. # 解压 cd 进 swoole 目录
  4. vi config.M4
  5. #找到 HAVE_SIGNALFD 那一行,删掉
  6. # 编译
  7. phpize
  8. ./configure
  9. make
  10. make install

【优点】

  • windows10 自带,安装无脑
  • 完整的 ubuntu 环境,自由度较高

【缺点】

  • 权限问题,要不停的 sudo(好吧可能是我被root惯坏了)
  • 怎么开多个shell窗口?

Docker on Windows

Docker 是什么就不赘述了,不管是开发调试还是线上运行都是很赞的沙盒容器。

我是windows10系统,直接选了官方的 DockerForWindows CE

其他windows版本的 docker 没有研究。前后在两台windows上安装部署docker+swoole镜像,一台部署成功后重启就挂掉了。一台部署成功运行ok。这里讲一下挂掉那台的历程:

  1. 安装DockerForWindows,提示开启 Hyper-V 服务,重启。成功运行Docker,下载 swoole 镜像。运行镜像:

    docker run --rm -t -i --name myapp -p 9501:9501 -v [windows路径如 e/workspace/swoole]:[挂载路径如/data]:rw [swoole image] /bin/bash

    各种参数可以 docker --help查到。这条命令的作用是开始在 docker 运行你的镜像,并且绑定端口,挂载本地文件夹到容器中。

    然后问题来了

firewall is blocking file Sharing between Windows and the containers.

一看到防火墙就想当然的去摆弄防火墙设置,搜了一大堆解决方法。

  • 研究防火墙规则(歧途1)
  • 研究445端口(歧途2,导致后续一堆蝴蝶效应)
  • 重新安装网络连接的 windows文件夹和打印机共享协议。(歧途3,实际上已经摸到边了)

【解决过程】

Docker 的图标有个 setting ,里面可以设置共享的盘符。

通过这么多的百度大致了解docker和windows是通过虚拟网卡(Hyper-V)来建立网络连接。

那么要在Docker容器中挂载windows文件,需要通过 网络文件夹共享。这也是为什么那么多的解决方式是告诉我重新安装 windows文件夹和打印机共享协议就解决了问题。

所以问题原因最终是因为,

我要共享的盘没开启网络共享

点开文件夹属性 -> 共享。docker -> setting -> 勾选要共享的盘。然后运行容器,well done!

【万劫不复】

因为前面尝试各种解决方法的时候,【修改过注册表】,【删除了Hyper-V虚拟网卡】,机器重启之后Docker 无法启动,查看日志大概是在NAT-switch的时候创建失败。查看Hyper-V管理器,【虚拟交换机管理】已经无法打开。多次卸载重装无果,最终放弃了DockerForWindows.

后来在家自己的windows10安装,一切顺利。

【优点】

  • docker容器镜像资源很多,一键安装,无脑部署
  • 顺便熟悉下docker的使用
  • 没有权限问题

【缺点】

  • 每次启动镜像要输一堆命令,共享盘符被坑了

非window10, cygwin,其他docker on windows

cygwin这里不做介绍了。

其他的docker on windows 没尝试过。

Windows 下 Swoole开发环境配置的更多相关文章

  1. 【Objective-C】Windows下Objective-C开发环境配置

    [Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/   最近打 ...

  2. windows下spark开发环境配置

    http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...

  3. Metabase在Windows下的开发环境配置

    Metabase在Windows下的开发环境配置 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} Metabase在Wind ...

  4. [傻瓜版] Redis在Windows下的开发环境配置步骤

    redis默认运行在unix体系下,windows无法直接运行官方版.以下是几种解决方案, 一)Windows移植版.启动速度飞快,优先推荐使用. a) 2.6.12 是稳定版,我用64位版来做开发环 ...

  5. Android NDK学习(2)Windows下NDK开发环境配置

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817386.html 一.配置好Android开发环境 二.下载安装安卓NDK   ...

  6. iDempiere 使用指南 windows下eclipse开发环境配置及打包下载

    Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...

  7. Windows下Android开发环境配置

    最新更新,见我新博客http://www.hrwhisper.me/java-android-environment-genymotion-emulator/ 更新了使用使用genymotion神级模 ...

  8. Windows下GO开发环境配置

    GO下载                 https://golang.org/dl/ IDE-goland下载    http://www.jetbrains.com/go/ 本次安装go1.9.3 ...

  9. windows下前端开发环境配置

    nvm安装 多媒体布局 前端自动化构建工具,gulp nvm管理node的版本,npm是node的包管理工具 下载nvm安装包 https://github.com/coreybutler/nvm-w ...

随机推荐

  1. Java基础--反射Reflection

    Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...

  2. MySQL/InnoDB tips & tricks

    本文讨论的是 MySQL 5.7. 1.混用 * 和列名会产生解析错误,要避免这个错误,要使用 tbl_name.* 的格式. 2.where 子句中不能使用 select 中定义的别名,因为 SQL ...

  3. Rails 表单总结

    1.button <%= button_to "删除",{:controller =>"welcome",:action =>"de ...

  4. SpringMVC—对Ajax的处理(含 JSON 类型)(1)

    一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...

  5. eclipse中server location为灰色,不能修改

    Eclipse中tomcat service设置发布时间︰选择window ----show view---services可以看到服务的面板双击tomcat进入配置界面Service Locatio ...

  6. c#抓取网页数据

    写了一个简单的抓取网页数据的小例子,代码如下: //根据Url地址得到网页的html源码 private string GetWebContent(string Url) { string strRe ...

  7. eclipse配置hadoop location的端口号

    在eclipse下配置hadoop location的时候 hadoop端口号应该与conf文件夹下的core-site.xml以及mapred-site.xml保持一致 前者对应dfs master ...

  8. Hbase批量插入优化记录

    2016年5月11日10:08:29 hbase原本的put方式是一条一条的put,在客户端修改 AutoFlush 将HTable的setAutoFlush设为false,可以支持客户端批量更新.即 ...

  9. 通过测试确定GCC中 INT DOUBLE的最大/最小值和精度(DOUBLE)

    INT 确定最大/最小值 由于达到极限之后会变符号,直接循环判断条件即可 DOUBLE确定精度 设置一个DOUBLE变量初始值为1/3.0,每次*10,然后取整数部分,当两次的结果相同时说明已经到最大 ...

  10. C++的引用的使用

    1引用的定义 引用时C++对C的一个重要的扩充,引用的作用是给变量起一个别名. 例如: int a; int &b=a;//声明b是a的引用 经过以上的声明,b就成为了a的别名,a和b的地位以 ...