Multi-Repo Containerized DevOps Workspace
Design and implementation of a Docker container-based development architecture on WSL Ubuntu that became the standard work environment for the developer team. This solution eliminated environment inconsistencies, accelerated new developer onboarding from days to under an hour, and guaranteed identical behavior between local, staging, and production.
Role
DevOps Architect & Infrastructure Lead
Timeline
2022 – Present
Organization
PT. Jurnalindo Aksara Grafika (Bisnis Indonesia Group)
Impact & Tangible Results
<1 Hour
Developer Onboarding
From a previous 1-3 days for full environment setup to under one hour.
0 Bugs
Environment Mismatch
Total elimination of works-on-my-machine issues that previously consumed much debugging time.
Identical
Environment Parity
Local, staging, and production environments use the same image with zero configuration drift.
Automated
Deployment Pipeline
Pushing to develop branch automatically triggers build and deploy to staging without manual intervention.
Problem Statement
Developer team members worked on Windows machines with different configurations, causing the classic works-on-my-machine problem. Setting up a new project environment required 1-3 days. There was no standardization between local, staging, and production environments.
Solution & Architecture
A fully Docker Compose-managed container ecosystem where each service (frontend, backend, database, cache) runs in an isolated container with an internal bridge network. All configuration is stored in code (Infrastructure as Code), making it reproducible on any machine.
Architecture Details
Docker Compose as the main orchestrator with complete service, network, and volume definitions.
WSL Ubuntu as the host layer on Windows, providing Linux performance for toolchains that need it.
Multi-stage Dockerfile for each service: base to development to optimal production build.
Named Docker volumes for PostgreSQL and Redis data persistence between container restarts.
Environment-specific .env files with .env.example as a documented template.
Automation shell scripts for common tasks: ./dev.sh up, ./dev.sh db:migrate, ./dev.sh logs.
GitLab CI/CD pipeline that uses the same Docker image to ensure build consistency.
Key Modules & Features
Docker Compose Multi-Service Stack
Container orchestration for frontend, API, database, cache, and reverse proxy in a single command.
WSL Ubuntu Configuration
Optimal WSL2 Ubuntu setup on Windows including memory limits, Docker Desktop integration, and symlink path configuration.
Automated Shell Scripts
A collection of shell scripts for initial setup, database migration, dev data seeding, backup, and staging deployment with a single command.
GitLab CI/CD Pipeline
Automated pipeline for lint, test, Docker image build, and staging deployment on every push to the develop branch.
Developer Onboarding Kit
Complete README documentation with setup steps a new developer can complete in under one hour.
Challenges & Engineering Solutions
Challenge #1
File I/O performance in WSL2 was very slow when node_modules was mounted from the Windows filesystem.
Solution
Moved all project files to the Linux filesystem (/home/user/) inside WSL, combined with named Docker volumes for node_modules.
Challenge #2
Port conflicts between projects when multiple projects ran simultaneously.
Solution
Standardized port allocation with each project having an allocated port range (3000-3010 frontend, 4000-4010 API, 5432/5433 PostgreSQL).
Challenge #3
Synchronizing environment variables between developers without exposing secrets.
Solution
Templating with a comprehensive .env.example and inline documentation. Production secrets managed in GitLab CI/CD variables, not in the repository.