add readme
This commit is contained in:
117
README.md
Normal file
117
README.md
Normal file
@@ -0,0 +1,117 @@
|
||||
================================================================================
|
||||
HestiaCP + Django + Gunicorn Setup - Complete Checklist
|
||||
Prepared by: MohammadAmin Baranzehi
|
||||
Website / Contact: hacktube.ir
|
||||
Last updated: February 09, 2026
|
||||
================================================================================
|
||||
|
||||
Prerequisites (Must be done before starting)
|
||||
────────────────────────────────────────────
|
||||
□ Domain already created in HestiaCP (e.g. example.com)
|
||||
□ Django project copied to: /home/amin/web/example.com/public_html/
|
||||
□ Virtualenv created and packages installed:
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt # gunicorn must be included
|
||||
□ Run collectstatic and migrate:
|
||||
python manage.py collectstatic --noinput
|
||||
python manage.py migrate
|
||||
□ In settings.py:
|
||||
- DEBUG = False (or True for initial debugging)
|
||||
- ALLOWED_HOSTS includes domain (e.g. ['pexample.com', '*'])
|
||||
- STATIC_URL = '/static/'
|
||||
- STATIC_ROOT = BASE_DIR / 'staticfiles'
|
||||
|
||||
Stage 1 – Place Custom NGINX Templates
|
||||
────────────────────────────────────────────
|
||||
□ Copy template files directly (no subfolder!) to:
|
||||
/usr/local/hestia/data/templates/web/nginx/django.tpl
|
||||
/usr/local/hestia/data/templates/web/nginx/django.stpl
|
||||
|
||||
□ Set correct permissions:
|
||||
sudo chown root:root /usr/local/hestia/data/templates/web/nginx/django.*
|
||||
sudo chmod 644 /usr/local/hestia/data/templates/web/nginx/django.*
|
||||
|
||||
Stage 2 – Apply Template in HestiaCP Panel
|
||||
────────────────────────────────────────────
|
||||
□ Log in to HestiaCP panel
|
||||
□ Go to: Web → Edit domain (example.com)
|
||||
□ In NGINX Template or Proxy Template section → select django
|
||||
□ Click Save
|
||||
□ (Strongly recommended) Force rebuild domain:
|
||||
sudo v-rebuild-web-domain amin example.com yes
|
||||
sudo systemctl restart nginx
|
||||
|
||||
Stage 3 – Create and Start Gunicorn Service
|
||||
────────────────────────────────────────────
|
||||
□ Run the helper script:
|
||||
add-gunicorn-service example.com user yourprojectname
|
||||
(or sudo /path/to/add-gunicorn-service.sh ... if not in PATH)
|
||||
|
||||
□ Restart service to apply:
|
||||
sudo systemctl restart gunicorn-example.com
|
||||
|
||||
Stage 4 – Verify Service, Socket and Permissions
|
||||
────────────────────────────────────────────
|
||||
□ Check service status (must be active (running)):
|
||||
sudo systemctl status gunicorn.example.com
|
||||
|
||||
□ Check socket existence and permissions:
|
||||
ls -l /home/amin/web/example.com/public_html/gunicorn.sock
|
||||
# Expected output: srw-rw---- 1 amin www-data ...
|
||||
|
||||
□ Fix socket permissions if wrong:
|
||||
sudo chown user:www-data gunicorn.sock
|
||||
sudo chmod 660 gunicorn.sock
|
||||
sudo systemctl restart gunicorn.example.com
|
||||
|
||||
□ Fix db.sqlite3 permissions (prevents readonly database error):
|
||||
ls -l db.sqlite3
|
||||
# Should be: -rw-rw-r-- 1 user www-data ...
|
||||
sudo chown user:www-data db.sqlite3
|
||||
sudo chmod 664 db.sqlite3
|
||||
|
||||
Stage 5 – Final Testing & Monitoring
|
||||
────────────────────────────────────────────
|
||||
□ Open site in browser: https://example.com
|
||||
□ Try login and basic functionality
|
||||
|
||||
□ Monitor Gunicorn logs in real-time:
|
||||
journalctl -u gunicorn.example.com -f
|
||||
|
||||
□ Monitor NGINX logs if issue occurs:
|
||||
tail -f /var/log/nginx/error.log
|
||||
tail -f /home/amin/web/example.com/logs/nginx.error.log # if exists
|
||||
|
||||
□ Optional direct socket test:
|
||||
curl --unix-socket gunicorn.sock http://localhost/
|
||||
|
||||
Quick Fixes for Common Issues
|
||||
────────────────────────────────────────────
|
||||
□ 502 Bad Gateway
|
||||
→ Check NGINX log: tail -f /var/log/nginx/error.log
|
||||
→ Fix socket permissions (chmod 660 + chown)
|
||||
→ Rebuild domain and restart NGINX
|
||||
|
||||
□ Readonly database (db.sqlite3)
|
||||
→ chown user:www-data db.sqlite3 && chmod 664 db.sqlite3
|
||||
|
||||
□ Default Hestia page still showing
|
||||
→ mv index.html index.html.bak
|
||||
→ sudo systemctl restart nginx
|
||||
|
||||
□ Template not showing in panel
|
||||
→ Force rebuild: sudo v-rebuild-web-domain user yourdomain.com yes
|
||||
→ Logout/login panel or clear browser cache
|
||||
|
||||
Important Post-Setup Notes
|
||||
────────────────────────────────────────────
|
||||
□ Set DEBUG = False in production
|
||||
□ Rename or remove index.html if default page appears
|
||||
□ After code update: git pull → collectstatic → migrate → restart gunicorn
|
||||
□ For new domains: repeat stages 2–5 only (templates are already there)
|
||||
|
||||
Enjoy your stable Django setup on HestiaCP!
|
||||
Prepared by: MohammadAmin Baranzehi
|
||||
Website / Contact: hacktube.ir
|
||||
================================================================================
|
||||
Reference in New Issue
Block a user