http://blog.laobubu.net/archives/move-to-openshift/

记一次搬迁到 OpenShift 并搭建 PHP5.5 环境等



Nov 24, 2014



十一月,忙碌到飞起来的二十多天中,我使用的廉价VPS主机商 Incero 没钱,任性,跑路了,接着我的网站直接挂彩。本来打算使用 DigitalOcean 的学生优惠去购买VPS,谁知他们不接受中国的邮箱后缀。无奈之下我又滚回了经典的 OpenShift。



OpenShift 是由红帽公司提供的 PaaS,当然可大致视为虚拟主机使用,只是一个账号只能创建三个 app (可以当做站点),而且官方提供的 PHP 版本截至目前最高是 5.4。对于我这种可能需要多来几个子域名,而且想体验最新版本的人来说有点遗憾。



不过 OpenShift 还很厚道地提供 DIY Cartridge,也就是提供一个类似 VPS 的存在,可以用来编译和运行自己的网页服务器程序。网络上有PHP 5.5 + Nginx 的 DIY Cartridge 模板1,但是我还是想自己试着闹腾一个 PHP 5.5 + OpenShift httpd (Apache2.2) 的版本……



我的 DIY Cartridge 模板已经放到 GitHub 上了:laobubu/openshift-php5.5-cgi-apache,不定期更新。 使用方法和前面所提的那个类似,上传到服务器,在服务器上运行编译脚本,等它编译一小时,完成。 由于以前也没有接触过这种服务器方面的操作,使用的是简陋的 CGI 方式,但是能够摆脱官方的限制,可以自定义 httpd.conf 和 php.ini 也是很不错的。

New OpenShift DIY Cartridge



官方介绍就是 Do-It-Yourself ,允许自己闹腾服务器程序,只要你的 web 服务器程序监听的地址是 ${OPENSHIFT_DIY_IP}:${OPENSHIFT_DIY_PORT},爱怎么玩就怎么玩。



刚刚创建一个基于 DIY Cartridge 的 App 时,官方会在里面提供一行的 Ruby 简易服务器示例,但是可以删除。

操作钩子(action hooks)



有一点很重要的就是修改 .openshift/action_hooks 里面的脚本,从而让 OpenShift 知道怎么启动和停止服务器程序。官方也提供了一些说明。我就将里面的 start 和 stop 修改成了启动和停止 httpd 的脚本,感觉就像 init.d 一样萌萌哒。

文件和程序管理



一个 app 的程序是保存在 git 上的。通过 git push/pull 来控制代码,一大股 PaaS 范儿。



除此之外也可以通过 SSH 直接连接到服务器,也支持 SFTP 管理文件。当前版本的程序就保存在 ~/app-root/runtime/repo 里面,可以随便修改,而且立即见效(顺带吐槽一下 AppFog 那诡异的服务器,随便一修改,刷新就没了)。问题就是这个不是长久之计,因为只要一 git push ,所有的改动都会被 git 洗去。



当然也有不受 git 支配的文件夹,那就是 ~/app-root/runtime/data 甚至 ~/app-root/runtime。可以把那些需要持久的数据放在这些文件夹。



说了这么多,大概可以这么想:将 PHP5.5 编译出来并放在 ~/app-root/runtime 里面,然后 httpd 的配置文件就用 git 来控制,挺顺溜的。

编译 PHP 和准备 httpd



这个基本就是参考那个 PHP+Nginx1 的做法,糊了一大堆的编译参数,同时指定好 prefix 使之输出到那个 runtime 文件夹下面。



然后是 httpd 的准备。摆脱了官方的限制,可以自己编写操作钩子,指定配置文件地启动 httpd。而 httpd.conf 文件还得从头开始,不过天下 Apache 基本也是那个样子,找一个例子,按需修改即可。



哦对了别忘记 Listen ${OPENSHIFT_DIY_IP}:${OPENSHIFT_DIY_PORT}

搬家



这个过程比较简单了。在 OpenShift 后台给这个 app 绑定了域名之后,修改 httpd.conf 添加 VirtualHost 即可实现多站点。把文件上传上去,一切都进行的很顺溜。

为 Typecho 更换一个 Markdown 解析引擎



不知道咋的,Typecho 1.0 的 Markdown 解析引擎不支持脚注、表格等功能了,这使我感到纠结。之前看 QQ 群他们也吐槽过这个问题,但是都手工更换引擎了,不知道官方怎么想的……



大概方法就是:



下载 ParseDown 和 ParseDown-Extra 的解析引擎程序,放到 var 文件夹内。然后修改 var/Markdown.php 文件,将里面的 Markdown::convert($text) 函数代码修改掉:



    public static function convert($text)

    {

        static $docParser;



        if (empty($docParser)) {

            $docParser = new ParsedownExtra();

        }

        

        return $docParser->text($text);

    }



测试发现 ParseDown-Extra 对 HTML 标签围绕的 Markdown 是不解析的,所以需要修改程序。



找到 getAttribute('markdown') 这一行,将下面的 != '1' 修改为 == '0' 即可。



完成。如果你看到这篇文章有一个角标,那么恭喜我,成功了。

后面的事情



这个月还有一大串电子设计的事情,等后面闲下来再在博客扯淡吧。



    OpenShift PHP5.5 Nginx: https://github.com/rexdf/openshift-nginx-php55/ ? ?2

记一次搬迁到 OpenShift 并搭建 PHP5.5 环境等的更多相关文章

  1. 微服务迁移记(五):WEB层搭建(5)-集成ueditor编辑器,伪分布式图片上传

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  2. 微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 接下来,集成SpringSecruity,实现用户 ...

  3. 微服务迁移记(五):WEB层搭建(3)-FreeMarker集成

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  4. 微服务迁移记(五):WEB层搭建(4)-简单的权限管理

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  5. [BI项目记]-搭建代码管理环境之客户端

    前面已经介绍了如何搭建代码管理环境的服务器端安装和配置,这里介绍对于客户端的几个场景. 首先对于开发人员来说,可以直接使用Visual Studio来连接,这里主要演示Visual Studio 20 ...

  6. OSX10.12搭建IPv6本地环境测试APP

    前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...

  7. 自定义搭建PHP开发环境

    学习了一段时间php了,因为之前是刚接触php,所以用的是集成安装包(wamp).现在想进一步了解apache.mysql.php之间的关系以及提升自己所以进行自定义搭建PHP开发环境.废话不多说,请 ...

  8. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

  9. 使用virtualenv搭建python3开发环境

    问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...

随机推荐

  1. 简单日志LogHelper

    public static class LogHelper { //日志存储路径 private static string LogPath = Path.Combine(AppDomain.Curr ...

  2. Aizu - 2555 Everlasting Zero 模拟

    Aizu - 2555 Everlasting Zero 题意:学习技能,每个技能有不同的要求,问能否学习全部特殊技能 思路:枚举每两个技能,得到他们的先后学习关系,如果两个都不能先学的话就是No了, ...

  3. sublime 编辑器汉化

    一.下载Sublime编辑器 官网下载地址:http://www.sublimetext.com/3 二.下载汉化包 汉化包下载地址:http://files.cnblogs.com/akwwl/su ...

  4. CSUOJ 1531 Jewelry Exhibition

    Problem G Jewelry Exhibition To guard the art jewelry exhibition at night, the security agency has d ...

  5. C++里的模板

     1.泛型编程 --即实现一个通用的标准容器库. 所谓通用的标准容器库,就是要做到:比方List类存放全部肯恩类型的对象这样的事:泛型编程让你编写一个全然一般化并可反复使用的算法,其效率与针对某特定数 ...

  6. HBase概念学习(八)开发一个类twitter系统之表设计

    这边文章先将可能的需求分析一下,设计出HBase表,下一步再開始编写client代码. TwiBase系统 1.背景 为了加深HBase基本概念的学习,參考HBase实战这本书实际动手做了这个样例. ...

  7. Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack.

    1.错误描写叙述 八月 14, 2015 4:22:45 下午 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Excepti ...

  8. vue -- 跨域cookie 丢失的问题

    前端使用了vue-reource的$http进行请求后台接口 登陆完成后,服务端监控发现无法拿到cookie,下面看几张前端控制台监控的图 reqqust Header  没有显示cookie 信息 ...

  9. CentOS下编译安装Apache

    与Apache 2.2.x相比,Apache 2.4.x提供了很多性能方面的提升,包括支持更大流量.更好地支持云计算.利用更少的内存处理更多的并发等.除此之外,还包括性能提升.内存利用.异步 I/O的 ...

  10. Zabbix + Grafana

    Grafana 简介 Grafana自身并不存储数据,数据从其它地方获取.需要配置数据源 Grafana支持从Zabbix中获取数据 Grafana优化了图形的展现,可以用来做监控大屏 Grafana ...