---
title: "Bagaimana menggunakan Django dengan Apache dan mod_wsgi"
version: 4.1
locale: id
source: https://docs.djangoproject.com/id/4.1/howto/deployment/wsgi/modwsgi/
canonical: https://djangodocs.dev/id/4.1/howto/deployment/wsgi/modwsgi/
---
# Bagaimana menggunakan Django dengan Apache dan `mod_wsgi`

Menyebarkan Django dengan [Apache](https://httpd.apache.org/) 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](https://modwsgi.readthedocs.io/) adalah sumber anda untuk semua rincian tentang bagaimana menggunakan mod\_wsgi. Anda akan mungkin ingin memulai dengan [installation and configuration documentation](https://modwsgi.readthedocs.io/en/develop/installation.html).

## Konfigurasi dasar

Once you've got mod\_wsgi installed and activated, edit your Apache server's
[httpd.conf](https://cwiki.apache.org/confluence/display/httpd/DistrosDefaultLayout) file and add the following.

```apache
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.

If you install your project's Python dependencies inside a [`virtual
environment`](https://docs.python.org/3/library/venv.html#module-venv), add the path using `WSGIPythonHome`. See the [mod\_wsgi
virtual environment guide](https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html) for more details.

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

Potongan `<Directory>` 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`](/id/4.1/ref/django-admin/#django-admin-startproject) akan membuat satu untuk anda; jika tidak, anda akan butuh membuatnya. Lihat [WSGI overview documentation](/id/4.1/howto/deployment/wsgi/) untuk isi awal anda harus tempatkan dalam berkas ini, dan apa lagi yang anda dapat tambahkan.

> **Warning**
>
> 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](#daemon-mode) dan memastikan bahwa setiap situs berjalan dalam pengolahan daemon nya sendiri.

> **Memperbaiki UnicodeEncodeError untuk mengunggah berkas**
>
> If you get a `UnicodeEncodeError` when uploading or writing files with
> file names or content that contains non-ASCII characters, make sure Apache
> is configured to support UTF-8 encoding:
>
> ```
> export LANG='en_US.UTF-8'
> export LC_ALL='en_US.UTF-8'
> ```
>
> Lokasi biasa tempat meletakkan konfigurasi ini di `/etc/apache2/envvars`.
>
> Alternatively, if you are [using mod\_wsgi daemon mode](#daemon-mode)
> you can add `lang` and `locale` options to the `WSGIDaemonProcess`
> directive:
>
> ```
> WSGIDaemonProcess example.com lang='en_US.UTF-8' locale='en_US.UTF-8'
> ```
>
> Lihat bagian [Berkas](/id/4.1/ref/unicode/#unicode-files) 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:

```apache
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:

```apache
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](https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html#delegation-to-daemon-process).

## Melayani berkas

Django doesn't serve files itself; it leaves that job to whichever web
server you choose.

We recommend using a separate web server -- i.e., one that's not also running
Django -- for serving media. Here are some good choices:

- [Nginx](https://nginx.org/en/)
- Versi ringkas dari [Apache](https://httpd.apache.org/)

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:

```apache
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>
```

## Melayani berkas admin

When [`django.contrib.staticfiles`](/id/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) is in [`INSTALLED_APPS`](/id/4.1/ref/settings/#std-setting-INSTALLED_APPS), the
Django development server automatically serves the static files of the
admin app (and any other installed apps). This is however not the case when you
use any other server arrangement. You're responsible for setting up Apache, or
whichever web server you're using, to serve the admin files.

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

We **strongly** recommend using [`django.contrib.staticfiles`](/id/4.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) to handle the
admin files (along with a web server as outlined in the previous section; this
means using the [`collectstatic`](/id/4.1/ref/contrib/staticfiles/#django-admin-collectstatic) management command to collect the
static files in [`STATIC_ROOT`](/id/4.1/ref/settings/#std-setting-STATIC_ROOT), and then configuring your web server to
serve [`STATIC_ROOT`](/id/4.1/ref/settings/#std-setting-STATIC_ROOT) at [`STATIC_URL`](/id/4.1/ref/settings/#std-setting-STATIC_URL)), but here are three
other approaches:

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`](/id/4.1/ref/settings/#std-setting-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](/id/4.1/howto/deployment/wsgi/apache-auth/).
