GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menginstal Flask dengan Python 3 di Ubuntu 18.04

Flask adalah kerangka kerja yang sangat sederhana, tetapi sangat fleksibel yang dimaksudkan untuk menyediakan fungsionalitas aplikasi Anda tanpa terlalu membatasi struktur dan desain. Anda dapat menggunakan tumpukan umum yang dijelaskan dalam artikel ini untuk melayani aplikasi labu yang Anda desain.

Pada artikel ini, kita akan menyiapkan aplikasi Python sederhana menggunakan micro-framework Flask di Ubuntu 18.04.

Sebagian besar artikel ini akan membahas tentang cara menyiapkan server aplikasi Gunicorn untuk meluncurkan aplikasi dan Nginx untuk bertindak sebagai proxy terbalik front-end.

Prasyarat

Sebelum memulai artikel ini, Anda harus memiliki pengguna non-root yang dikonfigurasi di server Anda. Pengguna ini harus memiliki hak sudo agar dapat menjalankan fungsi administratif.

Buat pengguna non-root dengan hak istimewa sudo yang dikonfigurasi:
1- Masuk sebagai Root
2- Membuat Pengguna Baru

# adduser bobby

3- Pemberian Keistimewaan Administratif

Untuk menambahkan hak istimewa ini ke pengguna baru kami, kami perlu menambahkan pengguna baru ke grup sudo. Secara default, di Ubuntu 18.04, pengguna yang tergabung dalam grup sudo diizinkan untuk menggunakan perintah sudo.

# usermod -aG sudo bobby

Instal Komponen dari Repositori Ubuntu

Langkah pertama adalah menginstal semua bagian yang kita butuhkan dari repositori. Kami akan menginstal pip, manajer paket Python 3, untuk menginstal dan mengelola komponen Python 3 kami. Kami juga akan mendapatkan file pengembangan Python 3 yang diperlukan untuk membangun beberapa komponen Gunicorn. Kami akan menginstal Nginx sekarang juga.
Perbarui indeks paket lokal Anda dan kemudian instal paket. Paket spesifik yang Anda butuhkan akan bergantung pada versi Python yang Anda gunakan untuk proyek Anda.
Menginstal Python 3, ketik:

$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev nginx

Buat Lingkungan Virtual Python 3

Selanjutnya, kita akan menyiapkan lingkungan virtual untuk mengisolasi aplikasi Flask kita dari file Python lain di sistem.
Mulailah dengan menginstal paket virtualenv menggunakan pip.
Jika Anda menggunakan Python 3, ketik:

sudo pip3 install virtualenv

Sekarang, kita dapat membuat direktori induk untuk proyek Flask kita. Pindah ke direktori setelah Anda membuatnya:

mkdir ~/flaskproject
cd ~/flaskproject

Kami dapat membuat lingkungan virtual untuk menyimpan persyaratan Python proyek Flask kami dengan mengetik:

virtualenv flaskprojectenv

Ini akan menginstal salinan lokal Python dan pip ke direktori bernama flaskprojectenv di dalam direktori proyek Anda.
Sebelum kita menginstal aplikasi dalam lingkungan virtual, kita perlu mengaktifkannya. Anda dapat melakukannya dengan mengetik:

source flaskprojectenv/bin/activate

Prompt Anda akan berubah untuk menunjukkan bahwa Anda sekarang beroperasi dalam lingkungan virtual. Ini akan terlihat seperti ini (flaskprojectenv)user@host:~/flaskproject$ .

Menyiapkan Aplikasi Flask

Sekarang Anda berada di lingkungan virtual Anda, kami dapat menginstal Flask dan Gunicorn dan mulai merancang aplikasi kami:

Instal Flask dan Gunicorn

Kita dapat menggunakan instance lokal pip untuk menginstal Flask dan Gunicorn. Ketik perintah berikut untuk mendapatkan dua komponen ini:

