# dokumentasi Django 2.2.9.dev20191202104323

# Bagaimana menggunakan Django dengan Apache dan `mod_wsgi`

Menyebarkan Django dengan Apache dan ``mod_wsgi`_ adalah jalan percobaan dan pengujian untuk mendapatkan Django dalam produksi.

mod_wsgi adalah sebuah modul Apache yang dapat merumahkan aplikasi WSGI_Python apapun, termasuk Django. Django akan bekerja dengan versi apapun dari Apache yang mendukung mod_wsgi.

official mod_wsgi documentation adalah sumber anda untuk semua rincian tentang bagaimana menggunakan mod_wsgi. Anda akan mungkin ingin memulai dengan installation and configuration documentation.

## Konfigurasi dasar

Sekali anda mendapatkan mod_wsgi terpasang dan diaktivasi, sunting berkas httpd.conf peladen Apache dan tambah berikut. Jika anda menggunakan versi Apache lebih lama dari 2.4, ganti `Require all granted` dengan `Allow from all` dan juga tambah baris `Order deny,allow` diatasnya.

    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
    WSGIPythonHome /path/to/venv
    WSGIPythonPath /path/to/mysite.com

    <Directory /path/to/mysite.com/mysite>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>

Bit pertama dalam baris `WSGIScriptAlias` adalah jalur URL dasar anda ingin melayani aplikasi anda pada (`/` mengindikasikan url akar), dan kedua adalah tempat dari "berkas WSGI" -- lihat dibawa -- pada sistem anda, biasanya didalam paket proyek anda (`mysite` di contoh ini). Ini memberitahu Apache untuk melayani setiap permintaan dibawah URL yang diberikan menggunakan aplikasi WSGI yang ditentukan dalam berkas itu.

Jika anda memasang ketergantungan Python proyek didalam virtualenv, tambah jalur pada virtualenv menggunakan `WSGIPythonHome`. Lihat mod_wsgi virtualenv guide untuk rincian lebih.

Baris `WSGIPythonPath` memastikan bahwa paket proyek anda tersedia untuk diimpor pada jalur Python; dengan kata lain, bahwa `import mysite` bekerja.

Potongan `<Directory>` hanya memastikan bahwa Apache dapat mengakses berkas `wsgi.py` anda.

Selanjutnya kami akan butuh memastikan berkas ini `wsgi.py` dengan obyek aplikasi WSGI ada. Sehingga Django versi 1.4, `startproject` akan membuat satu untuk anda; jika tidak, anda akan butuh membuatnya. Lihat WSGI overview documentation untuk isi awal anda harus tempatkan dalam berkas ini, dan apa lagi yang anda dapat tambahkan.

Peringatan

Jika situs Django banyak berjalan dalam pengolahan mod_wsgi tunggal, semua dari mereka akan menggunakan pengaturan dari manasaja satu terjadi untuk dijalankan pertama kali. Ini dapat diselesaikan dengan merubah:

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

di `wsgi.py`, untuk:

    os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"

atau dengan using mod_wsgi daemon mode dan memastikan bahwa setiap situs berjalan dalam pengolahan daemon nya sendiri.

Memperbaiki `UnicodeEncodeError` untuk mengunggah berkas

Jika anda mendapatkan sebuah UnicodeEncodeError` ketika mengunggah berkas-berkas dengan nama berkas yang mengandung karakter bukan ASCII, pastikan Apache dikonfigurasi untuk menerima nama-nama berkas bukan ASCII:

    export LANG='en_US.UTF-8'
    export LC_ALL='en_US.UTF-8'

Lokasi biasa tempat meletakkan konfigurasi ini di `/etc/apache2/envvars`.

Lihat bagian Berkas dari panduan acuan Unicode untuk rincian.

## Menggunakan `mod_wsgi` mode daemon

"Daemon mode" adalah suasana yang dianjurkan untuk menjalankan mod_wsgi (pada serambi bukan-Windows). Untuk membuat kelompok pengolahan daemon yang dibutuhkan dan menugaskan instance Django untuk menjalankan di dalamnya, anda akan butuh menambahkan arahan `WSGIDaemonProcess` dan `WSGIProcessGroup` sesuai. Perubahan lebih lanjut pada konfigurasi diatas jika anda menggunakan suasana daemon adalah anda tidak dapat menggunakan `WSGIPythonPath`; daripada anda harus menggunakan pilihan `python-path` ke `WSGIDaemonProcess`, sebagai contoh:

    WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
    WSGIProcessGroup example.com

