flask, uwsgi, nginx, macos Localhost setup - @kholidfu
Table of Contents
Terbiasa melakukan setup di lingkungan Linux, mencoba setup di lingkungan macos merupakan satu tantangan tersendiri. Semoga bermanfaat!
1 Flask design
Berikut ini struktur file aplikasi Flask yang saya buat.
~/git/blooms$ tree -L 2 . |-- README.md |-- app | |-- GeoLite2-Country.mmdb | |-- __init__.py | |-- assets | |-- command.py | |-- config.py | |-- forms.py | |-- models.py | |-- static | |-- templates | |-- utils.py | `-- views.py |-- blooms.db |-- requirements.txt `-- wsgi.py
2 Install
2.1 nginx
Install nginx menggunakan brew
brew install nginx
2.2 uwsgi
Install uwsgi
pip install uwsgi
3 Setup
3.1 nginx
Berkas default
diisi yang berkaitan dengan routing saja, untuk optimum
performance tweak, caching dll, sebaiknya diisikan di nginx.conf
.
Buat direktori untuk log
sudo mkdir /Library/Logs/nginx
Buat berkas access.log
sudo touch /Library/Logs/nginx/access.log
Tes konfigurasi
sudo nginx -t
View access log
sudo tail -f /Library/Logs/nginx/access.log
3.2 nginx.conf
Sunting nginx.conf
yang terletak di /usr/local/etc/nginx/nginx.conf
- Uncomment baris berikut:
log_format main '$remote_addr - ...
- Uncomment access.log
access_log /Library/Logs/nginx/access.log main;
- Optimal setup performance
http { # ... more default setup server { # ... more default setup client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k; client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain application/x-javascript text/xml text/css application/xml; location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; } access_log off; } }
- Tambahkan include
include /usr/local/etc/nginx/sites-enabled/*;
3.3 Setting berkas konfigurasi default /usr/local/etc/nginx/sites-*
Karena direktori ini by default belum ada, mari kita bikin dulu.
mkdir -p /usr/local/etc/nginx/sites-{enabled,available} touch -p /usr/local/etc/nginx/sites-available/default cd ../sites-enabled ln -s ../sites-available/default emacs /usr/local/etc/nginx/sites-available/default
Isi berkas default dengan baris berikut:
server { listen 80; listen [::]:80; server_name localhost; location / { try_files $uri @app; proxy_pass http://127.0.0.1:8080; } location @app { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } # serve static files with nginx location /assets { root /Users/macbookpro/git/blooms/app; } }
4 Start nginx
Jalankan nginx menggunakan brew services:
brew services list brew services start nginx
Kalau kedua cara di atas gagal, coba
brew services stop nginx pkill nginx # check config sudah benar belum sudo nginx -t # if no error sudo nginx
5 Setup uwsgi
. bin/activate pip install uwsgi
5.1 Buat berkas wsgi.py in Flask app root dir, which contain:
from app import app if __name__ == "__main__": # sesuaikan port dengan konfig nginx # (default di macos port 8080, bisa dilihat di nginx.conf) app.run(debug=True, port=8080)
6 Jalankan uwsgi
Jalankan uwsgi dengan perintah berikut:
uwsgi --socket /tmp/uwsgi.sock --module wsgi --cale app --virtualenv ~/git/blooms/ --chdir ~/git/blooms --chmod-socket=666
7 Coba jalankan aplikasi Flask di browser
http://127.0.0.1