Tekrar merhaba, aşağıdaki anlatıyı dikkatlice okumanızı rica ediyorum.
Bir Heroku üyeliğiniz olduğunu varsayarak anlatıyorum. Ayrıca aşağıdaki işlemler Ubuntu’da gerçekleştirilmiştir. Ayrıca sisteminizde git
'in yüklü olması da gerekiyor.
-
https://dashboard.heroku.com/apps sayfasına gidince aşağıdaki gibi bir sayfa görmeniz gerekiyor.
- Bu ekranın sağ tarafında yer alan New isimli düğmeye tıklayın, sonra da açılan menüden Create new app seçeneğine tıklayın.
- Karşınıza aşağıdaki gibi bir ekranın gelmesi gerekiyor.
Bu sayfada yer alan App name kısmına, oluşturacağınız web sitenizin ismini yazın. Choose a region kısmından da bölgeyi Europe olarak seçin. Sonra da Create app düğmesine tıklayın.
- Karşınıza aşağıdaki gibi bir sayfanın gelmesi gerekiyor:
Bu sayfada yer alan, Deploy using Heroku Git kısmında önerilen metodları uygulayacağız. Ama şimdilik buna bir ara verelim. Deploy edeceğimiz ve SocketIO kullanılacak olan siteyi tasarlayalım.
-
HOME
dizininde dildeolupbiten
isimli bir klasör oluşturuyorum. Ve bu klasörün içinde bir tane sanal ortam oluşturacağım, sanal ortamı etkinleştireceğim ve pip
, setuptools
ve wheel
paketlerini güncelleyeceğim.
mkdir dildeolupbiten
cd dildeolupbiten
python3.8 -m venv venv
source venv/bin/activate
pip3 install --upgrade pip setuptools wheel
- Şimdi, bu sanal ortama gerekli kütüphaneleri kuralım:
pip3 install flask flask_socketio eventlet greenlet gunicorn aiohttp
- Şimdi de uygulamamızı oluşturalım. Bu uygulama, kendisine bağlanan istemcinin gönderdiği mesajı istemciye geri gönderen bir socket uygulaması olacak. Siz tabi uygulamayı dilediğiniz gibi değiştirebilir, geliştirebilirsiniz.
Kodlar:
from flask import Flask
from flask_socketio import SocketIO, send
app = Flask(__name__)
app.config["SECRET_KEY"] = "secret!"
socketio = SocketIO(app)
@socketio.on('message')
def receive(message):
send(message)
- Şimdi sıra geldi, deploy etme işleminde kullanılacak dosyaları oluşturmaya. Öncelikle
venv
'e kurulmuş olan kütüphaneler için bir requirements.txt
dosyası oluşturmamız gerekiyor.
python3 -m pip freeze > requirements.txt
Oluşan requirements.txt
dosyasında şu modüllerin yer aldığını göreceksiniz:
aiohttp==3.6.2
async-timeout==3.0.1
attrs==20.2.0
chardet==3.0.4
click==7.1.2
dnspython==1.16.0
eventlet==0.28.0
Flask==1.1.2
Flask-SocketIO==4.3.1
greenlet==0.4.17
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
monotonic==1.5
multidict==4.7.6
pkg-resources==0.0.0
python-engineio==3.13.2
python-socketio==4.6.0
six==1.15.0
Werkzeug==1.0.1
yarl==1.6.0
Bu listeden pkg-resources==0.0.0
satırını silin. Daha önce o paket yüzünden hata almıştım. Oluşan requirements.txt
dosyasını app.py
'nin yanına koyun.
- Web uygulamasının nasıl deploy edileceğini belirlemek için
Procfile
isimli, uzantısız bir dosya oluşturmamız gerekiyor. İçine de aşağıdakileri yazıyoruz.
web: gunicorn --worker-class eventlet -w 1 app:app
Klasörümüzün şöyle bir ağaç görünümü olmalı:
.
├── app.py
├── Procfile
└── requirements.txt
-
https://devcenter.heroku.com/articles/heroku-cli sayfasında yer alan Heroku CLI programını bilgisayarımıza indiriyoruz.
-
app.py
'nin yer aldığı dizinde Terminal’i açıyorum. Ve şunları yazıyorum:
heroku login -i
Sizden mail adresinizi ve şifrenizi girmeniz istenecektir. Sonra da sırayla aşağıdaki komutları çalıştırın:
heroku git:remote -a dildeolupbiten
git init
git add *
git commit -m "first commit"
git push heroku master
-
Kısa bir süre deploy işleminin bitmesini beklemeniz gerekecek. Deploy işleminde hata almadığınızdan eminseniz, web siteniz artık yayındadır.
-
Test etmek için bir tane istemci oluşturalım ve deploy ettiğimiz web sitesine bağlanmaya çalışalım. Bilgisayarınızda python-socketio
kütüphanesinin kurulu olduğundan emin olun.
python3 -m pip install python-socketio
Kodlar:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import socketio
sio = socketio.Client()
info = None
@sio.event
def message(data):
global info
info = data
@sio.event
def disconnect():
sio.disconnect()
sio.connect('https://dildeolupbiten.herokuapp.com')
sio.emit("message", data=b"hello", callback=disconnect)
sio.wait()
print(info)
Socket sunucunuz doğru çalışıyorsa, sunucunun size b"Hello"
byte verisini geri göndermesi ve ekranınıza bu verinin yazdırılmış olması gerekiyor.
Not: https://dildeolupbiten.herokuapp.com az önce deploy edilmiştir. İsteyen arkadaşlar son paylaştığım kodları çalıştırarak, web sitesine gönderdikleri mesajı geri alıp almadıklarını test edebilirler.
Not: URL’ye web tarayıcısını kullanarak bağlanmaya çalışırsanız, 404 hatası alırsınız. Çünkü gösterilebilecek herhangi bir sayfa eklemedim.