Raspberry Pi'de Python Flask Web Uygulaması Çalıştırma

Bu yazı, PiMyLifeUp - Running a Python Flask Web App on a Raspberry Pi kaynağından Türkçe'ye çevrilerek hazırlanmıştır.

Bu eğitim, Raspberry Pi'de bir Python Flask web uygulamasını nasıl kurup çalıştırabileceğinizi gösterecek.

Raspberry Pi Flask

Flask, Python kullanarak bir web uygulaması yazmanızı ve çalıştırmanızı sağlayan bir web çerçevesidir (framework).

Bu çerçeve, Python betiklerinize bir web arayüzü eklemenin harika bir yoludur. Örneğin, bir sıcaklık sensöründen veri okuyan bir Raspberry Pi'niz varsa, bu değeri doğrudan bir web sayfasına yazdırabilirsiniz.

Python'a aşinaysanız, Raspberry Pi'nizde bir web uygulaması geliştirmek oldukça basit bir süreç olacaktır. Flask, başlaması gerçekten kolay bir çerçevedir ve sadece birkaç satır kodla yeni rotalar (route) tanımlamanızı sağlar.

Raspberry Pi'nizde Flask çerçevesiyle nasıl programlama yapılacağına çok derinlemesine girmeyeceğiz, ancak basit bir "hello world" betiğini gösterip açıklayacak ve bunu Apache kullanarak nasıl barındırabileceğinizi göstereceğiz.

Flask ile Django çerçeveleri arasında karar veriyorsanız, Flask'ın daha hafif olduğunu ama temelde her ek işlevselliği kendiniz yazmanız gerektiğini göreceksiniz. Django, geliştirme sürecini hızlandıran çok büyük miktarda ek kod içerir.

Raspberry Pi'nizde Bir Python Flask Web Uygulaması Kurma

Aşağıdaki adımlarda, Raspberry Pi'nize Python tabanlı bir Flask web uygulamasının nasıl kurulacağını göstereceğiz. Gerekli Python modüllerini kolayca nasıl kuracağınızı ve kendi basit web uygulamanızı nasıl yazacağınızı öğreneceksiniz.

Flask'ın nasıl kullanılacağına çok derinlemesine girmeyeceğiz; bunun yerine, başlamanız için yeterli bilgiyi vermeyi hedefliyoruz. Bunu yeni bir eğitimde daha da genişletmemizi isterseniz, aşağıya bir yorum bırakmaktan çekinmeyin.

Pi'nizi Hazırlama

1. Raspberry Pi'mizde bir Python Flask web uygulaması kurabilmemiz için, işletim sistemimizin güncel olduğundan emin olmamız gerekiyor.

Aşağıdaki iki komutu kullanarak Pi'nizin paket listesi önbelleğini güncelleyebilir ve güncel olmayan tüm paketleri yükseltebilirsiniz.

sudo apt update
sudo apt upgrade -y

2. Paket listesi önbelleği güncellendikten sonra, aşağıdaki komutu çalıştırarak Raspberry Pi'nize Python ve Flask'ı kurabiliriz.

Pi OS'nin daha yeni sürümlerinde pip kullanmanın ekstra zahmetinden kaçınmak için Flask'ı bu şekilde kuruyoruz.

sudo apt install python3 python3-flask

İlk Python Flask Web Uygulamanızı Yazma

3. Raspberry Pi'mizde basit Flask Web uygulamamızı saklamak için bir dizin oluşturarak bu sürece başlayalım.

"/opt/" klasörü içinde "flaskapp" adlı bir dizin oluşturmak için mkdir komutunu kullanabiliriz.

sudo mkdir -p /opt/flaskapp/

4. Artık Raspberry Pi'nizde Flask Python kütüphanesi kurulu olduğuna göre, ilk Python destekli web uygulamanızı yazmaya geçebiliriz.

Aşağıdaki komutu çalıştırarak "app.py" adlı bir betik yazmaya başlayabilirsiniz.

sudo nano /opt/flaskapp/app.py

5. Şimdi bu dosyanın içine, aşağıdaki Python satırlarını girmek isteyeceksiniz. İhtiyaçlarınıza göre nasıl ayarlayacağınızı öğrenebilmeniz için bu kodun her bölümünün ne yaptığını açıklayacağız.

Python ile programlama yaparken hatırlamanız gereken bir şey, girintilemenin (indentation) son derece önemli olduğudur.

Örnek Kodun Açıklanması

