339 lines
7.5 KiB
Markdown
339 lines
7.5 KiB
Markdown
# 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.
|