Bir Python uygulaması nasıl oluşturulur ve dağıtılır?

Back4app Python Kapağı

Python, birçok uygulaması olan ücretsiz ve açık kaynaklı bir programlama dilidir. Guido Van Rossum tarafından 1991 yılında yaratılmış ve o zamandan beri en popüler programlama dillerinden biri haline gelmiştir.

Bu makalede Python, avantajları, dezavantajları, kullanım alanları ve dağıtım seçenekleri hakkında konuşacağız. Bunun da ötesinde, basit bir Python uygulamasının nasıl oluşturulacağını, dockerize edileceğini ve Back4app Containers‘a nasıl dağıtılacağını göstereceğiz.

Bir Python projesinin nasıl oluşturulacağı ve dağıtılacağı hakkında daha fazla bilgi edinmek için okumaya devam edin.

Python’a Genel Bakış

Python yüksek seviyeli genel amaçlı bir programlama dilidir. Yorumlanır, dinamik olarak yazılır ve programlamanın yanı sıra komut dosyası yazmak için de kullanılabilir. Geliştiriciler, kapsamlı standart kütüphanesi nedeniyle Python’u genellikle “piller dahil” bir dil olarak tanımlar.

Dil ilk olarak 1991 yılında ortaya çıktı ve o zamandan beri basit ve okunabilir sözdizimi nedeniyle en popüler ve sevilen programlama dillerinden biri haline geldi. Python’un ana tasarım ilkeleri Tim Peters tarafından yazılan The Zen of Python ‘da ele alınmıştır.

Python büyük bir geliştirici topluluğuna ve kullanıma hazır paketlere sahiptir. Bugünlerde Python sunucu yönetimi, bilimsel hesaplama, makine öğrenimi, RESTful API’ler oluşturma ve benzeri hemen hemen her yerde kullanılmaktadır. Python, modern bir geliştiricinin temel becerilerinden biri olarak kabul edilebilir.

Python’un Avantajları

Python Avantajları

Kolay Kullanım

Python, kullanımı ve öğrenmesi en kolay dillerden biridir. Ana tasarım felsefesi basitlik ve kod okunabilirliğini vurguladığı için öğrenme eğrisi neredeyse yoktur. Python, temel programlama kavramlarını öğrenmek için harika bir araç olduğu için eğitimde de tercih edilir.

Hızlı Gelişim

Python’un bir başka büyük avantajı da hızlı geliştirmeye izin vermesidir. Prototip oluşturmak ve işi hızlı bir şekilde tamamlamak için harika bir dildir. Python kullanarak karmaşık sözdizimi, bellek tahsisi vb. konular hakkında endişelenmenize gerek kalmaz, bunun yerine uygulamanıza odaklanabilirsiniz.

Çok Yönlü

Python en çok yönlü programlama dillerinden biridir. Çok çeşitli endüstrilerde ve alanlarda kullanılır. Python’un kullanıldığı alanlardan bazıları muhasebe, bilimsel araştırma, veri bilimi, web geliştirme, oyun geliştirme ve otomasyondur.

Taşınabilir

Python, yorumlandığı (Java gibi) ve derlenmediği (C++ gibi) için taşınabilir bir dildir. Bu, bir platformda yazılan kodun başka bir platforma kolayca aktarılabileceği anlamına gelir. Bu da Python’u Windows, macOS, Linux ve Android dahil olmak üzere birden fazla platformu desteklemesi gereken geliştiriciler için popüler bir seçim haline getirir.

Kapsamlı Kütüphaneler

Python programlama dili büyük bir geliştirici topluluğu tarafından desteklenmektedir. Hayal edebileceğiniz neredeyse her şey için bir kütüphane vardır. En popüler kütüphanelerden bazıları şunlardır:

Ve bu ancak yüzeyi çiziyor. Harika Python paketlerinin tam listesini görmek istiyorsanız GitHub‘daki awesome-python ‘a bir göz atın.

Dinamik Olarak Tiplenmiş

Python dinamik olarak yazılan bir dildir, yani değişkenleri oluştururken veri türünü bildirmeniz gerekmez. Değişken türü yalnızca kod yürütülürken atanır.

Her ne kadar harika olsa da, dinamik olarak yazılan diller bazen iki ucu keskin bir kılıç olabilir. Genellikle hataya daha yatkındırlar ve statik olarak yazılan dillere kıyasla daha düşük seviyede bellek kontrolüne sahiptirler.

Genişletilebilir

Proje gereksinimleriniz ağır hesaplama görevleri içeriyorsa, bunları C veya C++ gibi daha hızlı dillerde yazabilir ve ardından Python kodunuzdan çağırabilirsiniz.

Python’dan C/C++ çağırma hakkında daha fazla bilgi edinmek için bu harika makaleye göz atın.

Python’un Sınırlamaları

Python Dezavantajları

Kötü Performans

Python diğer programlama dillerine kıyasla nispeten yavaştır. Performansını en çok engelleyen iki faktör Python’un yorumlanmış bir dil olması ve dinamik olarak yazılmasıdır. Proje gereksinimleriniz ağır hesaplama veya çoklu iş parçacığı içeriyorsa Python en uygun araç olmayabilir. C, C++ veya başka bir derlenmiş dil kullanmanız çok daha iyi olacaktır.

Yoğun Bellek

Python programları, statik tipli dillerde yazılan programlara kıyasla genellikle daha fazla bellek tüketir ve bellek üzerinde daha düşük düzeyde kontrol sağlar. Uygulamalarınızın bellek açısından verimli olması gerekiyorsa bu biraz sorunlu olabilir.

Çalışma Zamanı Hatalarına Eğilimli

Python yorumlanmış bir dil olduğu için çalışma zamanı hatalarına daha yatkındır. Derleme işlemi olmadığı için hatalar derleme zamanında keşfedilemez. Bunun da ötesinde Python dinamik olarak yazılır, yani geliştiriciler bir değişkenin türünü istedikleri zaman değiştirebilirler. Bu bazen hatalara yol açabilir ve geliştiricilerin değişken türlerine dikkat etmesini gerektirir.

Küresel Yorumlayıcı Kilidi (GIL)

Python’daki Global Yorumlayıcı Kilidi (GIL), bir seferde yalnızca bir iş parçacığının Python bayt kodunu yürütmesini sağlayan bir mekanizmadır. Bu, dilin uygulanmasını basitleştirir ve belirli program türleri için bazı performans avantajları sağlarken, CPU’ya bağlı uygulamalarda çok çekirdekli işlemcilerden tam olarak yararlanma yeteneğini de sınırlar.

Veritabanı Erişimi için Optimize Edilmemiştir

Python uygulamalarında veritabanlarıyla çalışmak, Java Veritabanı Bağlantısı (JDBC) gibi güçlü ve kullanıcı dostu arayüzlerin eksikliği nedeniyle daha zor olabilir. Python, basit okuma ve yazma görevlerini içeren veritabanı işlemleri için hala kullanılabilirken, büyük ve karmaşık veritabanlarıyla çalışması gereken uygulamalar için en uygun seçenek olmayabilir.

Python Dağıtım Seçenekleri

Python uygulamaları çeşitli bulut platformlarına dağıtılabilir. Genel olarak bunları aşağıdaki üç kategoriye ayırabiliriz:

  • Hizmet Olarak Altyapı (IaaS)
  • Hizmet Olarak Platform (PaaS)
  • Hizmet Olarak Konteynerler (CaaS)

IaaS en az soyutlanmış ve CaaS en çok soyutlanmış olanıdır. Geleneksel barındırma da var, ancak bunu zaten bildiğinize eminim.

Hizmet Olarak Altyapı (IaaS)

Hizmet Olarak Altyapı veya IaaS, 3. taraf bir satıcının sunucular, depolama, işletim sistemleri ve internet üzerinden ağ oluşturma gibi sanallaştırılmış bilgi işlem kaynakları sunduğu bir bulut bilişim modelidir. Sağlanan kaynaklar daha sonra gelişmiş gösterge tabloları veya üst düzey API’ler aracılığıyla yönetilebilir ve müşterilere tüm altyapıları üzerinde tam kontrol sağlar.

IaaS’in başlıca faydaları ölçeklenebilirlik, maliyet tasarrufu, daha fazla destek, performans ve güvenliktir. Çoğu IaaS sağlayıcısı tarafından benimsenen ödeme yapısı, yalnızca kullandığınız kaynaklar için ücretlendirildiğiniz kullandıkça öde sistemine dayanmaktadır.

IaaS en esnek bulut bilişim modelidir ve 2010’ların başında piyasaya sürülmesinden bu yana en popüler seçenek olmaya devam etmektedir. En büyük dezavantajı ise müşterinin uygulamalarından, işletim sistemlerinden ve verilerinden tamamen sorumlu olmasıdır.

Hizmet Olarak Platform (PaaS)

Hizmet Olarak Platform (PaaS), kullanıcılara uygulama oluşturmak, yönetmek ve sunmak için bir bulut ortamı sağlayan bir bulut bilişim hizmetidir. PaaS, uygulama geliştirme, özelleştirme ve test için önceden oluşturulmuş araçlar sunar. PaaS ile, hizmet sağlayıcı sunucular, işletim sistemleri, yazılım, yedeklemeler ve daha fazlası dahil olmak üzere temel altyapıyla ilgilendiği için kullanıcılar uygulamalarına konsantre olabilirler.

PaaS’ın avantajları arasında daha hızlı pazara sunma, daha fazla güvenlik, maliyet etkinliği, ölçeklenebilirlik, yüksek kullanılabilirlik ve genellikle daha az kod gerektirmesi yer alır. Bununla birlikte, birkaç dezavantajı vardır. Başlıca üç dezavantaj esneklik eksikliği, kontrol eksikliği ve satıcıya kilitlenme riskidir. Bununla birlikte, PaaS yine de kullanıcıların daha hızlı ve daha az yönetim yüküyle uygulama oluşturmasını sağlar.

Hizmet Olarak Konteynerler (CaaS)

Hizmet Olarak Konteynerler (CaaS), kuruluşların konteyner sanallaştırma teknolojisini kullanarak konteynerlerini yüklemelerine, çalıştırmalarına, ölçeklendirmelerine ve yönetmelerine olanak tanıyan bir bulut bilişim modelidir. CaaS satıcıları altyapı, işletim sistemleri, yazılım, konteynerizasyon motorları ve daha fazlası gibi gerekli işlerin çoğunu soyutlar.

Konteynerlerin en güzel yanı, uygulamanız konteyner haline getirildikten sonra onu hemen hemen her yere dağıtabilmeniz ve aynı şekilde davranmasının garanti edilmesidir. İhtiyaç duyulması halinde bir CaaS sağlayıcısından diğerine geçebilirsiniz. CaaS müşterileri genellikle konteyner başına faturalandırılır (konteyner özelliklerine göre).

CaaS genellikle IaaS ve PaaS’a kıyasla daha pahalıdır, daha düşük seviyede esneklik ve kontrol sunar ve örneğin uygulamanın konteynerleştirilmesi gibi bazı başlangıç çalışmaları gerektirir. Bununla birlikte, uygulamanız konteynerleştirildikten sonra kullanımı en kolay bulut bilişim modellerinden biridir.

Konteynerler hakkında daha fazla bilgi edinmek için Bulut Bilişimde Konteynerler Nedir?

Python Dağıtım Süreci

Eğitimin bu bölümünde, basit bir Python uygulamasının nasıl oluşturulacağını ve dağıtılacağını adım adım göstereceğiz. Web uygulaması Flask framework kullanılarak uygulanacak ve Back4app Containers‘a dağıtılacaktır.

Ön Koşullar

  • Python ve Flask ile deneyim
  • Docker hakkında temel bilgi
  • Python sürüm 3.8 veya üstü ve Docker Desktop yüklü

Back4app Konteynerleri Nedir?

Back4app Containers, küresel olarak dağıtılmış kapsayıcılar kullanarak uygulamaları dağıtmanıza ve ölçeklendirmenize olanak tanıyan ücretsiz ve açık kaynaklı bir platformdur.

Back4app Containers ile DevOps hakkında endişelenmenize gerek kalmadan yazılımınızı oluşturmaya ve hızlı bir şekilde sevk etmeye odaklanabilirsiniz.

Platform GitHub ile sıkı bir şekilde entegre edilmiştir ve yerleşik bir CI/CD sistemi ile donatılmıştır. Back4app Containers’ı kullanarak uygulamanızı birkaç dakika içinde çevrimiçi hale getirebilirsiniz.

Neden Back4app Containers kullanılmalı?

  • GitHub ile iyi entegre olur
  • Ölçeklendirme ve sıfır kesinti süresi dağıtımları
  • Kullanımı son derece kolay
  • Mükemmel müşteri desteği

Proje Tanıtımı

Bu makalede, bir TODO listesi olarak hizmet verecek basit bir RESTful API oluşturacak ve dağıtacağız. Web API’si, kullanıcıların görev ekleme, görevleri silme, tamamlandı olarak işaretleme gibi temel CRUD işlemlerini gerçekleştirmelerine olanak tanıyacak.

Önce kaynak kodu üzerinde çalışacağız ve daha sonra bunu bir Back4app Flask Konteynerine dağıtacağız. Web uygulaması Flask web çerçevesi kullanılarak uygulanacaktır.

“Kod Uygulaması” bölümünü atlamaktan ve kendi Python projenizle takip etmekten çekinmeyin.

Kod Uygulaması

Init Projesi

Flask uygulaması için özel bir dizin oluşturarak ve bu dizine giderek başlayın:

$ mkdir flask-todo
$ cd flask-todo

Sanal bir ortam oluşturun ve etkinleştirin:

$ python3 -m venv venv && source venv/bin/activate

Ardından, pip aracılığıyla Flask ‘ı yükleyin:

$ (venv) pip install Flask==2.2.2

Her şeyin çalıştığından emin olmak için app.py içeriğini aşağıdaki ile değiştirelim:

# app.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def index_view():
    return {
        'detail': 'Hello world'
    }

Bu kod Flask’ı başlatır ve bir mesaj döndüren basit bir uç nokta oluşturur.

Sunucuyu şu şekilde başlatın:

$ (venv) flask run

Son olarak, favori tarayıcınızda http://localhost:5000/ adresine gidin. Merhaba dünya diyen bir mesaj görmelisiniz.

Veritabanı

Devam edelim, veritabanını halledelim.

Ham SQL çalıştırmak yerine, basit bir Flask ORM olan Flask-SQLAlchemy kullanacağız. Yüklemek için çalıştırın:

$ (venv) pip install Flask-SQLAlchemy

Ardından, app.py dosyasının içeriğini aşağıdakiyle değiştirin:

# app.py

from datetime import datetime

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
app = Flask(__name__)
app.config['SECRET_KEY'] = '5b3ef5s80gl3b217c20fb37044fe4k33'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///default.db"
db.init_app(app)


class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), nullable=False)
    description = db.Column(db.String(256), nullable=False)

    is_done = db.Column(db.Boolean, default=False)
    created_at = db.Column(db.DateTime, default=datetime.now(), nullable=True)
    updated_at = db.Column(db.DateTime, default=None, nullable=True)

    def as_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}

    def __repr__(self):
        return f'<Task {self.title}>'


@app.route('/')
def index_view():
    return {
        'name': 'flask-todo',
        'description': 'a simple todo app written in flask',
        'version': 1,
    }

Bu kod Flask’ı yapılandırır ve Task adında yeni bir model tanımlar. Görev modelinin bir adı, açıklaması, is_done ve dinamik olarak güncelleyeceğimiz created_at ve updated_at gibi diğer bazı değişkenleri vardır.

Ardından, SQLite veritabanını başlatan ve dolduran init_db.py adlı bir Python betiği oluşturun:

# init_db.py

from app import db, app
from app import Task

