Takip et

Ubuntu Bulut Sunucularında Python Web Uygulamaları Kurulumu: Kapsamlı Bir Rehber

Ubuntu Bulut Sunucularında Python Web Uygulamaları Kurulumu: Kapsamlı Bir Rehber Bulut bilişim, günümüz web uygulamalarının dağıtımı ve

Ubuntu Bulut Sunucularında Python Web Uygulamaları Kurulumu: Kapsamlı Bir Rehber

Bulut bilişim, günümüz web uygulamalarının dağıtımı ve yönetimi için vazgeçilmez bir teknoloji haline gelmiştir. Esneklik, ölçeklenebilirlik ve maliyet etkinliği sunan bulut sunucuları, geliştiricilere projelerini kolayca hayata geçirme imkanı tanır. Özellikle Python tabanlı web uygulamaları için Ubuntu işletim sistemi, geniş topluluk desteği, zengin paket yöneticisi ve kararlı yapısıyla ideal bir platform sunar. Bu makale, bir Python web uygulamasını Ubuntu tabanlı bir bulut sunucusuna nasıl dağıtacağınızı adım adım ve kapsamlı bir şekilde açıklamaktadır. Amacımız, uygulamanızın canlı ortama güvenli, verimli ve profesyonel bir şekilde ulaşmasını sağlamaktır.

I. Bulut Sunucusu Seçimi ve Temel Hazırlıklar

Bir Python web uygulamasını buluta taşımak için ilk adım, uygun bir bulut sağlayıcısı ve sunucu yapılandırması seçmektir. Bu bölüm, doğru seçimleri yapmanız ve sunucunuzu ilk kullanıma hazırlamanız için gereken temel adımları içerir.

1.1 Bulut Sağlayıcı Seçimi

Piyasada birçok popüler bulut sağlayıcısı bulunmaktadır ve her birinin kendine özgü avantajları vardır:
* Amazon Web Services (AWS): Kapsamlı hizmet yelpazesi, yüksek ölçeklenebilirlik ve küresel altyapı sunar. Ancak yeni başlayanlar için karmaşık olabilir.
* Google Cloud Platform (GCP): Makine öğrenimi ve veri analizi odaklı hizmetleriyle dikkat çeker, kullanıcı dostu arayüze sahiptir.
* Microsoft Azure: Kurumsal çözümler ve .NET entegrasyonu için güçlüdür, hibrit bulut senaryolarında tercih edilir.
* DigitalOcean, Vultr, Linode: Daha basit arayüzler, uygun fiyatlar ve geliştirici dostu özellikler sunarlar. Küçük ve orta ölçekli projeler için idealdirler.

Seçim yaparken uygulamanızın beklenen trafiğini, bütçenizi, coğrafi konum gereksinimlerinizi ve ihtiyacınız olan ek hizmetleri (veritabanı, depolama, CDN vb.) göz önünde bulundurmalısınız. Genellikle DigitalOcean veya Vultr gibi sağlayıcılar, başlangıç için daha kolay ve maliyet etkin bir deneyim sunar.

1.2 Ubuntu Sunucusu Oluşturma

Bulut sağlayıcınızı seçtikten sonra, bir sanal sunucu (Virtual Private Server – VPS veya Droplet, Instance vb.) oluşturmanız gerekir. Bu süreç genellikle şu adımları içerir:
1. İşletim Sistemi Seçimi: Ubuntu LTS (Long Term Support) sürümleri (örn. 22.04 LTS veya 20.04 LTS) tercih edilmelidir. LTS sürümleri, uzun süreli güvenlik güncellemeleri ve kararlılık sunar.
2. Sunucu Boyutu: Uygulamanızın gereksinimlerine göre CPU, RAM ve depolama alanı seçimi yapın. Basit bir Flask veya Django uygulaması için 1 CPU, 1-2 GB RAM ve 25-50 GB SSD depolama başlangıç için yeterli olabilir. Trafik arttıkça bu kaynakları kolayca ölçeklendirebilirsiniz.
3. Bölge Seçimi: Uygulamanızın hedef kitlesine en yakın coğrafi bölgeyi seçerek gecikmeyi (latency) azaltabilirsiniz.
4. SSH Anahtarı: Güvenli bağlantı için SSH anahtarları kullanmak şiddetle tavsiye edilir. Bir SSH anahtar çifti (özel ve genel anahtar) oluşturun ve genel anahtarınızı sunucu oluşturma aşamasında ekleyin. Bu, şifre tabanlı girişlerden çok daha güvenlidir.

1.3 İlk Bağlantı ve Temel Güvenlik Ayarları

Sunucunuz oluşturulduktan sonra, SSH aracılığıyla ilk bağlantıyı kurmanız gerekir.
Terminalinizden şu komutu kullanarak bağlanın (kullanıcı adınız genellikle root veya sağlayıcınıza göre farklılık gösterebilir, IP adresini kendi sunucunuzun IP adresiyle değiştirin):

ssh -i ~/.ssh/your_private_key_file root@your_server_ip

Bağlandıktan sonra ilk yapmanız gerekenler:
1. Sistem Güncellemesi: Paket listelerini güncelleyin ve yüklü paketleri yükseltin. Bu, güvenlik açıklarını kapatır ve en yeni yazılımları sağlar.

sudo apt update
    sudo apt upgrade -y

2. Yeni Bir sudo Kullanıcısı Oluşturma: root kullanıcısı olarak sürekli çalışmak risklidir. Yeni bir standart kullanıcı oluşturun ve ona sudo ayrıcalıkları verin.

sudo adduser your_username
    sudo usermod -aG sudo your_username

Daha sonra bu kullanıcıya geçiş yapın ve root kullanıcısının SSH erişimini devre dışı bırakmayı düşünebilirsiniz (daha sonraki bir adımda).
3. Güvenlik Duvarı (UFW) Yapılandırması: UFW (Uncomplicated Firewall), Ubuntu için kullanımı kolay bir güvenlik duvarıdır. Sadece gerekli portlara erişime izin vererek sunucunuzu korur.

sudo apt install ufw -y
    sudo ufw allow OpenSSH       # SSH erişimine izin ver
    sudo ufw allow 'Nginx HTTP'  # HTTP (80) portuna izin ver (Nginx kurduktan sonra)
    sudo ufw allow 'Nginx HTTPS' # HTTPS (443) portuna izin ver (Nginx kurduktan sonra)
    sudo ufw enable              # Güvenlik duvarını etkinleştir
    sudo ufw status              # Durumu kontrol et

UFW’yi etkinleştirmeden önce SSH portuna izin verdiğinizden emin olun, aksi takdirde sunucunuza erişiminizi kaybedebilirsiniz.

II. Python Ortamının Kurulumu ve Yönetimi

Python web uygulamanızın bağımlılıklarını izole etmek ve yönetmek, sorunsuz bir dağıtım süreci için kritik öneme sahiptir. Bu bölümde, Python’ı kurma ve sanal ortamları etkin bir şekilde kullanma adımlarını ele alacağız.

2.1 Python Kurulumu

Ubuntu genellikle varsayılan olarak Python 3 ile gelir, ancak uygulamanızın belirli bir Python sürümüne veya ek geliştirme araçlarına ihtiyacı olabilir.
Gerekli Python geliştirme araçlarını ve pip‘i (Python paket yöneticisi) kuralım:

sudo apt install python3-pip python3-dev build-essential -y

* python3-pip: Python 3 paket yöneticisi.
* python3-dev: Python C uzantıları derlemek için gereken başlık dosyaları ve statik kütüphaneler.
* build-essential: Derleyici ve diğer derleme araçlarını içerir.

Eğer uygulamanız farklı bir Python sürümü gerektiriyorsa, pyenv gibi araçlar veya deadsnakes PPA’sı kullanılabilir. Ancak çoğu durumda, sistemdeki Python 3 yeterli olacaktır.

2.2 Sanal Ortam Oluşturma

Python sanal ortamları, her projenin kendi bağımlılık setini izole etmesini sağlar. Bu, bağımlılık çakışmalarını önler ve projelerin taşınabilirliğini artırır. venv modülü, Python 3 ile birlikte gelir ve kullanımı kolaydır.
Uygulamanızın dosyalarını barındıracağınız bir dizin oluşturun ve içine girin:

