Kurulum_notları_Ubuntu20-nginx

Alıntıdır..Mustafa ya teşekkürler..
## Nginx

Sistemi güncelleyip nginx ‘i kuralım.

“`sh
sudo apt update
sudo apt install nginx
“`

her şey yolundaysa kontrol edelim

“`sh
systemctl status nginx
“`

## Git

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.

“`sh
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

Python ile geliştirme yaptığım için sanal alanımı oluşturuyorum..

“`sh
sudo apt-get install python3-venv
python3 -m venv myvenv
“`

sanal ortamda shell ekranına erişmek için

“`sh
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
postgresql kurulumlarına geçersek

“`sh
sudo apt install postgresql postgresql-contrib
sudo -i -u postgres
sudo -u postgres psql
\password
“`

## postgresql i dışardan erişmek için gereken ayarlar.

postgresql.conf dosyasında localhost’u 0.0.0.0 veya * yapıyoruz.

“`sh
listen_addresses = ‘*’
“`

ssl hatası verdiği için son olarak da
pg_hba.conf dosyasında son satıra bunu ekliyoruz.

“`sh
# 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.
“`sh
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:
“`sh
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.
“`sh
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/sahago.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sahago.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.

“`html
https://www.example.com -> https://example.com
http://www.example.com -> https://example.com
http://example.com -> https://example.com
“`