Ubuntu LNMP 一键安装脚本

这两天整了个 Ubuntu(14.04 LTS)上安装配置 Nginx,MySQL,PHP 环境的一键安装的 shell 脚本,一劳永逸。 Github:ubuntu-lnmp-installer 包括的软件包: Jemalloc(4.2.0) PHP(7.07) MySQL(5.6.29) Nignx(1.10.0) Redis(3.2.0) Node.js(5.8.0) PM2 Beanstalkd Supervisor 使用方法: git clone cd ubuntu-lnmp-installer ./install.sh 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: Ubuntu LNMP 一键安装脚本 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

Github :https://github.com/yuansir/vagrant Box ubuntu-14.04-amd64.box vagrant box add ubuntu/fuck path/to/ubuntu-14.04-amd64.box 目录文件说明 Vagrantfile vagrant 配置文件 bootstrap.sh vagrant provision shell 脚本 etc/ 开发环境所需的配置文件,暂时只有 nginx 和 supervisord,根据个人实际情况添加 hosts 在宿主机 hosts 需要添加的 IP 绑定,根据个人实际情况添加 projects/ 项目存放目录 scripts/ Vagrant Provision Shell,根据个人实际情况添加 其他 Vgrant 常用命令 vagrant init 初始化 box 的操作(本项目已配置好无需该操作) vagrant ssh 登录虚拟主机 vagrant up 启动虚拟机 vagrant box list 已添加 box 列表 vagrant box remove 删除 box vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源 vagrant halt 关机 vagrant reload 重新启动虚拟机,主要用于重新载入配置文件 vagrant suspend 挂起当前的虚拟机 vagrant resume 恢复前面被挂起的状态 vagrant ssh-config 输出用于 ssh 连接的一些信息 vagrant status 获取当前虚拟机的状态 默认启动安装软件 beanstalk composer mysql 5.

阅读全文

最近几个用 Mac 的同事都说 Vagrant 经常宕了或者导致电脑死机重启,看了下进程就是 VBoxHeadless 占满 CPU 导致的,其实很简单解决。 Vagrant 配置加上 $enable_serial_logging = false 然后vagrant destroy**,**vagrant up 如果还是不行安装插件 vagrant plugin install vagrant-vaguest,然后重启 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: Mac OS Vagrant VBoxHeadless 占满 CPU 的解决方法 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

以前 Vagrant VM 中用Elasticsearch 1.7 的时候,做端口映射: config.vm.network "forwarded_port", guest: 9200, host: 9300 这样就可以在本地成功用 127.0.0.1:9300 来访问 vagrant 中的 Elasticsearch 了,但是如果是 Elasticsearch 2.0 这样就不可以了,只要修改elasticsearch.yml: network.host: 0.0.0.0 再vagrant reload 启动一下 Elasticsearch 就 OK 了 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: 解决 Elasticsearch 2.0 Vagrant 端口映射不能访问的问题 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

SVN 项目迁移到 Gitlab

加入新的团队,他们之前一直用 svn 而且每个人都用 vim 在开发机的自己的用户目录下面开发,这种原始社会的开发方式实在不能忍,于是将团队的开发方式转到 git-flow+vagrant,将 svn 项目转到 gitlab 中。 1.导出 SVN 项目的所有提交者 svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt 修改一下对应的 gitlab 账号,类似于: xm = 小明 <xm@xxx.com> xl = 小刘 <xl@xxx.com> 2.Gitlab 上新建项目,比如叫 test 3.git svn clone 需要迁移的 svn 项目(确保已安装 git-svn) git svn clone svn://svnurl.com/mongoose/trunk/xxxxxx --authors-file=users.txt --no-metadata test 4.

阅读全文