mkdir ~/my_python_app
cd ~/my_python_app

Şimdi bu dizin içinde bir sanal ortam oluşturalım:

python3 -m venv venv

Bu komut, my_python_app dizini içinde venv adında bir dizin oluşturur ve bu dizin, Python yorumlayıcısının, pip’in ve bağımsız bir paket setinin kopyalarını içerir.

Sanal ortamı etkinleştirmek için:

source venv/bin/activate

Ortam etkinleştirildiğinde, terminal istemciniz genellikle sanal ortamın adını gösterecektir (örn. (venv) your_username@your_server_ip:~/my_python_app$). Artık bu ortamda pip install ile yüklediğiniz tüm paketler, sistem genelindeki Python kurulumunu etkilemeden bu sanal ortamda kalacaktır.

Sanal ortamdan çıkmak için:

deactivate

Uygulamanızı dağıtırken, sanal ortamı etkinleştirip bağımlılıkları kuracaksınız.

III. Web Uygulaması Dosyalarının Sunucuya Aktarımı

Uygulama kodunuzu yerel geliştirme ortamınızdan bulut sunucusuna aktarmanın birkaç yolu vardır. Git kullanmak, sürüm kontrolü ve kolay güncellemeler sağladığı için en çok önerilen yöntemdir.

3.1 Git Kullanımı (Önerilen Yöntem)

Git, kodunuzu yönetmek ve sunucuya dağıtmak için standart bir araçtır. Uygulamanızın kodunu bir Git deposunda (GitHub, GitLab, Bitbucket vb.) barındırmanız idealdir.
Önce sunucunuza Git’i kurun:

sudo apt install git -y

Şimdi, uygulamanızın depoyu klonlamak istediğiniz dizine gidin (genellikle /var/www/ veya kullanıcınızın ana dizinindeki bir proje klasörü). Örneğin, my_python_app klasörüne:

cd ~/my_python_app
git clone https://github.com/your_username/your_repo_name.git . # "." mevcut dizine klonlar

Eğer deponuz özel ise, SSH anahtarlarınızı Git sağlayıcınızla yapılandırmanız veya bir erişim belirteci kullanmanız gerekebilir. Klonladıktan sonra, uygulamanızın tüm dosyaları sunucunuzda olacaktır.

3.2 SCP veya SFTP Kullanımı (Alternatif)

Küçük projeler veya tek seferlik dosya aktarımları için SCP (Secure Copy Protocol) veya SFTP (SSH File Transfer Protocol) kullanabilirsiniz.
SCP ile dosya kopyalama (yerelden sunucuya):

scp -i ~/.ssh/your_private_key_file /path/to/your/local/file.py your_username@your_server_ip:~/my_python_app/

SCP ile dizin kopyalama (yerelden sunucuya):

scp -r -i ~/.ssh/your_private_key_file /path/to/your/local/project_folder your_username@your_server_ip:~/my_python_app/

SFTP ise, dosya yöneticisi benzeri bir arayüzle (örneğin FileZilla veya VS Code’un Remote-SSH eklentisi aracılığıyla) dosya aktarımı yapmanızı sağlar. Bu yöntemler, hızlı ve manuel aktarımlar için kullanışlıdır ancak sürüm kontrolü sağlamazlar.

IV. Bağımlılıkların Kurulumu ve Veritabanı Yapılandırması

Uygulamanızın kodunu sunucuya aktardıktan sonra, çalışması için gereken tüm Python paketlerini kurmanız ve varsa veritabanını yapılandırmanız gerekir.

4.1 Python Bağımlılıkları

Projenizin kök dizininde bir requirements.txt dosyası bulundurmanız, tüm bağımlılıkları tek seferde kurmak için en iyi yöntemdir. Bu dosyayı yerel geliştirme ortamınızda pip freeze > requirements.txt komutuyla oluşturabilirsiniz.
Sunucuda, sanal ortamınızı etkinleştirin ve bağımlılıkları kurun:

cd ~/my_python_app/your_repo_name # Eğer klonladığınız repo bir alt dizin oluşturduysa
source venv/bin/activate
pip install -r requirements.txt

