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
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
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.