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.