Bu komut, uygulamanızın çalışması için gereken tüm Python paketlerini sanal ortamınıza yükleyecektir.

4.2 Veritabanı Kurulumu

Çoğu web uygulaması bir veritabanına ihtiyaç duyar. PostgreSQL ve MySQL/MariaDB, Python uygulamalarıyla yaygın olarak kullanılan popüler seçeneklerdir. Burada PostgreSQL üzerinden bir örnek vereceğiz.

PostgreSQL Kurulumu:

sudo apt install postgresql postgresql-contrib -y

PostgreSQL varsayılan olarak postgres adlı bir kullanıcı oluşturur. Bu kullanıcı ile veritabanı işlemleri yapabilirsiniz.
postgres kullanıcısına geçiş yapın:

sudo -i -u postgres

Şimdi bir veritabanı ve veritabanı kullanıcısı oluşturalım:

createuser --pwprompt my_app_user # Şifre belirleyin
createdb -O my_app_user my_app_db
exit # postgres kullanıcısından çıkış yapın

Bu komutlar my_app_db adında bir veritabanı ve my_app_user adında bir kullanıcı oluşturur. my_app_user kullanıcısı, my_app_db veritabanının sahibidir.

Veritabanı Bağlantı Ayarları:
Uygulamanızın veritabanı bağlantı bilgilerini yapılandırması gerekecektir. Hassas bilgileri (veritabanı şifreleri, API anahtarları vb.) doğrudan kod içine yazmak yerine, çevre değişkenleri aracılığıyla yönetmek en iyi uygulamadır. Bu, daha sonraki bölümlerde ele alınacaktır. Şimdilik, uygulamanızın settings.py (Django) veya benzeri bir yapılandırma dosyasında veritabanı bağlantı parametrelerini (host: localhost, port: 5432, user: my_app_user, password: your_password, dbname: my_app_db) ayarlayacağınızı unutmayın.

4.3 Migrasyonlar ve Veritabanı Hazırlığı

Eğer uygulamanız Django veya Flask-SQLAlchemy gibi bir ORM (Object-Relational Mapper) kullanıyorsa, veritabanı şemasını oluşturmak ve güncellemek için migrasyonları çalıştırmanız gerekir.
Sanal ortamınız etkinleştirilmişken, uygulamanızın dizininde migrasyon komutlarını çalıştırın:
Django için örnek:

python manage.py makemigrations # Eğer yeni modelleriniz varsa
python manage.py migrate

Flask (Alembic ile) için örnek:

flask db upgrade

Bu adımlar, veritabanınızın uygulamanızın modelleriyle eşleşen tabloları ve yapıları içermesini sağlar.

V. Web Sunucusu ve Uygulama Sunucusu Yapılandırması

Python web uygulamaları genellikle doğrudan internetten gelen istekleri işleyemez. Bunun yerine, bir uygulama sunucusu (Gunicorn) ve bir web sunucusu/ters proxy (Nginx) kombinasyonu kullanılır.

5.1 Gunicorn Kurulumu ve Yapılandırması (Uygulama Sunucusu)

Gunicorn (Green Unicorn), bir WSGI (Web Server Gateway Interface) HTTP sunucusudur. Python web uygulamanızı çalıştırmak ve Nginx’ten gelen istekleri işlemek için kullanılır.
Sanal ortamınız etkinleştirilmişken Gunicorn’u kurun:

pip install gunicorn

Uygulamanızın çalışıp çalışmadığını test etmek için Gunicorn’u manuel olarak çalıştırabilirsiniz. Örneğin, Django projeniz için:

gunicorn --bind 0.0.0.0:8000 your_project_name.wsgi:application

Flask projeniz için (eğer uygulamanız app.py dosyasında app adında bir Flask nesnesi olarak tanımlanmışsa):

gunicorn --bind 0.0.0.0:8000 app:app

Tarayıcınızdan http://your_server_ip:8000 adresine giderek uygulamanızın çalıştığını doğrulayabilirsiniz. Ctrl+C ile durdurun.

Gunicorn’u systemd Servisi Olarak Yapılandırma:
Gunicorn’u arka planda sürekli çalışacak bir servis olarak yapılandırmak için systemd kullanılır.
Bir systemd servis dosyası oluşturalım:

sudo nano /etc/systemd/system/my_app.service

Dosyanın içeriği aşağıdaki gibi olmalıdır (yer tutucuları kendi bilgilerinizle değiştirin):

[Unit]
Description=Gunicorn instance to serve my_python_app
After=network.target

[Service]
User=your_username            # Oluşturduğunuz sudo kullanıcısı
Group=www-data                # Nginx'in kullandığı grup (veya your_username)
WorkingDirectory=/home/your_username/my_python_app/your_repo_name # Uygulamanızın kök dizini
ExecStart=/home/your_username/my_python_app/venv/bin/gunicorn \
          --workers 3 \        # İşçi sayısı (2*CPU_çekirdeği + 1 genellikle iyi bir başlangıçtır)
          --bind unix:/run/my_app.sock \ # Unix soketi üzerinden Nginx ile iletişim
          your_project_name.wsgi:application # Django için, Flask için app:app
Restart=always                # Servis çökerse otomatik yeniden başlat
Environment="PATH=/home/your_username/my_python_app/venv/bin" # Sanal ortamın PATH'i

Ortam değişkenleri için Environment="DJANGO_SETTINGS_MODULE=your_project_name.settings.production" gibi ek satırlar ekleyebilirsiniz.

[Install] WantedBy=multi-user.target

Dosyayı kaydedip kapatın (Ctrl+X, Y, Enter).
Şimdi systemd‘yi güncelleyin, servisi başlatın ve otomatik başlaması için etkinleştirin:

sudo systemctl daemon-reload
sudo systemctl start my_app
sudo systemctl enable my_app

Servisin durumunu kontrol edin:

sudo systemctl status my_app

Her şey yolundaysa, Gunicorn arka planda çalışıyor olacaktır.

5.2 Nginx Kurulumu ve Yapılandırması (Web Sunucusu/Proxy)

Nginx, hızlı ve güçlü bir web sunucusu ve ters proxy’dir. Gelen HTTP/S isteklerini alır, statik dosyaları (CSS, JS, resimler) doğrudan sunar ve dinamik istekleri Gunicorn’a yönlendirir.
Nginx’i kurun:

sudo apt install nginx -y

Nginx’in varsayılan yapılandırmasını kaldırın ve kendi yapılandırma dosyanızı oluşturun:

sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/my_app

my_app yapılandırma dosyasının içeriği (yer tutucuları değiştirin):

server {
    listen 80;
    server_name your_domain.com www.your_domain.com; # Alan adınızı veya sunucu IP'nizi yazın

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/my_app.sock; # Gunicorn'un soket dosyasına yönlendirme
    }

    location /static/ {
        # Django için, statik dosyaların toplandığı dizini belirtin
        alias /home/your_username/my_python_app/your_repo_name/staticfiles/;
    }

    location /media/ {
        # Django için, medya dosyalarının bulunduğu dizini belirtin
        alias /home/your_username/my_python_app/your_repo_name/media/;
    }
}

* proxy_params: Nginx’in proxy isteklerini doğru şekilde iletmek için kullandığı varsayılan parametreleri içerir.
* location /static/ ve location /media/: Nginx’in statik ve medya dosyalarını doğrudan sunmasını sağlar, bu da Gunicorn’un yükünü azaltır ve performansı artırır. Django kullanıyorsanız, python manage.py collectstatic komutunu çalıştırarak statik dosyaları belirtilen dizine toplamanız gerekir.

Yapılandırma dosyasını etkinleştirmek için sites-enabled dizinine sembolik bir link oluşturun:

sudo ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled/

Nginx yapılandırmasını test edin ve servisi yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

Şimdi tarayıcınızdan http://your_server_ip veya alan adınızla erişmeyi deneyin. Uygulamanızın çalışıyor olması gerekir.

VI. Alan Adı ve SSL/TLS Yapılandırması

Uygulamanızın profesyonel görünmesi ve güvenli olması için bir alan adı ve HTTPS (SSL/TLS şifrelemesi) kullanmak zorunludur.

6.1 Alan Adı Yönlendirmesi

Alan adınızı (örneğin example.com) sunucunuza yönlendirmek için, alan adı sağlayıcınızın (Godaddy, Namecheap vb.) DNS yönetimi arayüzünde bir “A kaydı” oluşturmanız gerekir.
* @ veya boş bırakılan bir ana bilgisayar adı için sunucunuzun IP adresini işaret eden bir A kaydı oluşturun.
* www alt alan adı için de sunucunuzun IP adresini işaret eden bir A kaydı oluşturun.
DNS değişikliklerinin dünya genelinde yayılması biraz zaman alabilir (genellikle birkaç dakika ila birkaç saat).

6.2 SSL/TLS Şifrelemesi (HTTPS)

Let’s Encrypt, ücretsiz ve otomatik SSL/TLS sertifikaları sağlayan bir hizmettir. Certbot aracı ile bu sertifikaları kolayca alabilir ve Nginx ile entegre edebilirsiniz.
Certbot’u Snapcraft üzerinden kurmak en kolay yoldur:

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Şimdi Nginx için bir SSL sertifikası alalım:

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot, e-posta adresinizi soracak, hizmet koşullarını kabul etmenizi isteyecek ve sertifikayı otomatik olarak Nginx yapılandırmanıza ekleyecektir. Ayrıca, HTTP trafiğini HTTPS’e yönlendirme seçeneği de sunacaktır (genellikle “2: Redirect” seçeneğini seçmek iyi bir uygulamadır).
Certbot, sertifikaları otomatik olarak yenilemek için bir cron işi de kurar. Yenileme işleminin düzgün çalıştığını test etmek için:

sudo certbot renew --dry-run

Artık uygulamanıza https://your_domain.com adresinden güvenli bir şekilde erişebilirsiniz.

VII. Uygulamanın Dağıtımı ve Bakımı

Uygulamanız canlıya alındıktan sonra, onun sürdürülebilirliğini, güvenliğini ve performansını sağlamak için düzenli bakım ve yönetim gereklidir.

7.1 Ortam Değişkenleri Yönetimi

Veritabanı şifreleri, API anahtarları, gizli anahtarlar (Django’daki SECRET_KEY gibi) gibi hassas bilgiler asla doğrudan kodda veya Git deposunda saklanmamalıdır. Bunun yerine, ortam değişkenleri kullanılmalıdır.
* systemd Servis Dosyası İçinde: Gunicorn systemd servis dosyanıza Environment="KEY=VALUE" satırları ekleyebilirsiniz.

[Service]
    # ...
    Environment="DJANGO_SETTINGS_MODULE=your_project_name.settings.production"
    Environment="DATABASE_URL=postgres://my_app_user:your_password@localhost:5432/my_app_db"
    Environment="SECRET_KEY=your_very_secret_key"

* .env Dosyaları (python-dotenv ile): Eğer uygulamanız python-dotenv gibi bir kütüphane kullanıyorsa, my_app.service dosyanızda ExecStart komutundan önce EnvironmentFile=/path/to/.env ekleyebilirsiniz. Ancak bu yöntem, systemd‘nin yerleşik ortam değişkeni yönetimi kadar güvenli veya tercih edilen bir yöntem değildir. Hassas bilgiler için systemd servis dosyasını kullanmak daha iyidir.

7.2 Log Yönetimi

Sorun giderme ve uygulamanızın performansını izlemek için loglar hayati öneme sahiptir.
* Gunicorn Logları: systemd ile Gunicorn çalıştırdığınızda, logları journalctl ile izleyebilirsiniz:

sudo journalctl -u my_app.service -f

-f bayrağı, logları gerçek zamanlı olarak izlemenizi sağlar.
* Nginx Logları: Nginx erişim ve hata logları genellikle /var/log/nginx/access.log ve /var/log/nginx/error.log konumlarında bulunur.

sudo tail -f /var/log/nginx/access.log
    sudo tail -f /var/log/nginx/error.log

* Uygulama Logları: Uygulamanızın kendi loglama mekanizması varsa, bu logların nereye yazıldığını kontrol edin (örneğin, uygulamanızın kök dizinindeki bir logs klasörü).

