Digital Ocean (DO) - Ubuntu üzerinde Python web uygulaması kurulumu / yayına alma ve güncelleme ile ilgili notlar.
Ubuntu 16.04
Nginx 1.10.3
Python 3.6.4
Problemler
-Tüm kurulumlardan sonra çalışan sistemde güncellemelerde.
Bir paket güncellemesinde "pip install -U x" wheel üretilme adımında kurulum
killed olarak sonlanıyorsa bellek yetmezliğinden kaynaklanıyor olabilir. örn:
https://github.com/explosion/spaCy/issues/1586
Normalde 2GB kurulumlarda yetmişti linux güncellemelerinden yada yeni python package den kaynaklı sıkıntı olabilir.
Bu durumda uygulama başlamaz ve alttaki problem ortaya çıkabilir.
gunicorn connect() to unix:/*.sock failed (2: No such file or directory) while connecting to upstream,
Daha detay bilgi almak için systemd service dosyasında gunicorn için log gile parametreleri belirtilebilir.
ExecStart=/home/app/_env/bin/gunicorn --workers 2 --bind unix:lingoapi.sock -m 007 wsgi:flask_app -e LINGOAPPENV=PROD --error-logfile /home/app/logs/gunierr.txt, --log-file /home/app/logs/guni.log
Normalde yetmesi gereken 2GB yetmediğinde swap dosyası tanımı yapılabilir.
Yapmak için :
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04
Swap tanımı yapıp güncellemeyi (pip install) yaptıktan sonra eğer sunucu reboot edilirse swap dosyası uçacaktır. Dolayısıyla güncelleme de aynı problem tekrar edecektir.
-Artan bellek problemine bir çözüm önerisi
gunicorn apps.wsgi:application -b 127.0.0.1:8080 --workers 8
--max-requests 1000
Her bin istekten sonra app pool recycle benzeri işlem
https://rayed.com/posts/2014/09/django-memory-leak-with-gunicorn/
-Bellek kullanım detaylarını görmek için kullanılabilecek bir script
https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
>python3 ps_mem.py
-Memory leak tespiti için:
https://pypi.org/project/Dozer/
Dozer was originally a WSGI middleware version of Robert Brewer’s Dowser CherryPy tool that displays information as collected by the gc module to assist in tracking down memory leaks. It now also has middleware for profiling and for looking at logged messages.
Sistem kurulum adımları
1. Tanımlar / Configler
-non-root kullanıcı oluşturma - putty ile bağlanma
-Uygulama dizinler, dizin yazma hakkı, firewall vs güvenlik tanımları
2. Kurulumlar (nginx, python...)
3. Geliştirilen uygulamanın kurulum : virtual env, ...
Alternatifler: herşey manuel, docker, dokku, captainduckduck, rancher?)
---Deployment/Güncelleme (deploy, config change) / staging, live... > blue/green deployment
4. Diğer Konular
---SSL (Nginx üzerine)
---Güvenlik
---Kayıtlar / Loglar
---Performans
---Coğrafi dağıtık kurulum alternatifleri
----DNS, IP, istemci performans ölçümüne göre