Learn how to **deploy a Django app on AWS EC2 using GitHub and Nginx** in this step-by-step tutorial! We’ll go through setting up an **AWS EC2 instance**, pulling code from **GitHub**, and configuring **Gunicorn & Nginx** to serve your Django app in a production environment.

By the end of this video, you’ll have a **fully deployed Django application** running on AWS EC2 with **a custom domain, HTTPS, and Nginx as a reverse proxy**.

---

## ** What You'll Learn in This Video:**
How to launch an **AWS EC2 instance** (Free Tier)
How to **clone a Django project from GitHub** to EC2
How to **set up a virtual environment & install dependencies**
How to configure **Gunicorn to serve the Django app**
How to install & configure **Nginx as a reverse proxy**
How to set up a **firewall & security groups** for secure access
How to run Django **with a PostgreSQL/MySQL database (optional)**

---

## ** Prerequisites**
**AWS Account** ([Sign Up Here](https://aws.amazon.com/free/))
**GitHub Repository with Django Project**
Basic knowledge of **Django & Linux Commands**
**SSH Access to EC2 Instance**

---

## ** Step 1: Launch an AWS EC2 Instance**
1⃣ Log in to **AWS Console** → Go to **EC2**
2⃣ Click **Launch Instance**
3⃣ Select **Ubuntu 22.04 LTS** as your AMI
4⃣ Choose **Instance Type** → Select **t2.micro** (Free Tier)
5⃣ Configure **Security Group**:
- Allow **SSH (port 22)**
- Allow **HTTP (port 80)** for Nginx
- Allow **HTTPS (port 443)** for SSL
6⃣ Click **Launch** and **download the key pair (`.pem` file)**

---

## ** Step 2: Connect to AWS EC2 via SSH**
**For Mac/Linux Users:**
```bash
chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@your-ec2-public-ip
```

**For Windows Users (Using PuTTY):**
1⃣ Convert `.pem` to `.ppk` using **PuTTYgen**
2⃣ Open **PuTTY**, enter **EC2 Public IP**, and load the `.ppk` key
3⃣ Click **Open** and log in as `ubuntu`

---

## ** Step 3: Install Required Packages on EC2**
Once connected, update the system and install dependencies:

```bash
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx git -y
```

---

## ** Step 4: Clone Django Project from GitHub**
Navigate to the home directory and **clone your GitHub repository**:

```bash
cd /home/ubuntu
git clone https://github.com/your-username/your-django-project.git
cd your-django-project
```

---

## ** Step 5: Set Up Virtual Environment & Install Dependencies**
Create a virtual environment and install requirements:

```bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```

---

## ** Step 6: Configure Django Settings for Production**
1⃣ **Update `ALLOWED_HOSTS` in `settings.py`**

```python
ALLOWED_HOSTS = ["your-ec2-public-ip", "your-domain.com"]
```

2⃣ **Migrate the Database:**
```bash
python manage.py migrate
```

3⃣ **Create a Superuser:**
```bash
python manage.py createsuperuser
```

---

## ** Step 7: Set Up Gunicorn to Serve Django App**
1⃣ Install Gunicorn:
```bash
pip install gunicorn
```

2⃣ Run Gunicorn to test:
```bash
gunicorn --bind 0.0.0.0:8000 your_project.wsgi
```

Now your Django app should be running on **port 8000**.

---

## ** Step 8: Set Up Nginx as a Reverse Proxy**
1⃣ Stop Gunicorn and install Nginx:
```bash
sudo apt install nginx -y
```

2⃣ Create an Nginx configuration file for Django:
```bash
sudo nano /etc/nginx/sites-available/django
```

3⃣ Add the following configuration:

```
server {
listen 80;
server_name your-ec2-public-ip your-domain.com;

location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```

4⃣ Enable the Nginx configuration:
```bash
sudo ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled
sudo systemctl restart nginx
```

---

## ** Step 9: Run Gunicorn as a Background Process**
Create a Gunicorn systemd service file:

```bash
sudo nano /etc/systemd/system/gunicorn.service
```

Add the following content:

```
[Unit]
Description=Gunicorn instance to serve Django
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/your-django-project
ExecStart=/home/ubuntu/your-django-project/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/your-django-project/gunicorn.sock your_project.wsgi:application

[Install]
WantedBy=multi-user.target
```

Save and restart Gunicorn:
```bash
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
```
### ** Hashtags:**
#Django #AWS #EC2 #Nginx #DjangoDeployment #Gunicorn #GitHub #Python #CloudComputing #DevOps #FullStack #AWSDeployment