Рубрики
Без рубрики

Как развернуть приложение Django на DigitalOcean

Узнайте, как можно развернуть приложение Django на DigitalOcean Droplet под управлением Ubuntu 14.04, PostgreSQL, Nginx и Gunicorn

Автор оригинала: Udit Agarwal.

Предпосылки

  • Свежая капля DigitalOcean под управлением Ubuntu 14.04
  • Репозиторий Git (на Bitbucket или Github), который вы используете с вашим приложением Django
  • У вас должна быть локальная настройка приложения Django с помощью Postgres setup аккуратно в virtualenv
  • Локальный компьютер под управлением OSX или Linux

Django-это 11-летний веб-фреймворк, написанный на языке Python. Это чрезвычайно зрелый и широко используемый фреймворк из-за его большой поддержки библиотек Python. Он предназначен для быстрого кодирования и развертывания изменений, потому что изначально он был разработан для веб-сайта публикации новостей. Поддержка экосистемы Python огромна, и вы можете сделать любой вид и заставить их работать вместе.

Всем веб-приложениям требуется база данных для хранения всех данных, которые будут использоваться. PostgreSQL-это объектно-реляционная система управления базами данных (ORDBMS). Он отлично работает с Django и имеет очень активное сообщество разработчиков . База данных также имеет большую поддержку пространственных (географических) и неструктурированных данных, что делает работу с долготами и широтами в Django легкой. (см. Postgis)

Как только у вас будет запущено приложение Django, вы захотите запустить его за веб-сервером. Подумайте о веб-сервере как о компьютерной программе, которая запускает ваше приложение Django и открывает его в Интернете. Во время тестирования Django запускает свой собственный сервер, но не рекомендуется делать это в реальном производстве. Использование веб-сервера, такого как Nginx, – отличный выбор. Миллионы веб-сайтов по всему миру работают на Nginx (Apache-это еще один веб-сервер, который может запускать приложения Django). Это бесплатное программное обеспечение с открытым исходным кодом, которое может выступать в качестве обратного прокси-сервера для протоколов HTTP, HTTPS, SMTP, POP3 и IMAP.

Чтобы все это объединилось, нам нужно установить мост между нашим приложением Django и веб-сервером. Gunicorn-это интерфейс шлюза (WSGI), который действует как мост между веб-сервером и веб-приложением. Мы настраиваем Gunicorn для запуска нашего приложения Django, перезапускаем его в случае сбоя и устанавливаем другие параметры конфигурации для нашего приложения Django.

С другой стороны, DigitalOcean-это веб-сервис, где вы можете арендовать сервер для развертывания вашего приложения в Интернете. В сочетании с онлайн-учетной записью Git это позволяет очень легко развернуть веб-приложение Django с вашего локального компьютера на сервер DigitalOcean.

  • В этом уроке мы развернем локальное приложение Django под названием мой проект и развернем его на вашем сервере DigitalOcean после настройки на нем Postgres, Nginx и Gunicorn
  • Поехали!

Структура каталогов локальных файлов

Мы собираемся развернуть приложение Django под названием “Мой проект” на наших серверах. Наш каталог структурирован следующим образом: корень нашего приложения django – мой проект .

  • myproject
    • myproject
    • myproject
      • myproject
      • myproject
      • myproject
      • myproject

Наш файл настроек выглядит следующим образом. У нас есть база данных, настроенная на адаптер postgresql, с настройкой DATABASES , как показано на рисунке. Мы подключаемся к базе данных postgres под названием mydb , которая имеет привилегии от my user с установленным паролем и работает на локальном хосте на порту по умолчанию.

DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.postgresql_psycopg2',
      'NAME': 'mydb',
      'USER': 'myuser',
      'PASSWORD': 'password',
      'HOST': 'localhost',
      'PORT': '',
  }
}

STATIC_ROOT = os.path.join(BASE_DIR, "static/")
STATIC_URL = '/static/'
STATICFILES_DIRS = [..DIRS..]

Обслуживание статических файлов из Django зависит от STATIC_URL , STATIC_ROOT и STATIC FILES_DIRS

  • STATIC FILES_DIRS дает список всех папок на вашем компьютере, в которых хранятся статические файлы. Это может быть в разных приложениях, которые вы создали.
  • В папке STATIC_ROOT Django собирает все эти файлы после выполнения команды collectstatic. Django просматривает все каталоги и копирует их в папку STATIC_ROOT .
  • Папка STATIC_ROOT подключена к нашему STATIC_URL , и веб-сервер использует эти файлы для их отправки в браузер.

После установки правильных значений мы инициализируем репозиторий git и отправим его в Интернет на github. Перейдите в корневой каталог и выполните следующие команды. Убедитесь, что вы создали пустой репозиторий в своей учетной записи github.

