GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Deploy Aplikasi Flask dengan Dokku

Dokku adalah Platform-as-a-Service (PaaS) yang dihosting sendiri yang membuat penerapan aplikasi menjadi sederhana menggunakan Git. Meskipun implementasi Dokku mirip dengan Heroku, ia tidak memiliki fitur utama tertentu seperti penskalaan otomatis. Dokku adalah alat yang sangat kuat yang secara otomatis menjalankan aplikasi Anda di dalam Docker dan memerlukan konfigurasi server web yang minimal.

Panduan ini menunjukkan cara:

  • Buat aplikasi Flask yang menampilkan 'Hello World!' pada halaman indeks
  • Instal Dokku di Linode
  • Menyebarkan aplikasi Flask dengan server WSGI di dalam wadah Docker
  • Tambahkan sertifikat SSL melalui Dokku dengan plugin Let's Encrypt

Sebelum Anda Mulai

Di Komputer Lokal Anda

Catatan Dokku v0.12.5 kompatibel dengan Ubuntu 16.04 x64, Ubuntu 14.04 x64, dan Debian 8.2 x64. CentOS 7 x64 hanya didukung secara eksperimental, dan oleh karena itu beberapa langkah seperti mengonfigurasi kunci SSH dan host virtual harus dilakukan secara manual menggunakan antarmuka baris perintah dokku. Lihat dokumentasi resmi untuk informasi lebih lanjut.

Kunci publik diasumsikan tersedia. Biasanya ini terletak di ~/home/username/.ssh/id_rsa.pub .

Instal Git jika diperlukan:

sudo apt install git

Di Linode Anda

Skrip pemasangan Dokku membuat dokku pengguna pada sistem, menginstal Docker, dan menarik gambar yang relevan.

  1. Download script install dari Dokku lalu jalankan script:

    wget https://raw.githubusercontent.com/dokku/dokku/v0.12.5/bootstrap.sh
    sudo DOKKU_TAG=v0.12.5 bash bootstrap.sh
    
    Preparing to install v0.11.6 from https://github.com/dokku/dokku.git...
    For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory
    If necessary, please consult this document to setup swap: http://dokku.viewdocs.io/dokku/advanced-installation/#vms-with-less-than-1gb-of-memory
    --> Ensuring we have the proper dependencies
    --> Initial apt-get update
    --> Installing docker
    --> NOTE: Using Linode? Docker may complain about missing AUFS support.
        You can safely ignore this warning.
            Installation will continue in 10 seconds.
    ...
  2. Arahkan ke alamat IP publik Linode Anda di browser dan masukkan kunci publik:

    Hati-hati Tambahkan kunci publik segera setelah menjalankan skrip instalasi untuk menghindari orang lain menambahkan kunci publik ke Dokku. Untuk pemasangan tanpa pengawasan, lihat petunjuk pemasangan lanjutan.
  3. Untuk menambahkan kunci SSH tambahan, pipa output melalui SSH ke dokku pengguna. Ganti example.com dengan alamat IP Linode Anda.

    cat ~/.ssh/id_rsa.pub | ssh [email protected] ssh-keys:add new-key
    

Buat Aplikasi Flask

  1. Di komputer lokal Anda, buat direktori proyek baru:

    mkdir flask-example && cd flask-example
    
  2. Buat file baru bernama hello_world.py yang menyajikan 'Hello World!' di halaman indeks.

    File:hello_world .py
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    import os
    
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'Hello World!'
    
    if __name__ == '__main__':
        # Bind to PORT if defined, otherwise default to 5000.
        port = int(os.environ.get('PORT', 5000))
        app.run(host='127.0.0.1', port=port)
  3. Tambahkan requirements.txt file untuk melacak versi dependensi aplikasi Flask. Gunicorn adalah server WSGI yang digunakan untuk memungkinkan Flask berinteraksi dengan benar dengan NGINX.

    File:persyaratan .txt
    1
    2
    
    Flask==0.12.1
    gunicorn==19.7.1
  4. Untuk proyek yang lebih kompleks dengan banyak dependensi menggunakan lingkungan virtual, alihkan output pip freeze ke requirements.txt .

    pip freeze > requirements.txt
    

Tambahkan gitignore

Secara opsional, tambahkan .gitignore file agar Git menghilangkan caching dan file lingkungan virtual dari kontrol versi.

File:. .gitignore
1
2
3
4
__pycache__/
*.pyc

venv/

Procfile

Procfile memberi tahu server Gunicorn perintah apa yang harus digunakan saat meluncurkan aplikasi:

File:Procfile
1
web: gunicorn hello_world:app --workers=4
Catatan 4 pekerja adalah default yang baik untuk aplikasi web yang berjalan di Linode. Lihat dokumenGunicorn untuk informasi lebih lanjut tentang menentukan jumlah pekerja yang benar untuk aplikasi khusus Anda.

