Bir Flask Uygulamasını ve Nginx Sunucusunu Docker ile Ayağa Kaldırma

Herkese selamlar. Yazı yazmayalı 1 aydan fazla bir zaman oldu. Bu yazıda Flask uygulamasını ve Nginx sunucusu Docker ile ayağa kaldırmayı anlatacağım.

Sunucu Tarafında Bilinmesi Gerekenler

Ben Manjaro Linux altında virt-manager kullanarak Ubuntu Server 18.04 kullandım. RAM değerim 2 gb ve boş alan ise 15 GB. Hepsi bu, default kurulum gerçekleştirdim yani.

Proje Dizini

file

Evet proje dizinim bu şekilde. Kısacası sunucu tarafında nginx için docker konteynerizasyonu yapılırken uygulama tarafında ise flask ve uwsgi için uygulama taraflı bir konteynerizasyon yapılıyor.

Boş bir dizinde sunucu, uygulama isminde dizinler açın ve bir de o boş dizinin root dizinine docker-compose.yml dosyası oluşturun.

Unutmadan shell dosyalarını da açıklamam gerekiyor. Hatta ilk onlarla başlayayım.

Shell Scriptler

clear.sh dosyası eğer dizini temizlemek istiyorsam kullandığım bir dosya. send.sh dosyası ise projemi karşı sunucuya yüklemek için kullandığım bir dosya. Hemen kodlarına bakalım.

clear.sh

send.sh ve clear.sh haricindekileri sil dedim.

shopt -s extglob
rm -rf -v !(*@(send.sh|clear.sh))

send.sh

send.sh ve clear.sh haricindekileri karşı sunucuya sshpass ve scp kullanarak aktar dedim. Altta yer alan "admin" karşı sunucuya bağlanacağım parola.

shopt -s extglob
sshpass -p "admin" scp -r !(*@(send.sh|clear.sh)) [email protected]:/var/www/html/flaskcrm

Uygulama Ortamını Hazırlayalım

# proje dizinimiz görseldeki gibi içeriği boş olsun.
cd uygulama

python -m venv env

source env/bin/activate

pip install flask uwsgi

Basit uygulamamızın kodları şöyle olsun;

import os
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    ortam_degiskeni = os.getenv("APP_NAME")
    return f"Merhaba Dünya. Bu ortam degiskeninde calisiyorum: {ortam_degiskeni}"

if __name__ == "__main__":
    app.run()

Şimdi uygulama klasöründe bazı dosyalar oluşturalım.

.dockerignore dosyası

env/
__pycache__/

config.ini

uwsgi için ayarlarımız

[uwsgi]
wsgi-file = app.py
callable = app
socket = :8080
processes = 4
theads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true

Dockerfile

Docker için ayar dosyamız

FROM python:3.6.8

WORKDIR /app

ADD . /app

RUN pip install -r requirements.txt

CMD ["uwsgi", "config.ini"]

Son olarak da python bağımlılıklarımızı verelim;

pip freeze > requirements.txxt

Uygulama tarafında hepsi bu kadar. Sunucu için şunlar lazım.

cd sunucu

Burada yine Dockerfile adında bir dosya oluşturalım ve ayrıca nginx.conf adında bir dosya oluşturalım.

Dockerfile

FROM nginx

RUN rm /etc/nginx/conf.d/default.conf

COPY nginx.conf /etc/nginx/conf.d/

nginx.conf

server {
    listen 80;

    location / {
        include uwsgi_params;
        uwsgi_pass flask:8080;
    }
}

Bu kadar şimdi ana dizindeki docker-compose.yml dosyası düzenleyelim;

docker-compose.yml

version: "3.7"

services:

  flask:
    build: ./uygulama
    container_name: flask
    restart: always
    environment:
      - APP_NAME=FlaskCrmUygulamasi
    expose:
      - 8080

  nginx:
    build: ./sunucu
    container_name: nginx
    restart: always
    ports:
      - "80:80"

Ardından şu komutu verelim;

chmod +x send.sh

./send.sh

Artık dosyalarımız karşı sunucuda. Aktarım yaptığımız sunucu klasörüne gidelim ve sırasıyla şu komutları verelim;

docker-compose build # build işlemini gerçekleştir

docker-compose up -d # arkaplanda çalıştır

Böyle hızlı bir şekilde geçiş yaptım ama zaten işlemlerin nasıl yapıldığını göreceğiniz bir video da hazırladım 🙂 Umarım faydalı olur.

Videolu Anlatım:

Düzeltmeler

Videoda **config.ini** dosyasında **theads** yazan yer **threads** olmalı.

Okuduğunuz, izlediğiniz ve vakit ayırdığınız için teşekkür ederim. Hatalı, yanlış bir şey var ise düzeltmem için lütfen belirtin.