Framework Frankfurt, Germany
Connect your repository and Nodion builds your Spring Boot app with its Maven or Gradle wrapper, skips the tests and starts the executable jar on a Temurin JRE. server.port comes from the PORT that Nodion sets, so you do not configure the port yourself. The app runs in Frankfurt, next to a managed PostgreSQL database if you need one.
pom.xml or build.gradle(.kts)java -Dserver.port=$PORT -jar with the Boot jarmvnw or gradlew. Nodion runs ./mvnw -B -DskipTests clean package or ./gradlew build -x test --no-daemon and starts the largest jar in target/ or build/libs/, skipping Gradle's -plain jar. Gradle without the wrapper fails; Maven without it builds with Nodion's own Maven. The Java version comes from system.properties (default 21), not from your build file's toolchain. system.properties java.runtime.version=21 / returns 404 in many Spring Boot apps. Add Actuator (in Gradle: implementation 'org.springframework.boot:spring-boot-starter-actuator') and set the health check path to /actuator/health in the app settings. pom.xml <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> DATABASE_URL, which is a postgres:// URL. Reference your own variables in application.properties and add the PostgreSQL driver org.postgresql:postgresql as a runtime dependency. Nodion fills the variables when you attach the database in the next step. application.properties spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD} DB_HOST, DB_PORT, DB_NAME, DB_USER and DB_PASSWORD. They arrive on the next deploy. JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=80.0 by default, so the heap may use most of the instance's memory. Set JAVA_TOOL_OPTIONS to replace it, or JAVA_OPTS to add flags to the start command./actuator/health without login. A 401 or 403 on the health check path never becomes ready, and after 10 minutes the release is aborted while the old version keeps serving.target/ and build/libs/ of the base directory. If the Boot jar is built in a module folder, start it with a Procfile line and pass the port yourself, for example web: java -Dserver.port=$PORT -jar app/build/libs/app.jar.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. Usually the health check hits /, which has no mapping and answers 404, or Spring Security answers 401. Add Actuator, set the health check path to /actuator/health and make it reachable without login. A JVM that runs out of memory during startup never gets ready either; give it 1 GB or more.
No. A Gradle project needs a committed gradlew together with the gradle/wrapper folder; run gradle wrapper once and commit the result. Maven projects also build without a wrapper, with Nodion's own Maven.
Yes. Kotlin projects from Spring Initializr build with the same Maven or Gradle wrapper, and build.gradle.kts is detected like build.gradle.
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 5.50 EUR per month: App 4 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.