A comprehensive deployment solution for AWS EC2 instances and Docker-based applications. This repository contains two powerful scripts designed to streamline the deployment process for developers.
This deployment toolkit provides developers with automated solutions for:
- AWS EC2 Instance Creation - Spin up EC2 instances with custom configurations
- Docker Environment Setup - Complete Docker and docker-compose installation
- Application Deployment - Clone repositories and run applications automatically
- Environment Configuration - Handle .env files and environment variables
- AWS CLI installed and configured
- Valid AWS credentials with EC2 permissions
- Internet connection
- Ubuntu/Debian-based system
- Internet connection
- Git installed
- Sudo privileges
Creates and configures AWS EC2 instances with custom parameters.
- β Automated EC2 Creation - Launch instances with custom configurations
- β Security Group Management - Automatically configure firewall rules
- β Storage Customization - Set custom EBS volume sizes
- β Region Support - Deploy to any AWS region
- β Instance Tagging - Automatic resource tagging
- β AMI Selection - Latest Ubuntu 22.04 LTS AMI detection
./deploy_ec2.sh
The script will prompt you for:
- AWS Region (default: us-east-1)
- Instance Type (default: t2.micro)
- Storage Size (default: 30GB, minimum: 8GB)
- Instance Name (default: Deployment-Instance)
- Open Ports (default: 22, comma-separated)
==========================================
AWS EC2 Deployment Script
==========================================
[INFO] Getting user input...
Enter AWS region (default: us-east-1): us-west-2
Enter EC2 instance type (default: t2.micro): t3.medium
Enter storage size in GB (default: 30): 50
Enter instance name (default: Deployment-Instance): MyApp-Server
Enter ports to open (default: 22): 22,80,443,3000
[SUCCESS] EC2 instance created: i-1234567890abcdef0
[INFO] Instance Details:
Instance ID: i-1234567890abcdef0
Public IP: 54.123.45.67
Instance Type: t3.medium
Storage Size: 50GB
Region: us-west-2
Complete Docker environment setup with application deployment.
- β Smart Docker Installation - Skip if already installed
- β Repository Cloning - Clone specific branches
- β Environment Configuration - Interactive .env file setup
- β Automatic App Execution - Run applications after setup
- β Permission Management - Handle Docker group permissions
- β Branch Selection - Clone specific Git branches
./docker_setup.sh
The script will prompt you for:
- Repository URL (with embedded GitHub PAT)
- Branch Name (default: main)
- Docker Command (docker-compose, docker run, custom)
- Clone Directory (default: /home/user/projects)
- Environment File (optional .env configuration)
==========================================
Docker Setup and Repository Script
==========================================
[INFO] Step 1: Updating apt packages...
[SUCCESS] apt packages updated successfully
[INFO] Step 2: Checking Docker installation...
[SUCCESS] Docker is already installed: Docker version 24.0.7
[INFO] Step 3: Checking docker-compose installation...
[INFO] docker-compose not found, installing...
[SUCCESS] docker-compose installed successfully
[INFO] Repository Configuration
==========================
Enter repository URL: https://username:token@github.com/owner/repo.git
[SUCCESS] Repository URL set: https://username:token@github.com/owner/repo.git
[INFO] Branch Configuration
=====================
Enter branch name to clone (default: main): develop
[SUCCESS] Branch set: develop
[INFO] Docker Command Configuration
===============================
What Docker command do you want to use to run your application?
1. docker-compose up -d (for docker-compose.yml files)
2. docker-compose up (for docker-compose.yml files, with logs)
3. docker run [options] (for single container)
4. Custom command
Enter your choice (1-4) or custom command: 1
[SUCCESS] Docker command set: sudo docker-compose up -d
[INFO] Step 11: Cloning repository...
[SUCCESS] Repository cloned successfully to: /home/ubuntu/workspace/project
[INFO] Step 14: Starting Docker application...
[SUCCESS] Docker application started successfully!
# Run EC2 deployment script
./deploy_ec2.sh
# Connect to your new instance
ssh -i your-key.pem ubuntu@<public-ip>
# On the EC2 instance, run Docker setup
./docker_setup.sh
# Follow the interactive prompts:
# - Repository URL with GitHub PAT
# - Branch name (e.g., main, develop, feature/xyz)
# - Docker command (docker-compose up -d)
# - Environment variables (.env file)
# Repository: https://github.com/user/node-app.git
# Branch: main
# Docker Command: sudo docker-compose up -d
# Environment: Database URL, API keys, etc.
# Repository: https://github.com/user/django-app.git
# Branch: production
# Docker Command: sudo docker-compose up -d
# Environment: SECRET_KEY, DATABASE_URL, etc.
# Repository: https://github.com/user/fullstack-app.git
# Branch: develop
# Docker Command: sudo docker-compose up -d
# Environment: API endpoints, database connections, etc.
Parameter | Default | Description |
---|---|---|
Region | us-east-1 | AWS region for deployment |
Instance Type | t2.micro | EC2 instance size |
Storage Size | 30GB | EBS volume size (min: 8GB) |
Instance Name | Deployment-Instance | Resource name tag |
Open Ports | 22 | Comma-separated port list |
Parameter | Default | Description |
---|---|---|
Branch | main | Git branch to clone |
Clone Directory | /home/user/projects | Local clone location |
Docker Command | docker-compose up -d | Application startup command |
.env File | Optional | Environment configuration |
# Error: AWS credentials not configured
# Solution: Configure AWS CLI
aws configure
# Error: permission denied while trying to connect to Docker daemon
# Solution: The script automatically uses sudo for Docker commands
# Error: Failed to clone repository
# Solution: Check GitHub PAT and repository URL format
# Format: https://username:token@github.com/owner/repo.git
# After script completion, if Docker commands fail:
sudo usermod -aG docker $USER
newgrp docker
# Or logout and login again
# Run with debug information
bash -x ./docker_setup.sh
# Verify Docker installation
sudo docker --version
sudo docker-compose --version
sudo docker ps
# Check cloned repository
ls -la /path/to/cloned/repo
cat /path/to/cloned/repo/.env
deployment_script/
βββ deploy_ec2.sh # EC2 deployment script
βββ docker_setup.sh # Docker setup script
βββ README.md # This documentation
- Use IAM roles with minimal required permissions
- Regularly rotate AWS access keys
- Enable CloudTrail for audit logging
- Use security groups to restrict access
- Keep Docker images updated
- Use non-root users in containers
- Scan images for vulnerabilities
- Use secrets management for sensitive data
- Use fine-grained personal access tokens
- Limit token permissions to required repositories
- Regularly rotate tokens
- Never commit tokens to version control
# Custom command for complex applications
sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# Custom docker run command
sudo docker run -d -p 3000:3000 --name myapp myapp:latest
# Development environment
sudo docker-compose -f docker-compose.dev.yml up -d
# Production environment
sudo docker-compose -f docker-compose.prod.yml up -d
# Example GitHub Actions workflow
- name: Deploy to EC2
run: |
./deploy_ec2.sh
ssh -i key.pem ubuntu@${{ steps.ec2.outputs.public-ip }} './docker_setup.sh'
# Development deployment
./docker_setup.sh --env=dev --branch=develop
# Production deployment
./docker_setup.sh --env=prod --branch=main
# Check running containers
sudo docker ps
# View application logs
sudo docker-compose logs -f
# Monitor resource usage
sudo docker stats
# Check system resources
htop
df -h
free -h
# Check Docker daemon status
sudo systemctl status docker
# Update system packages
sudo apt update && sudo apt upgrade -y
# Update Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# Update 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
# Remove unused Docker resources
sudo docker system prune -a
# Clean up old images
sudo docker image prune -a
# Remove unused volumes
sudo docker volume prune
We welcome contributions! Please see our contributing guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
# Clone the repository
git clone https://github.com/marsdevs/deployment_script.git
cd deployment_script
# Make scripts executable
chmod +x *.sh
# Test scripts
./deploy_ec2.sh --help
./docker_setup.sh --help
This project is licensed under the MIT License - see the LICENSE file for details.
- π Star this repository if you find it helpful
- π΄ Fork and contribute improvements
- π’ Share with your team and colleagues
- π‘ Suggest new features and improvements
Made with β€οΈ by the MarsDevs Team
Streamlining deployment, one script at a time.