Catatan: Terlepas dari versi Python yang Anda gunakan, ketika lingkungan virtual diaktifkan, Anda harus menggunakan pip perintah (bukan pip3 ).

(flaskprojectenv) $ pip install gunicorn flask

Buat Aplikasi Contoh

Setelah Flask tersedia, kita dapat membuat aplikasi sederhana. Flask adalah kerangka kerja mikro. Itu tidak menyertakan banyak alat yang mungkin dimiliki oleh kerangka kerja berfitur lengkap, dan ada terutama sebagai modul yang dapat Anda impor ke dalam proyek Anda untuk membantu Anda dalam menginisialisasi aplikasi web.
Meskipun aplikasi Anda mungkin lebih kompleks, kami akan membuat aplikasi Flask kami dalam satu file, yang akan kami sebut flaskproject.py:

(flaskprojectenv) $ nano ~/flaskproject/flaskproject.py

Di dalam file ini, kami akan menempatkan kode aplikasi kami. Pada dasarnya, kita perlu mengimpor labu dan membuat instance objek Flask. Kita dapat menggunakan ini untuk mendefinisikan fungsi yang harus dijalankan ketika rute tertentu diminta:

~/flaskproject/flaskproject.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def greeting():
    return "<h1 style='color:green'>Hello World!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

Ini pada dasarnya mendefinisikan konten apa yang akan ditampilkan ketika domain root diakses. Simpan dan tutup file setelah Anda selesai.

Jika Anda mengikuti panduan penyiapan server awal, Anda harus mengaktifkan firewall UFW. Untuk menguji aplikasi kita, kita perlu mengizinkan akses ke port 5000.

Buka port 5000 dengan mengetik:

(flaskprojectenv) $ sudo ufw allow 5000

Sekarang, Anda dapat menguji aplikasi Flask Anda dengan mengetik:

(flaskprojectenv) $ python flaskproject.py

Kunjungi nama domain atau alamat IP server Anda diikuti dengan :5000 di browser web Anda:

http://server_domain_or_IP:5000

Anda akan melihat sesuatu seperti ini:

Setelah selesai, tekan CTRL-C di jendela terminal Anda beberapa kali untuk menghentikan server pengembangan Flask.

Buat Titik Masuk WSGI

Selanjutnya, kita akan membuat file yang akan berfungsi sebagai titik masuk untuk aplikasi kita. Ini akan memberi tahu server Gunicorn kami cara berinteraksi dengan aplikasi.

Kami akan memanggil file wsgi.py :

(flaskprojectenv) $ nano ~/flaskproject/wsgi.py

Filenya sangat sederhana, kita cukup mengimpor instance Flask dari aplikasi kita dan kemudian menjalankannya:

~/flaskproject/wsgi.py
from flaskproject import app

if __name__ == "__main__":
    app.run()

Simpan dan tutup file setelah Anda selesai.

Menguji Kemampuan Gunicorn untuk Melayani Proyek

Sebelum melanjutkan, kita harus memeriksa apakah Gunicorn bisa dengan benar. Kita dapat melakukan ini hanya dengan memberikannya nama titik masuk kita. Ini dibangun dengan nama modul (dikurangi .py ekstensi, seperti biasa) ditambah nama yang dapat dipanggil dalam aplikasi. Dalam kasus kami, ini akan menjadi wsgi:app .

Kami juga akan menentukan antarmuka dan port untuk mengikat sehingga akan dimulai pada antarmuka yang tersedia untuk umum:

(flaskprojectenv) $ cd ~/flaskproject
(flaskprojectenv) $ gunicorn --bind 0.0.0.0:5000 wsgi:app

Kunjungi nama domain atau alamat IP server Anda dengan :5000 ditambahkan ke akhir di browser web Anda lagi:

http://server_domain_or_IP:5000

Anda akan melihat output aplikasi Anda lagi:

Ketika Anda telah memastikan bahwa itu berfungsi dengan baik, tekan CTRL-C di jendela terminal Anda.
Sekarang kita sudah selesai dengan lingkungan virtual kita, jadi kita bisa menonaktifkannya:

