рдПрдХ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдмрд┐рдпрди, Nginx рдФрд░ Gunicorn рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛



рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛред

Django 3.x рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП Nginx рдкрд░ рдбреЗрдмрд┐рдпрди рд╕рд░реНрд╡рд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рдерд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рддреЛрдбрд╝реЗрдВ, рдореИрдВрдиреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреАред рдпрджрд┐ рдЖрдк рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ, рддреЛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдореИрдВ рдХреМрди рд╣реВрдВ рдореИрдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд╣реАрдВ рд╣реВрдВ, рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реВрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдИрдЯреА рд╢рд┐рдХреНрд╖рд╛ рднреА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рд╢рд┐рдХреНрд╖рдХ рд╣реВрдБред рд▓реЗрдХрд┐рди рдХрд╛рдо рдкрд░ рдореБрдЭреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдордЭрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рд╕реНрдХреВрд▓ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ Django рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред

рдореВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдмрд┐рдпрди 10 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдбреЗрдмрд┐рдпрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдл рд╕реНрдерд╛рдкрдирд╛ рдереА, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд░реВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЧрдпрд╛ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

apt-get update
apt-get install -y sudo htop git curl wget unzip zip gcc build-essential make
apt-get install -y tree redis-server nginx  libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-dev python-pil ython3-pil 
apt-get install -y python3-lxml libxslt-dev python-libxml2 python-libxslt1 python-dev gnumeric libpq-dev libxml2-dev libxslt1-dev libjpeg-dev libfreetype6-dev libcurl4-openssl-dev supervisor libgdbm-dev libnss3-dev ufw

рдЖрдк рдпрд╣ рд╕рдм рдПрдХ рд╕реНрдерд╛рдкрдирд╛ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рдФрд░ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред

рдЕрдЧрд▓рд╛, рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рд╕реБрдбреЛ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд╡рд╣ рд╕реБрдкрд░рд╕реБрд╕рд░ рдХреА рдУрд░ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗред

adduser username 
usermod -aG sudo username

рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реНрд░реЛрдд рд╕реЗ рдкрд╛рдпрдерди
рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдпрд╣ 3.8.2 рдерд╛ ред

cd /home/username
curl -O https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
tar -xf Python-3.8.2.tar.xz
cd Python-3.8.2

рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг
cd тАФ , change directory;
curl тАФ URL. ;
tar тАФ .

рдкрд╛рдпрдерди рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЪрд▓рддреЗ рд╣реИрдВ:

./configure --enable-optimizations
make -j 2

рдпрд╣ рд╣рдореЗрдВ рдкрд╛рдпрдерди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрд╣рд╛рдВ, рдирдВрдмрд░ 2, рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЖрдк nproc рдХрдорд╛рдВрдб рд╕реЗ рдкрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рд╣рдо рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
make altinstall

рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди рдиреЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

python3.8 -V

рдпрд╣ рдкрд╛рдпрдерди рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рдЗрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред
python3.8 -m pip install -U pip
python3.8 -m pip install -U setuptools
python3.8 -m pip install pillow
python3.8 -m pip install virtualenv

Django рд╕реЗрдЯрдЕрдк


рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП / var / www рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ GitHub рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

cd /var/www
sudo git clone LINK_TO_PROJECT

/ Var / www рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
sudo chown -R www-data:www-data /var/www
sudo usermod -aG www-data username
sudo chmod go-rwx /var/www
sudo chmod go+x /var/www
sudo chgrp -R www-data /var/www
sudo chmod -R go-rwx /var/www
sudo chmod -R g+rwx /var/www

рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд░рджреНрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрдорддрд┐рдпрд╛рдВ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╕рдореВрд╣ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

cd djangoprojectname/
virtualenv env
source ./env/bin/activate

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдХреНрд░рд┐рдп рд╣реИ, рддреЛ рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрдЧреА: (env) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо @ рд╕рд░реНрд╡рд░ред

рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореБрдЦреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд / рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред

pip install -U pip
pip install -U setuptools
pip install -U pillow

рд╣рдордиреЗ Django, Gunicorn рдФрд░ PostgreSQL рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рд▓рдЧрд╛рдпрд╛ред

pip install django gunicorn psycopg2-binary

рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЧреНрд░реАрд╖реНрдордХрд╛рд▓реАрди рдиреЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

pip install django-summernote

рд╣рдордиреЗ рдПрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреЛрд░реНрдЯ 8000 рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╣рдо рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ):

sudo ufw allow 8000

