infra/@dev-prod-rf.server/infrastructure/STACKS.md

Docker Stacks: @infra-dev-prod-rf

7 Docker Stacks with 34 Containers
Status: PRODUCTION ACTIVE
Last Updated: 2025-11-09


Stack Overview

# Stack Name Path Containers Role Status
1 pro-0kt-stack /opt/pro-0kt-stack 16 Infrastructure Active
2 seller1-prod-stack /opt/seller1-prod-stack 4 Production 🔴 Active
3 seller1-dev-stack /opt/seller1-dev-stack 4 Development Active
4 varbase-stack /opt/varbase-stack 3 Demo Active
5 commerce-stack /opt/commerce-stack 3 Demo Active
6 myshop-stack /opt/myshop-stack 3 Demo Active
7 python-stack /opt/python-stack 2 Apps Active

Total Containers: 34


1. pro-0kt-stack (Infrastructure)

Location: /opt/pro-0kt-stack/

Purpose: Core infrastructure services for all projects

Network: pro-0kt-stack_pro-0kt-network

Containers: 16

Services in pro-0kt-stack

Container Name Service Port(s) RAM Status
pro-0kt-nginx Nginx Proxy Manager 80, 81, 443 ~200MB Running
pro-0kt-homarr Homarr Dashboard 7575 ~150MB Running
pro-0kt-authelia Authelia OAuth 9091 ~50MB Running
pro-0kt-postgres PostgreSQL Shared 5432 ~200MB Running
pro-0kt-mariadb MariaDB Shared 3306 ~150MB Running
pro-0kt-redis Redis Shared 6379 ~50MB Running
pro-0kt-gitea Gitea Git Hosting 3000, 2222 ~200MB Running
pro-0kt-minio MinIO S3 Storage 9000, 9001 ~300MB Running
pro-0kt-portainer Portainer Docker UI 9002 ~100MB Running
pro-0kt-pgadmin PgAdmin PostgreSQL UI 5050 ~100MB Running
pro-0kt-mailhog Mailhog Email Testing 1025, 8025 ~50MB Running
pro-0kt-n8n N8N Workflow Utils 5678 ~150MB Running
pro-0kt-jupyter Jupyter Notebooks 8888 ~500MB Running
pro-0kt-uptime Uptime Kuma Monitoring 3001 ~100MB Running
pro-0kt-restic Restic Backup Server N/A ~50MB Running
pro-0kt-adminer Adminer DB UI N/A ~30MB Running

Total Memory: ~2500MB (2.5GB)

Management Commands

cd /opt/pro-0kt-stack

# View status
docker compose ps

# View configuration
docker compose config

# Start all services
docker compose up -d

# Stop all services
docker compose down

# Restart all services
docker compose restart

# View logs
docker compose logs -f

# Specific service logs
docker compose logs <service> --tail 100

# Restart specific service
docker compose restart <service>

# Pull latest images
docker compose pull

# Update and restart
docker compose pull && docker compose up -d

Key Files

/opt/pro-0kt-stack/
├── docker-compose.yml       # Service definitions
├── .env                     # Environment variables
├── .env.example             # Template
├── volumes/                 # Local data (also in /mnt/data/)
└── logs/                    # Stack logs

Configuration

Copy from: /mnt/data/

All persistent data stored in:

/mnt/data/
├── nginx/                   # NPM + SSL certs
├── homarr/                  # Dashboard
├── authelia/                # OAuth config
├── postgres-shared/         # Database data
├── mariadb-shared/          # Database data
├── redis-shared/            # Cache data
├── gitea/                   # Git repos
├── minio/                   # S3 storage
├── portainer/               # Docker mgmt
├── pgadmin/                 # PgAdmin config
├── mailhog/                 # Email messages
├── n8n-utils/               # N8N workflows
├── jupyter/                 # Notebooks
├── uptime/                  # Uptime Kuma
└── restic/                  # Backups

Critical Notes

Health Check

# Check all services running
docker compose ps | grep -v "Up"

# Test critical services
docker exec pro-0kt-postgres pg_isready
docker exec pro-0kt-redis redis-cli ping
docker exec pro-0kt-nginx nginx -t

# Check NPM connectivity to other networks
docker network inspect pro-0kt-stack_pro-0kt-network | grep pro-0kt-nginx

2. seller1-prod-stack (Production) 🔴

Location: /opt/seller1-prod-stack/

Purpose: Production service for seller1.ru (CRITICAL 24/7)

Network: seller1-prod-stack_seller1-prod-network

Containers: 4

Criticality: 🔴 CRITICAL PRODUCTION SERVICE

Services in seller1-prod-stack

Container Name Service Port(s) RAM Status
seller1-prod-web Drupal/Varbase 80 ~124MB Running
seller1-prod-db PostgreSQL (isolated) 5432 ~180MB Healthy
seller1-prod-redis Redis Cache 6379 ~50MB Running
seller1-prod-n8n N8N Workflows 5678 ~168MB Running

Total Memory: ~522MB

Domains

Data Location

