04/05/2020

Backend Kurulum Notlarım


  1. Nginx Kurulum ve Site ayaları nasıl yapılır?
  2. Python virtualenv yani sanal ortamlar nasıl oluşturulur?
  3. Flask ile yazılan site gunicorn ile nasıl yayına alınır?
  4. PostgreSql Database'e dışarıdan erişmek için gerekli ayar nasıl yapılır?
  5. Nginx Certbot ile ssl kurulumu
  6. Nginx www http(s) yönlendirmesi

bunlar hakkında öğrenirken yazmış olduğum kurulum notlarını paylaşmak istedim buyrun;




Nginx kurulum nasıl yapılır?


Sistemi güncelleyip nginx 'i kuralım.
sudo apt update
sudo apt install nginx
her şey yolundaysa kontrol edelim
systemctl status nginx

Git ile entegre etme


Github la entegre edeceğimiz için bir ssh keygen oluşturalım.
mail adresini girelim ve diğer sorularda enter deyip geçelim.
Eğer şifre girersek git pull yapacağımız zaman şifreyi girmek zorunda kalacağız, hiç gerek yok.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
arka planda ssh-agenti başlatalım
eval "$(ssh-agent -s)"

Oluşturduğumuz keygeni ekleyelim.
ssh-add ~/.ssh/id_rsa

Daha sonra id_rsa.pub içeriğini github da ayarlar kısmında ssh keygen bölümüne ekleyeceğiz.

Python Sanal Ortam Oluşturma


Python ile geliştirme yaptığım için sanal alanımı oluşturuyorum…
sudo apt-get install python3-venv
python3 -m venv myvenv
sanal ortamda shell ekranına erişmek için
source ../myenv/bin/activate
Gerekli kütüphaneleri kurmak için:
pip install -r requirement.txt

requirement.txt güncellemek için
pip freeze > requirement.txt


PostgreSql kurulumu 


postgresql kurulumlarına geçersek

#postgres install
sudo apt install postgresql postgresql-contrib 
#postgres kullanıcısına geçer. .conf dosyalarını düzenlemek için lazım olacak.
sudo -i -u postgres 


#default şifreyi değiştirmek için
sudo -u postgres psql 
\password

Postgresql'i dışardan erişime açmak


postgresql.conf dosyasında localhost’u 0.0.0.0 veya * yapıyoruz.
listen_addresses = '*'
ssl hatası verdiği için son olarak da
pg_hba.conf dosyasında son satıra bunu ekliyoruz.
# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5
yeniden başlatalım
service postgresql restart

ve artık postgresql dışardan erişebilir durumda…

Flask için Reverse Proxy nginx ayarları


Nginx de site configrasyonu yaparken şablondan yararlanabiliriz.
default olan şablonu kopyalıyoruz.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

gerekli düzenlemeleri yaptıktan sonra sites-available den sites-enabled’a kopyalayabiliriz.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

sites-enabled’la bulunan default ayarı siliyoruz ki yaptığımız yeni ayar aktif olsun.
reverse proxy kullanacaksak aşağıdaki config dosyasını kullanabiliriz.
server {
location / {
    proxy_pass http://localhost:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
#site ssl onayı almak için gerekiyor
location ~ /.well-known {
    root /var/www/cert;
}

}
ngnix i güncelleyip bir hata yapıp yapmadığımızı görebiliriz.
sudo /etc/init.d/nginx restart

Ayarlarda bir hata yoksa gunicorn ile sitemizi yayın hayatına sokabiliriz.
sanal ortamda shell ekranı açtıktan sonra bu komutu girmemiz gerekiyor.
gunicorn da aynı şekilde sanal ortamda kurulması gerek.
gunicorn server:app -b 0.0.0.0:5000 --reload --timeout 3600 --daemon --error-logfile static/log.txt

herhangi bir zaman aşımı probleminde sitemizin çökmemesi için timeout ve gunicorn u arka planda çalışması için --daemon ekliyoruz. isterseniz hataları da loglayabilirsiniz.

Ssl Sertifikası Kurulumu


yeni repo adresi ekleyelim:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
eklediğimiz certbotu kuralım:
sudo apt-get install certbot python3-certbot-nginx

yeni bir ssl serfikası oluşturalım:
sudo certbot --nginx -d your_domain -d www.your_domain

eğer ssl sertifikası ayarlarını nginx’e otomatik kurulum yapılmasını istiyorsanız:
sudo certbot --nginx

manuel kurulum için:
sudo certbot certonly --nginx

son olarak yaptığımız config dosyası aşağıdaki gibi olacaktır.
server {
location / {
    proxy_pass http://localhost:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

location ~ /.well-known {
    root /var/www/cert;
}
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    if ($host ~* ^www\.){
        return 301 $scheme://example.com$request_uri;
    }

}
server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    if ($host ~* ^www\.){
        return 301 $scheme://example.com$request_uri;
    }
#     if ($host = www.example.com){
#       return 301 $scheme://example.com$request_uri;
#    }

    server_name example.com;
    listen 80;
    return 404; # managed by Certbot

}
http -> https ve www-non www yönlendirmesi de yapmış olduk böylece adresler aşağıdaki gibi yönlendirmesi oluştu.
https://www.example.com -> https://example.com
http://www.example.com -> https://example.com
http://example.com -> https://example.com

postgresql yararlandığım kaynaklar



nginx yararlandığım kaynaklar


Okuyup geçme yorum yap lütfen :)
EmojiEmoji