{"title":"Bagaimana menggunakan Django dengan Apache dan mod_wsgi","version":"4.2","locale":"id","docname":"howto/deployment/wsgi/modwsgi","url":"/id/4.2/howto/deployment/wsgi/modwsgi/","canonical":"https://djangodocs.dev/id/4.2/howto/deployment/wsgi/modwsgi/","summary":"Menyebarkan Django dengan Apache dan ``mod_wsgi`_ adalah jalan percobaan dan pengujian untuk mendapatkan Django dalam produksi.","html":"<h1>Bagaimana menggunakan Django dengan Apache dan <code class=\"docutils literal notranslate\">mod_wsgi</code><a class=\"heading-anchor\" href=\"#how-to-use-django-with-apache-and-mod-wsgi\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Menyebarkan Django dengan <a class=\"reference external\" href=\"https://httpd.apache.org/\">Apache</a> dan <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>mod_wsgi`_ adalah jalan percobaan dan pengujian untuk mendapatkan Django dalam produksi.</p>\n<p>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.</p>\n<p><a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/\">official mod_wsgi documentation</a> adalah sumber anda untuk semua rincian tentang bagaimana menggunakan mod_wsgi. Anda akan mungkin ingin memulai dengan <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/installation.html\">installation and configuration documentation</a>.</p>\n<section id=\"basic-configuration\">\n<h2>Konfigurasi dasar<a class=\"heading-anchor\" href=\"#basic-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Setelah anda punya mod_wsgi terpasang dan aktif, rubah berkas <a class=\"reference external\" href=\"https://cwiki.apache.org/confluence/display/httpd/DistrosDefaultLayout\">httpd.conf</a> peladen Apache dan tambahkan berikut.</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span> / <span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"nb\">WSGIPythonHome</span> <span class=\"sx\">/path/to/venv</span>\n<span class=\"nb\">WSGIPythonPath</span> <span class=\"sx\">/path/to/mysite.com</span>\n\n<span class=\"nt\">&lt;Directory</span> <span class=\"s\">/path/to/mysite.com/mysite</span><span class=\"nt\">&gt;</span>\n<span class=\"nt\">&lt;Files</span> <span class=\"s\">wsgi.py</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span> <span class=\"k\">all</span> granted\n<span class=\"nt\">&lt;/Files&gt;</span>\n<span class=\"nt\">&lt;/Directory&gt;</span>\n</code></pre></div>\n<p>Bit pertama dalam baris <code class=\"docutils literal notranslate\">WSGIScriptAlias</code> adalah jalur URL dasar anda ingin melayani aplikasi anda pada (<code class=\"docutils literal notranslate\">/</code> mengindikasikan url akar), dan kedua adalah tempat dari &quot;berkas WSGI&quot; -- lihat dibawa -- pada sistem anda, biasanya didalam paket proyek anda (<code class=\"docutils literal notranslate\">mysite</code> di contoh ini). Ini memberitahu Apache untuk melayani setiap permintaan dibawah URL yang diberikan menggunakan aplikasi WSGI yang ditentukan dalam berkas itu.</p>\n<p>If you install your project's Python dependencies inside a <a class=\"reference external\" href=\"https://docs.python.org/3/library/venv.html#module-venv\" title=\"(di Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">virtual\nenvironment</code></a>, add the path using <code class=\"docutils literal notranslate\">WSGIPythonHome</code>. See the <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html\">mod_wsgi\nvirtual environment guide</a> for more details.</p>\n<p>Baris <code class=\"docutils literal notranslate\">WSGIPythonPath</code> memastikan bahwa paket proyek anda tersedia untuk diimpor pada jalur Python; dengan kata lain, bahwa <code class=\"docutils literal notranslate\">import mysite</code> bekerja.</p>\n<p>Potongan <code class=\"docutils literal notranslate\">&lt;Directory&gt;</code> memastikan bahwa Apache dapat mengakses berkas <code class=\"file docutils literal notranslate\">wsgi.py</code> anda.</p>\n<p>Selanjutnya kami akan butuh memastikan berkas ini <code class=\"file docutils literal notranslate\">wsgi.py</code> dengan obyek aplikasi WSGI ada. Sehingga Django versi 1.4, <a class=\"reference internal\" href=\"/id/4.2/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a> akan membuat satu untuk anda; jika tidak, anda akan butuh membuatnya. Lihat <a class=\"reference internal\" href=\"/id/4.2/howto/deployment/wsgi/\"><span class=\"doc\">WSGI overview documentation</span></a> untuk isi awal anda harus tempatkan dalam berkas ini, dan apa lagi yang anda dapat tambahkan.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>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:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>os<span class=\"o\">.</span>environ<span class=\"o\">.</span>setdefault<span class=\"p\">(</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;{{ project_name }}.settings&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>di <code class=\"docutils literal notranslate\">wsgi.py</code>, untuk:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>os<span class=\"o\">.</span>environ<span class=\"p\">[</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;{{ project_name }}.settings&quot;</span>\n</code></pre></div>\n<p>atau dengan <a class=\"reference internal\" href=\"#daemon-mode\"><span class=\"std std-ref\">using mod_wsgi daemon mode</span></a> dan memastikan bahwa setiap situs berjalan dalam pengolahan daemon nya sendiri.</p>\n</aside>\n<aside class=\"admonition-fixing-unicodeencodeerror-for-file-uploads admonition\" role=\"note\">\n<p class=\"admonition-title\">Memperbaiki <code class=\"docutils literal notranslate\">UnicodeEncodeError</code> untuk mengunggah berkas</p>\n<p>If you get a <code class=\"docutils literal notranslate\">UnicodeEncodeError</code> when uploading or writing files with\nfile names or content that contains non-ASCII characters, make sure Apache\nis configured to support UTF-8 encoding:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"nb\">export</span> <span class=\"nv\">LANG</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span>\n<span class=\"nb\">export</span> <span class=\"nv\">LC_ALL</span><span class=\"o\">=</span><span class=\"s1\">&#39;en_US.UTF-8&#39;</span>\n</code></pre></div>\n<p>Lokasi biasa tempat meletakkan konfigurasi ini di <code class=\"docutils literal notranslate\">/etc/apache2/envvars</code>.</p>\n<p>Alternatively, if you are <a class=\"reference internal\" href=\"#daemon-mode\"><span class=\"std std-ref\">using mod_wsgi daemon mode</span></a>\nyou can add <code class=\"docutils literal notranslate\">lang</code> and <code class=\"docutils literal notranslate\">locale</code> options to the <code class=\"docutils literal notranslate\">WSGIDaemonProcess</code>\ndirective:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>WSGIDaemonProcess example.com lang=&#39;en_US.UTF-8&#39; locale=&#39;en_US.UTF-8&#39;\n</code></pre></div>\n<p>Lihat bagian <a class=\"reference internal\" href=\"/id/4.2/ref/unicode/#unicode-files\"><span class=\"std std-ref\">Berkas</span></a> dari panduan acuan Unicode untuk rincian.</p>\n</aside>\n</section>\n<section id=\"using-mod-wsgi-daemon-mode\">\n<span id=\"daemon-mode\"></span><h2>Menggunakan <code class=\"docutils literal notranslate\">mod_wsgi</code> mode daemon<a class=\"heading-anchor\" href=\"#using-mod-wsgi-daemon-mode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>&quot;Daemon mode&quot; 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 <code class=\"docutils literal notranslate\">WSGIDaemonProcess</code> dan <code class=\"docutils literal notranslate\">WSGIProcessGroup</code> sesuai. Perubahan lebih lanjut pada konfigurasi diatas jika anda menggunakan suasana daemon adalah anda tidak dapat menggunakan <code class=\"docutils literal notranslate\">WSGIPythonPath</code>; daripada anda harus menggunakan pilihan <code class=\"docutils literal notranslate\">python-path</code> ke <code class=\"docutils literal notranslate\">WSGIDaemonProcess</code>, sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIDaemonProcess</span> example.com python-home=/path/to/venv python-path=/path/to/mysite.com\n<span class=\"nb\">WSGIProcessGroup</span> example.com\n</code></pre></div>\n<p>Jika anda ingin melayani proyek anda dalam subdirektori (<code class=\"docutils literal notranslate\">https://example.com/mysite</code> dalam contoh ini), anda dapat menambahkan <code class=\"docutils literal notranslate\">WSGIScriptAlias</code> pada konfigurasi diatas:</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span> <span class=\"sx\">/mysite</span> <span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span> process-group=example.com\n</code></pre></div>\n<p>Lihat dokumentasi mod_wsgi resmi untuk <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html#delegation-to-daemon-process\">details on setting up daemon mode</a>.</p>\n</section>\n<section id=\"serving-files\">\n<span id=\"id1\"></span><h2>Melayani berkas<a class=\"heading-anchor\" href=\"#serving-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django tidak melayani berkas-berkas dia sendiri; dia menyerahkan pekerjaan itu ke apapun peladen yang anda pilih.</p>\n<p>Kami menganjurkan menggunakan peladen jaringan terpisah -- yaitu, satu yang tidak menjalankan Django -- untuk melayani media. Ini ada beberapa pilihan bagus:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://nginx.org/en/\">Nginx</a></p></li>\n<li><p>Versi ringkas dari <a class=\"reference external\" href=\"https://httpd.apache.org/\">Apache</a></p></li>\n</ul>\n<p>Jika, bagaimanapun, anda tidak mempunyai pilihan tetapi untuk melayani berkas-berkas media pada Apache <code class=\"docutils literal notranslate\">VirtualHost</code> sama sebagai Django, anda dapat menyetel Apache untuk melayani beberapa URL sebagai media statis, dan lainnya menggunakan antarmuka mod_wsgi ke Django.</p>\n<p>Contoh ini menyetel Django pada akar situs, tetapi melayani <code class=\"docutils literal notranslate\">robots.txt</code>, <code class=\"docutils literal notranslate\">favicon.ico</code>, dan apapun dalam ruang URL <code class=\"docutils literal notranslate\">/static/</code> dan <code class=\"docutils literal notranslate\">/media/</code> sebagai berkas statis. Semua URL lain akan dilayani menggunakan mod_wsgi:</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">Alias</span> <span class=\"sx\">/robots.txt</span> <span class=\"sx\">/path/to/mysite.com/static/robots.txt</span>\n<span class=\"nb\">Alias</span> <span class=\"sx\">/favicon.ico</span> <span class=\"sx\">/path/to/mysite.com/static/favicon.ico</span>\n\n<span class=\"nb\">Alias</span> <span class=\"sx\">/media/</span> <span class=\"sx\">/path/to/mysite.com/media/</span>\n<span class=\"nb\">Alias</span> <span class=\"sx\">/static/</span> <span class=\"sx\">/path/to/mysite.com/static/</span>\n\n<span class=\"nt\">&lt;Directory</span> <span class=\"s\">/path/to/mysite.com/static</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span> <span class=\"k\">all</span> granted\n<span class=\"nt\">&lt;/Directory&gt;</span>\n\n<span class=\"nt\">&lt;Directory</span> <span class=\"s\">/path/to/mysite.com/media</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span> <span class=\"k\">all</span> granted\n<span class=\"nt\">&lt;/Directory&gt;</span>\n\n<span class=\"nb\">WSGIScriptAlias</span> / <span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n\n<span class=\"nt\">&lt;Directory</span> <span class=\"s\">/path/to/mysite.com/mysite</span><span class=\"nt\">&gt;</span>\n<span class=\"nt\">&lt;Files</span> <span class=\"s\">wsgi.py</span><span class=\"nt\">&gt;</span>\n<span class=\"nb\">Require</span> <span class=\"k\">all</span> granted\n<span class=\"nt\">&lt;/Files&gt;</span>\n<span class=\"nt\">&lt;/Directory&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"serving-the-admin-files\">\n<span id=\"id3\"></span><h2>Melayani berkas admin<a class=\"heading-anchor\" href=\"#serving-the-admin-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When <a class=\"reference internal\" href=\"/id/4.2/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a> is in <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, the\nDjango development server automatically serves the static files of the\nadmin app (and any other installed apps). This is however not the case when you\nuse any other server arrangement. You're responsible for setting up Apache, or\nwhichever web server you're using, to serve the admin files.</p>\n<p>The admin files live in (<a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/4.2.x/django/contrib/admin/static/admin\">django/contrib/admin/static/admin</a>) of the\nDjango distribution.</p>\n<p>We <strong>strongly</strong> recommend using <a class=\"reference internal\" href=\"/id/4.2/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a> to handle the\nadmin files (along with a web server as outlined in the previous section; this\nmeans using the <a class=\"reference internal\" href=\"/id/4.2/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> management command to collect the\nstatic files in <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a>, and then configuring your web server to\nserve <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> at <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a>), but here are three\nother approaches:</p>\n<ol class=\"arabic simple\">\n<li><p>Buat sebuah tautan simbolis ke berkas statis admin dari dalam akar dokumen anda (ini mungkin membutuhkan <code class=\"docutils literal notranslate\">+FollowSymLinks</code> dalam konfigurasi Apache anda).</p></li>\n<li><p>Gunakan sebuah petunjuk <code class=\"docutils literal notranslate\">Alias</code>, seperti yang ditampilkan diatas, untuk alias URL yang sesuai (mungkin <a class=\"reference internal\" href=\"/id/4.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> + <code class=\"docutils literal notranslate\">admin/</code>) ke tempat sebenarnya dari berkas-berkas admin.</p></li>\n<li><p>Salin berkas tetap admin sehingga mereka berada dalam akar dokumen Apache anda.</p></li>\n</ol>\n</section>\n<section id=\"authenticating-against-django-s-user-database-from-apache\">\n<h2>Otentifikasi terhadap pengguna basisdata Django dari Apache<a class=\"heading-anchor\" href=\"#authenticating-against-django-s-user-database-from-apache\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django menyediakan sebuah penanganan untuk mengizinkan Apache untuk membuktikan keaslian pengguna secara langsung terhadap backend pembuktian keaslian Django. Lihat <a class=\"reference internal\" href=\"/id/4.2/howto/deployment/wsgi/apache-auth/\"><span class=\"doc\">mod_wsgi authentication documentation</span></a>.</p>\n</section>","rootId":"how-to-use-django-with-apache-and-mod-wsgi","toc":[{"title":"Konfigurasi dasar","anchor":"basic-configuration","children":[]},{"title":"Menggunakan mod_wsgi mode daemon","anchor":"using-mod-wsgi-daemon-mode","children":[]},{"title":"Melayani berkas","anchor":"serving-files","children":[]},{"title":"Melayani berkas admin","anchor":"serving-the-admin-files","children":[]},{"title":"Otentifikasi terhadap pengguna basisdata Django dari Apache","anchor":"authenticating-against-django-s-user-database-from-apache","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Panduan \"Bagaimana\"","url":"/id/4.2/howto/"},{"docname":"howto/deployment/index","title":"Bagaimana menyebarkan Django","url":"/id/4.2/howto/deployment/"},{"docname":"howto/deployment/wsgi/index","title":"Bagaimana menyebarkan dengan WSGI","url":"/id/4.2/howto/deployment/wsgi/"}],"prev":{"docname":"howto/deployment/wsgi/uwsgi","title":"Bagaimana menggunakan Django dengan uWSGI","url":"/id/4.2/howto/deployment/wsgi/uwsgi/"},"next":{"docname":"howto/deployment/wsgi/apache-auth","title":"Bagaimana mengautentifikasi terhadap basisdata pengguna Django dari Apache","url":"/id/4.2/howto/deployment/wsgi/apache-auth/"},"formats":{"html":"/id/4.2/howto/deployment/wsgi/modwsgi/","markdown":"/id/4.2/howto/deployment/wsgi/modwsgi.md","json":"/id/4.2/howto/deployment/wsgi/modwsgi.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/howto/deployment/wsgi/modwsgi.txt","official":"https://docs.djangoproject.com/id/4.2/howto/deployment/wsgi/modwsgi/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}