Как запустить продакшн сервер для Django? Deploy сайта на примере CentOS 7
Данная инструкция развертывания и подготовки сервера для сайтов на Django в первую очередь делалась для себя, потому что регулярно требуется поднимать вручную боевые сервера для небольших проектов. В ней есть неточности, инструкцию планирую дополнять, редактировать и обновлять, добавляйте в закладки
Планирую в дальнейшем сделать скрипт для автоматизации некоторых процессов. Следите за новостями
- Зарегистрировать домен
- Зарегистрировать VPS (хостинг) выбрать операционную систему CentOS 7
- Привязываем домен к VPS прописать DNS и IP адрес ( LINK пример для рег.ру)
- Настрока 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
- Настройка nginx
- Правим кофиг /etc/nginx/nginx.conf
- Настройка gunicorn
- Создаем второй файл gunicorn-second_project.service
- Где? Меняем имя файла
$ sudo nano /etc/systemd/system/gunicorn-teploviz.service
- Запускаем конфигурацию
$ sudo systemctl start gunicorn-teploviz
- Ставим конфигурацию в автозапуск
$ sudo systemctl enable gunicorn-teploviz
- Настройка базы данных postgres
$ sudo -u postgres psql create database dbname; \q
- Настроить settings.py
$ python3 manage.py collectstatic
- Создать разные settings.py для разных сред: разработка и продакшн. Подробнее в этой статье
- Будет всего 3 файла: base.py с общими настройками для прода и сервера разработки, local.py и production.py
- Подключаем Git/Bitbucket
- У Bitbucket бесплатные приватные репозитории поэтому в основном использую его.
- Создаем пустой репозиторий
- На локальном сервере: git push - Пушим туда свой проект
- На удаленном сервере: git pull - Скачиваем проект с репозитория в продакш
- Workflow у меня следующий: на локальном сервере я создаю сайт, тестирую, проверяю и загружаю в репозиторий. На продакшн сервере я делаю git pull, перезагружаю web server (не весь сервер) в данном случае это gunicorn, если менялась статика то collectstatic. При правильнм разделении и настройке файлов settings.py все будет работать без дополнительных действий
- Настраиваем SSL Certbot
- Если мы хотим сайт на https то нужно выпустить сертификаты безопасности