Skip to content

marsdevs-com/AWS-deployment-setup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ MarsDevs Deployment Scripts

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.

πŸ“‹ Table of Contents

🎯 Overview

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

πŸ”§ Prerequisites

For EC2 Deployment Script

  • AWS CLI installed and configured
  • Valid AWS credentials with EC2 permissions
  • Internet connection

For Docker Setup Script

  • Ubuntu/Debian-based system
  • Internet connection
  • Git installed
  • Sudo privileges

πŸ“¦ Scripts

1. EC2 Deployment Script (deploy_ec2.sh)

Creates and configures AWS EC2 instances with custom parameters.

Features

  • βœ… 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

Usage

./deploy_ec2.sh

Interactive Configuration

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)

Example Output

==========================================
    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

2. Docker Setup Script (docker_setup.sh)

Complete Docker environment setup with application deployment.

Features

  • βœ… 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

Usage

./docker_setup.sh

Interactive Configuration

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)

Example Output

==========================================
    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!

πŸš€ Usage Examples

Complete Deployment Workflow

1. Create EC2 Instance

# Run EC2 deployment script
./deploy_ec2.sh

# Connect to your new instance
ssh -i your-key.pem ubuntu@<public-ip>

2. Deploy Application on EC2

# 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)

Common Use Cases

Node.js Application

# Repository: https://github.com/user/node-app.git
# Branch: main
# Docker Command: sudo docker-compose up -d
# Environment: Database URL, API keys, etc.

Python Django Application

# Repository: https://github.com/user/django-app.git
# Branch: production
# Docker Command: sudo docker-compose up -d
# Environment: SECRET_KEY, DATABASE_URL, etc.

React Frontend + API Backend

# Repository: https://github.com/user/fullstack-app.git
# Branch: develop
# Docker Command: sudo docker-compose up -d
# Environment: API endpoints, database connections, etc.

πŸ”§ Configuration Options

EC2 Deployment Options

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

Docker Setup Options

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

πŸ› οΈ Troubleshooting

Common Issues

1. AWS CLI Not Configured

# Error: AWS credentials not configured
# Solution: Configure AWS CLI
aws configure

2. Docker Permission Denied

# Error: permission denied while trying to connect to Docker daemon
# Solution: The script automatically uses sudo for Docker commands

3. Repository Clone Failed

# Error: Failed to clone repository
# Solution: Check GitHub PAT and repository URL format
# Format: https://username:token@github.com/owner/repo.git

4. Docker Group Permissions

# After script completion, if Docker commands fail:
sudo usermod -aG docker $USER
newgrp docker
# Or logout and login again

Debug Mode

Enable Verbose Output

# Run with debug information
bash -x ./docker_setup.sh

Check Docker Status

# Verify Docker installation
sudo docker --version
sudo docker-compose --version
sudo docker ps

Verify Repository Clone

# Check cloned repository
ls -la /path/to/cloned/repo
cat /path/to/cloned/repo/.env

πŸ“ File Structure

deployment_script/
β”œβ”€β”€ deploy_ec2.sh          # EC2 deployment script
β”œβ”€β”€ docker_setup.sh        # Docker setup script
└── README.md              # This documentation

πŸ”’ Security Considerations

AWS Security

  • Use IAM roles with minimal required permissions
  • Regularly rotate AWS access keys
  • Enable CloudTrail for audit logging
  • Use security groups to restrict access

Docker Security

  • Keep Docker images updated
  • Use non-root users in containers
  • Scan images for vulnerabilities
  • Use secrets management for sensitive data

GitHub PAT Security

  • Use fine-grained personal access tokens
  • Limit token permissions to required repositories
  • Regularly rotate tokens
  • Never commit tokens to version control

πŸš€ Advanced Usage

Custom Docker Commands

Multi-Service Application

# Custom command for complex applications
sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Single Container with Port Mapping

# Custom docker run command
sudo docker run -d -p 3000:3000 --name myapp myapp:latest

Environment-Specific Deployment

# Development environment
sudo docker-compose -f docker-compose.dev.yml up -d

# Production environment
sudo docker-compose -f docker-compose.prod.yml up -d

Automated Deployment Pipeline

CI/CD Integration

# 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'

Environment-Specific Scripts

# Development deployment
./docker_setup.sh --env=dev --branch=develop

# Production deployment
./docker_setup.sh --env=prod --branch=main

πŸ“Š Monitoring and Logs

Application Monitoring

# Check running containers
sudo docker ps

# View application logs
sudo docker-compose logs -f

# Monitor resource usage
sudo docker stats

System Monitoring

# Check system resources
htop
df -h
free -h

# Check Docker daemon status
sudo systemctl status docker

πŸ”„ Maintenance

Regular Updates

# 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

Cleanup

# 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

🀝 Contributing

We welcome contributions! Please see our contributing guidelines:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Development Setup

# 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

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

Community

  • 🌟 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages