- Nginx Kurulum ve Site ayaları nasıl yapılır?
- Python virtualenv yani sanal ortamlar nasıl oluşturulur?
- Flask ile yazılan site gunicorn ile nasıl yayına alınır?
- PostgreSql Database'e dışarıdan erişmek için gerekli ayar nasıl yapılır?
- Nginx Certbot ile ssl kurulumu
- 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 edelimsystemctl 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ımeval "$(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çinsource ../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 dapg_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ımservice 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
- https://dba.stackexchange.com/a/122317
- https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
- https://www.liquidweb.com/kb/change-a-password-for-postgresql-on-linux-via-command-line/
nginx yararlandığım kaynaklar
- https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html
- https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04#step-7-%E2%80%94-securing-the-application
- https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04
- https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-to-use-custom-error-pages-on-ubuntu-14-04
Okuyup geçme yorum yap lütfen :)
Yorumunuz cevaplandığında bildirim almak için Beni bilgilendir'i işaretleyin.
EmojiEmoji