Как запустить продакшн сервер для 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 то нужно выпустить сертификаты безопасности