Language Frankfurt, Germany
Nodion recognizes an Elixir app by its mix.exs. The Elixir buildpack fetches your dependencies, runs mix assets.deploy if your project defines it and builds a Mix release, which starts with PHX_SERVER=true. Erlang and Elixir stay out of the run image, and the app and its PostgreSQL database run in Frankfurt.
mix.exsbin/<app> start from the releasemix release. In a Phoenix project, mix phx.gen.release adds what you need for that: a Release module with a migrate function and the scripts bin/server and bin/migrate. Commit the generated files. mix phx.gen.release mix phx.new already has a config/runtime.exs that reads PORT, SECRET_KEY_BASE, DATABASE_URL and PHX_HOST in production. Nodion's app instances use IPv4, so set the endpoint's ip to {0, 0, 0, 0}: config/runtime.exs config :my_app, MyAppWeb.Endpoint,
url: [host: host, port: 443, scheme: "https"],
http: [ip: {0, 0, 0, 0}, port: port],
secret_key_base: secret_key_base assets.deploy alias during the build. If your asset pipeline calls npm, switch it to these tools or deploy with a Dockerfile. mix.exs "assets.deploy": [
"tailwind my_app --minify",
"esbuild my_app --minify",
"phx.digest"
] /layers/nodion_elixir/release/release. Its bin/migrate script from step 1 calls Release.migrate. A release: line in a Procfile runs once per build before the new version starts; if it fails, the running version stays live. Procfile release: /layers/nodion_elixir/release/release/bin/migrate DATABASE_URL on the next deploy. Add SECRET_KEY_BASE from mix phx.gen.secret as a secret and set PHX_HOST to the domain your users open. PORT is set by Nodion. elixir and erlang from .tool-versions, Elixir also from .elixir-version. The elixir: requirement in mix.exs is a range and pins nothing. Without a pin you get Elixir 1.20 on OTP 28.bin/<app> start from the release, with the app name from mix.exs, and sets PHX_SERVER=true so the endpoint serves HTTP. Traffic moves once / answers with 2xx or 3xx; if / needs a login, set another health check path in the app settings.DATABASE_URL, REDIS_URL or CLICKHOUSE_URL. release: line runs with every new build. Dockerfile apps, and redeploys or rollbacks to an earlier image, use a release command set on the app itself, which also takes precedence over the Procfile line. On static sites a release step runs in an image that holds only the built files. No. The Elixir buildpack builds a Mix release from mix.exs, as long as your assets build without Node.js. If your repository has a Dockerfile, the create form picks that strategy and Nodion builds the Dockerfile instead.
Through the release: generate the Release module with mix phx.gen.release and add release: /layers/nodion_elixir/release/release/bin/migrate to a Procfile. It runs once per build before the new version starts, and a failure stops the deploy.
Elixir 1.16 to 1.20 and Erlang/OTP 27 to 29. Without a pin, Nodion builds with Elixir 1.20 on OTP 28; pin both in .tool-versions. Only the build uses Erlang and Elixir, because the release brings its own runtime.
In the EU Central region in Frankfurt, Germany. Build, registry, the app and its databases, volumes, buckets, logs and metrics stay in that region, and Nodion's API and control plane are hosted in Germany. Nodion GmbH is based in Stuttgart.
Nodion provides the basis for it: Nodion GmbH is based in Stuttgart, Germany, in the Frankfurt region the app, its databases and volumes run in Germany, and you conclude the data processing agreement (DPA) under Art. 28 GDPR electronically in the dashboard. Whether your setup complies also depends on how you configure and use the app.
An app instance starts at 1 EUR per month. The setup in the cost box costs 3.50 EUR per month: App 2 EUR, PostgreSQL 1.50 EUR. Prices are net and billed per second, and you pick bigger sizes or more instances whenever you need them.
Yes. Every app gets a default hostname with HTTPS. Add your own domain on the app's Domains tab; the TLS certificate is issued and renewed automatically.
Earn up to 15 € in credit when signing up.
or with email
Product news, no spam. Unsubscribe anytime.
Successfully subscribed.