7.3 Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD) (İsteğe Bağlı)

Uygulamanız büyüdükçe veya sık sık güncelleniyorsa, CI/CD süreçleri dağıtımı otomatikleştirerek hata riskini azaltır ve geliştirme hızını artırır. GitHub Actions, GitLab CI/CD, Jenkins veya CircleCI gibi araçlar, kodunuz bir depoya push edildiğinde otomatik olarak testleri çalıştırmak, derlemek ve sunucuya dağıtmak için kullanılabilir. Bu, bu makalenin kapsamının dışında olsa da, gelecekteki bir iyileştirme olarak göz önünde bulundurulmalıdır.

7.4 Yedekleme Stratejileri

Veri kaybını önlemek için düzenli yedeklemeler kritik öneme sahiptir.
* Veritabanı Yedeklemesi: PostgreSQL için pg_dump komutuyla veritabanı yedekleri alabilirsiniz:

pg_dump -U my_app_user my_app_db > /path/to/backup/my_app_db_$(date +%Y%m%d).sql

Bu komutu bir cron işi olarak düzenli aralıklarla çalıştırmak iyi bir uygulamadır. Yedek dosyalarını sunucudan farklı bir konuma (örn. S3, Google Cloud Storage) taşımayı unutmayın.
* Sunucu Anlık Görüntüleri (Snapshots): Çoğu bulut sağlayıcısı, sunucunuzun tamamının anlık görüntülerini alma imkanı sunar. Bu, bir felaket durumunda sunucuyu hızlıca önceki bir duruma geri yüklemenizi sağlar.

7.5 Uygulama Güncellemeleri

Uygulamanızda bir güncelleme yaptığınızda, genellikle şu adımları izlemeniz gerekir:
1. Kodu Güncelle: Uygulama dizininize gidin ve en son değişiklikleri çekin:

cd ~/my_python_app/your_repo_name
    git pull origin main # veya kullandığınız dal adı

2. Bağımlılıkları Güncelle: Eğer requirements.txt dosyanız değiştiyse:

source venv/bin/activate
    pip install -r requirements.txt
    deactivate

3. Veritabanı Migrasyonlarını Çalıştır: Eğer veritabanı şemanızda değişiklikler varsa:

source venv/bin/activate
    python manage.py migrate # Django için
    # veya flask db upgrade # Flask için
    deactivate

4. Statik Dosyaları Topla (Django için):

source venv/bin/activate
    python manage.py collectstatic --noinput
    deactivate

5. Servisleri Yeniden Başlat: Değişikliklerin etkili olması için Gunicorn ve Nginx servislerini yeniden başlatın:

sudo systemctl restart my_app
    sudo systemctl restart nginx

Bu adımlar, uygulamanızın sorunsuz bir şekilde güncellenmesini sağlar.

Sonuç

Bu makalede, bir Python web uygulamasını Ubuntu tabanlı bir bulut sunucusuna dağıtmak için gereken temel adımları ve en iyi uygulamaları kapsamlı bir şekilde inceledik. Bulut sağlayıcısı seçiminden başlayarak, Ubuntu sunucusunun hazırlanması, Python ortamının kurulması, uygulama dosyalarının aktarımı, veritabanı yapılandırması, Gunicorn ve Nginx ile web sunucusu kurulumu, alan adı ve SSL/TLS yapılandırması ve son olarak uygulamanın bakımı ve güncellenmesi konularına değindik.

Bu süreç, bir web uygulamasını canlı ortama taşımak için sağlam bir temel oluşturur. Her adım, uygulamanızın güvenliğini, performansını ve kararlılığını artırmayı hedefler. Unutmayın ki, her projenin kendine özgü gereksinimleri olabilir ve bu rehber genel bir çerçeve sunar. Daha karmaşık uygulamalar için izleme (monitoring), otomatik ölçeklendirme, yük dengeleme ve daha gelişmiş CI/CD boru hatları gibi konuları araştırmanız gerekebilir. Bu rehberdeki bilgileri kullanarak, Python web uygulamalarınızı buluta güvenle taşıyabilir ve geliştirmeye odaklanabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.