A slick web-based dashboard for managing Docker containers pulled from GitHub Container Registry (GHCR). Built with Hono + Bun for maximum speed, with automatic Nginx configuration, environment management, and real-time container monitoring.
Perfect for managing your self-hosted infrastructure on IIIT Kota servers (or any Ubuntu/Debian box really).
Note
See main branch for non docker and general hosting manager
Warning
This repo is highly customized to use with iiitkota servers and infra structure. if you want to use for your apps, please change domain and folder names.
β GHCR Integration: Auto-discover and pull images from web-iiitkota organization
β Docker Compose Automation: Generate and manage compose files with resource limits
β Nginx Auto-Config: Set up reverse proxy mappings with custom domains (.iiitkota.ac.in)
β Environment Management: Edit .env files directly from the UI
β Real-time Logs: Stream container logs with live updates
β Resource Control: Set CPU/memory limits, restart policies, port mappings
β Update Detection: Shows when newer image versions are available
β Beautiful UI: Dark/light theme with glassmorphic cards and smooth animations
- OS: Ubuntu/Debian (tested on Ubuntu Server)
- Runtime: Bun (for running the app)
- Docker: Docker Engine + Docker Compose v2
- Nginx: For reverse proxy (optional but recommended)
- Sudo Access: Required for Nginx reloads and container management
curl -fsSL https://bun.sh/install | bashgit clone https://github.com/s4tyendra/simple-server-hosting.git
cd simple-server-hosting
git checkout docker # Switch to docker branchbun installCreate a .env file or export these:
export GITHUB_PAT="ghp_your_github_personal_access_token"
export AUTH_USERNAME="admin"
export AUTH_PASSWORD="your_secure_password"
export PORT="8080"Getting a GitHub PAT:
- Go to GitHub β Settings β Developer Settings β Personal Access Tokens
- Generate a new token (classic) with
read:packagesscope - Copy and use it as
GITHUB_PAT
bun run index.tssudo -E bun run index.ts
# The -E flag preserves environment variablesOr use a process manager like PM2:
sudo pm2 start index.ts --interpreter bun --name docker-managerAccess at: http://localhost:8080 (or your configured port)
The app can automatically manage Nginx configs for your containers. Here's the base setup:
sudo nano /etc/nginx/sites-available/iiit-apisAdd this base config:
# This file is managed by Docker Manager
# Individual server blocks are auto-generated
# Include SSL certificate config
# (Assuming you have SSL set up with Let's Encrypt or similar)sudo ln -s /etc/nginx/sites-available/iiit-apis /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxsudo chown $USER:$USER /etc/nginx/sites-available/iiit-apisOr run the app with sudo (it needs sudo for nginx -t and systemctl reload nginx anyway).
- Pull/Update Image: Click "π Update/Pull" to fetch the latest image from GHCR
- Configure Settings:
- Set Host Port (external) and Container Port (internal)
- Add Environment Variables (format:
KEY=value) - Set Resource Limits (CPU, Memory)
- Configure Restart Policy
- Optional - Add Domain:
- Enter a subdomain (e.g.,
api) to getapi.iiitkota.ac.in - Set Client Max Body Size for uploads
- Enter a subdomain (e.g.,
- Start Container: Click "π Start" to create and run the container
- π Restart: Restart the container
- βΉοΈ Stop: Stop the container (doesn't remove it)
- π Logs: View real-time container logs
- ποΈ Remove: Delete the container (image stays)
- Pull the new image version (it'll show "update_available" status)
- Open Environment & Configuration section
- Click πΎ Save & Recreate Container
- This stops, removes, and recreates the container with new image + settings
Click β‘ Nginx button β Edit the config β πΎ Save, Test & Reload
The app will:
- Backup the old config
- Write your changes
- Run
sudo nginx -tto test - Reload Nginx if test passes
- Restore backup if test fails
~/.dckr/
βββ env/
βββ <service-name>/
βββ .env # Environment variables
βββ config.json # Resource limits & settings
βββ docker-compose.yml # Auto-generated compose file
- Nginx testing and reloading
- Docker operations (if not in docker group)
π‘οΈ Recommendations:
- Use strong passwords for basic auth
- Keep
GITHUB_PATsecure (read-only scope) - Run behind a firewall (only expose port 443 publicly)
- Use SSL/TLS in production (Let's Encrypt)
- Restrict
~/.dckr/env/directory permissions
β Add your user to the docker group:
sudo usermod -aG docker $USER
newgrp dockerβ Check for duplicate server_name directives:
sudo nginx -T | grep server_nameβ Check logs in the UI or via:
docker logs <container-name>β Verify DNS A record points to your server IP:
dig +short subdomain.iiitkota.ac.inFound a bug? Want a feature? PRs are welcome!
- Fork the repo
- Create your feature branch (
git checkout -b feature/cool-thing) - Commit changes (
git commit -m 'Add cool thing') - Push to branch (
git push origin feature/cool-thing) - Open a PR
MIT License - do whatever you want with it, I'm not even including License file!
Issues? Questions? Open an issue on GitHub or reach out at satya@satyendra.in
Built with π for IIIT Kota infrastructure by @s4tyendra