Docker + PHPStorm 搭建虚拟化开发环境

从 PHPStorm 2016.3 版本起, PHPStorm 对 Docker 提供了更友好的支持. 在之前的版本中, 想在 PHPStorm 中使用 Docker 容器内的 PHP 解释器(interpreter)来调试代码是比较麻烦的, 我们需要在 Docker 容器内安装并启动 sshd 服务(由于一个 Docker 只能服务单个进程, 还需要借助 supervisord 等进程管理工具来实现), 再配置 PHPStorm 通过 ssh 的方式访问容器内的 PHP 解释器. 不过现在, Docker 已成为了 PHPStorm 的一等公民. 那么是时候和 Vagrant 说再见, 投入 Docker 的怀抱啦. 当然, 如果你还是更喜欢…

用Elasticsearch搭建一个全文搜索服务

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 (百度百科) 准备工作 在Docker容器中运行 Elasticsearch 并安装 elasticsearch-head 管理工具, 注意将 Elasticsearch 的 9200 9300 端口映射到宿主机, 并将 config 及 plugins 目录挂载到宿主机. docker-compose.yml 配置: version: '2' services: elasticsearch: image: elasticsearch:5.2.0 container_name: med-news-es-dev ports: - "9200:…

在浏览器中实现RTMP推流

什么是RTMP 引用自Adobe官方说明: RTMP(Real-Time Messaging Protocol) 是为了能在基于Adobe Flash平台的技术间实现音频、视频及数据的高性能传输而设计的,包括Adobe Flash Player和Adobe AIR。现在,RTMP已经可以被作为一项开放的标准,用于那些支持视频、音频及其他数据传输的产品或技术,只要传输的数据格式能与Adobe Flash Player适配(如swf、flv、f4v等)。 关于RTMP推流 “视频直播”是近两年互联网产业里很火的一个版块,大大小小的视频网站、APP层出不穷,而RTMP是目前市面上实现视频直播所采用的最主流的数据传输方式。常规的方式是,视频主播通过OBS等推流软件将摄像头捕捉的视频通过RTMP协议传输到指定的服务器地址,服务器将接收到的视频流以m3u8格式保存下来,客户端再通过拉取RTMP数据流的方式获取到视频数据并播放。 以上所描述大概就是一个基本的视频直播模型。那么,如果想要直接在浏览器中向RTMP服务器推流又该如何实现呢?这也并非难事,目前市面上大部分浏览器都可以很好的支持Flash,别忘了,RTMP技术正是为了Flash而生的!只需要几行简单的ActionScript代码,我们就能轻松搞定。 ActionScript & Flex Flex是Adobe官方提供的一款ActionScript开发框架,Flex提供了丰富的API,并能将ActionScript编译成可被Flash Player执行的swf文件。在开始工作之前,…

软件服务化——把应用交给Docker吧

在传统的应用部署实践中,我们需要在应用发布之前在服务器上准备好其所需的环境(如项目所依赖的库、语法解释器、Web容器等),Docker则为我们提供了一种更优雅的方式来解决这一问题。 什么是Docker Docker可以帮助你把项目应用及相关所有依赖打包成一个标准化的单元。Docker容器是由Docker提供的虚拟化环境,在一个Docker容器中包含了运行项目所需的一切:代码、系统库、其他软件,总之,包括了你可以在服务器上安装的一切。 为什么用Docker Docker的意义就在于将运行项目所需的外部依赖统统作为项目的组成部分包含在项目下的一个Docker配置文件中,通过它我们可以直接让项目在Docker中运行起来,这样的做的好处是显而易见的: 1. 不再需要提前在服务器上安装及配置项目所依赖的环境 2. 降低项目在开发过程中,开发环境不断迭代更新的成本以及搭建项目环境的成本 3. 多个应用在同一台服务器运行时,可以方便的隔离环境,避免依赖冲突 4. 所有项目都运行在Docker的虚拟容器中,物理机干干净净!爽!! 实践 Docker容器为应用提供了独立的运行环境,Docker提供了一组命令行工具,让我们可以方便的对Docker容器进行管理。对于非Linux的平台,我们还需要先安装docker-machine(这相对于一个linux虚拟机),再将docker容器放在docker-machine中。 docker-compose是Docker提供的另一个非常有用的管理工具,我们可以通过定义docker-compose的配置文件,对多个Docker容器统一进行管理。下是一个docker-compose.yml文件的例子: version: '2' services: mysql: image:…

