用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版的 借助图表,我们可以更容易地观察到一些现象并得出结论,比如某种数据的查询次数随时间变换的规律,或者是发现某类查询的扫表次数特别的高,这也许是因为涉及的条件字段没有加索引导致的,诸如此类。 更多细节可以参考 官方文档…

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: 可从[…

PHP自动化发布工具:Deployer

项目迭代的过程中, 不断把新开发的功能发布到不同的系统环境是一件家常便饭的工作. 传统的做法一般是: 登录到某台服务器上; 更新代码; 更新依赖(composer up); 重启一些服务(比如队列什么的)... 随着项目逐渐长大, 服务器的数量会越来越多, 每次发布新功能都需要亲自登录到20台服务器上, 一遍又一遍的做着重复的操作,还得确保每一次操作都正确且没有疏漏, 对于程序员来说, 这样的事情是不可想象的。重复的工作,就交给代码去完成吧! Deployer 是一款用PHP开发的自动化发布工具。又要发布新版本了? 你所要做的仅仅是在命令行中输入一行命令,执行预先写好的脚本,之后所有的工作deployer会帮你完成。甚至,你还可以把它和版本控制工具的Hook结合起来,例如,当master分支收到新的提交后,deployer自动从版本控制中拉去新的代码,并在指定服务器上完成后续的发布工作,自动化发布实现了! 如果你是一名PHP程序员那就太棒了, 因为deployer的部署脚本也是用PHP来写的。deployer的原理其实很简单,添加服务器配置,通过ssh方式以秘钥或者密码登录到远程服务器并执行脚本。服务器配置文件大概是这样: prod: host: domain.com user: www identity_file: ~ stage: production deploy_path:…

如何正确使用composer

composer 是一款优秀的PHP依赖管理工具,正如pip之于python、gem之于ruby、gem之于node。无论任何一门语言,在现代软件开发实践中,依赖管理对于开发者而言都是必不可少的一个部分。敏捷开发强调不要重复造轮子,而依赖管理工具则提供了一种最容易的方式帮助我们方便的获取到别人造好的漂亮轮子,并且完美的安插到我们的项目之中。理想总是好的,但当理想落地成为现实的时候,一切又变得不那么美好,尤其是当它准备落在中国的土地上。 因为众所周知的原因,composer在国内并不好用,虽然在PHP社区里也有一些为国内开发者提供的镜像网站,然而经过尝试,这些镜像的表现也不尽人意,常常出现502等让开发者们叫苦不迭。简单分析一下,composer更新缓慢主要在两个地方,一是从packgist获取依赖包的下载地址时常常会卡死(也就是: Loading composer repositories with package information 这一步); 二是从github下载文件时,有时会因为网络请求超时而中断 自建镜像 Satis是composer官方提供的一个搭建私有镜像的工具, clone satis 到自己的服务器以后, 在配置文件中申明需要的依赖, 如: { "repositories": [ { "type": "composer"…

如何快速搭建一个VPN服务器

这里提供两种快速搭建一个VPN服务器的方案(首先,你需要准备一台墙外的 *nix 服务器)。 L2TP L2TP服务器的搭建过程相对比较麻烦,不过Github上总会有不少前人造好的轮子,我们所要做的只是了解如何使用它 setup-simple-ipsec-l2tp-vpn。 clone下项目后,根据自己的系统环境,执行对应的setup.sh脚本。以CentOS为例: $ ./setup_centos.sh 安装完成后,还需要配置iptables转发规则 $ echo 1 > /proc/sys/net/ipv4/ip_forward #开启ipv4转发 iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth1 -j MASQUERADE #将ppp数据转发至公网网卡(规则中的IP网段和网卡变化根据实际情况确定) $ iptables-save $ service iptables…