Bir Python uygulaması nasıl oluşturulur ve dağıtılır?
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.
Contents
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ı
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:
- Web Geliştirme(Django, Flask, FastAPI)
- Makine Öğrenimi ve Veri Bilimi(TensorFlow, PyTorch)
- Bilgisayarla Görme(OpenCV, Pillow, Scikit-image)
- Bilimsel Hesaplama(NumPy, SciPy)
- Grafik Kullanıcı Arayüzü(Qt, GTK)
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ı
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:
/api/
tüm görevlerin listesini döndürür/api/
/ belirli bir görevi görüntüler veya siler/api/create/
yeni bir görev oluşturur/api/toggle/
/ belirli bir görevinis_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:
Deponuz için özel bir isim seçin. Ben “flask-todo” ile devam edeceğim, ardından “Depo oluştur “a tıklayın:
Deponuz oluşturulduktan sonra uzak URL’yi not edin:
Ş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, 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.
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 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’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.
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.