支持的语言环境

概述

目前支持的语言环境包括php,java,ruby,python,nodejs,go,静态文件以及二进制文件,详见下表。

应用类型
备注
php

支持使用Apache或者nginx作为web服务器;

支持使用php-fpm, php cli, php cgi的不同运行方式;

支持50多种扩展

python 
java支持Servlet, Java Main, Grails, Groovy, Play Framework, Spring Boot等基于JVM的应用
ruby支持Rack, Rails, 或 Sinatra等框架
node.js 
go 
Staticfile(静态文件)HTML, CSS, or JavaScript
Binary (二进制文件)使用C,C++和Go等语言编写的web服务器端应用

Java

版本

组件
版本
配置
JREOpen JDK 1.7.x

heap(-Xmx, -Xms): 75%总内存
permgen(-XX:PermSize): 10%,最小64M
stack(-Xss): 5%

Tomcat8.0.x 

示例应用

在部署应用之前,先把应用导出成war包(确保包含所有的依赖包,在本地tomcat测试通过),然后通过小米应用引擎网站部署

示例应用除了index.jsp还有一个servlet(路径是/hello)使用log4j把日志输出到控制台(ConsoleAppender)。

java-sample.war (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

Python

定制运行环境

可以通过简单配置文件,定制python的运行环境,依赖包以及启动文件。

runtime.txt

在应用的根目录下,创建runtime.txt文件,里面声明需要的python版本,例如python-2.7.6,将使用2.7.6版本的Python

requirements.txt

在应用的根目录下,创建requirements.txt文件,里面声明应用所依赖的包,例如
uwsgi==2.0.9
将在部署的时候自动安装uwsgi 2.0.9.

Procfile

如果需要指定启动命令,可以在应用的根目录下,创建Procfile。例如:
web: uwsgi --http :$PORT --wsgi-file hello.py --master --processes 4 --threads 2 --disable-logging

示例应用

python-sample.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

应用日志

使用print,或者sys.stdout.write, sys.stderr.write,或者其他logging框架,打印到stdout/stderr

Ruby

支持的Ruby版本

可以在Gemfile里面指定ruby的版本,缺省使用用2.0.0。比如在示例应用中,在Gemfile中声明:ruby "1.9.3",将使用ruby 1.9.3-p551.

  • 1.8.7 : patchlevel 376, Rubygems : 1.8.24 (Not supported on cedar-14)
  • 1.9.2 : patchlevel 327, Rubygems: 1.3.7.1 (Not supported on cedar-14)
  • 1.9.3 : patchlevel 551, Rubygems : 1.8.23.2
  • 2.0.0 : patchlevel 598, Rubygems : 2.0.14
  • 2.1.5 : patchlevel 265, Rubygems: : 2.2.2
  • 2.2.0 : patchlevel 0, Rubygems: ; 2.4.5

示例应用

ruby-sample.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

示例是一个简单的RoR应用,指定使用ruby 1.9.3,启动命令在Procfile中指定:web: bundle exec rails s -p $PORT

PHP

运行环境以及支持的扩展

使用php buildpack,可以通过简单的配置:

  • 选择web server的类型,httpd(apache)或者nginx,和版本,缺省使用nginx 1.6.2
  • 选择PHP的版本以及使用方式(php-fpm, php cli, php cgi),缺省使用php-5.4.36,以php-fpm方式运行
  • 选择启用的扩展,默认启用bz2, zlib, curl, mcrypt
    目前支持的扩展:amqp, apc, apcu, bz2, curl, codizy, dba, exif, fileinfo, ftp, gd, gettext, gmp, igbinary, imagick, imap, intl, ioncube, ldap, lua, mailparse, mbstring, mcrypt, memcache, memcached, mongo, msgpack, mysql, mysqli, opcache, openssl, pdo, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, phpiredis, pspell, redis, suhosin, snmp, soap, sockets, sundown, twig, xcache, xdebug, xhprof, xsl, yaf, zip and zlib
    如果用到了其他扩展,请联系小米应用引擎的支持人员。
  • 覆盖默认的nginx/apache/php/php-fpm的配置

注意

目前应用引擎不支持PHP的composer机制,如果应用的部署包里面包含composer.json和composer.lock文件,会引起应用部署和启动失败。请删除应用目录(包含所有子目录)下所有的composer.json和composer.lock文件,然后再打包部署。

配置

缺省配置

php 5.4.x + nginx 1.6.x + phpfpm的缺省配置如下。如果需要定制,需要在缺省配置的基础上修改。 default-config.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

定制

请参考 https://github.com/cloudfoundry/php-buildpack/blob/master/docs/config.md

示例应用

示例应用php-sample使用了yaf框架,需要启用yaf扩展。目录结构如下图所示。可以从这里下载:php-sample.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

目录结构说明
  • .bp-config
    对buildpack的定制文件都放在这个目录。在options.json文件里面可以指定需要安装的扩展,要使用的web服务器类型(httpd或者nginx)和版本,以及PHP的版本和运行方式

  • web
    web/index是应用的主页 ,需要修改nginx的配置,把定制的http-defaults.conf放在 .bp-config/nginx目录下,内容如下所示,蓝色部分为定制的配置。WEBDIR缺省为 htdocs,部署以后,除.bp-config目录外的所有的目录都会被移至该目录下

    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
    port_in_redirect off;
    root @{HOME}/#{WEBDIR}/web;
    index index.php index.html;
    server_tokens off;

  • yaf-lib
    这是yaf的lib目录,需要在php.ini中定制: .bp-config/php/php.ini,在缺省的php.ini末尾添加:
  yaf.library="@{HOME}/#{WEBDIR}/yaflib"
  • application: yaf应用目录

  • conf:yaf配置目录

应用日志

对于PHP应用,应用引擎只收集php-fpm.log,stdout以及stderr的日志,应用本身的日志需要写到stdout/stderr,比如(或者使用其他logging框架):

<?php
$stdout = fopen('php://stdout', 'a');
fwrite($stdout, "this is a message to stdout");
fclose($stdout);
$stderr = fopen('php://stderr', 'a');
fwrite($stderr, "this is a message to stderr");
fclose($stderr);
?>

访问该页面后,在日志中会看到如下输出:
2015-01-19T11:33:25.96+0800 [App/0] OUT 11:33:25 php-fpm-logs | [19-Jan-2015 11:33:25] WARNING: [pool www] child 62 said into stdout: "this is a message to stdout"
2015-01-19T11:33:25.96+0800 [App/0] OUT 11:33:25 php-fpm-logs | [19-Jan-2015 11:33:25] WARNING: [pool www] child 62 said into stderr: "this is a message to stderr"

Node.js

示例应用

nodejs-sample.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

示例使用node的版本为v0.10.x,使用express来作为web server,用supervisor来启动。这些设置,以及依赖都在package.json中声明:

{
   "main" : "app.js",
   "engines" : {
    "node": "v0.10.x"
   },
   "scripts" : {
      "start" : "supervisor app.js"
   },
   "dependencies" : {
      "express" : "3.4.8",
      "supervisor" : ">=0.6.0"
   },
   "name" : "simple_nodejs_app",
   "version" : "0.0.1",
   "description" : "the simplest express nodejs app"
}

如果使用Procfile指定启动命令,可以在根目录下创建它,内容如下:

web: supervisor app.js

如果package.json里面既没有指定scripts.start,也没有Procfile文件,将在根目录下查找server.js文件,如果存在这个文件,启动命令会被设为npm start。

静态文件

示例应用

staticfile-sample.zip (Chrome: 右键点击链接,选择"Open link in new Tab"; Firefox: 右键点击链接,选择"Save Link As ...")

配置说明

在根目录下创建一个名为Staticfile的空文件,就可以试用缺省配置把应用部署为静态文件;缺省配置页面文件的路径都是相对于根目录的,index文件是index.html, index.htm或者Default.htm。 如果页面文件放到某个子目录,比如public,可以在Staticfile中添加: root: public 如果需要支持目录浏览(不推荐),在Staticfile中添加: directory: visible

修改nginx配置

缺省的nginx配置文件是nginx.conf。 如果需要定制,可以下载这个文件,然后按照需求定制,放在应用的根目录一起部署即可。

二进制文件

应用监听端口

在编写应用时,web服务器需要监听在环境变量PORT定义的端口上。

部署应用

在部署应用的时候,需要使用下面的三种方式之一来指定启动命令。 假设应用文件的名称是myapp

Procfile

在根目录下创建一个内容如下的Procfile文件: web: ./myapp

命令行指定

cf push -c './myapp' -b binary_buildpack ...

manifest文件

在manifest.yml文件中加入command属性

applications:
- name: myapp
  command: ./myapp
  stack: cflinuxfs2
  buildpack: binary_buildpack
  path: .
  memory: 128M
  disk_quota: 256M

results matching ""

    No results matching ""