mirror of
https://github.com/IntenseWebs/servercode.git
synced 2024-11-25 01:50:17 -06:00
145 lines
4.8 KiB
Plaintext
145 lines
4.8 KiB
Plaintext
https://code.iweb.city/iw/servercode/src/branch/main/postgres-pgadmin-python3-django-gunicorn-nginx
|
|
https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04
|
|
https://tonyteaches.tech/django-nginx-uwsgi-tutorial/
|
|
https://www.datadoghq.com/blog/nginx-502-bad-gateway-errors-gunicorn/#nginx-cant-access-the-socket
|
|
|
|
sudo apt install python3-pip python3-dev python3-venv libpq-dev postgresql postgresql-contrib nginx curl
|
|
# OPTIONAL FOR OLDER PYTHON: sudo apt install virtualenv python3-virtualenv
|
|
|
|
su - postgres
|
|
psql
|
|
# ONLY DROP IF NEEDED TO FIX: DROP DATABASE MYDATABASE;
|
|
CREATE USER MYDBUSERNAME WITH PASSWORD 'MYDBPASSWORD' CREATEDB;
|
|
CREATE DATABASE MYDATABASE WITH OWNER MYDBUSERNAME;
|
|
ALTER ROLE MYDBUSERNAME SET client_encoding TO 'utf8';
|
|
ALTER ROLE MYDBUSERNAME SET default_transaction_isolation TO 'read committed';
|
|
ALTER ROLE MYDBUSERNAME SET timezone TO 'UTC';
|
|
GRANT ALL PRIVILEGES ON DATABASE MYDATABASE TO MYDBUSERNAME;
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO MYDBUSERNAME;
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO MYDBUSERNAME;
|
|
grant postgres to MYDBUSERNAME
|
|
\q
|
|
|
|
sudo adduser MYUSERNAME
|
|
sudo usermod -aG sudo MYUSERNAME
|
|
su - MYUSERNAME
|
|
|
|
# sudo ufw allow 5432
|
|
# sudo vi /etc/postgresql/15/main/postgresql.conf
|
|
listen_addresses = 'localhost, 192.168.1.3, 192.168.1.6, 192.168.1.7, 192.168.1.66, 192.168.1.123, 192.168.1.126, 192.168.1.127, 192.168.1.222'
|
|
|
|
# sudo vi /etc/postgresql/15/main/pg_hba.conf
|
|
local MYDATABASE MYDBUSERNAME scram-sha-256
|
|
host MYDATABASE MYDBUSERNAME 192.168.1.0/24 scram-sha-256
|
|
|
|
# TEST DATABASE CONNECTION
|
|
psql "postgres://MYDBUSERNAME@192.168.1.6/MYDATABASE"
|
|
|
|
mkdir ~/env
|
|
python3 -m venv /home/MYUSERNAME/env/MYPROJECTDIR
|
|
ls ~/env/MYPROJECTDIR/bin
|
|
source ~/env/MYPROJECTDIR/bin/activate
|
|
which python
|
|
pip install Django gunicorn psycopg2-binary
|
|
django-admin startproject iwebcity
|
|
cd iwebcity
|
|
vi ~/iwebcity/iwebcity/settings.py
|
|
ALLOWED_HOSTS = ['.iweb.city', '.localhost', '127.0.0.1', '[::1]', '192.168.1.6']
|
|
DATABASES = {
|
|
'default': {
|
|
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
|
'NAME': 'MYDATABASE',
|
|
'USER': 'MYDBUSERNAME',
|
|
'PASSWORD': 'MYDBPASSWORD',
|
|
'HOST': 'localhost',
|
|
'PORT': '',
|
|
}
|
|
}
|
|
STATIC_URL = '/static/'
|
|
import os
|
|
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
|
|
|
|
~/iwebcity/manage.py makemigrations
|
|
~/iwebcity/manage.py migrate
|
|
~/iwebcity/manage.py createsuperuser
|
|
~/iwebcity/manage.py collectstatic
|
|
|
|
# sudo ufw allow 8001
|
|
# TEST DJANGO PYTHON INCLUDED WEBSERVER ONLY - REBOOT TO APPLY ALL FIREWALL AND POSTGRES CHANGES
|
|
~/iwebcity/manage.py runserver 0.0.0.0:8001
|
|
gunicorn --bind 0.0.0.0:8001 iwebcity.wsgi
|
|
deactivate
|
|
_______________________________________________________________
|
|
|
|
vi /etc/systemd/system/gunicorn.socket
|
|
[Unit]
|
|
Description=gunicorn socket
|
|
[Socket]
|
|
ListenStream=/run/gunicorn.sock
|
|
[Install]
|
|
WantedBy=sockets.target
|
|
|
|
vi /etc/systemd/system/gunicorn.service
|
|
Unit]
|
|
Description=gunicorn daemon
|
|
Requires=gunicorn.socket
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=serv
|
|
Group=nginx
|
|
WorkingDirectory=/home/serv/iwebcity
|
|
ExecStart=/home/serv/env/MYPROJECTDIR/bin/gunicorn \
|
|
--access-logfile - \
|
|
--workers 3 \
|
|
--bind unix:/run/gunicorn.sock \
|
|
iwebcity.wsgi:application
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
_______________________________________________________________
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl restart gunicorn
|
|
systemctl start gunicorn.socket
|
|
systemctl enable gunicorn.socket
|
|
systemctl enable gunicorn.service
|
|
systemctl status gunicorn.socket
|
|
curl --unix-socket /run/gunicorn.sock localhost
|
|
sudo journalctl -u gunicorn
|
|
sudo tail -F /var/log/nginx/error.log
|
|
file /run/gunicorn.sock
|
|
namei -l /run/gunicorn.sock
|
|
The following logs may be helpful:
|
|
Check the Nginx process logs: sudo journalctl -u nginx
|
|
Check the Nginx access logs: sudo less /var/log/nginx/access.log
|
|
Check the Nginx error logs: sudo less /var/log/nginx/error.log
|
|
Check the Gunicorn application logs: sudo journalctl -u gunicorn
|
|
Check the Gunicorn socket logs: sudo journalctl -u gunicorn.socket
|
|
_______________________________________________________________
|
|
#NGINX
|
|
|
|
vi dj.iweb.city.conf
|
|
upstream django {
|
|
server unix:///home/iw/iwebcity/iwebcity.sock;
|
|
}
|
|
# configuration of the server
|
|
server {
|
|
listen 8001;
|
|
server_name django.iweb.city www.django.iweb.city dj.iweb.city;
|
|
charset utf-8;
|
|
# max upload size
|
|
client_max_body_size 75M;
|
|
# Django media and static files
|
|
location /media {
|
|
alias /home/iw/iwebcity/media;
|
|
}
|
|
location /static {
|
|
alias /home/iw/iwebcity/static;
|
|
}
|
|
# Send all non-media requests to the Django server.
|
|
location / {
|
|
uwsgi_pass django;
|
|
include /home/iw/iwebcity/uwsgi_params;
|
|
}
|
|
}
|