/mnt/data/seller1-prod/     (417MB)
├── drupal-files/           # Drupal uploads
├── drupal-db/              # PostgreSQL data
├── n8n-data/               # N8N workflows
└── redis-data/             # Cache data

Management Commands

cd /opt/seller1-prod-stack

# View status
docker compose ps

# View logs
docker compose logs -f

# View specific service logs
docker compose logs seller1-prod-web --tail 100
docker compose logs seller1-prod-db --tail 50

# Restart specific service (WITH CONFIRMATION!)
docker compose restart seller1-prod-web
docker compose restart seller1-prod-n8n

# ⚠️ DO NOT run without confirmation:
# docker compose down
# docker compose restart seller1-prod-db
# docker compose stop seller1-prod-web

Database Access

# Connect to database
docker exec -it seller1-prod-db psql -U postgres

# Check database health
docker exec seller1-prod-db pg_isready

# Backup database
docker exec seller1-prod-db pg_dumpall -U postgres > seller1-prod.sql

# Restore database
docker exec -i seller1-prod-db psql -U postgres < seller1-prod.sql

# Check tables
docker exec seller1-prod-db psql -U postgres -d seller1_prod -c "\dt"

Monitoring

# Real-time resource usage
docker stats seller1-prod-web seller1-prod-db

# Container status
docker ps | grep seller1-prod

# Website accessibility
curl -I https://seller1.ru

# Backend accessibility
curl -I https://pro.seller1.ru

Backup

# Backup database
docker exec seller1-prod-db pg_dumpall -U postgres > /var/backups/seller1-prod-$(date +%Y%m%d).sql

# Backup volume data
tar czf /var/backups/seller1-prod-data-$(date +%Y%m%d).tar.gz /mnt/data/seller1-prod/

# Automated backup (runs daily at 04:00)
/opt/scripts/backup-critical.sh

Safety Rules

⚠️ CRITICAL - DO NOT without explicit confirmation:
- Stop seller1-prod-web
- Restart seller1-prod-db
- Run docker compose down
- Delete data in /mnt/data/seller1-prod/

SAFE to do:
- View logs
- Check status
- Restart seller1-prod-web
- Run health checks
- View resource usage

Emergency Procedures

If seller1.ru is down:

# 1. Check services
docker ps | grep seller1-prod

# 2. Check logs
cd /opt/seller1-prod-stack
docker compose logs --tail 100

# 3. Check database
docker exec seller1-prod-db pg_isready

# 4. Check web server
docker compose logs seller1-prod-web --tail 50

# 5. Restart web (if needed)
docker compose restart seller1-prod-web

# 6. Verify
curl -I https://seller1.ru

3. seller1-dev-stack (Development)

Location: /opt/seller1-dev-stack/

Purpose: Development environment for seller1

Network: seller1-dev-stack_seller1-dev-network

Containers: 4

Services in seller1-dev-stack

Container Name Service Port(s) Role
seller1-dev-web Drupal/Varbase 80 Web server
seller1-dev-db PostgreSQL 5432 Database
seller1-dev-redis Redis 6379 Cache
seller1-dev-n8n N8N 5678 Workflows

Domains

Data Location

/mnt/data/seller1-dev/      (249MB)

Management Commands

cd /opt/seller1-dev-stack

# View status
docker compose ps

# Start/stop
docker compose up -d
docker compose down

# View logs
docker compose logs -f

# Restart services
docker compose restart
docker compose restart seller1-dev-web

Features


4. varbase-stack (Varbase Demo)

Location: /opt/varbase-stack/

Purpose: Varbase distribution demonstration

Network: varbase-stack_varbase-network

Containers: 3

Services in varbase-stack

Container Name Service Port(s) Role
varbase-web Varbase 80 Web server
varbase-db PostgreSQL 5432 Database
varbase-redis Redis 6379 Cache

Domain

Data Location

/mnt/data/varbase/          (746MB - LARGEST!)

Management Commands

cd /opt/varbase-stack

# View status
docker compose ps

# Start/stop
docker compose up -d
docker compose down

# View logs
docker compose logs -f

# Restart
docker compose restart

Notes


5. commerce-stack (Commerce Kickstart Demo)

Location: /opt/commerce-stack/

Purpose: Commerce Kickstart demonstration

Network: commerce-stack_commerce-network

Containers: 3

Services in commerce-stack

Container Name Service Port(s) Role
commerce-web Drupal Commerce 80 Web server
commerce-db MariaDB 3306 Database
commerce-redis Redis 6379 Cache

Domain

Data Location

/mnt/data/commerce/         (419MB)

Management Commands

cd /opt/commerce-stack

# View status
docker compose ps

# Start/stop
docker compose up -d
docker compose down

# View logs
docker compose logs -f

# Restart
docker compose restart

Notes


6. myshop-stack (MyShop Drupal Commerce)

Location: /opt/myshop-stack/

Purpose: Drupal Commerce demonstration

Network: myshop-stack_myshop-network

Containers: 3

Services in myshop-stack

Container Name Service Port(s) Role
myshop-web Drupal Commerce 80 Web server
myshop-db MariaDB 3306 Database
myshop-redis Redis 6379 Cache