git init # Initialize the empty git repository

vim .gitignore # Create a gitignore file for Django and save it

git add . # Add files to the git repository
git commit -m "First commit" # Add the first commit
git log # Check the logs to see if the git has been committed

git remote add origin # add the remote repository locally called 'origin'
git push origin master # push it to the master branch on your 'origin' repository on the web

Теперь мы готовы продвинуться вперед и разместить наше приложение django на вашем сервере DigitalOcean.

Развертывание на сервере DigitalOcean

SSH и установка пакетов

Откройте терминал и введите команду для перехода на сервер digitalocean

ssh -l root

Команды ssh регистрируют вас в корневом пользователе сервера Digitalocean Ubuntu. Это обычно считается плохой практикой, и вам следует создать другого пользователя, не являющегося root, и запустить приложение Django с его помощью. Для этого урока мы будем использовать пользователя root, но все шаги должны работать даже тогда, когда вы создали пользователя, не являющегося пользователем root, с правами sudo на своей машине Ubuntu. Как только мы окажемся на нашем ssh-сервере, мы выполним следующие команды:

sudo apt-get update
sudo apt-get install python-pip

Мы обновляем наш менеджер пакетов, а затем устанавливаем pip для управления нашими библиотеками python. После установки вы можете проверить версию pip с помощью:

pip --version
приложение django

Затем мы устанавливаем все необходимые пакеты на наш сервер для запуска нашего приложения. Библиотеки python, пакеты postgresql и сервер Nginx.

# Python and Debian package, python headers and postgresql library for python
sudo apt-get install python-dev libpq-dev

# Postgresql Package
sudo apt-get install postgresql postgresql-contrib

# Nginx Package
sudo apt-get install nginx

sudo apt-get install git

sudo apt-get install gunicorn

Создание базы данных PostgreSQL

Мы переключаемся на пользователя postgres и запускаем команду psql . Это регистрирует нас в интерфейсе командной строки postgresql. Здесь мы можем взаимодействовать с нашим сервером Postgres, создавать новую базу данных, создавать пользователя и предоставлять ему права на создание и изменение таблиц в нашей базе данных. Django подключается к базе данных как этот пользователь и выполняет эти команды для нас.

sudo su postgres

psql

Создайте базу данных с именем mydb для вашего приложения

приложение django
CREATE DATABASE mydb;

Создайте пользователя для доступа к базе данных

приложение django
CREATE USER myuser WITH PASSWORD 'password';
приложение django

Предоставить пользователю доступ к базе данных

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
приложение django
\q;
exit

Выйдите из sql и postgres!

Создайте виртуальную среду Python для своего проекта

Установите virtualenv для создания виртуальной среды

sudo pip install virtualenv
приложение django

Создайте каталог для своего проекта и переключитесь на него

mkdir ~/myproject
cd ~/myproject
приложение django

Создайте virtualenv в каталоге вашего проекта

virtualenv myprojectenv
приложение django

Если вы проверите каталог проекта, внутри него будет создан новый каталог, содержащий локальную версию python и локальную версию pip.

Активируйте виртуальную среду перед установкой необходимых пакетов

source myprojectenv/bin/activate
приложение django

Теперь вы можете установить Django, Gunicorn и Psycopg2.

Psycopg2-это адаптер базы данных PostgreSQL для Python. Он используется для интеграции PostgreSQL с Python. Unicorn-это интерфейс для нашего сервера Nginx

pip install django
pip install psycopg2
приложение django
приложение django

Прежде чем мы протестируем Gunicorn, нам нужно импортировать наш репозиторий локально с github

Вытаскивание нашего репозитория Git

Нам нужно вытащить наш репозиторий git из github и вытащить наш обновленный код на сервер.

Перейдите в каталог virtualenv и клонируйте репозиторий git

cd ~/myproject
git clone

Это приведет к извлечению и созданию всех папок вашего приложения Django на сервере Ubuntu. Теперь вы можете продолжить и настроить свое приложение для работы с Gunicorn

Дайте волю Единорогу

Если вы правильно выполнили шаги, на данный момент у вас должен быть правильно запущенный проект Django. Но теперь мы протестируем Gunicorn с помощью нашего приложения. Запустите Gunicorn на том же интерфейсе, на котором работает ваш сервер разработки Django.

gunicorn --bind 0.0.0.0:8000 mydjangoproject.wsgi:application
приложение django

Откройте URL-адрес как http://>:8000 , и вы увидите Добро пожаловать в Django! Страница. Если вы зашли так далеко, ваше приложение должно нормально работать на вашем сервере. И теперь пришло время настроить Nginx для его запуска.

