Giter Site home page Giter Site logo

octrow / infra_sprint1 Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 327 KB

Kittygram — сайт для просмотра и показа фотографий кошачих питомцев.

Python 19.06% HTML 1.63% JavaScript 47.93% CSS 31.38%
django django-rest-framework gunicorn nginx python

infra_sprint1's Introduction

Kittygram — сайт для просмотра и показа фотографий кошачих питомцев.

Описание проекта

Пользователи могут регистрироваться, загружать профайл с фотографии и описанием, и смотреть питомцев других пользователей.

Технологии

  • Python 3.10
  • Django==3.2.3
  • djangorestframework==3.12.4
  • Nginx==1.18.0
  • gunicorn=20.1.0

Установка (ubuntu)


1. Клонировать репозиторий::

git clone [email protected]:octrow/infra_sprint1.git


2. Создать и активировать виртуальное окружение:

python3 -m venv venv
source venv/bin/activate


3. Установить зависимости для Python:

pip install -r requirements.txt 


4. Перейти в папку backend и выполнить миграции:

cd infra_sprint1/backend/
python manage.py migrate


5. Создать суперпользователя:

python manage.py createsuperuser


6. Отредактировать файл infra_sprint1/backend/kittygram_backend/settings.py - добавить локальные адреса и доменное имя в переменную ALLOWED_HOSTS:

ALLOWED_HOSTS = ['127.0.0.1', '0.0.0.0', 'localhost', 'xxx.xxx.xxx.xxx']


7. В том же файле проверить значение переменной DEBUG (с True на False):

DEBUG = False


8. Установить node.js:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\
sudo apt-get install -y nodejs


9. Перейти в infra_sprint1/frontend и установить зависимости для frontend-приложения:

npm i


10. Установить WSGI-сервер Gunicorn для backend-приложения:

pip install gunicorn


11. Создать файл конфигурации для автозапуска WSGi-сервера:

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


12. Добавить следующую конфигурацию в созданный файл:

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

[Service]
User=<имя-пользователя-в-системе>  # (!) заменить на собственное
WorkingDirectory=/home/<имя-пользователя>/infra_sprint1/backend/
ExecStart=/home/<имя-пользователя>/infra_sprint1/venv/bin/gunicorn --bind 0.0.0.0:8080 backend.wsgi

[Install]
WantedBy=multi-user.target 


13. Запустить службу Gunicorn и включить ее в автозапуск:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn


14. Установить веб-сервер Nginx и запустить его:

sudo apt install nginx -y
sudo systemctl start nginx 


15. Открыть порты для фаерволла и активировать его:

sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable


16. Перейти в папку infra_sprint1/frontend/, скомпилировать frontend-приложение и скопировать его в системную директорию веб-сервера (необходимо для корректной работы статических файлов):

npm run build
sudo cp -r <имя_пользователя>/infra_sprint1/frontend/build/. /var/www/infra_sprint1/


17. Перейти в infra_sprint1/backend/, собрать статику для админки Django и копировать его в системную директорию веб-сервера (ВАЖНО! Необходимо изменить название папки со статикой во избежание конфликта имён):

infra_sprint1/backend/kittygram_backend/settings.py поменять значение переменной STATIC_URL и добавить новую STATIC_ROOT

STATIC_URL = 'static_backend'
STATIC_ROOT = BASE_DIR / 'static_backend' 
python manage.py collectstatic
sudo cp -r infra_sprint1/backend/static_backend/ /var/www/infra_sprint1/


18. Создать папку для медиафайлов в директории веб-сервера, изменить права доступа:

cd /var/www/infra_sprint1/
mkdir media
sudo chown -R <имя_пользователя> /var/www/infra_sprint1/media/


19. Отредактировать файл конфигурации Nginx и заменить его настройки следующими (требуются права root):

sudo nano /etc/nginx/sites-enabled/default 
server {

    server_name server_name <публичный-IP-адрес> <доменное-имя>;

    location /api/ {
        proxy_pass http://127.0.0.1:8080;
    }

    location /admin/ {
        proxy_pass http://127.0.0.1:8080;
    }

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

    location / {
    root    /var/www/infra_sprint1;
    index   index.html index.htm;
    try_files  $uri /index.html;
    }

}


20. Проверить файл конфигурации Nginx и перезагрузить его, если проверка прошла успешно:

sudo nginx -t
sudo systemctl reload nginx


21. Получить SSL-сертификат для вашего доменного имени с помощью Certbot:

sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot 
sudo certbot --nginx

infra_sprint1's People

Contributors

octrow avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.