Men-deploy aplikasi Django ke Elastic Beanstalk - AWS Elastic Beanstalk

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

Tutorial ini memandu dalam deployment situs web Django 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:

Prasyarat

Untuk menggunakan layanan AWS apa pun, termasuk Elastic Beanstalk, Anda harus memiliki akun AWS dan kredensialnya. Untuk mempelajari selengkapnya dan mendaftar, kunjungi https://aws.amazon.com/.

Untuk mengikuti tutorial ini, Anda harus memiliki semua Prasyarat Umum untuk Python yang diinstal, termasuk paket-paket berikut:

  • Python 3.7 atau yang lebih baru

  • pip

  • virtualenv

  • awsebcli

Kerangka kerja Django akan diinstal sebagai bagian dari tutorial.

catatan

Membuat lingkungan dengan EB CLI memerlukan peran layanan. 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

Buat lingkungan virtual dengan virtualenv dan menggunakannya untuk menginstal Django dan dependensinya. Dengan menggunakan lingkungan virtual, Anda dapat mengetahui persis mana paket yang diperlukan aplikasi Anda sehingga paket terinstal di instans Amazon EC2 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
  2. 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. Pada Windows ini adalah C:\Users\USERNAME>, dan NAMA PENGGUNA adalah nama login Windows Anda.

  3. 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 dalam topik ini.

    Untuk informasi lebih lanjut tentang versi platform Python saat ini, lihat Python di dokumen Platform AWS Elastic Beanstalk.

    Untuk kesesuaian versi Django dengan Python, lihat Versi Python apa yang dapat saya gunakan dengan Django?

  4. 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

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

catatan

Tutorial ini menggunakan SQLite, yang merupakan mesin basis data 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 DB Amazon RDS ke lingkungan aplikasi Python Anda.

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. Pada Windows ini adalah C:\Users\USERNAME>, dan NAMA PENGGUNA adalah nama login Windows Anda.

  2. 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
  3. Jalankan situs Django Anda secara lokal dengan manage.py runserver.

    (eb-virt) ~$ cd ebdjango
    (eb-virt) ~/ebdjango$ python manage.py runserver
  4. Di peramban web, buka http://127.0.0.1:8000/ untuk melihat situs.

  5. Periksa log server untuk melihat output dari permintaan Anda. Untuk menghentikan server web dan kembali ke lingkungan virtual Anda, tekan Ctrl+C.

    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

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
  2. Jalankan pip freeze, kemudian simpan output ke file bernama requirements.txt.

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

    Elastic Beanstalk menggunakan requirements.txt untuk menentukan paket yang akan diinstal pada instans EC2 yang menjalankan aplikasi Anda.

  3. Membuat sebuah direktori bernama .ebextensions.

    (eb-virt) ~/ebdjango$ mkdir .ebextensions
  4. Di direktori .ebextensions, tambahkan file konfigurasi bernama django.config dengan teks berikut.

    contoh ~/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.

  5. 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

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.

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. Perintah ini juga mengonfigurasi repositori lokal Anda untuk membuat lingkungan dengan versi platform Python 3.7 terbaru.

  2. (Opsional) Jalankan eb init lagi untuk mengonfigurasi pasangan kunci default, sehingga Anda dapat menggunakan SSH untuk terhubung ke instans EC2 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.

  3. 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.

  4. 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.

  5. 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']
  6. 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.

  7. 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 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!

Perbarui aplikasi Anda

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

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.

    contoh ~/ebdjango/ebdjango/settings.py
    ... # 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.

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

    ~/ebdjango/$ eb deploy

Membuat administrator situs

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
  2. 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.
  3. Untuk memberitahu Django tempat menyimpan file statis, tentukan STATIC_ROOT dalam settings.py.

    contoh ~/ebdjango/ebdjango/settings.py
    # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = 'static'
  4. Jalankanmanage.py collectstaticmengisistaticdirektori dengan aset statis (JavaScript, CSS, dan gambar) untuk situs admin.

    (eb-virt) ~/ebdjango$ python manage.py collectstatic 119 static files copied to ~/ebdjango/static
  5. Men-deploy aplikasi Anda.

    ~/ebdjango$ eb deploy
  6. 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.
  7. 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

Anda dapat menggunakan prosedur pembaruan/pengujian lokal serupa diikuti oleh eb deploy. Elastic Beanstalk melakukan pekerjaan pembaruan server langsung Anda, sehingga Anda dapat fokus pada pengembangan aplikasi bukan administrasi server!

Menambahkan file konfigurasi migrasi basis data

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 bernama db-migrate.config dengan konten berikut.

    contoh ~/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 menjalankanmanage.py migrateperintah selama proses deployment, 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.

  2. Men-deploy aplikasi Anda.

    ~/ebdjango$ eb deploy

Pembersihan

Untuk menyimpan jam instans dan sumber daya AWS lainnya di tengah sesi pengembangan, akhiri lingkungan Elastic Beanstalk Anda dengan eb terminate.

~/ebdjango$ eb terminate django-env

Perintah ini mengakhiri lingkungan dan semua sumber daya AWS 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. Untuk informasi selengkapnya tentang perintah EB CLI, lihat Mengelola beberapa lingkungan Elastic Beanstalk sebagai grup dengan EB CLI.

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

Untuk informasi selengkapnya tentang Django, termasuk tutorial secara mendalam, lihat Dokumentasi resmi.

Jika Anda ingin mencoba kerangka kerja web Python lain, lihat Men-deploy aplikasi Flask ke Elastic Beanstalk.