Python Web Uygulaması ile Gerçek Hayat Senaryosu
2025
Tipik bir CI/CD süreci birkaç aşamadan oluşur:
Image credit: Bytebytego
~/.ssh
dizininde saklanır.Image Credit: https://www.geeksforgeeks.org/
Uygulamanın çalışır hale getirilip, üretim veya test ortamına aktarılması.
Push Based Deploy: Kod gönderildiğinde (push) otomatik olarak deploy sürecinin tetiklenmesi.
Pull Based Deploy: Kod değişikliklerinin belirli aralıklarla kontrol edilip, otomatik olarak deploy edilmesi.
Image Credit: docker.com
Platform as a Service (PaaS)
Geliştiricilere uygulama geliştirme, çalıştırma ve yönetme için altyapı yönetimi gerektirmeyen bulut tabanlı bir platform sağlayan bir hizmet modelidir.
Kod Geliştirme: Python web uygulaması yazılır ve Git ile versiyonlanır.
Kod Push: Kod, GitHub gibi bir uzaktaki repoya gönderilir.
GitHub Actions İş Akışı:
Deploy Süreci: Testler başarılı ise, Dokku sunucusuna otomatik deploy gerçekleşir.
Basit bir Flask uygulaması örneği:
Uygulamanın temel fonksiyonunu test eden örnek bir test (pytest kullanılarak):
Python sürümlerini ve sanal ortamları yönetmek için uv
kullanabilirsiniz.
Gerekli Kütüphaneleri Yükleyin:
Testleri Çalıştırın:
Uygulamayı Çalıştırın:
Tarayıcıda Uygulamayı Görüntüleyin:
dokku apps:create flask-demo
dokku config:set flask-demo FLASK_APP=app.py NAME=Cezmi
dokku ports:add flask-demo http:80:3000
dokku domains:add flask-demo flask-demo.emrecan.dev
dokku letsencrypt:set --global email [email protected]
dokku letsencrypt:enable flask-demo
dokku letsencrypt:cron-job --add
ssh-keygen -t ed25519 -C "[email protected]"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/emrecan/.ssh/id_ed25519): /Users/emrecan/.ssh/cezmi_ed25519
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/emrecan/.ssh/cezmi_ed25519
Your public key has been saved in /Users/emrecan/.ssh/cezmi_ed25519.pub
The key fingerprint is:
SHA256:VlPuiuSDVY3Z/t08BMvfLAOxFkpZMkjxHbItzs146Mc [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| .oo+ + |
| .. ^ . |
| % O. |
| * @.+o |
| S * Xo . |
| * o = oo+o|
| . + o E +o*|
| . . o.|
| |
+----[SHA256]-----+
~/.ssh/cezmi_ed25519
yapıştırın.flask-demo.emrecan.dev
alan adını Dokku sunucusuna yönlendirin.git init
git add .
git commit -m "Initial commit"
git remote add dokku [email protected]:flask-demo
git push dokku main:master
https://flask-demo.emrecan.dev
adresinde erişilebilir olmalıdır.GitHub Actions ile CI/CD sürecini otomatikleştirmek için bir iş akışı (workflow) dosyası oluşturulur. Bu dosya, .github/workflows
dizininde deploy.yml
adıyla kaydedilir.
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install uv
run: pip install uv
- name: Create virtual environment
run: uv venv
- name: Install dependencies
run: |
uv pip install -r requirements.txt
- name: Run tests
run: |
uv run python -m pytest
env:
NAME: CI/CD World
deploy:
needs: test
runs-on: ubuntu-latest
if: success()
steps:
- name: Cloning repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Push to dokku
uses: dokku/github-action@master
with:
git_push_flags: '--force'
git_remote_url: 'ssh://[email protected]:22/flask-demo'
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
https://flask-demo.emrecan.dev
Örnek projeye ulaşmak için: flask-demo