Django adalah framework Python paling populer untuk membangun web application dan REST API. Tapi deploy Django ke production punya beberapa tantangan: setup gunicorn, konfigurasi collectstatic, manage requirements.txt, sampai koneksi database yang aman.
Helipod menyelesaikan semua ini secara otomatis.
Ketika kamu connect repository Django ke Helipod, Helipack mendeteksi framework, install dependencies dari requirements.txt, jalankan collectstatic, dan deploy dengan gunicorn sebagai server — semua tanpa konfigurasi manual.
Yang Kamu Butuhkan
- Akun Helipod (daftar gratis di helipod.io)
- Repository Django di GitHub atau GitLab
- File
requirements.txt(ataupyproject.tomljika pakai Poetry/uv) - Django 3.2+ (semua versi modern didukung)
Persiapan Project Django
Sebelum deploy, pastikan beberapa hal sudah dikonfigurasi di project kamu:
1. Tambahkan gunicorn ke requirements
# requirements.txt
Django>=4.2
gunicorn>=21.0
psycopg2-binary>=2.9 # untuk PostgreSQL
whitenoise>=6.0 # untuk serve static files
2. Konfigurasi WhiteNoise untuk Static Files
Di settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # tambahkan ini
# middleware lainnya...
]
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
3. Konfigurasi Allowed Hosts
import os
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', 'localhost').split(',')
# Atau lebih simpel untuk Helipod:
ALLOWED_HOSTS = ['*'] # ganti dengan domain spesifik di production
4. Konfigurasi Database dari Environment Variable
import os
import dj_database_url # pip install dj-database-url
DATABASES = {
'default': dj_database_url.config(
default=os.environ.get('DATABASE_URL', 'sqlite:///db.sqlite3')
)
}
Atau manual:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DB_NAME', 'mydb'),
'USER': os.environ.get('DB_USER', 'postgres'),
'PASSWORD': os.environ.get('DB_PASSWORD', ''),
'HOST': os.environ.get('DB_HOST', 'localhost'),
'PORT': os.environ.get('DB_PORT', '5432'),
}
}
Langkah 1: Tambahkan PostgreSQL Service
Login ke dashboard Helipod, buat New Project. Sebelum connect repo Django, tambahkan dulu service PostgreSQL dengan klik + di canvas dan pilih PostgreSQL.
Catat nama service PostgreSQL yang kamu buat — ini akan dipakai sebagai DB_HOST.
Langkah 2: Connect Repository Django
Klik + lagi dan pilih repository Django dari GitHub atau GitLab. Helipack otomatis mendeteksi Python/Django dan menampilkan konfirmasi.
Langkah 3: Set Environment Variables
Buka tab Variables pada service Django dan masukkan:
SECRET_KEY=django-insecure-ganti-dengan-secret-key-yang-kuat
DEBUG=False
ALLOWED_HOSTS=nama-project.helipod.app,yourdomain.com
DATABASE_URL=postgresql://postgres:password@nama-service-postgres:5432/mydb
# Atau gunakan individual vars:
DB_HOST=nama-service-postgres
DB_PORT=5432
DB_NAME=mydb
DB_USER=postgres
DB_PASSWORD=secret
DJANGO_SETTINGS_MODULE=myproject.settings
Penting:
DB_HOSTharus diisi dengan nama service PostgreSQL di canvas Helipod, bukanlocalhost. Semua service dalam satu project terhubung via internal network.
Secret Key: Generate secret key baru dengan
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())".
Langkah 4: Deploy
Klik Deploy. Helipack akan:
- Clone repository
- Detect Python/Django
- Install dependencies (
pip install -r requirements.txt) - Jalankan
python manage.py collectstatic --noinput - Build Docker image
- Deploy dengan
gunicornsebagai server
Pantau prosesnya di Deployments → Build logs.
Dockerfile yang Dihasilkan Helipack
Ini Dockerfile optimal yang Helipack generate untuk Django:
# syntax=docker/dockerfile:1
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
RUN apt-get update && apt-get install -y --no-install-recommends \
curl build-essential libffi-dev libssl-dev \
libpq-dev libpq5 \
&& rm -rf /var/lib/apt/lists/*
FROM base AS deps
WORKDIR /app
COPY requirements.txt ./
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=secret,id=build_env,dst=/app/.env \
pip install --no-cache-dir -r requirements.txt
FROM base AS runner
WORKDIR /app
COPY --from=deps /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=deps /usr/local/bin /usr/local/bin
COPY . .
RUN --mount=type=secret,id=build_env,dst=/app/.env \
python manage.py collectstatic --noinput || true
RUN useradd --no-create-home --shell /bin/false appuser && \
chown -R appuser:appuser /app
USER appuser
EXPOSE 8000
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "2"]
Langkah 5: Jalankan Migrasi Database
Setelah status LIVE, buka tab Terminal dan jalankan:
python manage.py migrate
python manage.py createsuperuser # opsional, untuk Django Admin
Otomasi Migrasi dengan helipack.json
Agar migrasi berjalan otomatis setiap deploy, buat helipack.json di root repository:
{
"run": {
"port": 8000,
"before": "python manage.py migrate --run-syncdb"
},
"health": {
"path": "/",
"duration": 20
}
}
Dengan run.before, command ini akan dieksekusi sebelum server Django start, setiap kali ada deployment baru.
Menggunakan Poetry atau uv
Helipack juga mendukung package manager modern:
Poetry
# pyproject.toml
[tool.poetry]
name = "myproject"
version = "0.1.0"
[tool.poetry.dependencies]
python = "^3.12"
Django = "^4.2"
gunicorn = "^21.0"
psycopg2-binary = "^2.9"
Helipack otomatis mendeteksi pyproject.toml + poetry.lock dan menggunakan poetry install --no-interaction --no-root.
uv (Rekomendasi untuk Speed)
# pyproject.toml dengan uv
[project]
name = "myproject"
requires-python = ">=3.12"
dependencies = [
"django>=4.2",
"gunicorn>=21.0",
"psycopg2-binary>=2.9",
]
uv install dependencies 10-100x lebih cepat dibanding pip.
Konfigurasi Gunicorn Lanjutan
Default Helipack menggunakan 2 workers. Untuk production dengan traffic lebih tinggi, override di helipack.json:
{
"run": {
"port": 8000,
"command": "gunicorn myproject.wsgi:application --bind 0.0.0.0:8000 --workers 4 --threads 2 --worker-class gthread --timeout 120"
}
}
Atau gunakan uvicorn untuk Django async (Django 4.1+):
{
"run": {
"command": "uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000 --workers 4"
}
}
Verifikasi dan Monitoring
Buka URL aplikasi di Settings → Networking & Domains. Pastikan:
- Homepage load tanpa error
- Django Admin bisa diakses di
/admin/ - Static files ter-serve dengan benar (CSS/JS tampil normal)
Pantau resource usage di tab Metrics — CPU, Memory, Uptime, dan Restarts tersedia real-time.
Troubleshooting Umum
"DisallowedHost" error
Tambahkan domain Helipod ke ALLOWED_HOSTS di environment variables: ALLOWED_HOSTS=nama-project.helipod.app.
"collectstatic" gagal saat build
Pastikan DJANGO_SETTINGS_MODULE di-set dengan benar dan STATIC_ROOT sudah dikonfigurasi di settings.py.
Database connection refused
Pastikan DB_HOST menggunakan nama service PostgreSQL di canvas, bukan localhost atau IP address.
"No module named 'psycopg2'"
Tambahkan psycopg2-binary ke requirements.txt. Jika masih error, coba psycopg[binary] untuk psycopg3.
Static files 404 setelah deploy
Pastikan WhiteNoise sudah ditambahkan ke MIDDLEWARE dan collectstatic sudah berjalan. Cek di Build logs apakah ada error saat collectstatic.
Kesimpulan
Deploy Django ke Helipod tidak membutuhkan pengetahuan DevOps. Helipack mengurus semua setup — dari install dependencies, collectstatic, sampai konfigurasi gunicorn — secara otomatis.
Ingin tahu lebih tentang cara Helipack bekerja untuk Python? Baca Cara Helipack Generate Dockerfile Otomatis.
Butuh setup background task dengan Celery? Baca Panduan Internal Network Helipod untuk cara connect Celery worker ke Redis dan Django dalam satu project.
Punya pertanyaan? Hubungi kami di support@helipod.id atau bergabung ke komunitas di hangar.helipod.io.