рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛред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
рдпрд╣ рд╕рдм рд╣реИ, рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рд╢реБрд░реВ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХрджрдореЛрдВ рдХреЛ рди рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд┐рд╕ рд╕реНрддрд░ рдкрд░ рд╣реБрдИредрд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:- www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04-ru
- vexxhost.com/resources/tutorials/how-to-deploy-django-on-nginx-gunicorn-with-postgres
- pythonworld.ru/web/django-ubuntu1604.html