记一次搬迁到 OpenShift 并搭建 PHP5.5 环境等
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 环境等的更多相关文章
- 微服务迁移记(五):WEB层搭建(5)-集成ueditor编辑器,伪分布式图片上传
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...
- 微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 接下来,集成SpringSecruity,实现用户 ...
- 微服务迁移记(五):WEB层搭建(3)-FreeMarker集成
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...
- 微服务迁移记(五):WEB层搭建(4)-简单的权限管理
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...
- [BI项目记]-搭建代码管理环境之客户端
前面已经介绍了如何搭建代码管理环境的服务器端安装和配置,这里介绍对于客户端的几个场景. 首先对于开发人员来说,可以直接使用Visual Studio来连接,这里主要演示Visual Studio 20 ...
- OSX10.12搭建IPv6本地环境测试APP
前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...
- 自定义搭建PHP开发环境
学习了一段时间php了,因为之前是刚接触php,所以用的是集成安装包(wamp).现在想进一步了解apache.mysql.php之间的关系以及提升自己所以进行自定义搭建PHP开发环境.废话不多说,请 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
前言 上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...
- 使用virtualenv搭建python3开发环境
问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...
随机推荐
- 简单日志LogHelper
public static class LogHelper { //日志存储路径 private static string LogPath = Path.Combine(AppDomain.Curr ...
- Aizu - 2555 Everlasting Zero 模拟
Aizu - 2555 Everlasting Zero 题意:学习技能,每个技能有不同的要求,问能否学习全部特殊技能 思路:枚举每两个技能,得到他们的先后学习关系,如果两个都不能先学的话就是No了, ...
- sublime 编辑器汉化
一.下载Sublime编辑器 官网下载地址:http://www.sublimetext.com/3 二.下载汉化包 汉化包下载地址:http://files.cnblogs.com/akwwl/su ...
- CSUOJ 1531 Jewelry Exhibition
Problem G Jewelry Exhibition To guard the art jewelry exhibition at night, the security agency has d ...
- C++里的模板
1.泛型编程 --即实现一个通用的标准容器库. 所谓通用的标准容器库,就是要做到:比方List类存放全部肯恩类型的对象这样的事:泛型编程让你编写一个全然一般化并可反复使用的算法,其效率与针对某特定数 ...
- HBase概念学习(八)开发一个类twitter系统之表设计
这边文章先将可能的需求分析一下,设计出HBase表,下一步再開始编写client代码. TwiBase系统 1.背景 为了加深HBase基本概念的学习,參考HBase实战这本书实际动手做了这个样例. ...
- 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 ...
- vue -- 跨域cookie 丢失的问题
前端使用了vue-reource的$http进行请求后台接口 登陆完成后,服务端监控发现无法拿到cookie,下面看几张前端控制台监控的图 reqqust Header 没有显示cookie 信息 ...
- CentOS下编译安装Apache
与Apache 2.2.x相比,Apache 2.4.x提供了很多性能方面的提升,包括支持更大流量.更好地支持云计算.利用更少的内存处理更多的并发等.除此之外,还包括性能提升.内存利用.异步 I/O的 ...
- Zabbix + Grafana
Grafana 简介 Grafana自身并不存储数据,数据从其它地方获取.需要配置数据源 Grafana支持从Zabbix中获取数据 Grafana优化了图形的展现,可以用来做监控大屏 Grafana ...