Uzak sunucumuzua bağlanmak için kendimize bir kullanıcı oluşturuyoruz. Şifresini güçlü oluşturmalıyız.
# adduser yeni_kullanici
# usermod -aG sudo yeni_kullanici
# sudo systemctl reload sshd
Güvenlik duvarında hangi kayıtlı uygulamalar var
# sudo ufw app list
OpenSSH İzin verin
### sudo ufw allow OpenSSH
# sudo ufw enable
# sudo ufw status
Artık yazılımı kurmaya başlayabiliriz
# sudo apt update
# sudo apt upgrade
# sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
# sudo -u postgres psql
Artık pg kabuğuna giriş yapmalıyız
CREATE DATABASE project_database;
CREATE USER dbadmin WITH PASSWORD 'abc123!';
ALTER ROLE dbadmin SET client_encoding TO 'utf8';
ALTER ROLE dbadmin SET default_transaction_isolation TO 'read committed';
ALTER ROLE dbadmin SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE project_database TO dbadmin;
\q
Python3-venv paketini kurmamız gerekiyor
# sudo apt install python3-venv
# mkdir proje_dizini
# cd proje_dizini
# python3 -m venv ./venv
# source venv/bin/activate
Local makinamızda requirements.txt dosyası oluşturalım. Pip bağımlılıkları için gerekli
$ pip freeze > requirements.txt
Repomuza local projeyi pushluyoruz
# git clone https://github.com/yourgithubname/your_project.git
Tek tek elle yüklemek çok zor olur :)
# pip install -r requirements.txt
Bu kodu sunucudaki projemizin settings.py içine yazın. Sunucuya özel ayarlar için
try:
from .local_settings import *
except ImportError:
pass
local_settings.py adında bir dosyayı settings.py dosyanızın yanına oluşturun. Asıl projeniz içerisinden bunları alacaksınız.
- SECRET_KEY
- ALLOWED_HOSTS
- DATABASES
- DEBUG
- EMAIL_*
# python manage.py makemigrations
# python manage.py migrate
# python manage.py createsuperuser
python manage.py collectstatic
# sudo ufw allow 8000
# python manage.py runserver 0.0.0.0:8000
Gunicorn yükleyelim
# pip install gunicorn
requirements.txt dosyasına ekleyelim
# pip freeze > requirements.txt
Burada sunucu ip adresinizi girip :8000 portuna gitmelisiniz settings.py / local_settings.py içerisinde allowed host kısmına sunucu ip adresinizi girmelisiniz
# gunicorn --bind 0.0.0.0:8000 proje_adiniz.wsgi
Resimleriniz vs. gitmiş olacak.
ctrl-c
# deactivate
# sudo nano /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
# sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=linux_oturumundaki_adınız
Group=www-data
WorkingDirectory=/home/linux_oturumundaki_adınız/proje_dizininiz/proje_adiniz
ExecStart=/home/linux_oturumundaki_adınız/proje_dizininiz/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
proje_adiniz.wsgi:application
[Install]
WantedBy=multi-user.target
# sudo systemctl start gunicorn.socket
# sudo systemctl enable gunicorn.socket
# sudo systemctl status gunicorn.socket
# file /run/gunicorn.sock
# sudo nano /etc/nginx/sites-available/proje_adiniz
server {
listen 80;
server_name SUNUCU_IP_ADRESINIZ;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/linux_oturumundaki_adınız/proje_dizininiz/proje_adiniz;
}
location /media/ {
root /home/linux_oturumundaki_adınız/proje_dizininiz/proje_adiniz;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
# sudo ln -s /etc/nginx/sites-available/proje_adiniz /etc/nginx/sites-enabled
# sudo nginx -t
# sudo systemctl restart nginx
# sudo ufw delete allow 8000
# sudo ufw allow 'Nginx Full'
Nginx conf dosyasını açın
# sudo nano /etc/nginx/nginx.conf
client_max_body_size 20M;
# sudo systemctl restart nginx
media klasörünü silip komple baştan başlatmanızı öneririm(proje_dizini)
# sudo rm -rf media/photos
Domaininizi kayıt edin
@ kayıt SUNUCU_IP_ADRESINIZ
www CNAME example.com
Sunucudaki local_settings.py dosyanıza gidin ve allowed hosts kısmına domainizi ve ip adresinizi ekleyin
ALLOWED_HOSTS = ['SUNUCU_IP_ADRESINIZ', 'örnek.com', 'www.örnek.com']
server {
listen: 80;
server_name xxx.xxx.xxx.xxx örnek.com www.örnek.com;
}
# sudo systemctl restart nginx
# sudo systemctl restart gunicorn
# pg_dump -U db_username dbname > outfile -
# psql -U db_username dbname < infile
ufak not! localdeki projeyi deploy ederken önce sunucuda db restore yapın sonra django migrate yapın.