

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Men-deploy aplikasi Django ke Elastic Beanstalk
<a name="create-deploy-python-django"></a>

Tutorial ini memandu dalam deployment situs web [Django](https://www.djangoproject.com/) default yang dibuat otomatis ke lingkungan AWS Elastic Beanstalk yang menjalankan Python. Tutorial ini menunjukkan Anda cara meng-host sebuah aplikasi web Python di cloud dengan menggunakan lingkungan Elastic Beanstalk. 

Dalam tutorial ini, Anda akan melakukan hal berikut:
+ [Menyiapkan lingkungan virtual Python dan menginstal Django](#python-django-setup-venv)
+ [Buat proyek Django](#python-django-create-app)
+ [Konfigurasikan aplikasi Django Anda untuk Elastic Beanstalk](#python-django-configure-for-eb) 
+ [Men-deploy situs Anda dengan EB CLI](#python-django-deploy) 
+ [Perbarui aplikasi Anda](#python-django-update-app) 
+ [Bersihkan](#python-django-stopping)

## Prasyarat
<a name="python-django-prereq"></a>

Untuk mengikuti tutorial ini, Anda harus memiliki semua [Prasyarat Umum](python-development-environment.md) untuk Python yang diinstal, termasuk paket-paket berikut:
+ Python 3.7 atau yang lebih baru
+ `pip`
+ `virtualenv`
+ `awsebcli`

Kerangka kerja [Django](https://www.djangoproject.com/) akan diinstal sebagai bagian dari tutorial.

**catatan**  
Membuat lingkungan dengan EB CLI memerlukan [peran layanan](concepts-roles-service.md). Peran layanan dapat dibuat dengan membuat lingkungan di konsol Elastic Beanstalk. Jika Anda tidak memiliki peran layanan, EB CLI mencoba membuatnya saat Anda menjalankan `eb create`.

## Menyiapkan lingkungan virtual Python dan menginstal Django
<a name="python-django-setup-venv"></a>

Buat lingkungan virtual dengan `virtualenv` dan menggunakannya untuk menginstal Django dan dependensinya. Dengan menggunakan lingkungan virtual, Anda dapat mengetahui dengan tepat paket mana yang dibutuhkan aplikasi Anda, sehingga paket yang diperlukan diinstal pada EC2 instance Amazon yang menjalankan aplikasi Anda. 

Langkah-langkah berikut menunjukkan perintah yang harus Anda masukkan untuk Windows dan sistem berbasis Unix, yang ditampilkan pada tab terpisah.

**Untuk mempersiapkan lingkungan virtual Anda**

1. Buat dan aktifkan lingkungan virtual bernama `eb-virt`.

------
#### [ Unix-based systems ]

   ```
   ~$ virtualenv ~/eb-virt
   ```

------
#### [ Windows ]

   ```
   C:\> virtualenv %HOMEPATH%\eb-virt
   ```

------

1. Aktifkan lingkungan virtual.

------
#### [ Unix-based systems ]

   ```
   ~$ source ~/eb-virt/bin/activate
   (eb-virt) ~$
   ```

------
#### [ Windows ]

   ```
   C:\>%HOMEPATH%\eb-virt\Scripts\activate
   (eb-virt) C:\>
   ```

------

   Anda akan melihat `(eb-virt)` ditambahkan ke prompt perintah Anda, yang menunjukkan bahwa Anda berada di lingkungan virtual.
**catatan**  
Prompt perintah Linux `~$` di direktori home Anda ditunjukkan hingga akhir dari instruksi ini. Di Windows ini`C:\Users\USERNAME>`, di *USERNAME* mana nama login Windows Anda.

1. Gunakan `pip` untuk menginstal Django.

   ```
   (eb-virt)~$ pip install django==2.2
   ```
**catatan**  
Versi Django yang Anda pasang harus kompatibel dengan versi Python pada konfigurasi Phyton Elastic Beanstalk yang Anda pilih untuk men-deploy aplikasi Anda. Untuk informasi tentang deployment, lihat [Men-deploy situs Anda dengan EB CLI](#python-django-deploy) dalam topik ini.  
Untuk informasi lebih lanjut tentang versi platform Python saat ini, lihat [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) di dokumen *Platform AWS Elastic Beanstalk *.  
Untuk kesesuaian versi Django dengan Python, lihat [Versi Python apa yang dapat saya gunakan dengan Django?](https://docs.djangoproject.com/en/3.1/faq/install/#what-python-version-can-i-use-with-django)

1. Untuk memverifikasi bahwa Django terpasang, masukkan berikut ini.

   ```
   (eb-virt)~$ pip freeze
   Django==2.2
   ...
   ```

   Perintah ini mencantumkan semua paket yang diinstal di lingkungan virtual Anda. Kemudian, Anda menggunakan output dari perintah ini untuk mengonfigurasi proyek Anda untuk digunakan dengan Elastic Beanstalk.

## Buat proyek Django
<a name="python-django-create-app"></a>

Sekarang Anda siap untuk membuat proyek Django dan menjalankannya pada mesin Anda, menggunakan lingkungan virtual.

**catatan**  
Tutorial ini menggunakan SQLite, yang merupakan mesin database yang disertakan dalam Python. Basis data di-deploy dengan file proyek Anda. Untuk lingkungan produksi, kami sarankan Anda menggunakan Amazon Relational Database Service (Amazon RDS), dan memisahkannya dari lingkungan Anda. Untuk informasi selengkapnya, lihat [Menambahkan instans Amazon RDS DB ke lingkungan Python Elastic Beanstalk Anda](create-deploy-python-rds.md).

**Untuk menghasilkan aplikasi Django**

1. Aktifkan lingkungan virtual Anda.

------
#### [ Unix-based systems ]

   ```
   ~$ source ~/eb-virt/bin/activate
   (eb-virt) ~$
   ```

------
#### [ Windows ]

   ```
   C:\>%HOMEPATH%\eb-virt\Scripts\activate
   (eb-virt) C:\>
   ```

------

   Anda akan melihat prefiks `(eb-virt)` ditambahkan ke prompt perintah Anda, yang menunjukkan bahwa Anda berada di lingkungan virtual.
**catatan**  
Prompt perintah Linux `~$` di direktori home Anda dan direktori home Linux `~/` ditunjukkan hingga akhir instruksi ini. Di Windows ini`C:\Users\USERNAME>`, di *USERNAME* mana nama login Windows Anda.

1. Gunakan perintah `django-admin startproject` untuk membuat proyek Django bernama `ebdjango`.

   ```
   (eb-virt)~$ django-admin startproject ebdjango
   ```

   Perintah ini membuat sebuah situs Django standar bernama **ebdjango** dengan struktur direktori berikut.

   ```
   ~/ebdjango
     |-- ebdjango
     |   |-- __init__.py
     |   |-- settings.py
     |   |-- urls.py
     |   `-- wsgi.py
     `-- manage.py
   ```

1. Jalankan situs Django Anda secara lokal dengan `manage.py runserver`.

   ```
   (eb-virt) ~$ cd ebdjango
   ```

   ```
   (eb-virt) ~/ebdjango$ python manage.py runserver
   ```

1. Di peramban web, buka `http://127.0.0.1:8000/` untuk melihat situs.

1. Periksa log server untuk melihat output dari permintaan Anda. Untuk menghentikan server web dan kembali ke lingkungan virtual Anda, tekan **Ctrl\$1C**.

   ```
   Django version 2.2, using settings 'ebdjango.settings'
   Starting development server at http://127.0.0.1:8000/
   Quit the server with CONTROL-C.
   [07/Sep/2018 20:14:09] "GET / HTTP/1.1" 200 16348
   Ctrl+C
   ```

## Konfigurasikan aplikasi Django Anda untuk Elastic Beanstalk
<a name="python-django-configure-for-eb"></a>

Sekarang setelah Anda memiliki situs bertenaga Django pada mesin lokal Anda, Anda dapat mengonfigurasi untuk deployment dengan Elastic Beanstalk.

Secara default, Elastic Beanstalk mencari file bernama `application.py` untuk memulai aplikasi Anda. Karena ini tidak ada di proyek Django yang Anda buat, Anda perlu membuat beberapa penyesuaian pada lingkungan aplikasi Anda. Anda juga harus mengatur variabel lingkungan sehingga modul aplikasi Anda dapat dimuat.

**Mengonfigurasi situs Anda untuk Elastic Beanstalk**

1. Aktifkan lingkungan virtual Anda.

------
#### [ Unix-based systems ]

   ```
   ~/ebdjango$ source ~/eb-virt/bin/activate
   ```

------
#### [ Windows ]

   ```
   C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
   ```

------

1. Jalankan `pip freeze`, kemudian simpan output ke file bernama `requirements.txt`.

   ```
   (eb-virt) ~/ebdjango$ pip freeze > requirements.txt
   ```

   Elastic `requirements.txt` Beanstalk digunakan untuk menentukan paket mana yang akan diinstal EC2 pada instance yang menjalankan aplikasi Anda.

1. Membuat sebuah direktori bernama `.ebextensions`.

   ```
   (eb-virt) ~/ebdjango$ mkdir .ebextensions
   ```

1. Di direktori `.ebextensions`, tambahkan [file konfigurasi](ebextensions.md) bernama `django.config` dengan teks berikut.  
**Example \$1/ebdjango/.ebextensions/django.config**  

   ```
   option_settings:
     aws:elasticbeanstalk:container:python:
       WSGIPath: ebdjango.wsgi:application
   ```

   Pengaturan ini, `WSGIPath`, menentukan lokasi script WSGI yang digunakan Elastic Beanstalk untuk memulai aplikasi Anda.
**catatan**  
Jika Anda menggunakan versi platform Python Amazon Linux AMI (Amazon Linux 2 yang terdahulu), ganti nilai `WSGIPath` dengan `ebdjango/wsgi.py`. Nilai dalam contoh berfungsi dengan menggunakan server Gunicorn WSGI, yang tidak didukung pada versi platform Amazon Linux AMI.

1. Nonaktifkan lingkungan virtual Anda dengan perintah `deactivate`.

   ```
   (eb-virt) ~/ebdjango$ deactivate
   ```

   Aktifkan kembali lingkungan virtual setiap kali Anda perlu menambahkan paket ke aplikasi Anda atau menjalankan aplikasi secara lokal.

## Men-deploy situs Anda dengan EB CLI
<a name="python-django-deploy"></a>

Anda telah menambahkan semua yang dibutuhkan untuk men-deploy aplikasi Anda pada Elastic Beanstalk. Direktori proyek Anda seharusnya terlihat seperti ini.

```
~/ebdjango/
|-- .ebextensions
|   `-- django.config
|-- ebdjango
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
```

Selanjutnya, Anda akan membuat lingkungan aplikasi dan men-deploy aplikasi Anda yang dikonfigurasi dengan Elastic Beanstalk.

Segera setelah deployment, Anda akan mengedit konfigurasi Django untuk menambahkan nama domain yang ditetapkan Elastic Beanstalk untuk aplikasi Anda ke `ALLOWED_HOSTS` Django. Kemudian Anda akan men-deploy kembali aplikasi Anda. Ini adalah persyaratan keamanan Django, dirancang untuk mencegah serangan header `Host` HTTP. Untuk informasi lebih lanjut, lihat [Validasi header host](https://docs.djangoproject.com/en/2.2/topics/security/#host-headers-virtual-hosting).

**Untuk membuat lingkungan dan men-deploy aplikasi Django Anda**
**catatan**  
Tutorial ini menggunakan EB CLI sebagai mekanisme deployment, tetapi Anda juga dapat menggunakan konsol Elastic Beanstalk untuk men-deploy file .zip yang berisi konten proyek Anda. 

1. Inisialisasi repositori EB CLI Anda dengan perintah **eb init**.

   ```
   ~/ebdjango$ eb init -p python-3.7 django-tutorial
   Application django-tutorial has been created.
   ```

   Perintah ini membuat aplikasi bernama `django-tutorial`. Ini juga mengkonfigurasi repositori lokal Anda untuk membuat lingkungan dengan versi platform Python 3.7 terbaru.

1. (Opsional) Jalankan **eb init** lagi untuk mengonfigurasi key pair default sehingga Anda dapat menggunakan SSH untuk terhubung ke EC2 instance yang menjalankan aplikasi Anda.

   ```
   ~/ebdjango$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   Pilih pasangan kunci jika Anda sudah memilikinya, atau ikuti prompt untuk membuatnya. Jika Anda tidak melihat prompt atau perlu mengubah pengaturan Anda nanti, jalankan **eb init -i**.

1. Membuat lingkungan dan men-deploy aplikasi Anda ke sana dengan **eb create**.

   ```
   ~/ebdjango$ eb create django-env
   ```
**catatan**  
Jika Anda melihat pesan kesalahan "peran layanan diperlukan", jalankan `eb create` secara interaktif (tanpa menentukan nama lingkungan) dan EB CLI membuat peran untuk Anda.

   Perintah ini membuat lingkungan Elastic Beanstalk dengan beban seimbang bernama `django-env`. Membuat lingkungan membutuhkan waktu sekitar 5 menit. Saat Elastic Beanstalk membuat sumber daya yang diperlukan untuk menjalankan aplikasi Anda, Elastic Beanstalk mengeluarkan pesan informasi yang disampaikan EB CLI ke terminal Anda.

1. Ketika proses pembuatan lingkungan selesai, temukan nama domain lingkungan baru Anda dengan menjalankan **eb status**.

   ```
   ~/ebdjango$ eb status
   Environment details for: django-env
     Application name: django-tutorial
     ...
     CNAME: eb-django-app-dev.elasticbeanstalk.com
     ...
   ```

   Nama domain lingkungan Anda adalah nilai dari properti `CNAME`.

1. Buka file `settings.py` dalam direktori `ebdjango`. Temukan pengaturan `ALLOWED_HOSTS`, dan kemudian tambahkan nama domain aplikasi yang Anda temukan di langkah sebelumnya ke nilai pengaturan. Jika Anda tidak dapat menemukan pengaturan ini dalam file, tambahkan itu ke baris baru.

   ```
   ...
   ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']
   ```

1. Simpan file, dan kemudian deploy aplikasi Anda dengan menjalankan **eb deploy**. Ketika Anda menjalankan **eb deploy**, EB CLI memaketkan konten direktori proyek Anda dan men-deploy ke lingkungan Anda.

   ```
   ~/ebdjango$ eb deploy
   ```
**catatan**  
Jika Anda menggunakan Git dengan proyek Anda, lihat [Menggunakan EB CLI dengan Git](eb3-cli-git.md).

1. Ketika proses pembaruan lingkungan selesai, buka situs web Anda dengan **eb open**.

   ```
   ~/ebdjango$ eb open
   ```

   Ini akan membuka jendela peramban menggunakan nama domain yang dibuat untuk aplikasi Anda. Anda seharusnya melihat situs web Django yang sama seperti yang Anda telah buat dan uji secara lokal.

Jika aplikasi tidak berjalan, atau menerima pesan kesalahan, lihat [Pemecahan masalah deployment](troubleshooting.md#troubleshooting-deployments) untuk bantuan tentang cara menentukan penyebab kesalahan.

Jika Anda *benar-benar* melihat aplikasi Anda berjalan, maka selamat, Anda telah men-deploy aplikasi Django pertama Anda dengan Elastic Beanstalk\$1

## Perbarui aplikasi Anda
<a name="python-django-update-app"></a>

Sekarang setelah menjalankan aplikasi Elastic Beanstalk, Anda dapat memperbarui dan men-deploy kembali aplikasi Anda atau konfigurasinya, dan Elastic Beanstalk melakukan pekerjaan memperbarui instans dan memulai versi aplikasi baru Anda.

Untuk contoh ini, kita akan mengaktifkan konsol admin Django dan mengonfigurasi beberapa pengaturan lain.

### Mengubah pengaturan situs Anda
<a name="python-django-modify-site"></a>

Secara default, situs web Django Anda menggunakan zona waktu UTC untuk menampilkan waktu. Anda dapat mengubah ini dengan menentukan zona waktu di `settings.py`.

**Untuk mengubah zona waktu situs Anda**

1. Modifikasi pengaturan `TIME_ZONE` dalam `settings.py`.  
**Example \$1/ .py ebdjango/ebdjango/settings**  

   ```
   ...
   # Internationalization
   LANGUAGE_CODE = 'en-us'
   TIME_ZONE = 'US/Pacific'
   USE_I18N = True
   USE_L10N = True
   USE_TZ = True
   ```

   Untuk daftar zona waktu, kunjungi [halaman ini](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

1. Men-deploy aplikasi ke lingkungan Elastic Beanstalk Anda.

   ```
   ~/ebdjango/$ eb deploy
   ```

### Membuat administrator situs
<a name="python-django-create-admin"></a>

Anda dapat membuat administrator situs untuk aplikasi Django Anda untuk mengakses konsol admin langsung dari situs web. Detail login administrator disimpan dengan aman di citra basis data lokal yang disertakan dalam proyek default yang dihasilkan Django.

**Untuk membuat administrator situs**

1. Inisialisasi basis data lokal aplikasi Django Anda.

   ```
   (eb-virt) ~/ebdjango$ python manage.py migrate
   Operations to perform:
     Apply all migrations: admin, auth, contenttypes, sessions
   Running migrations:
     Applying contenttypes.0001_initial... OK
     Applying auth.0001_initial... OK
     Applying admin.0001_initial... OK
     Applying admin.0002_logentry_remove_auto_add... OK
     Applying admin.0003_logentry_add_action_flag_choices... OK
     Applying contenttypes.0002_remove_content_type_name... OK
     Applying auth.0002_alter_permission_name_max_length... OK
     Applying auth.0003_alter_user_email_max_length... OK
     Applying auth.0004_alter_user_username_opts... OK
     Applying auth.0005_alter_user_last_login_null... OK
     Applying auth.0006_require_contenttypes_0002... OK
     Applying auth.0007_alter_validators_add_error_messages... OK
     Applying auth.0008_alter_user_username_max_length... OK
     Applying auth.0009_alter_user_last_name_max_length... OK
     Applying sessions.0001_initial... OK
   ```

1. Jalankan `manage.py createsuperuser` untuk membuat administrator.

   ```
   (eb-virt) ~/ebdjango$ python manage.py createsuperuser
   Username: admin
   Email address: me@mydomain.com
   Password: ********
   Password (again): ********
   Superuser created successfully.
   ```

1. Untuk memberitahu Django tempat menyimpan file statis, tentukan `STATIC_ROOT` dalam `settings.py`.  
**Example \$1/ .py ebdjango/ebdjango/settings**  

   ```
   # Static files (CSS, JavaScript, Images)
   # https://docs.djangoproject.com/en/2.2/howto/static-files/
   STATIC_URL = '/static/'
   STATIC_ROOT = 'static'
   ```

1. Jalankan `manage.py collectstatic` untuk mengisi `static` direktori dengan aset statis (JavaScript, CSS, dan gambar) untuk situs admin.

   ```
   (eb-virt) ~/ebdjango$ python manage.py collectstatic
   119 static files copied to ~/ebdjango/static
   ```

1. Men-deploy aplikasi Anda.

   ```
   ~/ebdjango$ eb deploy
   ```

1. Lihat konsol admin dengan membuka situs di peramban Anda, tambahkan `/admin/` ke URL situs, seperti berikut ini.

   ```
   http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
   ```  
![\[Masukkan nama pengguna dan kata sandi yang Anda buat pada langkah 2 untuk masuk ke konsol admin.\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/eb_django_admin_login.png)

1. Masuk dengan nama pengguna dan kata sandi yang Anda konfigurasikan pada langkah 2.  
![\[Konsol administrasi Django untuk situs web Django Anda di-deploy dengan Elastic Beanstalk\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/eb_django_admin_console.png)

Anda dapat menggunakan prosedur lokal yang serupa updating/testing diikuti oleh**eb deploy**. Elastic Beanstalk melakukan pekerjaan pembaruan server langsung Anda, sehingga Anda dapat fokus pada pengembangan aplikasi bukan administrasi server\$1

### Menambahkan file konfigurasi migrasi basis data
<a name="python-django-migrate-site"></a>

Anda dapat menambahkan perintah ke skrip `.ebextensions` yang dijalankan saat situs Anda diperbarui. Hal ini memungkinkan Anda untuk menghasilkan migrasi basis data secara otomatis.

**Untuk menambahkan langkah migrasi saat aplikasi Anda di-deploy**

1. Buat [file lonfigurasi](ebextensions.md) bernama `db-migrate.config` dengan konten berikut.  
**Example \$1/ebdjango/.ebextensions/db-migrate.config**  

   ```
   container_commands:
     01_migrate:
       command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
       leader_only: true
   option_settings:
     aws:elasticbeanstalk:application:environment:
       DJANGO_SETTINGS_MODULE: ebdjango.settings
   ```

   File konfigurasi ini mengaktifkan lingkungan virtual server dan menjalankan `manage.py migrate` perintah selama proses penyebaran, sebelum memulai aplikasi Anda. Karena berjalan sebelum aplikasi dimulai, Anda juga harus mengonfigurasi variabel lingkungan `DJANGO_SETTINGS_MODULE` secara eksplisit (biasanya `wsgi.py` akan mengurus hal ini untuk Anda selama startup). Menentukan `leader_only: true` dalam perintah akan memastikan bahwa itu hanya akan dijalankan sekali ketika Anda men-deploy ke beberapa instans.

1. Men-deploy aplikasi Anda.

   ```
   ~/ebdjango$ eb deploy
   ```

## Bersihkan
<a name="python-django-stopping"></a>

Untuk menghemat jam instans dan AWS sumber daya lainnya di antara sesi pengembangan, hentikan lingkungan Elastic Beanstalk Anda dengan. **eb terminate**

```
~/ebdjango$ eb terminate django-env
```

Perintah ini mengakhiri lingkungan dan semua sumber AWS daya yang berjalan di dalamnya. Perintah tersebut bagaimana pun juga tidak akan menghapus aplikasi, sehingga Anda selalu dapat membuat lebih banyak lingkungan dengan konfigurasi yang sama dengan menjalankan **eb create** lagi.

Jika Anda telah selesai dengan aplikasi sampel, Anda juga dapat menghapus folder proyek dan lingkungan virtual.

```
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
```

## Langkah selanjutnya
<a name="python-django-next-steps"></a>

Untuk informasi selengkapnya tentang Django, termasuk tutorial secara mendalam, lihat [Dokumentasi resmi](https://docs.djangoproject.com/en/2.2/).

Jika Anda ingin mencoba kerangka kerja web Python lain, lihat [Men-deploy aplikasi Flask ke Elastic Beanstalk](create-deploy-python-flask.md).