2weekmail/setup.sh
2025-03-19 19:56:57 -05:00

56 lines
2.0 KiB
Bash

#!/bin/bash
set -e
# Update package lists
apt-get update || { echo "Failed to update package lists"; exit 1; }
# Install certbot and the Nginx plugin
apt-get install -y certbot python3-certbot-nginx || { echo "Failed to install certbot"; exit 1; }
# Backup Nginx configuration
BACKUP_DIR="/etc/nginx/backup"
BACKUP_DATE=$(date +%F)
mkdir -p "$BACKUP_DIR"
cp -r /etc/nginx/sites-available "$BACKUP_DIR/sites-available-$BACKUP_DATE" || echo "Warning: Could not backup Nginx config"
# Obtain certificates for all domains and configure Nginx automatically
certbot --nginx -n \
-d 2weekmail.fyi \
-d mail.2weekmail.fyi \
-d webmail.2weekmail.fyi \
-d admin.2weekmail.fyi \
-d api.2weekmail.fyi \
--agree-tos \
--email admin@2weekmail.fyi || { echo "Failed to obtain certificates"; exit 1; }
echo "Testing certificate renewal process..."
certbot renew --dry-run || { echo "Certificate renewal test failed"; exit 1; }
# Restart the mail server to use the new certificates
if docker ps -a | grep -q mailserver_postfix; then
docker restart mailserver_postfix || { echo "Failed to restart mailserver_postfix"; exit 1; }
else
echo "Warning: mailserver_postfix container not found"
fi
mkdir -p /etc/letsencrypt/renewal-hooks/post/
cat > /etc/letsencrypt/renewal-hooks/post/restart-services.sh << 'EOF'
#!/bin/bash
systemctl reload nginx
docker restart mailserver_postfix
EOF
chmod +x /etc/letsencrypt/renewal-hooks/post/restart-services.sh
# Set up auto-renewal cron job that restarts both Nginx and the mail server
CRON_JOB="0 3 * * 1 certbot renew --quiet"
(crontab -l 2>/dev/null | grep -v "certbot renew"; echo "$CRON_JOB") | crontab - || {
echo "Failed to set up cron job. Adding it manually...";
echo "$CRON_JOB" | crontab -;
}
echo "✅ SSL certificates have been set up for all domains."
echo "✅ Nginx has been configured to use these certificates."
echo "✅ The mail server has been restarted to use the new certificates."
echo "✅ A cron job has been added to automatically renew certificates and restart services."