Home About me Blog Contact Github Explore
General

Introducing Dokku UI: A Modern Web Interface for Dokku Server Management

After years of managing Dokku deployments via SSH and command-line tools, I finally got tired of typing the same commands over and over. So I built something better.

Introducing Dokku UI: A Modern Web Interface for Dokku Server Management

Dokku UI is an open-source web interface for managing Dokku applications. It's built with Rails 8, Hotwire, and Tailwind CSS – and it makes managing your Dokku server actually enjoyable.

Why I Built This

If you've used Dokku, you know the drill:


# SSH into server
ssh dokku@yourserver.com

# Check apps
dokku apps:list

# View logs
dokku logs myapp -t

# Set config
dokku config:set myapp DATABASE_URL=postgres://...

# Add domain
dokku domains:add myapp www.example.com

# Enable SSL
dokku letsencrypt:enable myapp

# Restart
dokku ps:restart myapp

It works. But it's tedious.

Especially when you're managing multiple apps. Or when you need to quickly check logs. Or when a non-technical team member needs to set an environment variable.

I wanted a web UI that:

  • Doesn't require SSH – just open a browser
  • Shows everything at a glance – apps, domains, databases, all visible
  • Makes common tasks one-click – restart app, view logs, set variables
  • Is simple to deploy – it's just a Rails app, deploy it on Dokku itself

So I built it.

What It Does

Application Management

The dashboard shows all your Dokku apps with their status, domains, and running processes. From there, you can:

  • Create new apps with one click
  • Delete apps (with confirmation, of course)
  • Restart, stop, or rebuild any app instantly
  • View deployment info – when it was deployed, by whom, what commit

No more dokku apps:list followed by dokku ps:restart followed by hoping you typed the app name correctly.

Environment Variables

This was the killer feature for me. Setting config variables via CLI is painful:


dokku config:set myapp \
  DATABASE_URL=postgres://... \
  REDIS_URL=redis://... \
  SECRET_KEY_BASE=abc123... \
  AWS_ACCESS_KEY=... \
  # ... 15 more variables
```

With Dokku UI? There's a form. Add, edit, delete variables. Bulk import from `.env` file. Export to `.env` format.

**Game changer** when onboarding new team members or debugging config issues.

### Domains & SSL

Managing domains visually is so much better than command-line:

- See all domains for an app at a glance
- Add new domains with a form (no typos)
- Enable Let's Encrypt SSL with one click
- See SSL status and expiry dates

Before, I'd forget which apps had SSL enabled. Now it's right there in the UI.

### Database Management

Creating and linking PostgreSQL databases is now point-and-click:

- Create new database
- Link to app (automatically sets DATABASE_URL)
- View connection info
- Destroy database (with scary warning)

No more Googling "dokku postgres create command" every time.

### Real-time Logs

This is my favorite feature. Click "View Logs" and you get:

- **Real-time streaming logs** (powered by Turbo Streams)
- **Syntax highlighting** for errors and warnings
- **Auto-scroll** to latest (toggleable)
- **Filter by process type** (web, worker, etc.)

Previously, I'd SSH in, run `dokku logs myapp -t`, and keep that terminal open. Now I just open a browser tab.

### Process Scaling

See how many dynos are running for each process type:
```
web: 2
worker: 1
scheduler: 1

Scale up or down with a form. No more dokku ps:scale myapp web=3.

How It Works

Dokku UI is just a Rails app that executes Dokku commands under the hood. When you click "Restart app", it runs:


system("dokku ps:restart #{app_name}")

Simple, right?

Two deployment modes:

1. Local Mode (Recommended)

Deploy Dokku UI as a Dokku app on the same server it's managing. Commands execute locally. Fast, simple, no SSH complexity.


# On your Dokku server
dokku apps:create dokku-ui
dokku config:set dokku-ui DOKKU_NO_SUDO=true

# From local machine
git push dokku main

Done. Your Dokku instance now has a web UI.

2. SSH Mode

Run Dokku UI anywhere and connect to Dokku via SSH. Useful if you want to manage multiple Dokku servers from one dashboard.


dokku config:set dokku-ui \
  DOKKU_SSH_HOST=yourserver.com \
  DOKKU_SSH_USER=dokku

Dokku UI will SSH in and run commands remotely.

