flask Archives - pakarbot

Cara Deploy App Python Flask Ke Server Ubuntu 22.04 Menggunakan Apache Dan WSGI

Supaya app python flask Anda bisa diakses dari internet menggunakan nama domain maka yang perlu Anda lakukan setelah proses developement di komputer lokal selesai adalah melakukan deploy applikasi ke server.

Kali ini kita akan menggunakan server ubuntu 22.04 dengan web service apache2 dan WSGI.

Oke, pertama yang perlu Anda lakukan adalah setup DNS. Silahkan ikuti tutorial setup DNS di sini https://www.pakarbot.com/vps-mastery-8-step-by-step-setup-wordpress-dari-nol-di-vultr/ (lihat video part 1)

Selanjutnya setup apache2 dan mysql (jika app flask menggunakan database mysql). Di contoh ini kita akan gunakan vps vultr. Anda bisa pakai VPS dari penyedia layanan VPS apapun.

Untuk install apache dan mysql silahkan ikuti panduan di vps mastery di sini. mulai dari panduan untuk menambahkan user non root, panduan install apache2, dan panduan install mysql https://www.pakarbot.com/tahapan-setup-wordpress-di-vps/

Jika install apache2 dan mysql sudah selesai. Sekarang tambahkan domain/sub domain ke configurasi apache. Ikuti step Menambahkan Domain/Addon Domain/Sub Domain Ke di sini https://www.pakarbot.com/tahapan-setup-wordpress-di-vps/

jika sudah, sekarang install SSL. Silahkan ikuti langkah install SSL certificate di link di atas juga.

Oke, selanjutnya adalah membuat database. Untuk membuat database mysql di ubuntu 22.04 silahkan ikuti step Buat Database Untuk WordPress di link di atas. Step di atas judulnya adalah untuk database wordpress. it’s ok, gpp, langkahnya sama persis kok.

Jika membuat database sudah selesai maka proses selanjutnya adalah instal python, dll.

Oke, anda jalankan ini dulu

sudo apt-get update -y && sudo apt-get upgrade -y

kemudian

sudo apt-get install python3 python3-pip python3-venv
python3 -V

oke, sekarang masuk ke direktori web anda. Dalam hal ini jika anda mengikuti step-step dari setiap link di atas secara runut maka direktori web anda adalah /var/www/namaapp

cd /var/www/namaapp

Oke, sekarang jalankan perintah ini

$sudo python3 -m venv namaapp-venv

flask-venv adalah nama virtual environment yang akan kita pakai untuk install module app flask kita sehingga tidak campur aduk dengan module app flask yang lain. Anda bisa mengubah namanya dengan nama yang lain.

kemudian jalankan ini

source flask-venv/bin/activate

nantinya console anda akan menjadi seperti ini

(flask-venv) xxx@host:/var/www/namaapp$

Upload semua file app flask dari komputer lokal ke server.

sekarang jalankan

(flask-venv)$ chown -R usernonroot:usernonroot *
(flask-venv)$ pip3 install flask
(flask-venv)$ export FLASK_APP=app.py

Install semua module yang digunakan di project. Jalankan perintah ini jika di direktori project sudah ada file requirements.txt

(flask-venv)$ pip install -r requirements.txt

Jika belum ada, jalankan ini di mesin devolepment. kemudian upload requirements.txt nya

(flask-venv)$ pip freeze > requirements.txt

Sekarang jalankan app nya

(flask-venv)$ flask --app app run

Oke, sekarang app flask anda sudah bisa jalan. Tetapi ini masih mode development, belum bisa diakses dari internet luar. Step ini hanya untuk testing saja bahwa app anda benar-benar sudah bisa jalan tidak ada error.

oke sekarang lanjut supaya app bisa diakses dari luar. matikan dulu mode venv nya.

(flask-venv) xxx@host:/var/www/namaapp# deactivate

Sekarang install wsgi

sudo apt-get install libapache2-mod-wsgi-py3
sudo nano /var/www/namaapp/namaapp.wsgi

Pastekan script di bawah ini

import sys
sys.path.insert(0,'/var/www/namaapp')

from app import app as application

sekarang konfigurasi apache2 kita supaya menjalankan wsgi

$cd /etc/apache2/site-available
sudo nano namadomain.com-le-ssl.conf

Edit, sesuaikan dengan script di bawah ini. Cek setiap baris script di bawah ini, jika belum ada di file konfigurasi bisa ditambahkan.

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName namadomain.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/namaapp

        WSGIDaemonProcess namaapp user=www-data group=www-data threads=5 python-home=/var/www/namaapp/namaapp-venv
        WSGIScriptAlias / /var/www/namaapp/namaapp.wsgi

    <Directory /var/www/namaapp>
        WSGIProcessGroup namaapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf


SSLCertificateFile /etc/letsencrypt/live/humairapro.pakarbot.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/humairapro.pakarbot.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Enable settinganya

sudo a2ensite namadomain.com

Restart apache

sudo systemctl restart apache2

Selesai. Sekarang anda bisa akses flask app dari internet luar menggunakan nama domain.

tambahan: jika ingin menginstall phpmyadmin bisa mengikuti panduan di sini https://tecadmin.net/how-to-install-phpmyadmin-on-ubuntu-22-04/

Cara Merubah Database Schema Di Flask Tanpa Menghapus Existing Database

Let’s say kita ingin menambahkan kolom baru pada salah satu table di database flask. Ketika proyek sudah running, tentu saja tidak mungkin kita hapus database nya kemudian jalankan ulang flask nya supaya database dibuat dari awal dan memiliki kolom yang baru. Untuk itu kita perlu yang namanya migrasi database, atau upgrade database ke skema yang baru.

Continue reading “Cara Merubah Database Schema Di Flask Tanpa Menghapus Existing Database”