Menjalankan Webservice berbasis Flask di Server Super Minimalis

in you can try

Kali ini saya mau membagi pengalaman yang baru saja saya alami, duh bahasaku kok mbulet sekali. Intinya, saya punya script lawas yang mengubah aksara latin ke aksara jawa di github saya. Nah, sudah sejak lama saya pingin meng-online-kan serviceservice yang pernah saya bikin, terutama terkait keisengan saya mengemonah aksara jawa.

Permasalahan yang saya hadapi kemudian adalah saya sudah terlanjur nyaman menggunakan supervisord untuk mengelola serviceservice seperti itu. Dan menjadi masalah ketika server yang kita punya terlalu minimalis kayak server saya ini. Apa masalahnya? Command apt-get install berhenti di tengah jalan. Pesannya:

FATAL -> Failed to fork.

Apa yang terjadi? Ternyata karena memory tidak mencukupi. RAM 256MB sudah terpakai untuk menjalankan situs ini, dan hanya tersisa sekitar 75MB. Walhasil, supervisor bukan lagi pilihan. Maka sesuai saran Linggar dan Didit saya beralih pakai systemd.

Without further a do

Tadinya saya bikin script service yang sophisticated, alias saya tentukan working directory, virtual environment path, dan seterusnya, tetapi berkali-kali gagal. Tentu saja ini murni kebodohan saya yang sudah terlanjur nyaman dengan supervisord. Daripada kelamaan, ya sudah, saya pakai tipe simple saja.

#tempatkan ini di /lib/systemd/system/nama-service.service
[Unit]
Description="Service for LatinToJavanese"
After=multi-user.target
[Service]
Type=simple
ExecStart=/full/path/lokasi/virtualenv/bin/python /full/path/lokasi/home/app.py
[Install]
WantedBy=multi-user.target

Setelah memasang script itu, katakanlah namanya latintojava.service, maka kita ubah chmodnya menjadi 644. Setelah itu jalankan

systemctl daemon-reload
systemctl enable latintojava.service

Sudah begitu saja, setelah itu kita bisa pastikan menjalankan servicenya dengan

service latintojava start
service latintojava status

Perintah ke-dua di atas untuk melihat status service kita. Kalau sudah yakin jalan dan tidak ada error, kita tinggal menambahkan directive di nginx supaya service kita bisa dilayani oleh nginx. Karena saya jalankan service saya pakai flask dengan port 5000, maka pasang saja proxy_pass di nginx

#tambahkan ini di block server
location /latintojavanese {
    rewrite /latintojavanese/(.+) $1 break;
    proxy_pass http://127.0.0.1:5000/$1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 5M;
}

Sudah beres. Tinggal menambahkan static files-nya. Caranya ya tinggal menambahkan alias saja di directive nginx.

#taruh saja di bawah directive location di atas
location /nama-static-folder {
    try_files $uri $uri/ $uri.html =404;
    alias /full/path/lokasi/staicfile;
}

Selesai.

Contohnya? Silakan menuju ke sini untuk mencicip service pengubah aksara latin ke aksara jawa yang saya bikin. Cekidot!

Mekaten, semoga bermanfaat!