Skip to content

Initially I was hosting umami on a digitalocean server but then I realized I can host it on fly.io without any cost at all. So I moved my umami instance from a digitalocean droplet to fly.io

How to

  • Get an account on fly.io
  • Install flyctl - https://fly.io/docs/hands-on/install-flyctl/
  • Once it's installed run fly launch, go through the options and in the end it will generate a fly.toml file.
  • Replace the content of the toml file with the following:
app = "falconfeast-umami"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []

[build]
  image = "ghcr.io/umami-software/umami:postgresql-latest"

[env]
  DATABASE_TYPE = "postgresql"
  DATABASE_URL = "$DATABASE_URL"
  DISABLE_UPDATES = 0

[experimental]
  allowed_public_ports = []
  auto_rollback = true

[[services]]
  http_checks = []
  internal_port = 3000
  processes = ["app"]
  protocol = "tcp"
  script_checks = []
  [services.concurrency]
    hard_limit = 25
    soft_limit = 20
    type = "connections"

  [[services.ports]]
    force_https = true
    handlers = ["http"]
    port = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port = 443

  [[services.tcp_checks]]
    grace_period = "1s"
    interval = "15s"
    restart_limit = 0
    timeout = "2s"
  • Deploy a postgres instance
fly postgres create
  • Once the postgres instance is deployed and you have a the URL to connect to it.
  • Connect to the pg instance and create a new user along with a DB
  • I had issues directly connecting to the pg instance, so I connect to the fly's proxy and then connected to the postgres instance.
# Connect to the proxy
fly proxy 5432 -a <YOUR_DB_NAME>

# Connect to the PG instance 
fly pg connect -p <DB_PASSWORD> -u <DB_USER> -a <DB_NAME>
  • Once connected create a new user and a DB for umami to store data
  • After that you can create a fly's secret, the one we have in our fly.toml file i.e DATABASE_URL
fly secret set DATABASE_URL=<YOUR_DB_URL>
  • In the end you can deploy the application by running: fly deploy

Once that is done you can create a custom domain from fly's dashboard.