Baby Tracker Deployment Guide

Step-by-step instructions for deploying the Baby Tracker application

Deployment Options

Deploy Baby Tracker to your preferred hosting environment with complete privacy and control

EC2 + Docker Compose (Recommended)

Simple, cost-effective deployment using AWS EC2 with Docker Compose. Complete containerized setup with PostgreSQL and all dependencies included.

✓ Low cost (~$5-6/month)
✓ Simple configuration
✓ Full control

Local Docker Deployment

Run Baby Tracker on your own hardware using Docker Compose for local development or self-hosting.

✓ Complete privacy
✓ No cloud costs
✓ Simple setup

Other Cloud Options

Deploy to other cloud providers like GCP, Azure, DigitalOcean, or platforms like Heroku, Render, or Railway.

✓ Alternative providers
✓ Platform-specific features
✓ Existing infrastructure

🚀 AWS EC2 Deployment with Docker Compose

The simplest and most cost-effective way to deploy Baby Tracker to production. Choose between standard HTTP deployment or secure HTTPS deployment:

1. Launch an EC2 Instance

# Key settings for your EC2 instance:
- Instance type: t3.nano (~$5-6/month)
- OS: Amazon Linux 2023 or Ubuntu Server
- Security group: Allow ports 22 (SSH), 80 (HTTP), 443 (HTTPS)
- Storage: 8GB (default) is sufficient

# Connect to your instance
ssh -i your-key.pem ec2-user@your-instance-ip

2. Install Docker and Docker Compose

# For Amazon Linux 2023
sudo yum update -y
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER

# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Log out and back in for group changes
exit
# Then reconnect via SSH

3. Deploy the Application

# Clone the repository
git clone https://github.com/theamazingmrb/baby-tracker-api.git
cd baby-tracker-api

# Configure environment
cp .env.example .env
nano .env # Edit with your production settings

# Option 1: Start with basic HTTP setup
docker-compose up -d

# OR Option 2: Start with HTTPS setup
mkdir -p nginx/conf nginx/certbot/conf nginx/certbot/www
docker-compose -f docker-compose.https.yml up -d

# Create admin user
docker-compose exec web python manage.py createsuperuser

🎉 Deployment Complete!

Your Baby Tracker instance is now running. Access it at your server's IP address or domain.

Production Environment Configuration

Critical environment variables for production deployment:

VariableDescriptionProduction Value
DJANGO_DEBUGEnable debug modeFalse
SECRET_KEYDjango secret keyrandom-50-char-string
ENVIRONMENTEnvironment typeproduction
NETWORK_HOSTHost to bind the Django server to0.0.0.0
NETWORK_PORTPort for the Django server8000
WEB_PORTPort to expose the web service on host80
ALLOWED_HOSTSComma-separated list of allowed host namesyourdomain.com,www.yourdomain.com
PRODUCTION_DOMAINYour API backend domainapi.yourdomain.com
FRONTEND_DOMAINYour frontend application domainapp.yourdomain.com
CORS_ALLOW_ALL_ORIGINSAllow all origins for CORSFalse
CORS_ALLOWED_ORIGINSComma-separated list of allowed originshttps://yourdomain.com,https://www.yourdomain.com
DATABASE_URLDatabase connection stringpostgresql://user:pass@db/babytracker
POSTGRES_USERPostgreSQL username (Docker)postgres
POSTGRES_PASSWORDPostgreSQL password (Docker)secure-password-here
POSTGRES_DBPostgreSQL database name (Docker)baby_tracker
EMAIL_BACKENDDjango email backenddjango.core.mail.backends.smtp.EmailBackend
EMAIL_HOSTSMTP server hostnamesmtp.gmail.com
EMAIL_PORTSMTP server port587
EMAIL_USE_TLSUse TLS for emailTrue
EMAIL_HOST_USEREmail usernameyour-email@example.com
EMAIL_HOST_PASSWORDEmail passwordyour-email-password
AWS_ACCESS_KEY_IDAWS access key (for S3/EB)your-access-key
AWS_SECRET_ACCESS_KEYAWS secret key (for S3/EB)your-secret-key
AWS_STORAGE_BUCKET_NAMEAWS S3 bucket nameyour-bucket-name
AWS_S3_REGION_NAMEAWS regionus-west-2