with app.app_context():
    db.create_all()

    if Task.query.count() == 0:
        tasks = [
            Task(name='Backup the database', description='Make sure to backup the database with all the tables.'),
            Task(name='Setup 2FA', description='Setup the two factor authentication to secure your account.'),
            Task(name='Malware scan', description='Perform a malware scan.'),
        ]

        for task in tasks:
            db.session.add(task)

        db.session.commit()

Komut satırından komut dosyasını çalıştırın:

$ (venv) python init_db.py

instance adında yeni bir dizin oluşturulduğunu göreceksiniz. Dizin içinde, varsayılan veritabanı olan default.db bulunacaktır.

API

Flask uygulaması aşağıdaki URL’lere sahip olacaktır:

  1. /api/ tüm görevlerin listesini döndürür
  2. /api/ / belirli bir görevi görüntüler veya siler
  3. /api/create/ yeni bir görev oluşturur
  4. /api/toggle/ / belirli bir görevin is_done özelliğini değiştirir

Bunları uygulamak için app.py dosyasının sonuna aşağıdakileri ekleyin:

# app.py

@app.route('/api/')
def list_view():
    json = [task.as_dict() for task in Task.query.all()]
    return jsonify(json)


@app.route('/api/<int:task_id>/', methods=['GET', 'DELETE'])
def detail_view(task_id):
    task = db.get_or_404(Task, task_id)

    if request.method == 'DELETE':
        db.session.delete(task)
        db.session.commit()

        return {
            'detail': 'Task has been successfully deleted.'
        }
    else:
        return task.as_dict()


@app.route('/api/create/', methods=['POST'])
def create_view():
    name = request.form.get('name')
    description = request.form.get('name')

    if name is None or description is None:
        return {
            'detail': 'Please provide the name and the description.'
        }, 400

    task = Task(name=name, description=description)
    db.session.add(task)
    db.session.commit()

    return task.as_dict()


@app.route('/api/toggle/<int:task_id>/')
def toggle_view(task_id):
    task = db.get_or_404(Task, task_id)

    if task.is_done:
        task.is_done = False
    else:
        task.is_done = True

    task.updated_at = datetime.now()
    db.session.commit()

    return task.as_dict()

Bu kod oldukça açıklayıcıdır. Gerekli rotaları tanımladık ve gerekli mantığı uyguladık. Veritabanında her değişiklik yapmak istediğimizde bunları commit() etmemiz gerekiyor.

Flask uygulaması için harika. Sonraki bölümlerde projemizi dağıtım için hazırlayacağız.

Gunicorn

Flask’ın web sunucusu, bir seferde bir isteği işlemek için tasarlandığından ve büyük miktarda trafiği kaldıramayabileceğinden üretimde önerilmez. Bu nedenle onu üretime hazır bir Python WSGI sunucusu olan Gunicorn ile değiştirelim.

İlk olarak, pip aracılığıyla yükleyin:

$ (venv) pip install gunicorn==20.1.0

Başarılı kurulumdan sonra sunucuyu şu şekilde başlatabilirsiniz:

$ (venv) gunicorn -w 2 -b 0.0.0.0:5000 app:app

[INFO] Starting gunicorn 20.1.0
[INFO] Listening at: http://0.0.0.0:5000 (1)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 3
[INFO] Booting worker with pid: 4

Bu komutun yalnızca UNIX tabanlı işletim sistemlerinde çalıştığını unutmayın.

Bu, iki Gunicorn işçisini başlatacak ve uygulamanızı 5000 numaralı bağlantı noktasında gösterecektir. Uygulamanıza erişmek için favori web tarayıcınızı açın ve http://localhost:5000 adresine gidin.

gereksinimler.txt

Uygulamamızı Docker’lamadan önce yapmamız gereken son şey bir requirements.txt dosyası oluşturmaktır. requirements.txt dosyası projenin bağımlılıklarını belirtmek için kullanılır.

Aşağıdaki komutu çalıştırarak oluşturun:

$ (venv) pip freeze > requirements.txt

Diğerleri (Docker konteynerleri dahil) requirements.txt dosyasını şu şekilde kullanabilir:

$ (venv) pip install -r requirements.txt

Dockerize Uygulaması

Uygulamayı dockerize etmek için bir Dockerfile kullanacağız. Dockerfiles, Docker imajlarını oluşturmak için talimatları tanımlamak için kullanılır. Temel imajı, çalışma dizinini, ortam değişkenlerini, komutları çalıştırmayı ve daha fazlasını ayarlamanıza izin verirler.

.dockerignore

Dockerfile üzerinde çalışmadan önce, bir .dockerignore dosyası oluşturalım. Bir .dockerignore dosyası, imajdan hangi klasörlerin ve dosyaların çıkarılması gerektiğini belirtmek için kullanılır.

.git/
.idea/
instance/
__pycache__/

.dockerignore ‘u ihtiyaçlarınıza göre değiştirdiğinizden emin olun.

Dockerfile

Proje kök dizininde Dockerfile adında aşağıdaki içeriğe sahip yeni bir dosya oluşturun:

# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM python:3.10-alpine

WORKDIR /app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install the requirements
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
    pip3 install -r requirements.txt

COPY . .

# initialize the database (create DB, tables, populate)
RUN python init_db.py

EXPOSE 5000/tcp

CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5000", "app:app"]

Bu Dockerfile, temel imaj olarak python:3.10-alpine kullanmaktadır. Daha sonra çalışma dizinini ayarlar, gereksinimleri yükler, projeyi kopyalar, veritabanını başlatır ve son olarak 5000 numaralı bağlantı noktasında Gunicorn sunucusunu başlatır.

Dockerfiles hakkında daha fazla bilgi edinmek için Dockerfile referansına göz atın.

Test

Docker dosyasının çalıştığından emin olmak için yerel olarak derleyebilir ve çalıştırabiliriz. Görüntüyü oluşturmak için çalıştırın:

$ docker build -t flask-todo:1.0 .

Resimleri listelerseniz yeni bir resim görmeniz gerekir:

$ docker images

REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
flask-todo        1.0       7ege66240eb1   3 hours ago   109MB

Son olarak, yeni bir Docker konteyneri oluşturmak için görüntüyü kullanın:

$ docker run -it -p 5000:5000 flask-todo:1.0

[2023-02-02 20:08:57 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-02-02 20:08:57 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-02-02 20:08:57 +0000] [1] [INFO] Using worker: sync
[2023-02-02 20:08:57 +0000] [7] [INFO] Booting worker with pid: 3
[2023-02-02 20:08:57 +0000] [8] [INFO] Booting worker with pid: 4

Docker konteynerini ayrılmış modda başlatmak için -d komutunu kullanabilirsiniz. Bu, konteynerin terminalinizin arka planında çalıştığı ve girdi almadığı veya çıktı görüntülemediği anlamına gelir.

Harika, uygulamanız artık bir konteyner içinde çalışıyor. Web uygulamanızı çalışırken görmek için favori web tarayıcınızda http://localhost:5000 adresine gidin.

{
    "name": "flask-todo",
    "description": "a simple todo app written in flask",
    "version": 1
}

GitHub’a itin

Aşağıdaki adımlar bir GitHub hesabınızın olmasını gerektirecektir. Henüz bir hesabınız yoksa devam edin ve kaydolun, aksi takdirde giriş yapın. Ayrıca, Git ‘in yüklü ve yapılandırılmış olduğundan emin olun.

GitHub’a giriş yaptıktan sonra, açılır menüyü açmak için ekranın sağ üst köşesindeki “artı” düğmesini kullanın. Ardından, “Yeni depo” seçeneğini seçin:

GitHub Dizin Sayfası

Deponuz için özel bir isim seçin. Ben “flask-todo” ile devam edeceğim, ardından “Depo oluştur “a tıklayın:

GitHub Depo Oluşturma

Deponuz oluşturulduktan sonra uzak URL’yi not edin:

GitHub SSH Uzak Adresi

Şimdi yerel projemize geri dönelim ve kodu gönderelim.

Git’e göndermek istemediğimiz bazı dosyalarımız olduğundan, proje kökünde bir .gitignore dosyası oluşturun. Aşağıdakileri ekleyeceğim, ancak ihtiyaçlarınıza göre değiştirmekten çekinmeyin:

instance/*
!instance/.gitignore
.webassets-cache
.env

__pycache__/
*.py[cod]
*$py.class

Ardından, komut satırını açın ve aşağıdaki komutları çalıştırın:

$ git init
$ git remote add origin <your_remote_url>
$ git add .
$ git commit -m "init"
$ git push origin master

Bu, yeni bir Git deposunu başlatacak, uzak kaynağı ekleyecek, tüm dosyaları VCS’ye ekleyecek ve ilk commit’i oluşturacaktır. Son olarak, kaynak kodunu GitHub deposuna gönderecektir.

Harika, bu kadar olmalı. Şimdi tarayıcınızda deponuza giderseniz, tüm dosyaların işlendiğini görebilmeniz gerekir.

Uygulama Dağıtma

Aşağıdaki adımlar bir Back4app hesabınızın olmasını gerektirecektir. Zaten bir hesabınız varsa giriş yapın, yoksa devam edin ve ücretsiz hesap için kaydolun.

Giriş yaptıktan sonra uygulamanızın kontrol paneline yönlendirileceksiniz. Uygulama oluşturma sürecini başlatmak için “Yeni uygulama oluştur” düğmesine tıklayın.

Back4app Uygulama Oluştur

Back4app, iki tür uygulama oluşturmanıza ve dağıtmanıza olanak tanır: Hizmet Olarak Arka Uç (BaaS) ve Hizmet Olarak Konteynerler (CaaS). Dockerize edilmiş bir uygulama dağıtmak istediğimiz için “Container as a Service” ile devam edeceğiz.

Back4app Hizmet Olarak Konteynerler

Ardından, devam edin ve GitHub’ınızı Back4app hesabınıza bağlayın. Önceki adımda oluşturduğumuz depoya Back4app izinlerini verdiğinizden emin olun. Ardından seçmek için yeşil “Seç” düğmesine tıklayın.

Back4app Select Deposu

Back4app Containers, dağıtım sürecini yapılandırmanıza olanak tanır. Varsayılan dalı, kök dizini ayarlayabilir, otomatik dağıtımı etkinleştirebilir/devre dışı bırakabilir ve ortam değişkenlerini ayarlayabilirsiniz. Bunların hiçbirine ihtiyacımız yok, bu yüzden sadece uygulamamızı adlandıralım ve “Uygulama oluştur “a tıklayalım.

Back4app Uygulamayı Yapılandır

Back4app’in konteyneri oluşturması, konteyner kayıt defterine yüklemesi ve konteyneri çalıştırması birkaç dakika sürecektir. Konteyneriniz hazır olduğunda durum “Hazır” olarak değişecek ve ekranın sol tarafında yeşil bir URL görebileceksiniz.

Back4app Başarıyla Dağıtıldı

URL’ye tıkladığınızda web uygulaması tarayıcınızda açılacaktır. Back4app’in uygulamanız için otomatik olarak bir SSL sertifikası yayınladığını ve bir Python uygulamasını ücretsiz olarak barındırmanıza izin verdiğini fark edeceksiniz.

Sonuç

Bu makalede Python, avantajları, dezavantajları ve dağıtım seçenekleri hakkında bilgi edindiniz. Ayrıca basit bir Python RESTful API’sini başarıyla dağıttınız. Artık basit API’lerinizi oluşturabilmeli ve bunları Back4app Konteynerlerine dağıtabilmelisiniz.

Nihai kaynak kodu GitHub‘da bulunabilir.

Gelecek adımlar

  • Şu anda tüm veriler her yeniden dağıtımda temizleniyor. Bunun nedeni, veritabanının Docker görüntüsüne dahil edilmiş olmasıdır. Yönetilen bir veritabanı örneğine geçmeyi düşünün.
  • Dağıtım sürecini hızlandırmak için çok aşamalı derlemeleri inceleyin.

Leave a reply

Your email address will not be published.