После завершения тестирования нажмите CTRL-C

Теперь мы закончили создавать наше приложение и можем выйти из нашей виртуальной среды

deactivate
приложение django

Создайте файл Gunicorn Upstart

Gunicorn можно использовать для взаимодействия с нашим приложением, но вместо того, чтобы запускать наш сервер таким образом, мы создадим сценарий запуска для запуска и остановки сервера.

Создание и открытие файла

sudo nano /etc/init/gunicorn.conf
приложение django

Введите в него следующие строки.

description "Gunicorn application server handling mydjangoproject"

start on runlevel [2345]
stop on runlevel [!2345]
приложение django

Здесь в первой строке указано, для чего предназначен наш файл, т. Е. Описание нашего файла. Далее мы определим уровень запуска системы, на котором служба должна автоматически запускаться и останавливаться. Уровни выполнения Linux пронумерованы от 0 до 6. 0: Остановка системы 1: Однопользовательский 2-5: Полный многопользовательский режим 6: Перезагрузка системы

Таким образом, наш сервис будет работать, когда система находится на любом из 2, 3, 4 и 5. И он остановится, когда окажется на любом другом уровне, кроме этого.

Добавьте следующие строки, чтобы защитить его от сбоя

respawn
setuid root
setgid www-data
chdir /root/myproject
приложение django

Здесь команды respawn автоматически перезапускают службу, если она выходит из строя. Мы также указываем пользователя и группу для запуска. Поскольку мы просто используем пользователя root, мы установим uid в root, а gid (groupid) в www-data, поскольку именно под этим управлением работает Nginx; хотя никогда не рекомендуется запускать каталог под root, и вы должны запускать его под другим пользователем в целях безопасности.

Добавьте команду, чтобы запустить нашу службу Gunicorn.

exec gunicorn --workers 3 --bind unix://mydjangoproject.sock mydjangoproject.wsgi:application

Здесь сначала мы даем путь к исполняемому файлу Gunicorn, который хранится в нашей виртуальной среде. Мы скажем ему использовать сетевой сокет вместо сетевого порта для связи с Nginx.

sudo service gunicorn start
приложение django

Если до сих пор все шло успешно, нам просто нужно настроить Nginx для прокси-экземпляров в нашем файле сокета Gunicorn. Будьте внимательны при использовании правильных путей, чтобы все работало правильно.

Настройте Nginx для передачи трафика процессам

Теперь, когда наш Gunicorn настроен, мы можем настроить Nginx для прокси-запросов к нему.

Шаг 1: Сначала мы создадим сайт под названием myproject в нашем каталоге доступных сайтов nginx

sudo nano /etc/nginx/sites-available/myproject
приложение django

Шаг 2: Добавьте следующие строки кода в файл myproject

server {
    listen 80;
    server_name Your server name or your IP address;
}

Здесь он будет прослушивать обычный порт 80, и мы указываем имя нашего сервера в качестве IP-адреса. Вы также можете указать это имя сервера в качестве доменного имени сервера.

Шаг 3: Игнорируйте все проблемы с поиском фавикона

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
      root /root/myproject;
}

Здесь мы говорим ему указать на наши статические файлы, которые находятся в каталоге myproject/static

Шаг 4: Создайте новый блок местоположения, соответствующий всем запросам.

location / {
     include proxy_params;
     proxy_pass http://unix:/mydjangoproject.sock;
}
приложение django

Здесь мы включили стандартный proxy_params , включенный в установку Nginx. Мы передаем трафик в сокет Gunicorn, который мы создали ранее.

Примечание: Пути, указанные в файлах, могут отличаться от машины к машине. Поэтому проверьте свои пути и внесите соответствующие изменения.

Сохраните и закройте файл.

Шаг 5: Включите файл.

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
приложение django

Мы можем проверить синтаксические ошибки с помощью

sudo nginx -t
приложение django

Шаг 6: Если не сообщается о синтаксических ошибках, перезапустите Nginx

sudo service nginx restart
приложение django

Перейдите на свой server_address/admin , и вы увидите, что ваше приложение Django запущено

приложение django

Вывод

Это подводит нас к концу этого урока! Теперь у нас есть сервер DigitalOcean, на котором работают Django, NGINX и Gunicorn. Каждый раз, когда мы хотим обновить наш репозиторий на DigitalOcean, мы можем войти в него по ssh и выполнить git-тянуть, чтобы получить последние обновления из репозитория Git! Весь процесс развертывания после первоначальной настройки можно автоматизировать с помощью сценария структуры. Но это часть другого урока. Если у вас есть какие-либо предложения, чтобы сделать это лучше, пожалуйста, напишите об этом в комментариях ниже!