Domain

Data Location

/mnt/data/myshop/           (419MB)

Management Commands

cd /opt/myshop-stack

# View status
docker compose ps

# Start/stop
docker compose up -d
docker compose down

# View logs
docker compose logs -f

# Restart
docker compose restart

Notes


7. python-stack (Python Applications)

Location: /opt/python-stack/

Purpose: Python Flask applications (dev and test)

Network: python-stack_python-network

Containers: 2

Services in python-stack

Container Name Service Port(s) Role
python-dev Flask Dev App 5000 Development
python-tst Flask Test App 5000 Testing

Domains

Data Location

/mnt/data/python/           (20KB)

Management Commands

cd /opt/python-stack

# View status
docker compose ps

# Start/stop
docker compose up -d
docker compose down

# View logs
docker compose logs -f
docker compose logs python-dev --tail 100

# Restart
docker compose restart
docker compose restart python-dev

Notes


Common Stack Operations

View Status of All Stacks

# Quick overview
for stack in /opt/*-stack; do
  echo "=== $(basename $stack) ==="
  cd $stack && docker compose ps
  echo
done

# With resource usage
for stack in /opt/*-stack; do
  cd $stack
  echo "=== $(basename $stack) ==="
  docker compose ps --format "table {{.Names}}\t{{.Status}}\t{{.Size}}"
done

Restart All Development Stacks (not production)

# Restart dev environments only
for stack in seller1-dev varbase commerce myshop python; do
  cd /opt/${stack}-stack
  echo "Restarting ${stack}-stack..."
  docker compose restart
done

Backup All Stack Data

# Create comprehensive backup
/opt/scripts/backup-critical.sh

# Or manual backup
for stack in pro-0kt seller1-prod seller1-dev varbase commerce myshop python; do
  tar czf /var/backups/${stack}-$(date +%Y%m%d).tar.gz \
    /mnt/data/${stack}* 2>/dev/null || true
done

Monitor All Stacks

# Resource usage for all containers
docker stats --no-stream | grep -E "CONTAINER|0kt|prod|dev|varbase|commerce|myshop|python"

# By stack
docker stats --no-stream | sort -k 3 -rh

Stack Dependencies

Dependency Chart

┌─ pro-0kt-stack (Infrastructure)
  ├─ PostgreSQL Shared
  ├─ MariaDB Shared
  └─ NPM (reverse proxy)

├─ seller1-prod-stack (Production) 🔴
  └─ Uses: pro-0kt NPM for routing

├─ seller1-dev-stack (Development)
  └─ Uses: pro-0kt NPM for routing

├─ varbase-stack (Demo)
  └─ Uses: pro-0kt NPM for routing

├─ commerce-stack (Demo)
  └─ Uses: pro-0kt NPM for routing

├─ myshop-stack (Demo)
  └─ Uses: pro-0kt NPM for routing

└─ python-stack (Apps)
   └─ Uses: pro-0kt NPM for routing

Critical Dependencies

  1. pro-0kt-stack must be running first
    - NPM needs to route traffic
    - Databases must be available

  2. All stacks depend on pro-0kt-nginx
    - If NPM down, all domains return 502
    - Restart: cd /opt/pro-0kt-stack && docker compose restart pro-0kt-nginx

  3. Development stacks can use shared databases
    - PostgreSQL Shared
    - MariaDB Shared

  4. Production stack isolated
    - seller1-prod-db is separate
    - Can be restored independently


Performance Baseline

Memory Usage (Typical)

Stack RAM
pro-0kt-stack ~2500MB
seller1-prod-stack ~520MB
seller1-dev-stack ~400MB
varbase-stack ~300MB
commerce-stack ~300MB
myshop-stack ~300MB
python-stack ~100MB
Total ~4420MB (4.4GB)

Disk Usage

Stack Size
pro-0kt-stack ~5GB
seller1-prod-stack ~417MB
seller1-dev-stack ~249MB
varbase-stack ~746MB
commerce-stack ~419MB
myshop-stack ~419MB
python-stack ~20KB
Total ~7.3GB

Note: Server has 40GB total, 5GB RAM + 8GB swap


Upgrade Strategy

Update All Stacks

# Safe upgrade procedure
for stack in /opt/*-stack; do
  echo "Updating $(basename $stack)..."
  cd $stack
  docker compose pull
  docker compose up -d
  docker compose ps
  echo "Wait 10 seconds for health checks..."
  sleep 10
done

Upgrade Specific Stack

cd /opt/<stack-name>

# Pull latest images
docker compose pull

# Restart with new images
docker compose up -d

# Verify
docker compose ps
docker compose logs -f

Rollback Strategy

# Rollback specific stack
cd /opt/<stack-name>

# Stop current
docker compose down

# Restore from backup (if available)
docker compose up -d
# (Old images should still be available)

# Check status
docker compose ps


Document Version: 1.0.0
Last Updated: 2025-11-09
Total Containers: 34
Total Memory: ~4.4GB
Total Disk: ~7.3GB