(flaskprojectenv) $ deactivate

Perintah Python apa pun sekarang akan menggunakan lingkungan Python sistem lagi.

Buat File Unit systemd

Bagian berikutnya yang perlu kita urus adalah file unit layanan systemd. Membuat file unit systemd akan memungkinkan sistem init Ubuntu untuk secara otomatis memulai Gunicorn dan melayani aplikasi Flask kami setiap kali server melakukan booting.

Buat file unit yang diakhiri dengan .service dalam /etc/systemd/system direktori untuk memulai:

$ sudo nano /etc/systemd/system/flaskproject.service

Di dalam, kita akan mulai dengan [Unit] bagian, yang digunakan untuk menentukan metadata dan dependensi. Kami akan menempatkan deskripsi layanan kami di sini dan memberi tahu init sistem untuk memulai ini hanya setelah target jaringan tercapai

Selanjutnya, kita akan membuka [Service] bagian. Kami akan menentukan pengguna dan grup yang kami inginkan untuk menjalankan proses. Kami akan memberikan kepemilikan akun pengguna reguler kami atas proses tersebut karena ia memiliki semua file yang relevan. Kami akan memberikan kepemilikan grup ke www-data grup sehingga Nginx dapat berkomunikasi dengan mudah dengan proses Gunicorn.

Kami kemudian akan memetakan direktori kerja dan mengatur variabel lingkungan PATH sehingga init sistem tahu di mana executable kami untuk proses berada (dalam lingkungan virtual kami). Kami kemudian akan menentukan perintah untuk memulai layanan. Systemd mengharuskan kami memberikan path lengkap ke executable Gunicorn, yang diinstal dalam lingkungan virtual kami.

Kami akan memberitahunya untuk memulai 3 proses pekerja (sesuaikan ini seperlunya). Kami juga akan memintanya untuk membuat dan mengikat ke file soket Unix dalam direktori proyek kami yang disebut flaskproject.sock . Kami akan menetapkan nilai umask 007 sehingga file socket dibuat memberikan akses ke pemilik dan grup, sementara membatasi akses lainnya. Terakhir, kita perlu memasukkan nama file titik masuk WSGI dan Python yang dapat dipanggil di dalamnya.

Terakhir, kita akan menambahkan [Install] bagian. Ini akan memberi tahu systemd ke mana harus menautkan layanan ini jika kami mengaktifkannya untuk memulai saat boot. Kami ingin layanan ini dimulai ketika sistem multi-pengguna biasa aktif dan berjalan:

/etc/systemd/system/flaskproject.service
[Unit]
Description=Gunicorn instance to serve flaskproject
After=network.target

[Service]
User=bobby
Group=www-data
WorkingDirectory=/home/bobby/flaskproject
Environment="PATH=/home/bobby/flaskproject/flaskprojectenv/bin"
ExecStart=/home/bobby/flaskproject/flaskprojectenv/bin/gunicorn --workers 3 --bind unix:flaskproject.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

Dengan itu, file layanan systemd kami selesai. Simpan dan tutup sekarang.

Kami sekarang dapat memulai layanan Gunicorn yang kami buat dan mengaktifkannya sehingga dimulai saat boot:

$ sudo systemctl start flaskproject
$ sudo systemctl enable flaskproject

Mengonfigurasi Nginx ke Permintaan Proksi

Server aplikasi Gunicorn kami sekarang harus aktif dan berjalan, menunggu permintaan pada file soket di direktori proyek. Kita perlu mengonfigurasi Nginx untuk meneruskan permintaan web ke soket itu dengan membuat beberapa tambahan kecil pada file konfigurasinya.

Mulailah dengan membuat file konfigurasi blok server baru di sites-available Ng Nginx direktori. Kami hanya akan menyebut flaskproject ini untuk tetap sejalan dengan sisa artikel:

$ sudo nano /etc/nginx/sites-available/flaskproject

