How to migrate your Java Application from Heroku to Platform.sh

Goal

Migrate a Heroku Java Application to a Platform.sh service.

Assumptions

You will need:

  • an active application on Platform.sh configured to an empty database
  • an active application on Heroku

Steps

1. Git clone the Heroku Repository

git clone heroku_repository.git

2. Create the three basic Platform.sh file

3. Set the Application File

At the .platform.app.yaml we’ll set the minimum configuration to run a plain configuration be aware that it does not include database services such as MySQL, MariaDB and so on.

# This file describes an application. You can have multiple applications
# in the same project.
#
# See https://docs.platform.sh/user_guide/reference/platform-app-yaml.html
# The name of this app. Must be unique within a project.
name: app

# The runtime the application uses.
type: 'java:8'

disk: 1024

# The hooks executed at various points in the lifecycle of the application.
hooks:
    build: mvn clean install

mounts:
    'server/':
        source: local
        source_path: server_source

# The relationships of the application with services or other applications.
#
# The left-hand side is the name of the relationship as it will be exposed
# to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
# side is in the form `<service name>:<endpoint name>`.

# The configuration of app when it is exposed to the web.
web:
    commands:
        start: |
            cp target/dependency/webapp-runner.jar server/webapp-runner.jar
            cp target/tomcat.war server/tomcat.war
            cd server && java -jar -Xmx512m webapp-runner.jar --port $PORT tomcat.war

4. Add Platform.sh Remote Repository

git remote add platform platform_repository.git

5. Push the changes to the Repository

git push platform master

Conclusion

By adding a .platform.app.yaml file to a project, a Java application’s build process can be migrated from Heroku. In order to fully migrate, the next step is to use the Heroku CLI to dump your database and import it to a service defined on your Platform.sh project.

Additional resources: