记一次搬迁到 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,替换掉现有的开发环 ...
随机推荐
- Centos7 zabbix3.4.6的安装部署 (一)
部署zabbix主要为了监控日常主机.服务器.Web服务器.数据库.路由器.交换机等日常设备,功能强大,稳定性好 现在通过使用虚拟机VM搭建的Centos7部署zabbix服务 实现简单监控功能 本章 ...
- dubbo+zookeeper+springMVC +maven
pom: <dependency> <groupId>com.github.sgroschupf</grou ...
- 2015上海网络赛 HDU 5478 Can you find it 数学
HDU 5478 Can you find it 题意略. 思路:先求出n = 1 时候满足条件的(a,b), 最多只有20W对,然后对每一对进行循环节判断即可 #include <iostre ...
- 【实用篇】获取Android通讯录中联系人信息
第一步,在Main.xml布局文件中声明一个Button控件,布局文件代码如下: <LinearLayout xmlns:android="http://schemas.android ...
- Ftp的上传和下载
百度知道的那个在“ 绑定和SSL设置”模块,选择的是允许 如果一直找不到网页的话,就是这里错了:反正就是牵扯到一堆防火墙的设置(最后我也没搞成) 选择成无就OK了:一切迎刃而解............ ...
- PHP获取随机字符串的两种方法
<?php /** * 随机返回字符串 * @param number 返回字符串长度 * @param string 从哪些字符串中随机返回,已设置默认字符串,可空 * @return str ...
- React开发实时聊天招聘工具 -第一章
第一章 课程道学 6个页面 弱化css Antd-mobile作为组件库 Redux 状态管理 React-Router 路由 Axios异步请求 后端Express框架 Socket.io 数据库: ...
- JS — 对象的基本操作
JS面向对象系列教程 — 对象的基本操作 面向对象概述  面向对象(Object Oriented)简称OO,它是一种编程思维,用于指导我们如何应对各种复杂的开发场景. 这里说的对象(Object) ...
- Django_视图操作
- hdu4565---So Easy!(矩阵)
Problem Description A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ce ...