Dokku
Before getting started, ensure you have a Dokku instance running with a new app. An example app can be created following these steps:
# on the Dokku host
dokku apps:create amber-app
# Setup postgres db
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
dokku postgres:create amber-db
# This sets the DATABASE_URL env var
dokku postgres:link amber-db amber-app
Buildpacks tell Dokku how to build and deploy your application. Create a file named
.buildpacks
in the root of your project and with this:https://github.com/amberframework/heroku-buildpack-amber.git
# If you need js / css compiled
https://github.com/heroku/heroku-buildpack-nodejs.git
If you want js / css to be compiled, you need to modify the
build
command in package.json
to "build": "npm run release",
. Because the nodejs buildpack expects npm build
to compile the production assets.Not defining a .buildpack file will cause Dokku to build your project using the
Dockerfile
as Dokku will auto-detect it, this will not work and cause issues.It's best practice to lock your crystal version to the one you're using. Without this the latest version of crystal will be used, potentially causing issues in deployment.
Create a file named
.crystal-version
in the root of your project with the wanted crystal version:0.31.1
To deploy your app to Dokku you're going to need a
Procfile
. Create a Procfile
at the root of your Amber application and add the following:release: bin/amber db migrate
web: bin/{your-app-name}
The Amber buildpack takes care of compiling the project for you.
Where ever your application runs, it needs to be in production mode.
ssh [email protected]{yourdokku.com} config:set {your-app-name} AMBER_ENV=production
Ensure you first run:
amber encrypt
To be able to decrypt and use production environment you'll need to set
ENV["AMBER_ENCRYPTION_KEY"]
to the value of your local projects .encryption_key
file.Never add
.encryption_key
to github. Amber adds it by default to your .gitignore
file.Copy the key from
.encryption_key
and set it to env, like so:ssh [email protected]{yourdokku.com} config:set {your-app-name} AMBER_ENCRYPTION_KEY={your_key}
In order for the buildpack to work properly your application has to:
- Listen on the environment's port.
- Connect to any services like redis / database.
Ensure these settings are in your
settings.cr
file.Amber::Server.configure do |settings|
settings.host = "0.0.0.0"
settings.port = ENV["PORT"].to_i if ENV["PORT"]?
settings.redis_url = ENV["REDIS_URL"] if ENV["REDIS_URL"]?
settings.database_url = ENV["DATABASE_URL"] if ENV["DATABASE_URL"]?
end
All that's left is to create a git repository, add the Dokku remote and push it there.
$ git init
$ git remote add dokku [email protected]{yourdokku.com}:{your-app-name}
$ git add -A
$ git commit -m "My first Amber app"
$ git push dokku master
Last modified 18d ago