上一篇《Elasticsearch与 MongoDB 数据同步及分布式集群搭建 (一)》我们已经配置了一个 Elasticsearch与 MongoDB 数据同步高可用,可扩展以及分布式是 ES 的一个优势和特色,扩展垂直扩展或者向上扩展,Vertical Scale/Scaling Up,或是水平扩展或者向外扩展,Horizontal Scale/Scaling Out。 一个节点会运行一个 ES 的实例,一个集群则会包含拥有相同cluster.name的一个或者 多个节点,这些节点共同工作来完成数据共享和负载分担。随着节点被添加到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。集群中的一个节 点会被选为主节点(Master Node),它负责管理整个集群的变化,如创建或者删除一个索引(Index),向集群中添加或者删除节点。任何节点都可以成为主节点。在我们的例子中只 有一个节点,所以它就承担了主节点的功能。ES 通过分片将数据分布在集群中。可以将分片想象成数据的容器。文档会被存储在分片中,而分片则会被分配到集群 中的节点中。随着集群的扩大和虽小,ES 会自动地将分片在节点之间进行迁移,以保证集群能够保持一种平衡。一个分片可以是主分片(Primary Shard)或者副本分片(Replica Shard)。索引中的每份文档都属于一个主分片,所以主分片的数量就决定了你的索引能够存储的最大数据量。一个副本分片则只是一个主分片的拷贝。副本用 来提供数据冗余,用来保护数据在发生硬件故障是不会丢失,同时也能够处理像搜索和获取文档这样的读请求。主分片的数量在索引建立之初就会被确定下来,而副 本分片的数量则可以在任何时候被更改。 具体原理可以参考官方文档:《life inside a cluster》 演示水平扩展,这里新添加一个 ES 实例的虚拟机,这样我们之前的 ES 实例为:10.253.1.70,现在添加一个新的节点:10.253.1.71.,需要保证这两个节点之间是可以互相通信的. 配置 config/elasticsearch.yml 10.253.1.70 相关配置为: cluster.name: elasticsearch_ryan node.name: "cluster-node-1" </pre> 10.253.1.71相关配置为: <pre class="brush: bash; title: ; notranslate" title="">cluster.name: elasticsearch_ryan node.name: "cluster-node-1" 其实就是要保证有共同的cluster.name 启动 10.253.1.71 的 ES 服务,然后可以查看下节点集群的状态: curl -XPOST "http://10.253.1.70:9200/_cluster/health" { "cluster_name": "elasticsearch_ryan", "status": "green", "timed_out": false, "number_of_nodes": 2, "number_of_data_nodes": 2, "active_primary_shards": 9, "active_shards": 18, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0 } 可以看到现在有 2 个节点,status 表集群的状态,具体状态含义:

阅读全文

Elasticsearch通过 River 可以与多种数据源 Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox 等同步,公司的业务是用 MongoDB,今天测试环境虚拟机上配置了一下 Elasticsearch 与 MongoDB 的同步,作个大概的过程记录,主要利用richardwilly98 / elasticsearch-river-mongodb。 River 通过读取 mongodb 的 oplog 来同步数据,oplog 这个表来使集群中的不同机器数据同步的,可以保证 es 里面的数据和 mongodb 里面的是一样的,所以 Mongdb 必须是个集群才能拥有 oplog.注意:该插件只支持集群环境下的 mongodb,因为集群环境下的 mongodb 才有 oplog 这个 Elasticsearch 和 MongoDB 需要安装对应的版本才能实现同步,我这里用了最新的 Elasticsearch 1.4.2 和 MongoDB 3.0.0,相应的版本要求参考下表 MongDB 是一个副本集的集群,具体副本集集群的搭建不详细写了,Elasticsearch 的安装配置也省略。 1.安装 elasticsearch-river-mongodb # ./elasticsearch-1.4.4/bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/2.4.1 # ./elasticsearch-1.4.4/bin/plugin -i com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/2.0.5 2.建立 river curl -XPUT "http://10.253.1.70:9200/_river/threads_mongo_river/_meta"&lt;/span&gt; -d' { "type": "mongodb", "mongodb": { "servers": [ { "host": "10.

阅读全文

Mac OS 用了几个月了,系统自带的终端实在用着不爽,今天换了Iterm2,感受一天,体验甚好。 关于配色 ryan@localhost-6:~$ vim .bash_profile export CLICOLOR=1 export LSCOLORS=GxFxCxDxBxegedabagaced export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 然后打开 Preferences->Profiles->Terminal->Terminal Emulation->Report Terminal Type,选择 xterm-256color。 退出 i 再次启动,打开 Preferences->Profiles->Colors->Load Presets,选择配色方案。 常用快捷键 command+f:查找模式,输入前几个字母同事按 tab,查找并向右边选中并复制。按 shift+tab,则自动将查找内容的左边选中并复制。 command+d:垂直分割屏幕; command+shift+d:水平分割屏幕 command+w:关闭屏幕 command+;:输入打头几个字母 iterm2 将自动列出之前输入过的类似命令 command+shift+h:列出剪切板的历史记录 command+enter:进入与返回全屏模式 command+option+e:可以搜索所有 tab command+r:clear command+[ or command+]:切换屏幕 option+command+b:回放 command+1 / 2 :左右 tab 之间来回切换 基本用到的快捷键就这些了,具体可以看下官方文档。 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

阅读全文

最近工作中开发的一套系统,其中很多都是需要操作多服务器的,比如需要同时发布数据到 2000 个服务器上,或者同时向 2000 个服务器拉取数据。刚开始的解决方案就是单纯用 PHP 的curl_multi的方式并发处理请求,而且参考了淘宝技术博客的《Rolling cURL: PHP 并发最佳实践》,但是由于网络和数据以及各个服务器等等的一些情况导致这种并发处理的响应时间很慢,因为在并发请求的过程中还包括记录日志,处理数据等逻辑,等待处理结果并返回,所以也不能友好的满足后台操作的体验。 现在重新设计一种方案,利Gearman来实现并发的需求。通过 Client 将请求发送到 Gearman 的 Jobs,在每个 Work 中来再来进行 curl_multi 和数据处理和日志等一些操作,同时用Supervisor来监控 Gearman 以及 Works 的进程,这样可以实现一个并行的多进程和负载均衡的方案。 Gearman 可以做什么 异步处理:图片处理,订单处理,批量邮件/通知之类的 要求高 CPU 或内存的处理:大容量的数据处理,MapReduce 运算,日志聚集,视频编码 分布式和并行的处理 定时处理:增量更新,数据复制 限制速率的 FIFO 处理 分布式的系统监控任务 Gearman 工作原理 使用 Gearman 的应用通常有三部分组成:一个 Client、一个 Worker、一个 任务服务器。 Client 的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Worker 来完成这项任务。Worker 执行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。Gearman 提供了 Client 和 Worker 的 API,利用这些 API 应用可以同 Gearman Job Server 来进行通信。Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。

阅读全文

守护进程以及PHP的实现

周末在家无聊,看了下 Linux 守护进程(Daemon),以及实现的过程,然后用 PHP 实现了下,感觉这玩意确实对于一些应用场景很有用。结合 PHP 做一下笔记,如有错误请指正。先的熟悉一些名词。 守护进程:Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。 进程组:是一个或多个进程的集合。进程组有进程组 ID 来唯一标识。除了进程号(PID)之外,进程组 ID 也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组 ID。且该进程组 ID 不会因组长进程的退出而受到影响。 会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。 创建一个守护进程大体这样: fork 子进程,父进程退出 为避免挂起控制终端将 Daemon 放入后台执行,方法是在进程中调用 fork 使父进程终止,我们所有后续工作都在子进程中完成。 <?php $pid = pcntl_fork(); //父进程和子进程都会执行下面代码 if ($pid == -1) { //错误处理:创建子进程失败时返回-1. die('could not fork'); } else if ($pid) { //父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。 } else { //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 } ?> 在子进程中创建新会话 先介绍一下 Linux 中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。 控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第 1 点的基础上,调用 posix_setsid();使进程成为会话组长。setsid 有 3 个作用:让进程摆脱原会话的控制;让进程摆脱原进程组的控制;

阅读全文

作者的图片

Ryan是菜鸟 | LNMP技术栈笔记

一步一个脚印,一直在路上!记录LNMP技术栈,Web架构,区块链等笔记

菜鸟码农

南京