Welcome to Image Mania, the ultimate FOSS self-hosting speedrun.
Forget the GUI. This challenge drops you into a pure, headless Ubuntu terminal (or your favorite code editor). Your mission? Transform a blank server into a fully interconnected, automated homelab architecture using Docker, open-source services, and pure command-line grit.
Before the timer starts, you need to configure your local environment to access the cloud server.
- Windows (PowerShell):
winget install --id GitHub.cli - macOS (Homebrew):
brew install gh- If brew is not installed, follow the official guide
- Linux: Follow the official guide for your distro.
Run these commands in your terminal:
# Login to GitHub
gh auth login
# Grant Codespace permissions
gh auth refresh -h github.com -s codespace
# Create your Codespace (Make sure you have forked this repo first!)
gh codespace create -R <your-github-username>/Image-Mania
# SSH into the server
gh codespace sshYour Codespace is configured to automatically make your ports public when you start them.
To check if your ports are open, run this command directly in your server terminal:
gh codespace portsLook at the VISIBILITY column. If it says public, you are all set!
If for some reason a port is listed as private, you can manually make it public with this command (can be run in the same terminal):
gh codespace ports visibility 3000:public 3001:public 3002:public 8080:public 8081:public 8082:public 8083:public 8084:public 8085:public 8096:publicIf you've never used Docker before, it might seem scary. Think of it as Lego for software.
Ports are like arrival gates at an airport. A service runs on a specific "gate" so you can find it.
- How to change them? In a
docker-compose.yml, theportssection looks like this:- 8080:80. - The first number is the port on your server. The second number is the port inside the container. Change the first one if you have a conflict!
Volumes are like external hard drives. They keep your data safe even if the container is destroyed or updated.
Stopped by an error? Don't know a specific configuration? Google the documentation! Most services have excellent "Docker Hub" or "Official Documentation" pages. Searching for "how to change [service] port docker" will solve 90% of your problems.
You will build your stack progressively across 9 phases. Click each phase to see the specific guidelines and objectives.
- Phase 0: The Docker Blueprint (Intro & Dockerfile)
- Phase 1: Ports & Visibility (Making it accessible)
- Phase 2: Volumes & Filebrowser (Managing files)
- Phase 3: Handy Utilities (IT Tools & Stirling-PDF)
- Phase 4: The Dashboard (Homepage)
- Phase 5: Network Mastery (Pi-hole & Port Conflicts)
- Phase 6: Code Hosting (Gitea)
- Phase 7: Media Management (qBittorrent)
- Phase 8: The Media Center (Jellyfin & Shared Volumes)
- Phase 9: The Private Lane (Internal Networking)
- Phase 10: The Pulse (Service Discovery & Monitoring)
- Use Compose: Do not use massive
docker runcommands. Write clean, maintainabledocker-compose.ymlfiles. - Terminal Lovers: If you want to do everything in the CLI (Neovim, Vim, Nano), check out the Terminal Guide.
- Active URLs: To find your links, open a second terminal tab and run
gh codespace ports.
vim, nano, and essential tools are pre-installed. Good luck, Architect.