From 31dfa6057ce3eb16fd60ccc0dc1f17c4496d1f98 Mon Sep 17 00:00:00 2001 From: vickytechkey Date: Thu, 6 Aug 2026 16:34:04 +0530 Subject: [PATCH] feat: automate Mailcow installation on ARM64 and add DNS configuration instructions --- aws_cdk/lib/aws_cdk-stack.ts | 31 ++++++++++++++-- dns_setup_instructions.md | 72 ++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 dns_setup_instructions.md diff --git a/aws_cdk/lib/aws_cdk-stack.ts b/aws_cdk/lib/aws_cdk-stack.ts index 908e3cc..4ed9978 100644 --- a/aws_cdk/lib/aws_cdk-stack.ts +++ b/aws_cdk/lib/aws_cdk-stack.ts @@ -118,14 +118,39 @@ export class AwsCdkStack extends cdk.Stack { 'EOF', 'cd /home/ubuntu/wireguard && docker compose up -d', - // 4.3 Setup permissions for all user folders + // 4.3 Set up Mailcow (Email Server) + 'cat <<\'EOF\' > /home/ubuntu/email_server/install_mailcow.sh', + '#!/bin/bash', + 'set -e', + 'cd /home/ubuntu/email_server', + 'git clone https://github.com/mailcow/mailcow-dockerized.git mailcow', + 'cd mailcow', + '# Run generate_config.sh non-interactively for mail.tiproemail.com, timezone UTC', + 'export MAILCOW_HOSTNAME="mail.tiproemail.com"', + 'export MAILCOW_TZ="Asia/Kolkata"', + '# Pipe answers to generate_config.sh: Hostname (mail.tiproemail.com), Timezone (Asia/Kolkata), Stable Branch (1)', + 'echo -e "mail.tiproemail.com\nAsia/Kolkata\n1" | ./generate_config.sh', + '', + '# Apply Memory Optimizations for t4g.medium (4GB RAM)', + '# Disable ClamAV (Saves ~1.5 GB RAM)', + 'sed -i "s/SKIP_CLAMAV=n/SKIP_CLAMAV=y/g" mailcow.conf', + '# Disable Solr (Saves ~1 GB RAM)', + 'sed -i "s/SKIP_SOLR=n/SKIP_SOLR=y/g" mailcow.conf', + '', + '# Start Mailcow', + 'docker compose up -d', + 'EOF', + 'chmod +x /home/ubuntu/email_server/install_mailcow.sh', + '/home/ubuntu/email_server/install_mailcow.sh', + + // 4.4 Setup permissions for all user folders 'chown -R ubuntu:ubuntu /home/ubuntu/basic_requirements', 'chown -R ubuntu:ubuntu /home/ubuntu/wireguard', 'chown -R ubuntu:ubuntu /home/ubuntu/email_server', 'chown -R ubuntu:ubuntu /home/ubuntu/build_tools', - // 4.4 Install CloudWatch Agent - 'wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb', + // 4.5 Install CloudWatch Agent (ARM64 package for Graviton instance) + 'wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb', 'dpkg -i -E ./amazon-cloudwatch-agent.deb', 'mkdir -p /opt/aws/amazon-cloudwatch-agent/etc', 'cat <<\'EOF\' > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json', diff --git a/dns_setup_instructions.md b/dns_setup_instructions.md new file mode 100644 index 0000000..5493293 --- /dev/null +++ b/dns_setup_instructions.md @@ -0,0 +1,72 @@ +# Hostinger DNS Setup Instructions for Mailcow + +Follow these steps one by one to configure your DNS records in Hostinger for your mail server. + +--- + +### Step 1: Add the Subdomain (A Record) +This points your mail subdomain to your EC2 instance's Elastic IP address. + +1. Go to your **Hostinger Control Panel** > **DNS Zone Editor**. +2. Create a new record with the following details: + - **Type:** `A` + - **Name (Host):** `mail` + - **Points to (IP Address):** `13.205.93.190` + - **TTL:** `14400` (or default) +3. Click **Add Record**. + +--- + +### Step 2: Route Emails (MX Record) +This specifies that incoming emails sent to `@yourdomain.com` should be routed to Mailcow. + +1. Check your existing DNS records in Hostinger and delete any default/old **MX** records first. +2. Add a new record: + - **Type:** `MX` + - **Name (Host):** `@` + - **Points to (Mail Server):** `mail.yourdomain.com` *(Replace "yourdomain.com" with your actual domain, e.g., "tiproemail.com")* + - **Priority:** `10` + - **TTL:** `14400` (or default) +3. Click **Add Record**. + +--- + +### Step 3: Authorize EC2 to Send Mail (SPF Record) +This tells receiving mail servers that your EC2 instance IP is allowed to send emails on your behalf. + +1. Add a new record: + - **Type:** `TXT` + - **Name (Host):** `@` + - **TXT Value:** `v=spf1 ip4:13.205.93.190 -all` + - **TTL:** `14400` (or default) +2. Click **Add Record**. + +--- + +### Step 4: Setup DMARC Policy (Protection against spoofing) +This policy dictates how receiving servers should handle emails that fail SPF/DKIM checks. + +1. Add a new record: + - **Type:** `TXT` + - **Name (Host):** `_dmarc` + - **TXT Value:** `v=DMARC1; p=quarantine; pct=100; adkim=r; aspf=r` + - **TTL:** `14400` (or default) +2. Click **Add Record**. + +--- + +### Step 5: Setup DKIM Record (DomainKeys Identified Mail) +This adds a digital signature to outgoing emails to verify they were sent by you. + +1. Deploy your EC2 instance and wait for Mailcow to start up. +2. Log into the Mailcow web interface at: `https://mail.yourdomain.com` (Default login: Username: `admin` / Password: `moohoo` — **Change this password immediately!**). +3. Navigate to **Configuration** > **ARC/DKIM**. +4. In the "Domain" field, enter your domain name (e.g. `yourdomain.com`). +5. Choose a selector (default is `dkim`). +6. Click **Add** (or **Generate**). Mailcow will display a long public key string. +7. Go back to your **Hostinger DNS Zone Editor** and add a new record: + - **Type:** `TXT` + - **Name (Host):** `dkim._domainkey` *(If you used a different selector than 'dkim', replace the prefix with 'selector._domainkey')* + - **TXT Value:** *(Paste the entire public key string provided by Mailcow)* + - **TTL:** `14400` (or default) +8. Click **Add Record**.