PrettyPets β ΡΠΎΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡΠΌΠΈ Π»ΡΠ±ΠΈΠΌΡΡ ΠΏΠΈΡΠΎΠΌΡΠ΅Π².ΠΡΠΎΠ΅ΠΊΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π±ΡΠΊΠ΅Π½Π΄-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Django ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° React. ΠΠ΅ΠΏΠ»ΠΎΠΉ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ. Π PrettyPets ΠΌΠΎΠΆΠ½ΠΎ:
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ.
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΠΎ ΠΏΠΈΡΠΎΠΌΡΠ°.
- Π£Π΄Π°Π»ΠΈΡΡ ΠΏΠΈΡΠΎΠΌΡΠ°.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ ΠΎΠΊΡΠ°ΡΠΊΡ ΠΏΠΈΡΠΎΠΌΡΠ°.
- Π Π°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡΡ ΠΏΠΈΡΠΎΠΌΡΠ°.
- Π£ΠΊΠ°Π·Π°ΡΡ Π³ΠΎΠ΄ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠΌΡΠ°.
- Python 3.9
- Django REST
- Gunicorn
- Nginx
- JS
- Node.js
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ
ssh -i ΠΏΡΡΡ_Π΄ΠΎ_SSH_ΠΊΠ»ΡΡΠ°/Π½Π°Π·Π²Π°Π½ΠΈΠ΅_ΡΠ°ΠΉΠ»Π°_Ρ_SSH_ΠΊΠ»ΡΡΠΎΠΌ_Π±Π΅Π·_ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ login@ip
ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ
git clone git@github.com:AnnaMihailovna/prettypets-django-react.git
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ backend-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
cd prettypets-django-react/backend/
Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
python -m venv venv
ΠΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
source venv/bin/activate
ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ pip Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ
pip install --upgrade pip
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
pip install -r requirements.txt
ΠΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ» manage.py ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
python manage.py migrate
Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
python manage.py createsuperuser
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΈΠΊΡ Π±ΡΠΊΠ΅Π½Π΄Π°
python manage.py collectstatic
ΠΠ· ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΠΊΡ Π±ΡΠΊΠ΅Π½Π΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
sudo cp -r /home/yc-user/prettypets-django-react/backend/static_backend/ /var/www/kittygram/
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Django
python manage.py runserver
Π ΡΠ°ΠΉΠ»Π΅ settings.py xxx.xxx.xxx.xxx ΡΠΊΠ°ΠΆΠΈΡΠ΅ IP Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°
ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx', '127.0.0.1', 'localhost']
Π Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ prettypets-django-react/frontend/ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
npm i
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
npm run start
ΠΡΠΎΠ²Π΅ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://Π²Π½Π΅ΡΠ½ΠΈΠΉ_ip_Π°Π΄ΡΠ΅Ρ_ΡΠ΅ΡΠ²Π΅ΡΠ°:3000
ΠΠ° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°
pip install gunicorn==20.1.0
ΠΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ manage.py
gunicorn --bind 0.0.0.0:8000 backend.wsgi
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ - Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΡΡΠ°ΡΠΈΠΊΠΈ
http://Π²Π°Ρ_ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ_IP:8000/admin/
ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ Π΄Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ.
Π Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ /etc/systemd/system/ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» gunicorn.service ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π΅Π³ΠΎ Π² Nano
sudo nano /etc/systemd/system/gunicorn.service
ΠΠΎΠ΄ΡΡΠ°Π²ΡΡΠ΅ Π² ΠΊΠΎΠ΄ ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π² ΡΠ°ΠΉΠ» gunicorn.service ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
[Unit]
# ΠΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ½ΠΈΡΠ°, ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
Description=gunicorn daemon
# Π£ΡΠ»ΠΎΠ²ΠΈΠ΅: ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ,
# ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠΈ.
# Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
# https://systemd.io/NETWORK_ONLINE/
After=network.target
[Service]
# ΠΡ ΡΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π·Π°ΠΏΡΡΠΊ:
# ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΈΠΌΡ, ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π»ΠΈΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
User=yc-user
# ΠΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
# /home/<ΠΈΠΌΡ-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π²-ΡΠΈΡΡΠ΅ΠΌΠ΅>/
# <Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ-Ρ-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ>/<Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ-Ρ-ΡΠ°ΠΉΠ»ΠΎΠΌ-manage.py>/.
# ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
WorkingDirectory=/home/yc-user/prettypets-django-react/backend/
# ΠΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ ΡΡΠΊΠ°ΠΌΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ systemd:
# /home/<ΠΈΠΌΡ-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π²-ΡΠΈΡΡΠ΅ΠΌΠ΅>/
# <Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ-Ρ-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ>/<ΠΏΡΡΡ-Π΄ΠΎ-gunicorn-Π²-Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ-ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ> --bind 0.0.0.0:8000 backend.wsgi
ExecStart=/home/yc-user/prettypets-django-react/backend/venv/bin/gunicorn --bind 0.0.0.0:8000 backend.wsgi
[Install]
# Π ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°.
# ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ <multi-user.target> ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ systemd Π·Π°ΠΏΡΡΡΠΈΠ» ΠΏΡΠΎΡΠ΅ΡΡ,
# Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈ Π±Π΅Π· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
WantedBy=multi-user.target
Π§ΡΠΎΠ±Ρ ΡΠΎΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΏΡΡΡ Π΄ΠΎ Gunicorn, Π°ΠΊΡΠΈΠ²ΠΈΡΡΠΉΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
which gunicorn
ΠΠ°Π½ΠΎΠ²ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ gunicorn.service
sudo systemctl start gunicorn
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ Gunicorn Π² ΡΠΏΠΈΡΠΎΠΊ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅
sudo systemctl enable gunicorn
ΠΠ°Ρ ΠΎΠ΄ΡΡΡ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΈΠ· Π»ΡΠ±ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
sudo apt install nginx -y
sudo systemctl start nginx
Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ°ΠΉΡΠ²ΠΎΠ»Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°ΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌΠΈ
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ°ΠΉΡΠ²ΠΎΠ»
sudo ufw enable
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²Π½Π΅ΡΡΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
sudo ufw status
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΡ ΡΡΠΎΠ½ΡΠ΅Π½Π΄-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ prettypets-django-react/frontend/
npm run build
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Nginx (ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ β /var/www/) ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΊΠΈ .../frontend/build/
sudo cp -r /home/yc-user/prettypets-django-react/frontend/build/. /var/www/taski/
Π§ΡΠΎΠ±Ρ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΠΊΠΎΡΠΈΠΊΠΎΠ² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΈΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ media Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ /var/www/kittygram/. Django-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ. Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π±ΡΠΊΠ΅Π½Π΄Π° Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ MEDIA_ROOT ΡΠΊΠ°Π·Π°Π½ ΠΏΡΡΡ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ media. ΠΠ°Π·Π½Π°ΡΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ media, ΡΡΠΎΠ±Ρ Django-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ chown
sudo chown -R <ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ> /var/www/kittygram/media/
Π§Π΅ΡΠ΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Nano ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°
sudo nano /etc/nginx/sites-enabled/default
Π£Π΄Π°Π»ΠΈΡΠ΅ Π²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, Π·Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π½ΠΎΠ²ΡΠ΅
server {
listen 80;
server_name ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ_ip_Π²Π°ΡΠ΅Π³ΠΎ_ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ_ΡΠ΅ΡΠ²Π΅ΡΠ°;
location /api/ {
client_max_body_size 20M;
# ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΡΠ΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ.
proxy_pass http://127.0.0.1:8000;
}
location /admin/ {
client_max_body_size 20M;
proxy_pass http://127.0.0.1:8000;
}
location /media/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8000;
}
location / {
root /var/www/taski;
index index.html index.htm;
try_files $uri /index.html;
}
}
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ
sudo nginx -t
ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Nginx
sudo systemctl reload nginx
Π Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π²Π²Π΅Π΄ΠΈΡΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠΉ IP Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ°.
ΠΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π»ΠΎΠ³Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
sudo tail /var/log/nginx/access.log