mirror of
https://github.com/thecyberlearn/modern-django-starter.git
synced 2026-08-18 06:52:54 +00:00
Make template 100% clone-and-deploy ready
This commit is contained in:
parent
85ebac761d
commit
4aee6ea9f0
110
QUICK_DEPLOY.md
Normal file
110
QUICK_DEPLOY.md
Normal file
@ -0,0 +1,110 @@
|
||||
# 🚀 Quick Deploy Guide - Zero Changes Needed!
|
||||
|
||||
This Django template is designed to deploy **without any code changes** - just set environment variables!
|
||||
|
||||
## ✅ **Clone and Deploy in 3 Steps**
|
||||
|
||||
### **Step 1: Clone Repository**
|
||||
```bash
|
||||
git clone https://github.com/your-username/django-template.git
|
||||
cd django-template
|
||||
```
|
||||
|
||||
### **Step 2: Set Environment Variables in Dokploy**
|
||||
Set these **4 required variables** in Dokploy environment tab:
|
||||
|
||||
```env
|
||||
DOMAIN_NAME=yourdomain.com
|
||||
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
|
||||
CSRF_TRUSTED_ORIGINS=https://yourdomain.com
|
||||
SECRET_KEY=your-secret-key-here
|
||||
```
|
||||
|
||||
**Optional variables:**
|
||||
```env
|
||||
DEBUG=False
|
||||
SECURE_SSL_REDIRECT=True
|
||||
GOOGLE_OAUTH2_CLIENT_ID=your-google-client-id
|
||||
GOOGLE_OAUTH2_CLIENT_SECRET=your-google-client-secret
|
||||
```
|
||||
|
||||
### **Step 3: Deploy**
|
||||
1. **Dokploy Compose Path**: `./docker-compose.dokploy-simple.yml`
|
||||
2. **Domain**: Set in Dokploy UI (service=web, port=8000)
|
||||
3. **Deploy** 🚀
|
||||
|
||||
## 🎯 **That's It! No Code Changes Required!**
|
||||
|
||||
### **Default Values** (works out-of-the-box for testing):
|
||||
- **DOMAIN_NAME**: `localhost`
|
||||
- **ALLOWED_HOSTS**: `localhost,127.0.0.1`
|
||||
- **CSRF_TRUSTED_ORIGINS**: `http://localhost:8000`
|
||||
- **SECRET_KEY**: Development key (change for production!)
|
||||
- **DEBUG**: `True` (change to `False` for production)
|
||||
|
||||
### **What Happens Automatically:**
|
||||
✅ Database migrations run
|
||||
✅ User groups created (admin, staff, user)
|
||||
✅ Site configured with your domain
|
||||
✅ Social apps set up
|
||||
✅ Static files collected
|
||||
✅ Gunicorn starts serving your app
|
||||
|
||||
## 🔧 **For Different Deployment Platforms**
|
||||
|
||||
### **With Docker Database (Default)**
|
||||
- **Compose file**: `docker-compose.dokploy-simple.yml`
|
||||
- **Database**: Included PostgreSQL container
|
||||
- **Storage**: Docker volumes for persistence
|
||||
|
||||
### **With External Database**
|
||||
- **Compose file**: `docker-compose.dokploy-external-db.yml`
|
||||
- **Database**: Set `DATABASE_URL` environment variable
|
||||
- **Examples**: Neon, Supabase, Railway, etc.
|
||||
|
||||
## 🧪 **Test Locally First** (Optional)
|
||||
|
||||
```bash
|
||||
# 1. Set environment variables
|
||||
export DOMAIN_NAME=localhost
|
||||
export ALLOWED_HOSTS=localhost,127.0.0.1
|
||||
export SECRET_KEY=test-secret-key
|
||||
|
||||
# 2. Test with Docker
|
||||
docker-compose -f docker-compose.dokploy-simple.yml up
|
||||
|
||||
# 3. Visit http://localhost:8000
|
||||
```
|
||||
|
||||
## 🎉 **Environment Variable Examples**
|
||||
|
||||
### **For `myapp.com`:**
|
||||
```env
|
||||
DOMAIN_NAME=myapp.com
|
||||
ALLOWED_HOSTS=myapp.com,www.myapp.com
|
||||
CSRF_TRUSTED_ORIGINS=https://myapp.com,https://www.myapp.com
|
||||
SECRET_KEY=super-long-secret-key-generate-new-one
|
||||
DEBUG=False
|
||||
SECURE_SSL_REDIRECT=True
|
||||
```
|
||||
|
||||
### **For `app.example.org`:**
|
||||
```env
|
||||
DOMAIN_NAME=app.example.org
|
||||
ALLOWED_HOSTS=app.example.org
|
||||
CSRF_TRUSTED_ORIGINS=https://app.example.org
|
||||
SECRET_KEY=another-unique-secret-key
|
||||
DEBUG=False
|
||||
SECURE_SSL_REDIRECT=True
|
||||
```
|
||||
|
||||
## ⚡ **Why This Works**
|
||||
|
||||
- ✅ **No hardcoded domains** - everything uses environment variables
|
||||
- ✅ **Sensible defaults** - works locally without any setup
|
||||
- ✅ **Production ready** - just change a few env vars
|
||||
- ✅ **Platform agnostic** - works on Dokploy, Railway, Heroku, etc.
|
||||
|
||||
---
|
||||
|
||||
**Clone ➜ Set 4 env vars ➜ Deploy ➜ Done!** 🚀
|
||||
@ -5,11 +5,12 @@ services:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DEBUG=False
|
||||
- ALLOWED_HOSTS=dt.netcoptech.com,localhost,127.0.0.1
|
||||
- ALLOWED_HOSTS=${ALLOWED_HOSTS:-localhost,127.0.0.1}
|
||||
- DATABASE_URL=${DATABASE_URL}
|
||||
- SECRET_KEY=${SECRET_KEY}
|
||||
- DJANGO_SETTINGS_MODULE=django_project.settings.production
|
||||
- CSRF_TRUSTED_ORIGINS=https://dt.netcoptech.com
|
||||
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS:-http://localhost:8000}
|
||||
- DOMAIN_NAME=${DOMAIN_NAME:-localhost}
|
||||
- SECURE_SSL_REDIRECT=True
|
||||
- GOOGLE_OAUTH2_CLIENT_ID=${GOOGLE_OAUTH2_CLIENT_ID:-demo-google-client-id}
|
||||
- GOOGLE_OAUTH2_CLIENT_SECRET=${GOOGLE_OAUTH2_CLIENT_SECRET:-demo-google-client-secret}
|
||||
|
||||
@ -5,11 +5,12 @@ services:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DEBUG=True
|
||||
- ALLOWED_HOSTS=dt.netcoptech.com,localhost,127.0.0.1
|
||||
- ALLOWED_HOSTS=${ALLOWED_HOSTS:-localhost,127.0.0.1}
|
||||
- DATABASE_URL=${DATABASE_URL:-postgresql://django_user:django_password@db:5432/django_db}
|
||||
- SECRET_KEY=${SECRET_KEY:-django-insecure-change-this-key}
|
||||
- DJANGO_SETTINGS_MODULE=django_project.settings.production
|
||||
- CSRF_TRUSTED_ORIGINS=https://dt.netcoptech.com,http://dt.netcoptech.com
|
||||
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS:-http://localhost:8000}
|
||||
- DOMAIN_NAME=${DOMAIN_NAME:-localhost}
|
||||
- SECURE_SSL_REDIRECT=False
|
||||
- GOOGLE_OAUTH2_CLIENT_ID=${GOOGLE_OAUTH2_CLIENT_ID:-demo-google-client-id}
|
||||
- GOOGLE_OAUTH2_CLIENT_SECRET=${GOOGLE_OAUTH2_CLIENT_SECRET:-demo-google-client-secret}
|
||||
|
||||
@ -20,7 +20,8 @@ echo "🔗 Setting up social applications..."
|
||||
python manage.py setup_social_apps
|
||||
|
||||
echo "🏠 Configuring site domain..."
|
||||
python manage.py configure_site --domain=dt.netcoptech.com --name="Django Template"
|
||||
DOMAIN_NAME=${DOMAIN_NAME:-localhost}
|
||||
python manage.py configure_site --domain="$DOMAIN_NAME" --name="Django Template"
|
||||
|
||||
echo "📁 Collecting static files..."
|
||||
python manage.py collectstatic --noinput
|
||||
|
||||
Loading…
Reference in New Issue
Block a user