Jika anda ingin melayani proyek anda dalam subdirektori (`https://example.com/mysite` dalam contoh ini), anda dapat menambahkan `WSGIScriptAlias` pada konfigurasi diatas:

    WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com

Lihat dokumentasi mod_wsgi resmi untuk details on setting up daemon mode.

## Melayani berkas

Django tidak melayani berkas-berkas dia sendiri; dia meninggalkan pekerjaan tersebut ke peladen Jaringan manapun anda pilih.

Kami rekomendasi menggunakan Web server terpisah -- misalnya, yang juga menggunakan Django -- untuk melayani media. Berikut adalah beberapa alternatif baik:

- Nginx
- Versi ringkas dari Apache

Jika, bagaimanapun, anda tidak mempunyai pilihan tetapi untuk melayani berkas-berkas media pada Apache `VirtualHost` sama sebagai Django, anda dapat menyetel Apache untuk melayani beberapa URL sebagai media statis, dan lainnya menggunakan antarmuka mod_wsgi ke Django.

Contoh ini menyetel Django pada akar situs, tetapi melayani `robots.txt`, `favicon.ico`, dan apapun dalam ruang URL `/static/` dan `/media/` sebagai berkas statis. Semua URL lain akan dilayani menggunakan mod_wsgi:

    Alias /robots.txt /path/to/mysite.com/static/robots.txt
    Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

    Alias /media/ /path/to/mysite.com/media/
    Alias /static/ /path/to/mysite.com/static/

    <Directory /path/to/mysite.com/static>
    Require all granted
    </Directory>

    <Directory /path/to/mysite.com/media>
    Require all granted
    </Directory>

    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

    <Directory /path/to/mysite.com/mysite>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>

Jika anda sedang menggunakan versi Apache lebih lama dari 2.4, ganti `Require all granted` dengan `Allow from all` dan juga tambah baris `Order deny,allow` diatasnya.

## Melayani berkas admin

Ketika `django.contrib.staticfiles` berada dalam `INSTALLED_APPS`, peladen pengembangan Django otomatis melayani berkas-berkas tetap dari aplikasi admin (dan aplikasi terpasang lainnya). Ini bagaimanapun bukan kasus ketika anda menggunakan pengaturan peladen lainnya. Anda bertanggungjawab untuk mengatur Apache, atau peladen Jaringan manapun anda sedang gunakan, untuk melayani berkas-berkas admin.

Berkas admin tinggal di (`django/contrib/admin/static/admin`) dari penyaluran Django.

Kami sangat kuat menganjurkan menggunakan `django.contrib.staticfiles` untuk menangani berkas-berkas admin (bersama dengan peladen Jaringan sebagai gambaran peta di bagian sebelumnya; ini berarti menggunakan perintah pengelolaan `collectstatic` untuk mengumpulkan berkas-berkas tetap dalam `STATIC_ROOT`, dan ketika mengkonfigurasi peladen Jaringan anda untuk melayani `STATIC_ROOT` pada `STATIC_URL`), tetapi disini adalah tiga pendekatan lain:

1. Buat sebuah tautan simbolis ke berkas statis admin dari dalam akar dokumen anda (ini mungkin membutuhkan `+FollowSymLinks` dalam konfigurasi Apache anda).
2. Gunakan sebuah petunjuk `Alias`, seperti yang ditampilkan diatas, untuk alias URL yang sesuai (mungkin `STATIC_URL` + `admin/`) ke tempat sebenarnya dari berkas-berkas admin.
3. Salin berkas tetap admin sehingga mereka berada dalam akar dokumen Apache anda.

## Otentifikasi terhadap pengguna basisdata Django dari Apache

Django menyediakan sebuah penanganan untuk mengizinkan Apache untuk membuktikan keaslian pengguna secara langsung terhadap backend pembuktian keaslian Django. Lihat mod_wsgi authentication documentation.