a. Bu betiğin en üstünde, daha önce Raspberry Pi'mize kurduğumuz Flask kütüphanesini içe aktarıyoruz. Bu kütüphane, HTML görüntülemeyi ve rotaları işlemeyi ele alacak olan şeydir.

Flask kütüphanesini içe aktardıktan sonra, kütüphaneyi "app" değişkeninde örnekleyeceğiz (instantiate).

from flask import Flask

app = Flask(__name__)

b. Bir sonraki adımımız, ilk Flask rotamızı ve o belirli rota üzerinde çalıştırılacak fonksiyonu tanımlamaktır.

Bir rota, çalıştırılan fonksiyondan hemen önce "@app.route()" kullanılarak tanımlanır. Parantez (( )) içinde, bu rotanın dinleyeceği yolu belirtirsiniz. Bu ilk örnek için, "/" kullanıyoruz, böylece bu rota, biri web sitenizin ana sayfasına ulaştığında, örneğin "http://pimylifeup.com/" adresine gittiğinde çalıştırılacaktır.

Bir rota tanımlandıktan sonra, onun üzerinde çalıştırılacak fonksiyonu tanımlamanız gerekir. Bu durumda, "index" adında basit bir fonksiyon oluşturuyoruz.

Bu fonksiyon tarafından döndürülen herhangi bir metin, son kullanıcıya gösterilecektir.

@app.route('/')
def index():
    return 'Hello world'

c. Tüm Flask rotalarınızı tanımladıktan sonra, betiği Raspberry Pi'nizde Flask web sunucusunu başlatacak bir çağrıyla bitirmek isteyeceksiniz.

Bu çağrı önce Python betiğinizin doğrudan çalıştırıldığından ve içe aktarılmadığından emin olmak için kontrol yapar. Bu, bağlantılarınızı işlemek için Apache gibi bir şey kullanırken dahili web sunucusunu çalıştırmamanızı sağlar.

Ardından, betiğin başında oluşturduğumuz "app" değişkenini kullanır ve web sunucusunu başlatmak için Flask'ın "run()" fonksiyonunu kullanırız. Burada, ek bilgi çıktısı vermesi için "debug" değerini True olarak ayarlıyoruz. Ardından web sunucusunu mevcut tüm adreslere bağlamak için host'u "0.0.0.0" olarak ayarlıyoruz.

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Flask Örnek Kodunun Son Sürümü

6. Tüm kod satırlarını yazmayı bitirdiğinizde, dosyanız aşağıda gösterdiğimize benzer görünmelidir.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello world'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

7. Bu dosyayı bitirdikten sonra, CTRL + X, Y ve ardından ENTER tuşuna basarak kaydedip çıkabilirsiniz.

Yeni Python Flask Web Uygulamanızı Test Etme

8. Raspberry Pi'nizde örnek Flask web uygulamamızı başlatmak için, terminalde aşağıdaki komutu çalıştırın.

sudo python3 /opt/flaskapp/app.py

Terminalde sunucunun başladığını ve debug modunun etkin olduğunu belirten bir metin göreceksiniz. Ayrıca sunucunuzun şu anda hangi IP adreslerinde çalıştığını da söyleyecektir.

 * Serving Flask app 'flaskexample'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.0.32:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 114-446-032

9. Şimdi, favori web tarayıcınızda, aşağıdaki adrese gidin. "<IPADRESI>" kısmını Raspberry Pi'nizin IP'siyle değiştirdiğinizden emin olun.

http://<IPADRESI>:5000/

10. Artık sizi "Hello World" yazan çok basit bir ekran karşılamalıdır. Bu noktada, Raspberry Pi'nizde ilk Flask web uygulamanızı başarıyla yazmış ve başlatmış oldunuz.

Hello World

Raspberry Pi'de Python Flask Web Uygulamanızı Çalıştırmak İçin Apache Kullanma

Flask kendi web sunucusunu içerse de, bunu gerçek üretim ortamında kullanmak önerilmez. Öncelikle web uygulamanızı geliştirmenize yardımcı olmak için dahil edilmiştir. Neyse ki, Raspberry Pi'nizde Flask web uygulamanızı sunmak için Apache kurmak çok da karmaşık değil.

Bu bölüm, önceki örnek betiğimizi Apache web sunucusu üzerinden çalıştırma adımlarında size hızlıca rehberlik edecek.

Bunu kendi web uygulamanız için kullanıyorsanız, yapmanız gereken asıl şey "/opt/flaskapp" dizinini web uygulamanızı sakladığınız konuma güncellemektir.

