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/