hostinger-django-demo/QUICK_START.md
thecyberlearn f721b0a87e Add comprehensive production deployment system
- Complete deployment documentation (PRODUCTION_DEPLOYMENT.md)
- Automated deployment script (production-deploy.sh)
- Systemd service templates (socket + service)
- Production settings template with security best practices
- Nginx configuration template with performance optimizations
- Comprehensive troubleshooting guide
- Quick start guide for fast deployment

Fixes all issues encountered in initial deployment:
- Uses non-root django user for security
- Proper /var/www directory structure
- Unix socket instead of TCP for better performance
- Socket activation with systemd
- Correct virtual environment handling
- Production security headers and settings

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-29 23:03:30 +05:30

5.3 KiB

Django VPS Quick Start Guide

🚀 One-command deployment for Django on VPS!

Super Quick Start (5 minutes)

  1. SSH into your VPS:

    ssh root@YOUR_VPS_IP
    
  2. Run the automated deployment:

    curl -sSL https://raw.githubusercontent.com/thecyberlearn/hostinger-django-demo/main/deploy/production-deploy.sh | sudo bash
    
  3. Follow the prompts:

    • Enter your Git repository URL
    • Enter your domain name (optional)
    • Enter your VPS IP address
  4. Done! Your Django app will be live at http://YOUR_VPS_IP

📋 Manual Quick Start (10 minutes)

If you prefer step-by-step control:

Step 1: System Setup (2 minutes)

# Update system
apt update && apt upgrade -y

# Install packages
apt install -y python3 python3-pip python3-venv python3-dev \
               nginx postgresql postgresql-contrib libpq-dev \
               build-essential curl git ufw

# Create user
adduser django --disabled-password --gecos ''
usermod -aG sudo django

Step 2: Clone Project (1 minute)

# Setup directory
mkdir -p /var/www && chown django:www-data /var/www

# Clone your project
sudo -u django bash -c "cd /var/www && git clone YOUR_REPO_URL django-app"

Step 3: Python Setup (2 minutes)

sudo -u django bash -c "
cd /var/www/django-app
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
"

Step 4: Django Configuration (2 minutes)

# Copy environment file
sudo -u django bash -c "cd /var/www/django-app && cp .env.example .env"

# Edit .env file with your settings
nano /var/www/django-app/.env

# Run Django setup
sudo -u django bash -c "
cd /var/www/django-app
source venv/bin/activate
python manage.py migrate
python manage.py collectstatic --noinput
"

Step 5: Services Setup (3 minutes)

# Create Gunicorn socket
cat > /etc/systemd/system/gunicorn.socket << 'EOF'
[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target
EOF

# Create Gunicorn service (replace demo_project with your project name)
cat > /etc/systemd/system/gunicorn.service << 'EOF'
[Unit]
Description=Gunicorn daemon for Django app
Requires=gunicorn.socket
After=network.target

[Service]
User=django
Group=www-data
WorkingDirectory=/var/www/django-app
Environment=DJANGO_SETTINGS_MODULE=demo_project.settings
EnvironmentFile=/var/www/django-app/.env
ExecStart=/var/www/django-app/venv/bin/gunicorn \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          demo_project.wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# Start services
systemctl daemon-reload
systemctl start gunicorn.socket
systemctl enable gunicorn.socket

# Configure Nginx (replace YOUR_VPS_IP)
cat > /etc/nginx/sites-available/django-app << 'EOF'
server {
    listen 80;
    server_name YOUR_VPS_IP;

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }

    location /static/ {
        alias /var/www/django-app/staticfiles/;
    }
}
EOF

# Enable Nginx
ln -sf /etc/nginx/sites-available/django-app /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl restart nginx

# Configure firewall
ufw allow ssh && ufw allow 'Nginx Full' && ufw --force enable

Verification

Your Django app should now be live! Test with:

curl -I http://YOUR_VPS_IP

You should see HTTP/1.1 200 OK

🔧 Post-Deployment

  1. Create superuser:

    sudo -u django bash -c "cd /var/www/django-app && source venv/bin/activate && python manage.py createsuperuser"
    
  2. Access admin: http://YOUR_VPS_IP/admin

  3. Add SSL certificate (optional):

    apt install certbot python3-certbot-nginx
    certbot --nginx -d yourdomain.com
    

🚨 If Something Goes Wrong

  1. Check service status:

    systemctl status gunicorn.service nginx
    
  2. View logs:

    journalctl -u gunicorn.service -f
    tail -f /var/log/nginx/error.log
    
  3. Common fixes:

    # Restart services
    systemctl restart gunicorn.service nginx
    
    # Fix permissions
    chown -R django:www-data /var/www/django-app
    
    # Recreate virtual environment
    sudo -u django bash -c "cd /var/www/django-app && rm -rf venv && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt"
    

📚 What's Different from Before

Our old problematic approach:

  • Used root user
  • Wrong directory (/root/django-demo)
  • TCP socket instead of Unix socket
  • Hardcoded paths in virtual environment

Our new bulletproof approach:

  • Non-root django user
  • Standard /var/www/django-app directory
  • Unix socket for better performance
  • Proper file permissions and security
  • Follows Django deployment best practices

🎯 Why This Works Better

  1. Security: Non-root user with minimal privileges
  2. Performance: Unix sockets are faster than TCP
  3. Reliability: Socket activation prevents startup issues
  4. Maintainability: Standard directory structure
  5. Scalability: Proper systemd integration

This setup is production-ready and follows Django best practices!


Need help? Check TROUBLESHOOTING.md for detailed solutions to common issues.