Selamlar. Önceki yazıda hatırlayacağınız üzere caddy ile dotnet core uygulamalarını konuşmuştuk. Bu yazıda Caddy Server ve Flask ile Çalışma hakkında bir şeyler karalayacağız.
Caddy Server ve Flask ile Çalışma
Önceki yazıyı okumuş olmanız bu yazının daha basit şekilde anlaşılmasına imkan verecektir. Bu yazıda caddy için tekrar gidip servis yazmayacağız. Flask app için servis yazacağız. Bu arada Flask kurulu olmalı. Bunu belirtmeme gerek yok sanırım. Projenizi virtualenv üzerinde geliştirebileceğiniz gibi global üzerinden de çalışabilirsiniz. Bu tamamen size kalmış. Ancak virtualenv kullanmak çok daha mantıklıdır.
Flask İçin Servis Yazalım
Flask için yazdığımız servis, .net tarafında yazdığımız servisle aynı olacak. Bazı değişiklikler şart. Örneğin yorumlayıcının işaret ettiği nokta python olmalı. Benim için şöyle bir durum var:
ExecStart=/usr/bin/python2 /var/www/flaskapp/main.py
Buradan anlaşılacağı gibi ExecStart entry pointin çalışacağı noktayı gösteriyor. Yani bu servis, python2 komutunu belirtili yoldaki dosya ile çalıştıracak. Bir de SyslogIdentifier parametresi var. Bu loglar arasında bir kimlik görevi görmekte. Bunu benzersiz yapmanız daima iyidir. Örneğin aynı identifier’a sahip farklı iki uygulamanın serviste çalıştığını varsayalım. Bu uygulamalardan ikisi de bir hata sonucu durmuş. Gidip loglara baktığımızda çok fazla hata görebiliriz. Hangi uygulama hangi hatayı vermiş ayırabilmemiz adına böyle bir identifier bize yarar sağlıyor.
Anlaştığımıza göre servisimizin kodları şöyle olmalı:
nano /etc/systemd/system/flaskapp.service
[Unit] Description=Flask App [Service] WorkingDirectory=/var/www/flaskapp ExecStart=/usr/bin/python2 /var/www/flaskapp/main.py Restart=no RestartSec=10 SyslogIdentifier=flaskapp User=root Environment=Env=Test [Install] WantedBy=multi-user.target
Henüz elimizde herhangi bir Python projesi yok. Gidelim ve /var/www/flaskapp altına main.py adında bir dosya açalım kodları basitçe şöyle olsun:
from flask import Flask app = Flask(__name__) app.config['DEBUG'] = False @app.route('/') def index(): return "Merhaba Dunya" app.run(host='localhost', port=1234)
Şu anda çalıştırırsanız 1234 portunda çalışacaktır. Fakat bu haliyle erişilebilirlik localhost:1234 şeklinde oluyor. Bir de bunun proxy arkasında çalışması gerektiğini belirttik. O zaman /var/www altında yer alan Caddyfile dosyasını şöyle düzeltelim:
flasksitemiz.com:80 { proxy / localhost:1234 { transparent } gzip }
Bu arada bu dosya içerisinde birden fazla site için proxy tanımlaması yapabilirsiniz. Aynı portlarda farklı siteler. Örneğin benim Caddyfile dosyam şöyle:
mvcsitesi.test:80 { proxy / localhost:5000 { transparent } gzip } flask.test:80 { proxy / localhost:9192 { transparent } gzip }
Tabi bu haliyle her şey tamamdır diyemeyiz. Öncelikle flask için oluşturduğumuz servisi başlatalım:
systemctl restart flaskapp
Ardından bir önceki yazıda bahsettiğim caddy servisini tekrar başlatalım:
systemctl restart caddy
Eğer caddy başlatılırken bir hata alırsanız aşağıdaki komutu kullanmanız yeterli olacaktır:
systemctl daemon-reload
Chrome’un developer toolunda yer alan network sekmesinden isteği detaylı incelediğinizde Werkzeug ile birlikte Caddy görünmekte.
Okuduğunuz için teşekkürler.