eclipseで作成した動的Webプロジェクト(Java 1.8,Tomcat 8.5)をHerokuにデプロイしてみる
前置き
暇を持て余していてせっかくなので、
無料で利用できるHerokuにeclipseで作成したWebアプリをデプロイしてみる。
下準備
まず公式のチュートリアルはやっとくべきだと思う devcenter.heroku.com
あとはいろんな方が始め方をまとめてるのでそちらを参照。
自分は下記の記事を参考にした。
Heroku用開発ツールのセットアップまでは同じようにやる。
web.plus-idea.net
ひな型アプリの入手
Tomcatベースのアプリを動かすためのひな型を下記から入手する。
GitHub - heroku/devcenter-embedded-tomcat
$ git clone git@github.com:heroku/devcenter-embedded-tomcat.git
必要に応じて追記・修正をする
pom.xml
ひな型落としてくるとJavaのバージョン1.5でビルドになってるので
Java1.8を明記したり文字コードをセットしたり。
dependenciesに使用するjarファイルを追記する。
<properties> <tomcat.version>8.5.38</tomcat.version> <!-- ここから追記 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!-- ここまで --> </properties> <dependencies> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper-el</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>${tomcat.version}</version> </dependency> <!-- ここから追記 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.12</version> </dependency> <!-- ここまで --> </dependencies>
WebContentフォルダの中身
動的WebプロジェクトのWebContentフォルダの中身、
HTML,CSS,JSP,JSなんかのファイルはsrc/main/webappフォルダに移す。
Javaソースの配置は動的Webプロジェクトとほぼ変わらず。
(ディレクトリの階層はちょっと違うけど迷うことはない)
参考として自分のクソコードを晒す。
- 動的Webプロジェクト
https://github.com/n-yata/EmployeeManager - Heroku用Mavenプロジェクト
https://github.com/n-yata/EmployeeManager-heroku
Procfile.windows
必須でない、かつOSがWindowsのひと限定。
ローカルで動作確認するときに便利なので作っといてもよいかと。
ファイルの中身は下記のとおり。配置場所はプロジェクト直下でOK。
web: target\bin\webapp.bat
Database.java
こちらも必須でない、
けどPostgreSQL使うとき便利なので載せとく。
PostgreSQLのURL直書きしなくても
System.getenv("DATABASE_URL")で取得できる。
ソース元は他の方の記事から。URLは失念してしまいました。
package util; import java.net.URI; import java.net.URISyntaxException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * DB接続のクラス * @author * */ public class Database { public static Connection getConnection() throws SQLException { String databaseUrl = System.getenv("DATABASE_URL"); try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { throw new IllegalStateException(e); } try { URI uri = new URI(databaseUrl); String host = uri.getHost(); int port = uri.getPort(); if (port > 0) { host += ":" + port; } String db = uri.getPath(); String username = uri.getUserInfo(); String password = null; int idx = username.indexOf(":"); if (idx != -1) { password = username.substring(idx + 1); username = username.substring(0, idx); } Connection con = DriverManager.getConnection("jdbc:postgresql://" + host + db, username, password); return con; } catch (URISyntaxException e) { throw new IllegalStateException(e); } } }
Mavenでビルドする
必要なリソースを全部配置したら、
コンソールでプロジェクト直下に移動して、Mavenビルドを実行
$ mvn clean install
gitコミットする
warファイルが作成できたらgitコミットする
# 初期化 $ git init # コミットするソースの追加 $ git add . # コミット $ git commit -m "コメント入力" # コミットしてないファイルないか確認 $ git status
herokuにプッシュする
herokuコマンドの実行にはチュートリアルとか参考記事で出てきた
Heroku Toolbeltが必要です。
herokuにプッシュしてアプリ起動したら、下記のURLで確認できる
https://自分で設定したアプリ名.herokuapp.com/
# herokuにプッシュ先のリポジトリを作成 # アプリ名は一意なURLとなる必要ある、ほかの人がすでに使ってたらエラー # アプリ名省略した場合(heroku createで実行)、ランダムなURLが振られる $ heroku create (アプリ名) # herokuへプッシュ $ git push heroku master # プッシュ後、アプリ起動してるか確認 $ heroku ps # ログの確認 $ heroku log --tail # アプリ名の変更 $ heroku apps:rename hogehoge # リモートリポジトリの一覧を表示 $ git remote -v # リモートリポジトリのURLを変更 $ git remote set-url heroku {new url}
PostgreSQLのアドオン追加
PostgreSQL使用する場合、heroku上にPostgresSQLのアドオン追加が必要。
アドオン追加は簡単。
# アドオン(PostgreSQL)の追加 $ heroku addons:add heroku-postgresql # DB接続先の確認 $ heroku config #DB接続 $ heroku pg:psql
ローカルで動かすとき
herokuにプッシュする前にローカルで確認する場合は
下記のコマンドを実行
アプリのデフォルトのポートは下記
http://localhost:5000/
# macの場合 $ heroku local web # windowsの場合(設定によって文字化けするけどちゃんと起動してる) $ heroku local web -f Procfile.windows