Buka server blokir dan beri tahu Nginx untuk mendengarkan pada port default 80. Kami juga perlu memberi tahunya agar menggunakan blok ini untuk permintaan nama domain atau alamat IP server kami.

Satu-satunya hal lain yang perlu kita tambahkan adalah location blok yang cocok dengan setiap permintaan. Dalam blok ini, kami akan menyertakan proxy_params file yang menentukan beberapa parameter proxy umum yang perlu diatur. Kami kemudian akan meneruskan permintaan ke soket yang kami definisikan menggunakan proxy_pass arahan:

/etc/nginx/sites-available/flaskproject
server {
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/bobby/flaskproject/flaskproject.sock;
    }
}

Itu sebenarnya semua yang kita butuhkan untuk melayani aplikasi kita. Simpan dan tutup file setelah Anda selesai.

Untuk mengaktifkan server Nginx blokir konfigurasi yang baru saja kita buat, tautkan file ke sites-enabled direktori:

$ sudo ln -s /etc/nginx/sites-available/flaskproject /etc/nginx/sites-enabled

Dengan file di direktori itu, kita dapat menguji kesalahan sintaks dengan mengetik:

$ sudo nginx -t

Jika ini kembali tanpa menunjukkan masalah apa pun, kami dapat memulai kembali proses Nginx untuk membaca konfigurasi baru kami:

$ sudo systemctl restart nginx

Hal terakhir yang perlu kita lakukan adalah menyesuaikan firewall kita lagi. Kami tidak lagi membutuhkan akses melalui port 5000, jadi kami dapat menghapus aturan itu. Kami kemudian dapat mengizinkan akses ke server Nginx:

$ sudo ufw delete allow 5000
$ sudo ufw allow 'Nginx Full'

Anda sekarang dapat membuka nama domain atau alamat IP server Anda di browser web Anda:

http://server_domain_or_IP

Anda akan melihat keluaran aplikasi Anda:

Catatan:Setelah mengkonfigurasi Nginx, langkah selanjutnya adalah mengamankan lalu lintas ke server menggunakan SSL/TLS. Ini penting karena tanpanya, semua informasi, termasuk kata sandi, dikirim melalui jaringan dalam bentuk teks biasa. Cara termudah mendapatkan sertifikat SSL untuk mengamankan lalu lintas Anda adalah menggunakan Let's Encrypt.

Baca Juga

  • Cara Memasang Let's Encrypt SSL Certificates di Ubuntu 18.04
  • Cara Menyetel Lingkungan Pengembangan Django di Ubuntu 18.04
  • Cara Menginstal LEMP di Ubuntu 18.04

Kesimpulan: Pada artikel ini, kami telah membuat aplikasi Flask sederhana dalam lingkungan virtual Python. Kami membuat titik masuk WSGI sehingga setiap server aplikasi berkemampuan WSGI dapat berinteraksi dengannya, dan kemudian mengonfigurasi server aplikasi Gunicorn untuk menyediakan fungsi ini. Setelah itu, kami membuat file unit systemd untuk meluncurkan server aplikasi secara otomatis saat boot. Kami membuat blok server Nginx yang meneruskan lalu lintas klien web ke server aplikasi, menyampaikan permintaan eksternal.


Ubuntu
  1. Cara Menginstal Python 3.9 di Ubuntu 18.04

  2. Bagaimana Cara Menginstal Flask di Ubuntu 20.04?

  3. Cara menginstal Python 3.9 di Ubuntu 20.04

  1. Cara Menginstal Python 3 di Ubuntu 18.04 atau 20.04

  2. Bagaimana Cara Menginstal Python 3.2 Di Ubuntu 13.04?

  3. Cara Menginstal Python 3.6 di Ubuntu 16.04

  1. Cara Menginstal Flask di Ubuntu 18.04

  2. Cara Menginstal Python 3.7 di Ubuntu 18.04

  3. Cara Menginstal Python 3.8 di Ubuntu 18.04