рд╕рд░реНрд╡рд░ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рд╣реИ:

python3.8 manage.py runserver 0.0.0.0:8000

рдФрд░ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ DOMAIN_NAME: 8000 , рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди, рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдордиреЗ рдЕрднреА рддрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпреЗ рдХреЗрд╡рд▓ рдореВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЖрджрд┐ред
рдпрджрд┐ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ) рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИред

: рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CTRL + C ред

рддрдм рд╣рдо рдХреЗрд╡рд▓ рддрднреА рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ, рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рдКрдВрдЧрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рд░реВрдЯ рд╕реЗ рдиреАрдЪреЗ рдлрд╛рдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдП (рдореИрдВрдиреЗ 3 рдмрд╛рд░ рдзреНрд╡рд╕реНрдд рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛)ред

рдЧреБрдирд┐рдХреЙрд░реНрди рдХреЗ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ:

gunicorn --bind 0.0.0.0:8000 MAINAPPNAME.wsgi

MAINAPPNAME рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ settings.py рд╢рд╛рдорд┐рд▓ рд╣реИ ред

рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рд╕реА: рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TRL + рд╕реА ред

рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ


рдЬрдм рдПрдХ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдбрд┐рдмрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдРрд╕рд╛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕рдлреНрд░реАрдбрдо рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдерд╛ ред

DEBUG = False
if DEBUG:
    ALLOWED_HOSTS = ['*']
else:
    ALLOWED_HOSTS = ['HOST IP', 'DOMAIN NAIM', 'localhost']
...
STATIC_URL = '/static/'
if DEBUG:
    STATIC_DIR = os.path.join(BASE_DIR, 'static')
    STATICFILES_DIRS = [
        STATIC_DIR,
        '/var/www/static/',
    ]
else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )
MEDIA_URL = '/media/'

рдореЗрдВ urls.py, рдореИрдВ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдФрд░ рдореАрдбрд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рдирд┐рд░реНрдгрдп рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DEBUG рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

python3.8 manage.py collectstatic

рд╕реНрдЯреИрдЯрд┐рдХреНрдЯрд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдФрд░ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдирд╛:

deactivate

Gunicorn рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдЪрд▓реЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗрдВ

sudo nano /etc/systemd/system/gunicorn.socket

рдЖрдЗрдП рдлрд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд┐рдЦреЗрдВ:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

рд╣рдордиреЗ рд╕реЙрдХреЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [рдпреВрдирд┐рдЯ] рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдпрд╛, [рд╕реЙрдХреЗрдЯ] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣рдордиреЗ рд╕реЙрдХреЗрдЯ рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ [рдЗрдВрд╕реНрдЯреЙрд▓] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣рдореЗрдВ рд╕рд╣реА рд╕рдордп рдкрд░ рд╕реЙрдХреЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП systemd рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ:

sudo nano /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=username
Group=www-data
WorkingDirectory=/var/www/djangoprojectname
ExecStart=/var/www/djangoprojectname/env/bin/gunicorn \
          --access-logfile - \
          --workers 5 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

[Install]
WantedBy=multi-user.target

рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рдЕрдкрдиреЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рди рднреВрд▓реЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ * 2 + 1 рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ ред
рдЕрдм рд╣рдо Gunicorn рд╕реЙрдХреЗрдЯ рд▓реЙрдиреНрдЪ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред

sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

sudo systemctl status gunicorn.socket

рдЪрд▓ рд░рд╣реА рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ

рд▓рд┐рдП Q рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ)ред

file /run/gunicorn.sock

рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдкрд╣рд▓рд╛ sudo systemctl рд╕реНрдЯреЗрдЯрд╕ gunicorn.socket рдХрдорд╛рдВрдб рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ , рдпрд╛ рдпрджрд┐ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ /run/gunicorn.sock рдХрдорд╛рдВрдб рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИ рдХрд┐ gunicorn.sock рдлрд╛рдЗрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ Gunicorn рд╕реЙрдХреЗрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде Gunicorn рд╕реЙрдХреЗрдЯ рд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

sudo journalctl -u gunicorn.socket

рджреЗрдЦреЗрдВ рдХрд┐ рдЧрд▓рддреА рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред

рдЪрд▓реЛ рд╕реЙрдХреЗрдЯ рд╕рдХреНрд░рд┐рдпрдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

sudo systemctl status gunicorn

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрдЧрд╛:

Active: inactive (dead)

рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдХрд░реНрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

curl --unix-socket /run/gunicorn.sock localhost


рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз (400) рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ

рдмрдЬрд╛рдп рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ , рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирдЧрдиреЗрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЖрдЧреЗ рдмрдврд╝реЛред рдФрд░ рдлрд┐рд░ рд╕реЗ, рд╕реНрдерд┐рддрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ:



sudo systemctl status gunicorn

Active: active (running)

рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдб рдпрд╣ рд╣реИ + рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рдЕрдиреНрдпрдерд╛, рд╣рдо рд▓реЙрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ

sudo journalctl -u gunicorn

рдФрд░ рдЕрдВрдЧрд░рдЦрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ

sudo systemctl daemon-reload
sudo systemctl restart gunicorn

NGINX рд╕реЗрдЯрдЕрдк


рд╣рдо рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд░реНрд╡рд░ рдмреНрд▓реЙрдХ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╕рд░реНрд╡рд░ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред

sudo nano /etc/nginx/sites-available/djangoprojectname

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        alias /var/www/djangoprojectname/static/;
    }

    location /media/ {
        alias /var/www/djangoprojectname/media/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Sever_name рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЖрдк рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг:

sudo nginx -t

рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдВ:

sudo systemctl restart nginx
sudo ufw allow 'Nginx Full'

рдЖрдк рдкреЛрд░реНрдЯ 8000 рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ

sudo ufw delete allow 8000

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдореИрдВрдиреЗ https рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддрдм рддрдХ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореАрдбрд┐рдпрд╛ рдлрд╛рдЗрд▓реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рдереАрдВред

HTTPS рд╕реЗрдЯрдЕрдк


рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Cerbot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ

sudo apt-get install certbot python-certbot-nginx
sudo certbot тАУnginx

рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдбреЛрдореЗрди рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред
рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВред

sudo certbot renew --dry-run 

рдЕрдм рд╣рдо рд╕рд╛рдЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!

рдпрджрд┐ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдЕрднреА рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реНрдг рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ 403 рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдЙрдирдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, www-рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / var / www ред рдпрджрд┐ рддреНрд░реБрдЯрд┐ 404 рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реНрдерд╛рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдУрд░ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

PostgreSQL рд╕реЗрдЯрдЕрдк


PostgreSQL рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ SQLite рд╕реЗ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдпрд╛ рдХреЗрд╡рд▓ PostgreSQL рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓реЗрдВред

рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБред

sudo -u postgres psql

CREATE DATABASE dbforproject;
CREATE USER projectdbuser WITH PASSWORD 'password';

рд╣рдо Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ UTF-8 рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкреБрд╖реНрдЯ рд▓реЗрдирджреЗрди рд╕реЗ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрдХреАрдо рдХреЛ "рд░реАрдб рдХрдорд┐рдЯреЗрдб" рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред GMT (UTC) рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

ALTER ROLE projectdbuser SET client_encoding TO 'utf8';
ALTER ROLE projectdbuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE projectdbuser SET timezone TO 'UTC';

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

GRANT ALL PRIVILEGES ON DATABASE dbforproject TO projectdbuser;

рд╕рднреА рдХрдорд╛рдВрдб рдкреВрд░реА рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PostgreSQL рд╕рдВрд╡рд╛рдж рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

\q

рдЕрдм PostgreSQL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рд╣рдо Django рдХреЛ рдкреЛрд╕реНрдЯрд░реЗрдХреНрдпреВрдХреНрдпреВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЛ SQLite (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

cd /var/www/djangoprojectname
source ./env/bin/activate
cd mainappname/
python3.8 manage.py dumpdata > datadump.json

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓реЗрдВ:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbforproject',
        'USER': 'projectdbuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛рдПрдБ:

python3.8 manage.py migrate --run-syncdb

рдЗрд╕ рд╢реЗрд▓ рдХреЗ рдмрд╛рдж:

python3 manage.py shell

рдФрд░ рдЗрд╕рдореЗрдВ рд▓рд┐рдЦреЗрдВ:

>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
>>> quit()

рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ SQLite рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ:

python3.8 manage.py loaddata datadump.json

рдпрд╣ рд╕рдм рд╣реИ, рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рд╢реБрд░реВ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХрджрдореЛрдВ рдХреЛ рди рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд┐рд╕ рд╕реНрддрд░ рдкрд░ рд╣реБрдИред

рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

  1. www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04-ru
  2. vexxhost.com/resources/tutorials/how-to-deploy-django-on-nginx-gunicorn-with-postgres
  3. pythonworld.ru/web/django-ubuntu1604.html

All Articles