sudo apt-get update && sudo apt-get upgrade
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
sudo -H pip3 install --upgrade pip sudo -H pip3 install virtualenv
sudo -u postgres psql
CREATE DATABASE myproject;
CREATE USER myprojectuser WITH PASSWORD 'password';
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
\q
git clone Django-repo/HTTP/address
cd project_directory
virtualenv venv
source venv/bin/activate
python -m pip install --upgrade pip
(venv)$ pip install -r requirements.txt
//some settings with settings.py
(STATIC_ROOT, postgres db setup, ALLOWED_HOTSTS), .env
(SECZRET_KEY export) etc.
(venv)$ python manage.py migrate
(venv)$ python manage.py collectstatic
//activate a port of 8000 under 'networking' tag in the control panel on Lightsail page.
(venv)$ python manage.py runserver 0.0.0.0:8000
(venv)$ gunicorn --bind 0.0.0.0:8000 myproject.wsgi
(venv)$ deactivate
sudo nano /etc/systemd/system/gunicorn.socket
# /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
# save and close
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myprojectdir
ExecStart=/home/sammy/myprojectdir/myprojectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
# Note: User is the system user with writing privilege, so change that, also change 'WorkingDirectory' and 'ExecStart', DO NOT forget 'project_folder_contains_wsgi.wsgi:application'
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
sudo nano /etc/nginx/sites-available/myproject
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/sammy/myprojectdir;
}
location /media/ {
root /home/sammy/myprojectdir;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
# save and close the file
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
ufw allow OpenSSH
ufw enable
ufw status
sudo apt install python-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com