Running Go, Rust, .NET and Java Applications 24/7 in the Panel
Move a service written in a compiled language into the panel, get the startup command right, bind the port, and restart automatically after a crash.
Verified against
- Go
- 1.22+
- Rust
- stable
- .NET
- 8
- Java
- 17 / 21
- Last checked
- 2026-09-13
Before you start
- A project that builds and runs cleanly on your machine
- A service in the panel using the matching language runtime
- Knowing which port your application listens on
When moving a compiled language into the panel there are two decisions: where to build, and what address your app listens on. Getting both right up front removes hours of later 'it runs but I cannot reach it' debugging.
Build on the server or locally?#
| Build on the server | Build locally and upload | |
|---|---|---|
| Memory needed | High -- Rust and .NET builds can want 1-2 GB RAM | None |
| Upload size | Small (source only) | Large (binary) |
| Speed | Build time on every start | Starts immediately |
| Best for | Small projects, quick experiments | Production, low-RAM plans |
Port binding: the most common mistake#
Every service gets an IP and a port in the panel, passed in as the SERVER_IP and SERVER_PORT environment variables. If your app listens on 127.0.0.1 it is unreachable from outside the container, and if it hardcodes a port it may not match the one assigned. The right move is to read the address from the environment.
Binding the port correctly
addr := os.Getenv("SERVER_IP") + ":" + os.Getenv("SERVER_PORT")
if addr == ":" {
addr = "0.0.0.0:8080" // yerel gelistirme
}
log.Fatal(http.ListenAndServe(addr, nil))Crashes, logs and restarts#
- The panel marks the service as stopped when the process exits; enable auto-restart in the service settings.
- Write logs to standard output rather than a file; the panel console only shows stdout.
- Exit code 137 means the process ran out of memory (OOM); raise the plan's RAM or reduce the app's memory use.
- In Java, cap -Xmx at roughly 75% of the plan's RAM; the rest is JVM overhead and the operating system.
Troubleshooting
App runs but is unreachable from outside
It listens on 127.0.0.1 or localhost.
Bind to 0.0.0.0 and to SERVER_PORT.
address already in use
A hardcoded port clashes with the assigned one, or a previous process is still alive.
Read the port from the environment, then fully stop and start the service from the panel.
Exit code 137
The memory limit was exceeded and the kernel killed the process.
Build locally or raise the plan's RAM; in Java, lower -Xmx.
Was this guide helpful?
Feedback goes straight to the team that maintains this guide.
Related Guides
Developing 7/24 Discord.js v14 Bots and Managing with PM2
Step-by-step guide to building a Discord.js v14 bot, slash commands, and hosting it 24/7 using PM2 process manager.
Developing Async Python Discord Bots with discord.py and 24/7 Hosting
Build modern slash command bots using discord.py 2.0+, virtual environments, and continuous daemon supervision.

