Önce python3 ve pip3' ü kuruyoruz.
sudo apt-get install python3-pip python3-dev
Ardından gunicorn, virtualenv ve django'yu
pip install django virtualenv gunicorn
Postgresql kurulum ve ayarlar
sudo apt-get install postgresql postgresql-contrib libpq-dev
Yüklememiz bittikten sonra
pip install psycopg2
psycopg2' yi kuruyoruz.
Veri tabanı oluşturmak için.Sırasıyla
su - postgres
psql
Kullanici ve şifresi oluşturduk.
CREATE USER userAdi WITH PASSWORD 'userSifresi';
veritabaniAdi adında bir veritabani oluşturup sahipliğide oluşturduğumuz kullanıcıya verdik.Aşağıda ki komutla.
CREATE DATABASE veritabaniAdi OWNER userAdi;
Yeni Linux Kullanici Oluşturulması
Bu komutla linuxKullaniciAdi adında bir kullanici oluşturuyoruz.
sudo useradd -m -s /bin/bash linuxKullaniciAdi
Bu komutla da şifresini ayarlıyoruz.
sudo passwd linuxKullaniciAdi
linuxKullaniciAdi adında ki kullanciya giriş yapalım.
su - linuxKullaniciAdi
Proje için myproject bir klasör oluturuyoruz.
mkdir myproject
Virtualenv oluşturuyoruz myproject klasörü içine
virtualenv --python=python3 myproject/
myproject klasörüne girelim ve virtualenvi aktifleştirelim
cd myproject/
source bin/activate
Pip kullanarak oluşturduğumuz virtualenv'e python,django ve psycopg2 yi kuralım.
pip install django gunicorn psycopg2
Örnek olarak hello_django adında bi uygulama başlatalım.
Postgresql ile birlikte Yeni Uygulama Oluşturmak
django-admin startproject hello_django
proje klasörü içinde hello_django adında bir klasör oluşturuldu.
hello_django/settings.py içinde ki settings.py klasörünü düzenlemek için herhangi bir metin editörüyle açtığımızda Veritabanina bağlanmak için gereken ayarlar bulunmakta.Aşağıda ki şekilde değiştiriyoruz.Database Settings kısmını 76.Satırda.
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'veritabaniAdi',
'USER': 'userAdi',
'PASSWORD': 'userSifresi',
'HOST': 'localhost',
'PORT': '',
Ardından settings.py içerisine STATIC_ROOT u eklemek zorundayız.Bunu eklemezsek css dosyalarını bulamıyor nginx.
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Kaydedip çıkalım.Ardından sırasıyla
python manage.py migrate
admin paneline giriş için kullanıcı oluşturuyoruz.
python manage.py createsuperuser
Static dosyaları otomatik olarak oluşturmak için.
python manage.py collectstatic
Dedikten sonra projeyi başlatalım.Böyle yaparsak server yerelde çalışacaktır.
python manage.py runserver
Kendi ip'miz üzerinden yayın yapmak istiyorsak.
python manage.py runserver 0.0.0.0:8000
diyerek yayın yapabiliriz artık ipv4 adresi: 8000 yazılarak sunucuya bağlanılabilir.
Mesela bende 192.168.1.4:8000 yaptığım zaman diğer cihazlardan çalışan sunucuya bağlanabiliyorum.
Django projesi ve Gunicorn Ayarları proje klasörüne girip virtualenv'i aktifleştirelim.
cd /myproject/
source bin/activate
bin klasörünün içine gunicorn_start adında yeni bir dosya oluşturalım.
nano bin/gunicorn_start
Dosyanın içine
#!/bin/bash
# Project Name
NAME="hello_django"
# Django Project Directory
DJANGODIR=/home/linuxKullaniciAdi/myproject/hello_django
# Run gunicorn on the socket file
SOCKFILE=/home/linuxKullaniciAdi/myproject/hello_django/run/gunicorn.sock
# Gunicorn running as user and group
USER=linuxKullaniciAdi
GROUP=linuxKullaniciAdi
# Workers
NUM_WORKERS=3
#Module Setting
#replace hello_django with your project name
DJANGO_SETTINGS_MODULE=hello_django.settings
DJANGO_WSGI_MODULE=hello_django.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
Kaydedip çıkalım.
Sonra chmod kullanarak oluşturduğumuz gunicorn_start
dosyayı çalıştırılabilir hale getirelim
chmod u+x bin/gunicorn_start
Supervisor Kurulumu ve Ayarları
Supervisor linux ortamlarinda processleri kontrol altinda tutmaya yarayan yazilim. Surekli calismasini istediginiz bir yazilim varsa veya bunu bir sekilde yazilim crash ettiginde vb servis (bkz: service) gibi yeniden calistirma ozelligine sahiptir. supervisor kurulumu için
sudo apt-get install supervisor
Supervisor'un ayar dosyaları
/etc/supervisor, içinde bulunmakta.Bu klasöre gidelim ve yeni bir dosya oluşturalım.
cd /etc/supervisor/conf.d/
nano hello-django.conf
Dosyanın içine
[program:hello_django]
command = sh /home/linuxKullaniciAdi/myproject/bin/gunicorn_start
user = linuxKullaniciAdi
stdout_logfile = /home/linuxKullaniciAdi/myproject/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
Şimdi oluşturduğumuz linuxKullaniciAdi adında ki kullanıcıya giriş yapalım.
su - linuxKullaniciAdi
Gunicorn socket dosyası oluşturmak için proje içinde run adında bi klasör oluşturalım.
mkdir -p myproject/hello_django/run/
Supervisor loglarının tutulduğu klasör oluşturalım
mkdir -p myproject/logs/
touch myproject/logs/gunicorn_supervisor.log
şimdi supervisor servisini başlatacağız.
sudo systemctl start supervisor
Logları kontrol edelim.
sudo supervisorctl
tail -f hello_django
Dediğimizde çalıştırdığımız servisin loglarını görürüz.
Örneğin şöyle bir çıktı
Nginx kurulumu ve Ayarları
Nginx kurulumu için
sudo apt-get install nginx
Nginx config dosyaları /etc/nginx/sites-available/içinde bulunmakta klasör içine girelim ve nginx config dosyası oluşturalım.
cd /etc/nginx/sites-available/
nano hello_django
içine
# Django running with Gunicorn Sock file
upstream hello_django_project {
server unix:/home/linuxKullaniciAdi/myproject/hello_django/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name yayinYapilacakOlanAdresinAdi.com;
client_max_body_size 4G;
access_log /home/linuxKullaniciAdi/myproject/logs/nginx-access.log;
error_log /home/linuxKullaniciAdi/myproject/logs/nginx-error.log;
location /static/ {
alias /home/linuxKullaniciAdi/myproject/hello_django/static/;
}
location /media/ {
alias /home/linuxKullaniciAdi/myproject/hello_django/media/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
# Try to serve static files from nginx, no point in making an
# *application* server like Unicorn/Rainbows! serve static files.
if (!-f $request_filename) {
proxy_pass http://hello_django_project;
break;
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/linuxKullaniciAdi/myproject/hello_django/static/;
}
}
}
Kaydedip çıktıptan sonra test edelim.
sudo ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
sudo nginx -t
hata yoksa sıkıntı yok.
Nginx i yeniden başlatalım.
systemctl restart nginx
Bitti.Artık siteye girip test kontrol edebiliriz.
netstat -pl
komutu ile de kontrol edebiliriz.
0 yorum:
Yorum Gönder