Tech Stack Decisions

I built this with Rails 8, Hotwire, and Tailwind CSS – the same stack I've been praising in my recent posts about modern Rails.

Why Rails?

Because Dokku UI is a classic CRUD app with some real-time features. Rails excels at this. I didn't need React. I didn't need a separate API. Just Rails doing what it does best.

Why Hotwire?

  • Turbo Frames for updating parts of the page (app status, process counts)
  • Turbo Streams for real-time logs
  • Stimulus for interactive bits (confirm dialogs, form validation)

The entire app is 500 lines of JavaScript. Mostly Stimulus controllers. No build step (thanks import maps). No webpack. No npm hell.

Why Tailwind?

Because I wanted it to look good without writing a ton of custom CSS. Tailwind's utility classes made it trivial to build a clean, responsive UI.

Plus, Rails 8 has Tailwind built-in. Just works.

Why SQLite?

For simplicity. Dokku UI stores:

  • User sessions
  • Cached app data
  • Audit logs

That's it. No complex relational data. SQLite is perfect.

If you're managing 100+ apps and need something more robust, swap it for PostgreSQL. But for most use cases? SQLite is plenty.

Security Considerations

Running a web UI with server admin access is sensitive. Here's how Dokku UI handles security:

1. Authentication Required

Devise-based authentication. No endpoints are accessible without login.

2. Rate Limiting

Rack::Attack prevents brute-force login attempts:

  • 5 failed logins = 5-minute lockout
  • 20 requests/minute per IP

3. HTTPS Enforced

In production, HTTPS is required. Set up Let's Encrypt:


dokku letsencrypt:enable dokku-ui

4. Minimal Privileges

Run as the dokku user, not root. The app only has permissions to execute Dokku commands, nothing else.

5. Audit Logging

All destructive actions (delete app, destroy database) are logged with timestamp and user.

6. Optional IP Whitelisting

Want to restrict access to your office IP? Add middleware:


# config/application.rb
config.middleware.insert_before 0, Rack::Auth::IPWhitelist, ["1.2.3.4"]

Why Open Source?

I'm releasing this as open source (MIT license) for a few reasons:

1. Dokku is open source

It felt right to give back to the ecosystem. Dokku is an amazing project. If this UI makes Dokku easier to use, everyone wins.

2. I learn from open source

Every open source project I've contributed to made me a better developer. Maybe someone will submit a PR that teaches me something new.

3. Community contributions make it better

I built the features I needed. But I'm sure others need different things:

  • Multi-server management
  • User permissions (multiple admins with different access levels)
  • Metrics and monitoring
  • Integration with CI/CD

If the community wants these features, they can build them. Or suggest them. Or fund them.

4. Transparency builds trust

You can read the code. You can see exactly what commands it's running. No hidden behavior. No telemetry. No surprise data collection.

If you're giving a web app access to your server, you should be able to audit it.

Roadmap

This is version 1.0. It does what I need. But there's room to grow:

Planned features:

  • Multi-server support – manage multiple Dokku servers from one UI
  • User roles – read-only users, app-specific permissions
  • Metrics – CPU, memory, request rates (integrate with Dokku's built-in metrics)
  • Backup management – schedule and restore backups
  • Buildpack selection – choose buildpack from UI instead of .buildpacks file
  • Docker image deploys – not just git push, but deploy from Docker registry

Maybe features:

  • Mobile app – native iOS/Android apps (using Turbo Native)
  • Webhooks – trigger builds from GitHub/GitLab
  • Notifications – Slack/Discord alerts for deploys, errors
  • Cost tracking – if you're on DigitalOcean/AWS, show monthly costs per app

But I'm shipping v1.0 first. Get feedback. See what people actually use. Iterate.


I built Dokku UI because I was tired of SSH-ing into servers to run basic commands. It scratched my itch. Maybe it'll scratch yours too.

If you use Dokku and you've ever thought "I wish there was a web UI for this" – this is it.

It's not perfect. It's not feature-complete. But it works, it's open source, and it makes managing Dokku significantly more pleasant.

Give it a try. Open an issue. Submit a PR. Or just star the repo if you think it's cool.

Happy deploying!

Our website uses cookies to enhance your experience. By continuing to browse, you agree to our use of cookies. Read more about it