Mac 神器之 Alfred

用一句话来说,Alfred是一款Mac下必不可少的神器! 首先,Alfred覆盖了Mac原生的Spotlight的功能,比如: 启动应用 查找文件 还有一些额外的小把戏: 计算器 放大显示(command+L) 不过,仅凭上面这些还远不足以让Alfred被赞为神器,workflows 才是Alfred最酷的功能。 workflows可以理解为允许开发者自己编写的Alfred插件。在Alfred中,你可以方便的定义插件的流程和触发方式,并支持通过多种语言来编写插件的具体逻辑。所以,我们可以将能想到的各种日常功能写成workflows集成到Alfred中。 快递查询 天气预报 翻译(有道) 网上有大量开源的workflows可以使用,我们也可以根据需要编写 自己的workflows,总之,祝大家玩得开心。…

Vagrant + PHPStorm 搭建虚拟化开发环境的实践方案

那么,在开始之前,我们先来思考几个问题 ... 为什么用虚拟机 当考虑需要在本地搭建一个独立的开发环境时,最传统的方式是,在自己的开发机上安装各种项目依赖的软件和库,以便项目能在本地环境中运行起来。而这种看起来最简单直接的方式却可能带来一些意想不到的麻烦: 1. 开发机可能和生产环境之间存在平台上的差异,比如多数开发者喜欢在Mac或者Windows上工作,而服务器多半是Linux。 2. 同时在多个项目工作时,不同项目所依赖的软件版本可能存在冲突,而不同版本的软件在表现上的差异可能导致项目中的错误。 3. 软件的安装方式、安装目录等可能存在差异。 4. 对于对项目还不太熟悉的新成员,要正确安装项目所需要的各种软件及完成配置,往往要花上不少的时间。 而所有这些可能存在的差异,最终可能表现为一个在传统的工作方式里十分常见的问题:It (not) works on my machine!【代码在我的电脑上是(不)正常的】。考虑到这一点,采用虚拟机来提供一个完全无差异的开发环境就成为了一个不错的方案。其实除了以上四点原因外,还有更重要的第五点: 作为一个有轻微洁癖的开发者,我绝不允许在我心爱的Mac上装一大堆乱七八糟的东西,哈哈。 这样,理由就更加充分了。 为什么用Vagrant 回答这个问题,首先我们要知道什么是Vagrant。 简单的理解,Vagrant是一个虚拟机(如VirtualBox)…

MongoDB日志分析工具 mtools

mtools 是一组用于分析mongodb日志文件的小工具集,它们的功能就和你想象中的一样。 mlogfilter: 帮助我们方便地从全部日志文件中筛选出部分数据,比如只看特定时间内的日志或者特定数据集合的日志 mplotqueries:根据条件生成对应的图表数据,比如对集合的查询操作随时间变化的分布及每次查询的扫表次数 mlogvis:和mplotqueries类似,不过是web版的 借助图表,我们可以更容易地观察到一些现象并得出结论,比如某种数据的查询次数随时间变换的规律,或者是发现某类查询的扫表次数特别的高,这也许是因为涉及的条件字段没有加索引导致的,诸如此类。 更多细节可以参考 官方文档…

芦苇少女

