Production-style Nextcloud self-hosting stack built with Docker Compose, Nginx, PostgreSQL, Redis, rsyslog, BorgBackup and Certbot. The project demonstrates DevOps fundamentals such as internal service networking, reverse proxy configuration, automated backups, restore validation and E2E infrastructure testing with GitHub Actions. **Stack:** Docker Compose, Nextcloud, Nginx, PostgreSQL, Redis, BorgBackup, rsyslog, Certbot, GitHub Actions. **Best for showing:** DevOps, Linux server operations, Docker, backups, restore workflows and infrastructure validation.
A production-style Nextcloud self-hosting stack built with Docker Compose, Nginx, PostgreSQL, Redis, centralized logging, automated backups and full restore validation.
This project was created to demonstrate practical DevOps skills around service orchestration, reverse proxy configuration, internal networking, backup strategy, restore workflows and CI-based infrastructure validation.
next-victoria is a Docker Compose infrastructure project for running a private Nextcloud instance with a production-inspired architecture.
The stack includes:
pg_dump for backup strategy.Unlike a simple docker compose up demo, this project focuses on operational concerns: service isolation, backup and restore workflows, CI validation and migration readiness.
This project shows my ability to design and operate a multi-service Linux-based application stack.
Key skills demonstrated:
pg_dump.Self-hosting applications like Nextcloud is not only about starting containers.
A reliable deployment needs to answer questions such as:
This project was built to address those operational concerns in a reproducible way.
The solution is a Docker Compose stack where only Nginx is exposed publicly, while the rest of the services remain internal.
The stack separates responsibilities between services:
nginx handles public HTTP/HTTPS traffic.nextcloud runs the application.postgres stores application data.redis improves caching and file locking.rsyslog centralizes container logs.backups handles scheduled backup jobs.certbot supports HTTPS certificate provisioning.The project also includes scripts and Makefile commands for backup, restore, validation and migration workflows.
Public Internet
β
βΌ
βββββββββββββ
β Nginx β
β Reverse β
β Proxy β
βββββββ¬ββββββ
β
βΌ
βββββββββββββββ
β Nextcloud β
β Application β
βββββββ¬ββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β PostgreSQL β β Redis β β rsyslog β
β Database β β Cache/Lock β β Central Logsβ
ββββββββ¬βββββββ βββββββββββββββ βββββββββββββββ
β
βΌ
βββββββββββββββ
β Backups β
β Borg + Dump β
βββββββββββββββ
| Layer | Technology |
|---|---|
| Application | Nextcloud |
| Reverse Proxy | Nginx |
| Database | PostgreSQL |
| Cache / Locking | Redis |
| Logs | rsyslog |
| Backups | BorgBackup + pg_dump |
| HTTPS | Certbot |
| Orchestration | Docker Compose |
| Automation | Makefile + Shell scripts |
| CI | GitHub Actions / Gitea Actions |
The project defines a complete multi-service Docker Compose setup.
Only the Nginx service publishes ports to the host. Internal services such as Nextcloud, PostgreSQL, Redis, rsyslog and backup workers are isolated behind Docker networks.
This helps reduce unnecessary exposure and keeps the deployment structure closer to a real server setup.
Nginx is used as the public entry point for the application.
It forwards requests to the internal Nextcloud service and allows the stack to support HTTP and HTTPS deployment modes.
This makes the architecture easier to operate behind a domain and prepares it for production-style hosting.
The stack uses PostgreSQL instead of the default lightweight database options.
This improves reliability and better represents real-world application deployments where database persistence, backup and restore are important.
Redis is included for caching and file locking.
This is important for Nextcloud deployments because it helps improve performance and avoids locking-related issues when multiple users or background jobs interact with files.
The project includes rsyslog to centralize logs from different services.
This makes the stack easier to inspect and debug, especially when running multiple containers together.
Backups are handled using:
pg_dump for PostgreSQL database dumps.The backup system is not only documented; it is also validated through the E2E testing workflow.
A backup strategy is incomplete without restore validation.
This project includes a restore workflow that verifies whether the system can recover application files and database state from backup archives.
The restore process is part of the project validation flow.
The project includes an E2E test script that creates a disposable environment, starts the stack, validates services, generates test data, runs backups, restores data and destroys the environment.
The E2E validation checks:
This makes the project stronger than a simple static infrastructure template.
The repository includes CI workflows for validating the project automatically.
The goal is to make sure the stack can be tested in a clean environment and that backup/restore workflows do not depend only on manual checks.
CI validation helps prove that the infrastructure is reproducible.
This project is valuable because it demonstrates operational thinking.
Many portfolio projects only show application code. This project shows the other side of software delivery: running, protecting, validating and recovering a real service.
It demonstrates that I can work with:
For backend and DevOps roles, this kind of project shows that I understand how software behaves after deployment.
Docker Compose was used because it is simple, portable and appropriate for small to medium self-hosted deployments.
It allows the complete stack to be defined in one place and makes the environment easier to reproduce.
PostgreSQL was selected because it is a reliable production-grade database and commonly used in real deployments.
It also makes backup and restore workflows more meaningful than using a lightweight local database.
BorgBackup provides deduplication, compression and retention-friendly backup management.
This makes it a good fit for self-hosted services where file data can grow over time.
Infrastructure projects are easy to document but harder to trust.
The E2E testing workflow helps verify that the stack can actually start, create data, back up data, restore data and shut down cleanly.
This gives the project stronger credibility as a portfolio piece.
Current status: Beta
The project is usable as a portfolio-ready DevOps/self-hosting stack. It is not marketed as a drop-in production template for every environment yet.
The current focus is:
This project helped me practice and improve:
GitHub repository:
https://github.com/dopelDev/next-victoria
My role in this project:
This project strengthens my profile as a developer who understands not only how to build software, but also how to deploy and operate services.
It supports my positioning in areas such as:
It is especially relevant for roles involving backend systems, infrastructure automation, Docker, Linux, reverse proxies and production support.
Production-style Nextcloud Docker stack with Nginx, PostgreSQL, Redis, centralized logs, Borg backups, Certbot support and E2E restore validation.
Docker
Docker Compose
Nextcloud
Nginx
PostgreSQL
Redis
BorgBackup
Certbot
DevOps
Linux
Self-hosting
Backups
CI
E2E Testing