Git Remote

  1. Inisialisasi repositori Git:

    git init
    git add .
    git commit -m "Deploy Flask with Dokku"
    
  2. Tambahkan remote bernama dokku dengan nama pengguna dokku dan ganti example.com dengan alamat IP publik Linode Anda:

    git remote add dokku [email protected]:flask-example
    
  3. Pastikan remote telah ditambahkan:

    git remote -v
    

    Ini akan mencantumkan remote.

    dokku   [email protected]:flask-example (fetch)
    dokku   [email protected]:flask-example (push)

    Singkatnya, tata letak proyek terlihat seperti:

    flask-example
    ├── .gitignore
    ├── Procfile
    ├── hello_world.py
    └── requirements.txt
    

Buat Proyek di Host Dokku

  1. SSH ke Linode Anda dan buat aplikasinya:

    dokku apps:create flask-example
    
  2. Pastikan VHOST diaktifkan.

    dokku domains:enable flask-example
    

Menyebarkan Aplikasi Flask

  1. Di komputer lokal Anda, gunakan aplikasi Flask dengan mendorong cabang ke dokku terpencil. Ini akan menangani NGINX di belakang layar dan mengekspos port 80 :

    git push dokku master
    

    Cabang lokal lainnya juga dapat di-deploy tetapi, semua cabang harus didorong ke cabang master dokku jarak jauh:

    git push dokku branch-name:master
    
  2. curl alamat IP Linode Anda untuk menguji apakah aplikasi berhasil diterapkan:

    curl example.com
    
    Hello World!

Sertifikat SSL dengan Dokku dan Let's Encrypt

Langkah selanjutnya dalam panduan ini harus dilakukan dari Linode Anda.

  1. Instal plugin Let's Encrypt untuk Dokku:

    sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
    
  2. Setel DOKKU_LETSENCRYPT_EMAIL variabel lingkungan ke email untuk Let's Encrypt:

    dokku config:set flask-example [email protected]
    
  3. Tambahkan aplikasi dan domain:

    dokku domains:add flask-example example.com
    
  4. Buat sertifikat SSL. NGINX akan secara otomatis mulai melayani aplikasi melalui HTTPS pada port 443:

     dokku letsencrypt flask-example
    
  5. Jalankan ini sebagai tugas cron sehingga sertifikat akan diperbarui secara otomatis:.

    dokku letsencrypt:cron-job --add
    
    Catatan Ini membutuhkan Dokku versi 0.5 atau lebih tinggi. Periksa dengan menjalankan dokku version .

Mulai, Hentikan, dan Mulai Ulang Aplikasi

  • Daftar semua aplikasi Dokku yang berjalan:

      dokku apps
    
  • Mulai ulang aplikasi:

      dokku ps:restart flask-example
    
  • Menghentikan aplikasi:

      dokku ps:stop flask-example
    
  • Pulihkan semua aplikasi setelah reboot:

      dokku ps:restore
    

Melihat Log Aplikasi

Lihat log aplikasi melalui Dokku atau container Docker.

  1. Untuk melihat log melalui Dokku:

    dokku logs flask-example
    
  2. Daftar semua container Docker yang berjalan:

    sudo docker ps -a
    
  3. Temukan ID penampung lalu jalankan:

    sudo docker logs container_id
    

Skala Aplikasi

Dokku tidak menskalakan aplikasi secara otomatis, dan secara default hanya akan menjalankan satu web proses. Untuk menambah jumlah container yang menjalankan aplikasi Anda, Anda dapat menggunakan ps:scale perintah.

  1. Periksa berapa banyak pekerja yang dimiliki aplikasi Anda saat ini:

    dokku ps:scale flask-example
    
    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                1
  2. Skalakan hingga 4 web proses:

    dokku ps:scale flask-example web=4
    
  3. Konfirmasikan bahwa proses baru sedang berjalan:

    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                4

Dokku adalah alternatif open source untuk Heroku untuk aplikasi kecil. Menyebarkan aplikasi semudah mendorong ke remote dengan Git. Elemen seperti Docker dan NGINX diabstraksikan untuk meminimalkan waktu penerapan. Ada fitur tambahan seperti kait pra-penerapan dan basis data penautan yang tidak ditampilkan dalam panduan ini.

Informasi Lebih Lanjut

Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.

  • Dokku PaaS
  • Termos

Docker
  1. Cara menyebarkan Aplikasi Node.js dengan pm2 dan Nginx di Ubuntu

  2. Cara Menyebarkan Layanan Mikro dengan Docker

  3. Cara Menyebarkan Aplikasi dengan Rancher

  1. Terapkan Modsecurity dengan Nginx di Ubuntu 20.04 LTS

  2. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  3. Cara Deploy Aplikasi Flask dengan Nginx dan Gunicorn di Ubuntu 20.04

  1. Buat aplikasi desktop Linux dengan Ruby

  2. Aplikasi Dockerizing Flask Menggunakan Docker di Debian 10

  3. Cara Menyebarkan Aplikasi Web Clojure dengan Nginx di Ubuntu 20.04