Gerekli Modülleri Kurma

1. Devam edebilmemiz için, önce Apache web sunucusunu kurmanız gerekir.

Raspberry Pi'nize Apache kurma ile ilgili hızlı ve kolay rehberimizi takip edebilirsiniz.

2. Apache'yi kurduktan sonra, bir sonraki adımınız Apache ve Python 3 için mod wsgi kütüphanesini kurmaktır. Bu, Raspberry Pi'mizden Flask web uygulamamızı çalıştırmamızı sağlayacak temel kütüphanedir.

Terminalde aşağıdaki komutu çalıştırarak bu gerekli modülü kurabilirsiniz.

sudo apt install libapache2-mod-wsgi-py3

Flask Uygulamanız İçin Bir WSGI Uygulaması Yazma

4. Tüm parçalar yerinde olduğuna göre, çok basit bir "wsgi" dosyası oluşturmanız gerekiyor. Bu dosya temelde Flask web uygulamanızı başlatmak için kullanılan biraz Python koddur.

Bu dosyayı yazmaya terminalde aşağıdaki komutu çalıştırarak başlayabilirsiniz.

sudo nano /opt/flaskapp/app.wsgi

5. Bu dosyanın içine, aşağıdaki satırları girmek isteyeceksiniz. Buradaki iki temel şey, Flask web uygulamamızın saklandığı yolun ve içe aktardığımız modülün ne olduğudur.

import sys
sys.path.insert(0,'/opt/flaskapp')

from app import app as application

6. Bu dosyayı doldurduktan sonra, CTRL + X, Y ve ardından ENTER tuşuna basarak kaydedip çıkabilirsiniz.

Raspberry Pi'de Flask Uygulamanızı Çalıştırmak İçin Apache Sanal Ana Bilgisayarını (Virtual Host) Değiştirme

7. Bir sonraki adımınız, biri Apache web sunucunuza her ulaştığında Flask uygulamanızı çalıştıracak şekilde bir Apache sanal ana bilgisayarını değiştirmektir.

Bu örnek için, aşağıdaki komutu kullanarak varsayılan yapılandırma dosyasını değiştireceğiz.

sudo nano /etc/apache2/sites-enabled/000-default.conf

8. Bu örneğin içinde, sanal ana bilgisayarın kapanış etiketini görene kadar aşağı kaydırın. Yeni satırlarınızı bunun üzerine eklemek isteyeceksiniz.

</VirtualHost>

9. Sanal ana bilgisayar satırının üzerine, aşağıdaki satırları eklemek isteyeceksiniz. Bu satırlar, Apache'ye Flask uygulamanızı ve daha önce oluşturduğumuz, çalıştırması gereken ".wsgi" dosyasını nasıl ele alacağını söyler.

WSGIDaemonProcess app user=www-data group=www-data threads=4
WSGIScriptAlias / /opt/flaskapp/app.wsgi

<Directory /opt/flaskapp>
    WSGIProcessGroup app
    WSGIApplicationGroup %{GLOBAL}
    Require all granted
</Directory>

10. Bu dosyayı doldurmayı bitirdikten sonra, CTRL + X, Y ve ardından ENTER tuşuna basarak kaydedip çıkın.

11. Şimdi, Raspberry Pi'nizin Apache web sunucusunun Flask web uygulamanızı sunmaya başlaması için, aşağıdaki komutu kullanmak isteyeceksiniz.

Bu komut, yeni yapılandırma değişikliklerinizi yüklemesi için Apache'yi yeniden başlatacaktır.

sudo systemctl restart apache2

Flask Web Uygulamanızın Raspberry Pi'nizde Erişilebilir Olduğunu Test Etme

12. Apache varsayılan olarak 80 portunda çalıştığından, doğrudan Pi'nizin IP adresine giderek Flask web uygulamanızın sonuçlarını görebilmeniz gerekir.

http://<IPADRESI>

13. Örnek betiğimizi kullandıysanız, komut satırında "hello world" metnini görmelisiniz.

Hello World

Sonuç

Umarız bu eğitimin bu noktasında, Raspberry Pi'nizde bir Flask web uygulaması kurmayı başarmışsınızdır.

Flask, kullanımı gerçekten kolay ama yine de güçlü bir mini çerçevedir. Python betikleriniz için çok hızlı bir şekilde basit bir web uygulaması oluşturabilirsiniz.

Pi'nizde bir Flask uygulaması çalıştırma hakkında sorularınız varsa, aşağıya yorum bırakmaktan çekinmeyin.