# Maple Open Technologies - Production Infrastructure

This directory contains configuration and documentation for deploying Maple Open Technologies to production on DigitalOcean.

## Quick Start

```bash
# 1. Copy environment template
cp .env.template .env

# 2. Edit .env and replace all CHANGEME values
nano .env

# 3. Set secure permissions
chmod 600 .env

# 4. Verify .env is gitignored
git check-ignore -v .env

# 5. Start with setup documentation
cd setup/
cat 00-getting-started.md
```

## Directory Structure

```
production/
├── .env.template       # Template with CHANGEME placeholders (safe to commit)
├── .env               # Your actual config (gitignored, NEVER commit)
├── .gitignore         # Ensures .env is never committed to Git
├── .claudeignore      # Protects secrets from LLMs/AI assistants
├── README.md          # This file
└── setup/             # Step-by-step deployment guides
    ├── 00-getting-started.md
    ├── 01_init_docker_swarm.md
    └── ... (more guides)
```

## Environment Configuration

### `.env.template` vs `.env`

| File | Purpose | Git Status | Contains |
|------|---------|------------|----------|
| `.env.template` | Template for team | ✅ Committed | `CHANGEME` placeholders |
| `.env` | Your actual config | ❌ Gitignored | Real IPs, passwords, tokens |

### Security Rules

🔒 **DO:**
- Keep `.env` file with `chmod 600` permissions
- Store backups of `.env` securely (encrypted)
- Use `.env.template` to share config structure
- Verify `.env` is gitignored before adding secrets
- Trust `.claudeignore` to protect secrets from AI assistants

🚫 **DON'T:**
- Commit `.env` to Git
- Share `.env` via email/Slack/unencrypted channels
- Use world-readable permissions (644, 777)
- Hardcode values from `.env` in documentation

### Multi-Layer Security Protection

This directory uses **three layers** of secret protection:

1. **`.gitignore`** - Prevents committing secrets to Git repository
2. **`.claudeignore`** - Prevents LLMs/AI assistants from reading secrets
3. **File permissions** - `chmod 600` prevents other users from reading secrets

All three layers work together to protect your production infrastructure.

## Setup Guides

Follow these guides in order:

1. **[00-getting-started.md](setup/00-getting-started.md)**
   - Local workspace setup
   - DigitalOcean API token configuration
   - `.env` file initialization

2. **[01_init_docker_swarm.md](setup/01_init_docker_swarm.md)**
   - Create DigitalOcean droplets (Ubuntu 24.04)
   - Install Docker on nodes
   - Configure Docker Swarm with private networking
   - Verify cluster connectivity

3. **More guides coming...**
   - Cassandra deployment
   - Redis setup
   - Application deployment
   - SSL/HTTPS configuration

## Infrastructure Overview

### Naming Convention

Format: `{company}-{role}-{sequential-number}-{environment}`

Examples:
- `mapleopentech-swarm-manager-1-prod`
- `mapleopentech-swarm-worker-1-prod`
- `mapleopentech-swarm-worker-2-prod`

**Why this pattern?**
- Simple sequential numbering (never reused)
- No role-specific prefixes (use Docker labels instead)
- Easy to scale (just add worker-N)
- Flexible (can repurpose servers without renaming)

## Getting Help

### Documentation

- Setup guides in `setup/` directory
- `.env.template` has inline comments for all variables
- Each guide includes troubleshooting section

### Common Issues

1. **`.env` file missing**: Run `cp .env.template .env`
2. **Variables not loading**: Run `source .env` in your terminal
3. **Git showing .env**: It shouldn't be - check `.gitignore`

---

**Last Updated**: November 3, 2025
**Maintained By**: Infrastructure Team