这几年外公的身体一直不是很好,今年春节我和我母亲留在成都,负责照顾外公。一方面因为老人年纪大了应该有人陪伴,另一方面因为前几年做过十二指肠溃疡的手术,最近又拔了牙(因为要重新装假牙),饮食上需要特别照顾。 我的草稿箱里已经积攒了4、5篇只写了标题的博客,每次想要动笔又被自己以各种借口往后拖延。拖得越久越打不起精神,也许乘着假期的清闲,我会下定决心,把其中感兴趣的一篇或者两篇补上内容。 假期最大的好处就是我可以有大量的时间来阅读,我读书的速度比以前快了不少,差不多二天一本,有的时候一口气读完一本。读书的习惯是昕猫离开后才养成的,我喜欢《小岛书店》里那段A.J.费克里再也没有说出来的话,“ 因为孤单,我们开始读书,因为读书,我们不再孤单”。我反反复复地读这一段,用力地揣摩其中的意味,觉得深得我心。 我很喜欢《撒哈拉的故事》,三毛绝对算得上是个迷人的神经病,在这一点上,昕猫和她如出一辙。每每读到三毛说的那些疯话、做的那些疯事,我总是情不自禁地在脑子里将故事的主人公换成她再读一遍。她们一个敢在异国他乡把房东赶跑,另一个五岁就能把隔壁阿姨骂哭;一个深更半夜跑到总督的庭院里偷花险些被击毙,另一个则在光天化日之下跳到学校的人工湖里(其实是湖边的石头上)砍了一大棵芦苇送给自己作礼物;一个跑去偷看土著人洗澡被追着跑丢了凉鞋,另一个,我不知道,但如果她也做过类似的事我并不会感到太惊讶。…

再见

我和昕猫终于还是没能走到最后. "我们还是分开吧", 她总是很坦然. "那好吧", 我希望我也能这样坦然的回答, 然而这并不是事实. 在那一刻, 我的情绪淹没了所有的理智, 我一句话也说不出来, 像是有什么东西哽在喉咙里. 不得不承认的是, 真实的我甚至比她口中的那个男孩还要幼稚可笑. 表面上看, 我似乎是比较懂得照顾人的那一个, 事实上, 只有我才知道自己对她是多么的依赖. 一直以来, 失去她对我来说都是一个不存在的选项. 我朋友很少, 昕猫除了是我曾经的爱人, 也是我最好的朋友. 值得庆幸的是, 我们之间作为朋友的关系在一定程度上还能得以保留, 她会笑着打电话问我饺子馅应该买哪种肉, 和面应该加多少水, 我也乐于告诉她小托最近又长胖了, 以前套肩膀的绳子现在只能套脖子. 她说, 她一直被我身上那种生活的气息所吸引, 跟我在一起也让她学会了如何更好地生活. 而我知道和这些比起来, 她带给我的惊喜要多得多. 我看见自己是怎样变成了一个更好的人, 我说的"更好", 指的是更快乐. 我们相互扶持着经历过了人生中最尴尬的阶段, 结束了学生时代, 步入社会, 既没本事也没钱, 租便宜的房子, 每隔几天就强迫症般地去查查银行卡上的余额. 她说, 我在她的人生里占据着一个不可取代的位置,…

Appium:移动端自动化测试之道

如果你曾接触过Selenium的话, 那么, Appium就是一个移动端的 Selenium, Appium通过调用Andriod SDK提供的API实现对应用的操作, 从而实现对各种功能的模拟测试. Android Test with Appium (written with python client) 环境准备(Android) Windows 1. 安装JAVA: 可从官网获取JDK1.8安装包 2. 安装ANDROID SDK MANAGER: 可从官网获取ANDROID SDK MANAGER安装包, 并配置环境变量 ANDROID_HOME 到 ANDROID SDK 安装目录, 如:D:\Program Files\Android\android-sdk 3. 通过ANDROID SDK MANAGER安装所需的版本的ANDROID SDK 4. 安装appium: 可从[…