# DMARQ Deployment Guide This guide provides step-by-step instructions for deploying DMARQ in various environments. ## Table of Contents 1. [Docker Deployment (Recommended)](#docker-deployment-recommended) 2. [Manual Installation](#manual-installation) 3. [Environment Configuration](#environment-configuration) 4. [Database Setup](#database-setup) 5. [Production Best Practices](#production-best-practices) 6. [Upgrading](#upgrading) For day-to-day production operation, use the [Operator Runbook](../deployment/operations.md). For failure recovery, use [Troubleshooting Playbooks](../deployment/troubleshooting.md). ## Docker Deployment (Recommended) The easiest way to deploy DMARQ is using Docker and Docker Compose. This approach packages all dependencies and provides a consistent environment. ### Prerequisites - Docker Engine 20.10.0 or later - Docker Compose v2.0.0 or later - 2GB RAM minimum (4GB recommended) - 20GB storage space ### Deployment Steps 1. **Clone the repository** ```bash git clone https://github.com/yourusername/dmarq.git cd dmarq ``` 2. **Configure environment variables** Create a `.env` file in the project root: ``` # Database Configuration DB_TYPE=sqlite # or postgres for production DB_PATH=./data/dmarq.db # for SQLite # For PostgreSQL: # DB_HOST=postgres # DB_PORT=5432 # DB_USER=dmarq # DB_PASS=secure_password # DB_NAME=dmarq # IMAP Configuration (optional) IMAP_ENABLED=false # IMAP_SERVER=mail.example.com # IMAP_PORT=993 # IMAP_USERNAME=dmarc@example.com # IMAP_PASSWORD=your_secure_password # IMAP_USE_SSL=true # IMAP_POLLING_INTERVAL=60 # Security Settings SECRET_KEY=generate_a_secure_random_key ALLOWED_HOSTS=localhost,127.0.0.1 ``` Generate a secure random key for `SECRET_KEY`: ```bash openssl rand -hex 32 ``` 3. **Start the containers** ```bash docker-compose up -d ``` 4. **Access the application** Open your browser and navigate to `http://localhost:8000` 5. **Check container status** ```bash docker-compose ps ``` ### Updating the Deployment To update to a newer version: ```bash git pull docker-compose down docker-compose build docker-compose up -d ``` ## Manual Installation For environments where Docker isn't available, you can install DMARQ manually. ### Prerequisites - Python 3.13 or higher - pip and virtualenv - Node.js 16+ (if modifying frontend assets) ### Installation Steps 1. **Set up virtual environment** ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 2. **Install dependencies** ```bash cd backend pip install -r requirements.txt ``` 3. **Configure environment variables** Create a `.env` file in the backend directory with the same variables as in the Docker deployment. 4. **Initialize the database** ```bash cd app python -m alembic upgrade head ``` 5. **Start the application** ```bash uvicorn main:app --host 0.0.0.0 --port 8000 ``` 6. **Set up a production server** For production, use a proper ASGI server like Uvicorn behind Nginx: ```bash # Example systemd service [Unit] Description=DMARQ Application After=network.target [Service] User=dmarq WorkingDirectory=/path/to/dmarq/backend/app ExecStart=/path/to/dmarq/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000 Restart=always [Install] WantedBy=multi-user.target ``` ## Environment Configuration DMARQ can be configured through environment variables: ### Core Settings | Variable | Description | Default | |----------|-------------|---------| | `DEBUG` | Enable debug mode | `false` | | `SECRET_KEY` | Secret key for session security | Required | | `ALLOWED_HOSTS` | Comma-separated list of allowed hosts | `localhost,127.0.0.1` | ### Database Settings | Variable | Description | Default | |----------|-------------|---------| | `DB_TYPE` | Database type (sqlite, postgres) | `sqlite` | | `DB_PATH` | Path to SQLite database file | `./data/dmarq.db` | | `DB_HOST` | PostgreSQL host | - | | `DB_PORT` | PostgreSQL port | `5432` | | `DB_USER` | PostgreSQL username | - | | `DB_PASS` | PostgreSQL password | - | | `DB_NAME` | PostgreSQL database name | - | ### IMAP Settings | Variable | Description | Default | |----------|-------------|---------| | `IMAP_ENABLED` | Enable IMAP report fetching | `false` | | `IMAP_SERVER` | IMAP server address | - | | `IMAP_PORT` | IMAP server port | `993` | | `IMAP_USERNAME` | IMAP username | - | | `IMAP_PASSWORD` | IMAP password | - | | `IMAP_USE_SSL` | Use SSL for IMAP connection | `true` | | `IMAP_POLLING_INTERVAL` | Minutes between polling | `60` | ## Database Setup DMARQ supports SQLite (default) and PostgreSQL databases. ### SQLite (Default) SQLite is suitable for smaller deployments with fewer domains and reports. No additional configuration is required as it works out of the box. ### PostgreSQL (Recommended for Production) 1. **Create a PostgreSQL database and user** ```sql CREATE USER dmarq WITH PASSWORD 'secure_password'; CREATE DATABASE dmarq OWNER dmarq; ``` 2. **Update environment variables** ``` DB_TYPE=postgres DB_HOST=your_postgres_host DB_PORT=5432 DB_USER=dmarq DB_PASS=secure_password DB_NAME=dmarq ``` 3. **Run database migrations** ```bash cd backend/app python -m alembic upgrade head ``` ## Production Best Practices For production deployments, consider the following: 1. **Use HTTPS** Set up SSL/TLS with a valid certificate using a reverse proxy like Nginx: ```nginx server { listen 80; server_name dmarq.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name dmarq.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 2. **Regular Backups** Set up regular database backups: ```bash # For PostgreSQL pg_dump -U dmarq dmarq > dmarq_backup_$(date +%Y%m%d).sql # For SQLite sqlite3 data/dmarq.db .dump > dmarq_backup_$(date +%Y%m%d).sql ``` 3. **Monitoring** Monitor the application using tools like Prometheus and Grafana. 4. **Secure Credentials** Store sensitive credentials in a secure vault rather than environment variables for production environments. ## Upgrading ### Major Version Upgrades 1. **Backup your data** ```bash # For PostgreSQL pg_dump -U dmarq dmarq > dmarq_backup_before_upgrade.sql # For SQLite sqlite3 data/dmarq.db .dump > dmarq_backup_before_upgrade.sql ``` 2. **Update the repository** ```bash git fetch --tags git checkout v2.0.0 # Replace with your target version ``` 3. **Update dependencies** ```bash pip install -r requirements.txt ``` 4. **Run database migrations** ```bash cd backend/app python -m alembic upgrade head ``` 5. **Restart the application** ```bash # For Docker docker-compose down docker-compose up -d # For manual installations sudo systemctl restart dmarq ``` ### Minor Version Upgrades For minor version upgrades (e.g., 1.1.0 to 1.2.0), the process is similar but generally has less risk of breaking changes: ```bash git fetch --tags git checkout v1.2.0 # Replace with your target version docker-compose down docker-compose up -d ``` Always check the release notes for any specific upgrade instructions or breaking changes.