Back to Portfolio
DevOps & Architecture

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)

DockerDocker ComposeWSL UbuntuGitLab CI/CDLinux Shell Scripting

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.

Docker ComposeDockerYAML

WSL Ubuntu Configuration

Optimal WSL2 Ubuntu setup on Windows including memory limits, Docker Desktop integration, and symlink path configuration.

WSL2UbuntuDocker Desktop

Automated Shell Scripts

A collection of shell scripts for initial setup, database migration, dev data seeding, backup, and staging deployment with a single command.

BashShell ScriptingMake

GitLab CI/CD Pipeline

Automated pipeline for lint, test, Docker image build, and staging deployment on every push to the develop branch.

GitLab CI.gitlab-ci.ymlDocker

Developer Onboarding Kit

Complete README documentation with setup steps a new developer can complete in under one hour.

MarkdownDockerGit

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.