Skip to content

Instantly share code, notes, and snippets.

@LD8
Last active May 1, 2020 09:31
Show Gist options
  • Save LD8/c8eea6f494be8dee82810bf34a1a840a to your computer and use it in GitHub Desktop.
Save LD8/c8eea6f494be8dee82810bf34a1a840a to your computer and use it in GitHub Desktop.
Commands to install python3, postgres, django3, gunicorn, nginx, cerbotSSL in AWS Lightsail VPS Ubuntu 18.04

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment