Как запустить продакшн сервер для Django? Deploy сайта на примере CentOS 7

Как запустить продакшн сервер для Django? Deploy сайта на примере CentOS 7

Данная инструкция развертывания и подготовки сервера для сайтов на Django в первую очередь делалась для себя, потому что регулярно требуется поднимать вручную боевые сервера для небольших проектов. В ней есть неточности, инструкцию планирую дополнять, редактировать и обновлять, добавляйте в закладки

Планирую в дальнейшем сделать скрипт для автоматизации некоторых процессов. Следите за новостями

  1. Зарегистрировать домен
  2. Зарегистрировать VPS (хостинг) выбрать операционную систему CentOS 7
  3. Привязываем домен к VPS прописать DNS и IP адрес ( LINK пример для рег.ру)
  4. Настрока VPS
    • Начальная настройка сервера VPS (Безопасность, обновления, ключи …) ссылка на другую статью
    • Обновление ПО VPS Сервера
      $ sudo yum check-update
      $ sudo yum update
    • Добавление EPEL репозитория
      sudo yum repolist # Проверка списка репозиториев
      sudo yum install epel-release
    • Установить nano редактор (Он проще чем Vim)
      sudo yum install nano git
    • Установливаем базу данных Postgress, сервер статики nginx
      sudo yum install python-pip python-devel postgresql-server postgresql-devel postgresql-contrib gcc nginx
    • Удалить или отключить apache сервер если не нужен, подробная статья
      sudo systemctl status httpd
      sudo systemctl disable httpd
      sudo systemctl stop httpd
      sudo systemctl status httpd
    • Проверить установлен ли python3 $ python3.6 -V
    • если нет установить в зависимости от OS VPS $ python3.6 -V
    • Создать вируальное окружение в папке проекта $ python3.6 -m venv venv
    • Создаем разные переменные окружения Ссылка на статью
    • Установка django, gunicorn и postgresql в виртуальном окружении $ pip install django gunicorn psycopg2
  5. Настройка nginx
    • Правим кофиг /etc/nginx/nginx.conf
  6. Настройка gunicorn
    • Создаем второй файл gunicorn-second_project.service
    • Где? Меняем имя файла $ sudo nano /etc/systemd/system/gunicorn-teploviz.service
    • Запускаем конфигурацию $ sudo systemctl start gunicorn-teploviz
    • Ставим конфигурацию в автозапуск $ sudo systemctl enable gunicorn-teploviz
  7. Настройка базы данных postgres $ sudo -u postgres psql create database dbname; \q
  8. Настроить settings.py $ python3 manage.py collectstatic
    • Создать разные settings.py для разных сред: разработка и продакшн. Подробнее в этой статье
    • Будет всего 3 файла: base.py с общими настройками для прода и сервера разработки, local.py и production.py
  9. Подключаем Git/Bitbucket
    • У Bitbucket бесплатные приватные репозитории поэтому в основном использую его.
    • Создаем пустой репозиторий
    • На локальном сервере: git push - Пушим туда свой проект
    • На удаленном сервере: git pull - Скачиваем проект с репозитория в продакш
    • Workflow у меня следующий: на локальном сервере я создаю сайт, тестирую, проверяю и загружаю в репозиторий. На продакшн сервере я делаю git pull, перезагружаю web server (не весь сервер) в данном случае это gunicorn, если менялась статика то collectstatic. При правильнм разделении и настройке файлов settings.py все будет работать без дополнительных действий
  10. Настраиваем SSL Certbot
  11. Если мы хотим сайт на https то нужно выпустить сертификаты безопасности