5.3.9.2. 从 GitHub 部署到 Heroku
这个向导是给使用 GitHub 开发 CUBA 项目的开发者作为参考。
- Heroku 账号
首先,使用浏览器在 Heroku 创建一个账号,免费账号类型hobby-dev
已经足够使用。然后登录账号,并且点击界面顶部的 New 按钮创建新项目。
选择一个唯一的名称(或者这个字段空着等着自动分配)并且选择一个服务器地址。然后 Heroku 会创建一个应用,比如space-sheep-02453
,这个就是 Heroku 应用程序名称。
第一次使用的时候,Heroku 会切换到 Deploy 标签页,选择使用 GitHub 部署方式。根据界面提示完成 GitHub 账号的授权。 点击 Search 按钮列出所有的 Git 仓库(repositories),连接需要使用的仓库。当 Heroku 应用程序连接到 GitHub 之后,就可以启用 Automatic Deploys - 自动部署。自动部署可以在每次触发 Git push 事件的时候实现自动重新部署 Heroku 应用。在这个向导里面,启用了此自动部署功能。- Heroku CLI
-
安装 Heroku CLI
-
在电脑的任何目录打开命令行窗口,并输入:heroku login
-
按提示输入用户名密码。下面的步骤应该不需要再给这个项目输入用户名密码了。- PostgreSQL 数据库
-
返回浏览器打开 Heroku dashboard
-
切换到 Resources 标签页
-
点击 Find more add-ons 按钮查找数据库插件
-
找到 Heroku Postgres 区域然后点击。根据界面介绍选择 Login to install / Install Heroku Postgres
或者也可以通过 Heroku CLI 来安装 PostgreSQL:heroku addons:create heroku-postgresql:hobby-dev —app space-sheep-02453
这里的space-sheep-02453
是 Heroku 应用的名称。
然后可以在 Resources 标签页看到新建的数据库。数据库已经连接 Heroku 应用程序。通过这个方式可以看到数据库的用户名密码:切换到 Heroku 数据库的 Datasource 界面,下翻到 Administration 区域然后点击 View credentials 按钮。Host compute.amazonaws.com
Database zodt
User artd
Port 5432
Password 367f
URI postgres://artd:367f@compute.amazonaws.com:5432/zodt
- 项目部署设置
-
切换到项目根目录 ($PROJECT_FOLDER
)
-
拷贝modules/core/web/META-INF/context.xml
到modules/core/web/META-INF/heroku-context.xml
-
修改heroku-context.xml
文件将数据库连接信息更新进去(参考下面的例子):<Context>
<Resource driverClassName="org.postgresql.Driver"
maxIdle="2"
maxTotal="20"
maxWaitMillis="5000"
name="jdbc/CubaDS"
password="367f"
type="javax.sql.DataSource"
url="jdbc:postgresql://compute.amazonaws.com/zodt"
username="artd"/>
<Manager pathname=""/>
</Context>
- 构建配置
将下面的 Gradle 任务添加到$PROJECT_FOLDER/build.gradle
task stage(dependsOn: ['setupTomcat', ':app-core:deploy', ':app-web:deploy']) {
doLast {
// replace context.xml with heroku-context.xml
def src = new File('modules/core/web/META-INF/heroku-context.xml')
def dst = new File('deploy/tomcat/webapps/app-core/META-INF/context.xml')
dst.delete()
dst << src.text
// change port from 8080 to heroku $PORT
def file = new File('deploy/tomcat/conf/server.xml')
file.text = file.text.replace('8080', '${port.http}')
// add local.app.properties for core application
def coreConfDir = new File('deploy/tomcat/conf/app-core/')
coreConfDir.mkdirs()
def coreProperties = new File(coreConfDir, 'local.app.properties')
coreProperties.text = ''' cuba.automaticDatabaseUpdate = true '''
// rename deploy/tomcat/webapps/app to deploy/tomcat/webapps/ROOT
def rootFolder = new File('deploy/tomcat/webapps/ROOT')
if (rootFolder.exists()) {
rootFolder.deleteDir()
}
def webAppDir = new File('deploy/tomcat/webapps/app')
webAppDir.renameTo( new File(rootFolder.path) )
// add local.app.properties for web application
def webConfDir = new File('deploy/tomcat/conf/ROOT/')
webConfDir.mkdirs()
def webProperties = new File(webConfDir, 'local.app.properties')
webProperties.text = ''' cuba.webContextName = / '''
}
}
- Procfile
在 Heroku 启动应用的命令是通过一个特殊文件Procfile
来传递的。在$PROJECT_FOLDER
创建Procfile
文件,使用以下内容:web: cd ./deploy/tomcat/bin && export 'JAVA_OPTS=-Dport.http=$PORT' && ./catalina.sh run
此处提供了 Tomcat 在启动 Catalina 脚本时需要的 JAVA_OPTS 环境变量值。- Premium 插件
如果项目使用了 CUBA Premium 插件,需要为 Heroku 应用程序设置额外的变量。
-
打开 Heroku dashboard。
-
切换到 Settings 标签页。
-
展开 Config Variables 区域,点击 Reveal Config Vars 按钮。
-
添加新 Config Vars,使用授权码的前后两部分(短横分隔)分别作为 用户名 和 密码:CUBA_PREMIUIM_USER | username
CUBA_PREMIUM_PASSWORD | password
- Gradle wrapper
项目需要使用 Gradle wrapper。可以通过 CUBA Studio 来添加:Build > Create or update Gradle wrapper。
-
在$PROJECT_FOLDER
创建system.properties
文件,使用如下内容(示例是假设本地安装的 JDK 是 1.8.0_121 版本):java.runtime.version=1.8.0_121
-
检查确保这些文件不在.gitignore
里:Procfile
,system.properties
,gradlew
,gradlew.bat
和gradle
-
将这些文件添加到仓库并且提交git add gradlew gradlew.bat gradle/ system.properties Procfile
git commit -am "Added Gradle wrapper and Procfile"
- 应用程序部署
一旦提交并且推送了所有的改动到 GitHub,Heroku 会自动开始重新部署应用。git push
构建的过程可以通过 Heroku dashboard 的 Activity 标签页看到,点击 View build log 监控构建日志。
构建过程完成后,可以通过浏览器访问类似https://space-sheep-02453.herokuapp.com
这样的 URL 来访问服务。可以通过 Heroku dashboard 的 Open app 按钮打开应用。- 日志监控
需要跟踪查看应用系统的日志,可以使用以下命令:heroku logs —tail —app space-sheep-02453
Tomcat 日志也可以通过应用系统的 *Menu > Administration > Server Log 查看。