SSL/HTTPS Setup with Let's Encrypt

Secure your EC2 deployment with free SSL certificates using our integrated HTTPS setup:

# Option 1: Using the Integrated HTTPS Setup (Recommended)
# Create required directories
mkdir -p nginx/conf nginx/certbot/conf nginx/certbot/www

# Create a basic Nginx configuration
cat > nginx/conf/app.conf << 'EOL'
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
EOL

# Replace domain placeholders with your actual domain
sed -i 's/yourdomain.com/example.com/g' nginx/conf/app.conf # Replace example.com with your domain

# Start the application with HTTPS configuration
docker-compose -f docker-compose.https.yml up -d

# Obtain SSL certificates (after DNS is properly configured)
docker-compose -f docker-compose.https.yml exec certbot certbot certonly --webroot -w /var/www/certbot -d yourdomain.com -d www.yourdomain.com --email your-email@example.com --agree-tos --no-eff-email

# Reload Nginx to apply the certificates
docker-compose -f docker-compose.https.yml exec nginx nginx -s reload
Alternative manual setup (if needed):
# Option 2: Manual HTTPS Setup
# For Amazon Linux 2023
sudo dnf install -y augeas-libs
sudo python3 -m pip install certbot

# For Ubuntu
sudo apt install -y certbot

# Stop Docker containers to free port 80
docker-compose down

# Obtain SSL certificate for both domain and www subdomain
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

# Set up Nginx as reverse proxy with SSL
mkdir -p nginx/conf
nano nginx/conf/app.conf # Configure with SSL paths
docker-compose -f docker-compose.https.yml up -d

Monitoring & Maintenance

📊 EC2 & Container Monitoring

Check EC2 system status:
top
Check container status (HTTP setup):
cd ~/baby-tracker-api && docker-compose ps
Check container status (HTTPS setup):
cd ~/baby-tracker-api && docker-compose -f docker-compose.https.yml ps
View application logs:
docker-compose logs -f web
View HTTPS-related logs:
docker-compose -f docker-compose.https.yml logs -f nginx certbot

💾 Database Backups

Create backup script:
nano ~/backup-db.sh
Add these lines to the script:
#!/bin/bash DATE=$(date +%Y-%m-%d) BACKUP_DIR=~/backups mkdir -p $BACKUP_DIR cd ~/baby-tracker-api docker-compose exec -T db pg_dump -U postgres postgres > $BACKUP_DIR/backup-$DATE.sql
Schedule daily backups:
chmod +x ~/backup-db.sh && crontab -e
Add this line to crontab:
0 2 * * * ~/backup-db.sh

🔄 EC2 Application Updates

Update application code:
cd ~/baby-tracker-api && git pull origin main
Backup database before update:
./backup-db.sh
Rebuild and restart containers (HTTP deployment):
docker-compose down && docker-compose up -d --build
OR for HTTPS deployment:
docker-compose -f docker-compose.https.yml down && docker-compose -f docker-compose.https.yml up -d --build
Run migrations:
docker-compose exec web python manage.py migrate

🚨 EC2 Troubleshooting

Check EC2 disk space:
df -h
Restart Docker service:
sudo systemctl restart docker
Restart application containers (HTTP):
cd ~/baby-tracker-api && docker-compose restart
Restart application containers (HTTPS):
cd ~/baby-tracker-api && docker-compose -f docker-compose.https.yml restart
View detailed application errors:
docker-compose logs -f web
View Nginx logs (HTTPS setup):
docker-compose -f docker-compose.https.yml logs -f nginx

Need help with deployment? Check our detailed guides and community support.