{"id":31130263,"url":"https://github.com/prave-com/deploy-django","last_synced_at":"2025-09-18T02:12:19.769Z","repository":{"id":313158343,"uuid":"1050234982","full_name":"prave-com/deploy-django","owner":"prave-com","description":"Django project example for deploying django","archived":false,"fork":false,"pushed_at":"2025-09-12T04:42:45.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-12T06:24:42.149Z","etag":null,"topics":["deploy","django","gunicorn","nginx","postgresql","tutorial","vps"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prave-com.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-04T06:27:12.000Z","updated_at":"2025-09-12T04:42:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"94775db2-a54d-45e5-b05f-316008cc16f2","html_url":"https://github.com/prave-com/deploy-django","commit_stats":null,"previous_names":["prave-com/deploy-django"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/prave-com/deploy-django","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prave-com%2Fdeploy-django","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prave-com%2Fdeploy-django/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prave-com%2Fdeploy-django/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prave-com%2Fdeploy-django/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prave-com","download_url":"https://codeload.github.com/prave-com/deploy-django/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prave-com%2Fdeploy-django/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275696239,"owners_count":25511354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deploy","django","gunicorn","nginx","postgresql","tutorial","vps"],"created_at":"2025-09-18T02:12:18.533Z","updated_at":"2025-09-18T02:12:19.760Z","avatar_url":"https://github.com/prave-com.png","language":"Python","readme":"# Deploy Django on VPS (Hostinger)\n\nThis guide provides step-by-step instructions for deploying a **Django project** on a VPS using **Gunicorn**, **Nginx**, and **PostgreSQL**.  \nIt also includes optional setup for **auto deployment with GitHub Actions**.\n\n---\n\n## Prerequisites\n\n- A VPS (Hostinger in this example)\n- A Django project on GitHub\n- Basic knowledge of Linux commands\n\n---\n\n## 1. Generate SSH Key on Local Machine\n\n```bash\nssh-keygen -t ed25519 -C \"your_email@example.com\"\n```\n\n- Leave the passphrase empty.\n- Public key: `~/.ssh/id_ed25519.pub` → add to your VPS.\n- Private key: `~/.ssh/id_ed25519` → store in GitHub Actions repository secret `VPS_SSH_KEY`.\n\n---\n\n## 2. Connect to VPS\n\n```bash\nssh root@123.123.123.123\n```\n\n\u003e ⚠️ For security, it’s recommended to create a non-root user for deployment.\n\n---\n\n## 3. Install Astral UV\n\n```bash\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n```\n\nAfter installation, run `exit` and reconnect to your VPS.\n\n---\n\n## 4. Setup Project Directory\n\n```bash\nsudo mkdir -p /var/www\nsudo chown -R $USER:$USER /var/www\ncd /var/www\n```\n\n---\n\n## 5. Clone Project \u0026 Install Dependencies\n\n```bash\ngit clone https://github.com/prave-com/deploy-django\ncd deploy-django\nuv sync\nsource .venv/bin/activate\n```\n\n---\n\n## 6. Configure Environment\n\n```bash\ncp .env.example .env\nsudo nano .env\n```\n\nSet the following:\n\n- `DEBUG=False`\n- `SECRET_KEY` → generate with:\n  ```bash\n  python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'\n  ```\n- `ALLOWED_HOSTS` → your domain or VPS IP\n\n---\n\n## 7. Create Systemd Service\n\nCreate service file:\n\n```bash\nsudo nano /etc/systemd/system/deploy-django.service\n```\n\nAdd:\n\n```ini\n[Unit]\nDescription=Gunicorn instance for Deploy Django\nAfter=network.target\n\n[Service]\nUser=root\nGroup=www-data\nWorkingDirectory=/var/www/deploy-django\nEnvironment=\"PATH=/var/www/deploy-django/.venv/bin\"\nExecStart=/var/www/deploy-django/.venv/bin/gunicorn --workers 3 --bind unix:/var/www/deploy-django/deploy-django.sock config.wsgi:application\n\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n```\n\n\u003e ⚠️ In this configuration, there is `config.wsgi:application` in `ExecStart`. Change the `config` with your directory name, where the `wsgi.py` located.\n\n---\n\n## 8. Configure Nginx\n\nCreate config file, change `example.com` with your domain or VPS IP address:\n\n```bash\nsudo nano /etc/nginx/sites-available/example.com\n```\n\nExample configuration:\n\n```nginx\nserver {\n    listen 80;\n    server_name example.com;\n\n    location /static/ {\n        alias /var/www/deploy-django/staticfiles/;\n    }\n\n    location /media/ {\n        alias /var/www/deploy-django/media/;\n    }\n\n    location / {\n        proxy_pass http://unix:/var/www/deploy-django/deploy-django.sock;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nEnable the site:\n\n```bash\nsudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/\n```\n\n\u003e To enable HTTPS with Let’s Encrypt, if you don't have domain, skip this:\n\n```bash\nsudo certbot --nginx -d example.com\n```\n\nReload Nginx:\n\n```bash\nsudo systemctl reload nginx\n```\n\n---\n\n## 9. Configure Static \u0026 Media Files\n\nIn `settings.py`:\n\n```python\nSTATIC_URL = \"static/\"\nSTATIC_ROOT = BASE_DIR / \"staticfiles\"\n\nMEDIA_URL = \"/media/\"\nMEDIA_ROOT = BASE_DIR / \"media\"\n```\n\n---\n\n## 10. Install \u0026 Configure PostgreSQL\n\n### Install PostgreSQL 16\n\n```bash\nsudo apt install wget ca-certificates -y\nsudo sh -c 'echo \"deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main\" \u003e /etc/apt/sources.list.d/pgdg.list'\nwget --quiet -O /etc/apt/trusted.gpg.d/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc\nsudo apt update\nsudo apt install postgresql-16 postgresql-client-16 -y\n```\n\n### Create Database \u0026 User\n\n```bash\nsudo -u postgres psql\n```\n\n```sql\nCREATE DATABASE deploy_django;\nCREATE USER deploy_django_user WITH PASSWORD 'your_password';\nALTER ROLE deploy_django_user SET client_encoding TO 'utf8';\nALTER ROLE deploy_django_user SET default_transaction_isolation TO 'read committed';\nALTER ROLE deploy_django_user SET timezone TO 'UTC';\nGRANT ALL PRIVILEGES ON DATABASE deploy_django TO deploy_django_user;\n```\n\n```sql\n\\c deploy_django\n```\n\n```sql\nGRANT ALL ON SCHEMA public TO deploy_django_user;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO deploy_django_user;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO deploy_django_user;\n```\n\n### Update `.env`\n\n```\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=deploy_django\nDB_USER=deploy_django_user\nDB_PASSWORD=your_password\n```\n\n---\n\n## 11. Run Migrations \u0026 Collect Static Files\n\n```bash\npython manage.py migrate\npython manage.py collectstatic\npython manage.py createsuperuser  # optional\n```\n\n---\n\n## 12. Start Django Service\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl enable deploy-django\nsudo systemctl start deploy-django\n```\n\n---\n\n## 13. Auto Deploy with GitHub Actions (Optional)\n\n1. Add GitHub repository secrets:\n\n   - `VPS_HOST` → VPS IP\n   - `VPS_USER` → SSH user\n   - `VPS_SSH_KEY` → private key in your local computer (`~/.ssh/id_ed25519`)\n\n   Add to GitHub repository secrets https://github.com/prave-com/deploy-django/settings/secrets/actions.\n\n2. Generate deploy key:\n\n   Paste public key to https://github.com/prave-com/deploy-django/settings/keys.\n\n```bash\nssh-keygen -t rsa -b 4096 -C \"deploy@deploy-django\" -f ~/.ssh/github_deploy_django_rsa\ncat ~/.ssh/github_deploy_django_rsa.pub\nchmod 600 ~/.ssh/github_deploy_django_rsa\n```\n\n3. Configure SSH:\n\n```bash\nsudo nano ~/.ssh/config\n```\n\n```\nHost deploy-django\n  HostName github.com\n  User git\n  IdentityFile ~/.ssh/github_deploy_django_rsa\n  IdentitiesOnly yes\n```\n\n4. Update remote repository:\n\n```bash\ngit remote set-url origin git@deploy-django:prave-com/deploy-django.git\n```\n\n5. Add GitHub to known hosts:\n\n```bash\nssh-keyscan github.com \u003e\u003e ~/.ssh/known_hosts\n```\n\n6. Test connection:\n\n```bash\nssh -T git@deploy-django\n```\n\n---\n\n✅ Your Django project should now be running in production on your VPS.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprave-com%2Fdeploy-django","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprave-com%2Fdeploy-django","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprave-com%2Fdeploy-django/lists"}