arrow_back

snippet : deploy django oldschool




#Pre
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev nginx curl sudo apt install postgresql postgresql-contrib


#Postgre 
sudo -u postgres psql
CREATE DATABASE <projectname>;
CREATE USER <user> WITH PASSWORD '<passworddb>';
ALTER ROLE <user> SET client_encoding TO 'utf8';
ALTER ROLE <user> SET default_transaction_isolation TO 'read committed';
ALTER ROLE <user>r SET timezone TO 'Asia/Tehran';
GRANT ALL PRIVILEGES ON DATABASE <projectname> TO <user>; \q


#Environment
sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv
virtualenv env
pip3 install gunicorn psycopg2-binary
migartion folder init.py
mkdir media/images
pip install -r req....
migrate
collectstatic
creatsuperuser


#Gunicorn socket
sudo nano /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target


#Gunicorn service
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/<projectname>
ExecStart=/home/ubuntu/<projectname>/env/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          <projectname>.wsgi:application

[Install]
WantedBy=multi-user.target


#Gunicorn active service
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket


#Gunicorn test service
sudo systemctl status gunicorn.socket
sudo journalctl -u gunicorn.socket
sudo systemctl daemon-reload
sudo systemctl restart gunicorn


#nginx
sudo nano /etc/nginx/sites-available/<projectname>
server {
    listen 80;
    server_name <projectdomain>.com www.<projectdomain>.com;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/<projectname>;
    }
    location /media/ {
        root /home/ubuntu/<projectname>;
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}
sudo ln -s /etc/nginx/sites-available/<projectname> /etc/nginx/sites-enabled


#nginx test
nginx -t
sudo systemctl restart nginx
sudo ufw delete allow 8000
sudo ufw allow 'Nginx Full'


#SSL/HTTPS backend install

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
sudo apt-get install certbot python-certbot-nginx
sudo certbot --nginx


#WORKER SYSTEMCTL 
[Unit]
Description=worker daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/<projectname>
ExecStart=/home/ubuntu/<projectname>/env/bin/python3 worker.py
[Install]
WantedBy=multi-user.target




Published @ May 2020