🎁
Bonus Top-up 50%!Promo Terbatas
Upvote
djangopythonpostgresqltutorialdeployment

Cara Deploy Django + PostgreSQL ke Helipod dalam 5 Menit

Tim Helipod

5 menit baca

Tutorial lengkap deploy aplikasi Django dengan PostgreSQL ke Helipod — dari deteksi otomatis, collectstatic, migrasi database, sampai custom domain. Tanpa tulis Dockerfile.

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 (atau pyproject.toml jika 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_HOST harus diisi dengan nama service PostgreSQL di canvas Helipod, bukan localhost. 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:

  1. Clone repository
  2. Detect Python/Django
  3. Install dependencies (pip install -r requirements.txt)
  4. Jalankan python manage.py collectstatic --noinput
  5. Build Docker image
  6. Deploy dengan gunicorn sebagai 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.

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →