Автор оригинала: 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
Затем мы устанавливаем все необходимые пакеты на наш сервер для запуска нашего приложения. Библиотеки 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
для вашего приложения
CREATE DATABASE mydb;
Создайте пользователя для доступа к базе данных
CREATE USER myuser WITH PASSWORD 'password';
Предоставить пользователю доступ к базе данных
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
\q; exit
Выйдите из sql и postgres!
Создайте виртуальную среду Python для своего проекта
Установите virtualenv для создания виртуальной среды
sudo pip install virtualenv
Создайте каталог для своего проекта и переключитесь на него
mkdir ~/myproject cd ~/myproject
Создайте virtualenv в каталоге вашего проекта
virtualenv myprojectenv
Если вы проверите каталог проекта, внутри него будет создан новый каталог, содержащий локальную версию python и локальную версию pip.
Активируйте виртуальную среду перед установкой необходимых пакетов
source myprojectenv/bin/activate
Теперь вы можете установить Django, Gunicorn и Psycopg2.
Psycopg2-это адаптер базы данных PostgreSQL для Python. Он используется для интеграции PostgreSQL с Python. Unicorn-это интерфейс для нашего сервера Nginx
pip install django pip install psycopg2
Прежде чем мы протестируем 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
Откройте URL-адрес как http://>:8000
, и вы увидите Добро пожаловать в Django! Страница. Если вы зашли так далеко, ваше приложение должно нормально работать на вашем сервере. И теперь пришло время настроить Nginx для его запуска.
После завершения тестирования нажмите CTRL-C
Теперь мы закончили создавать наше приложение и можем выйти из нашей виртуальной среды
deactivate
Создайте файл Gunicorn Upstart
Gunicorn можно использовать для взаимодействия с нашим приложением, но вместо того, чтобы запускать наш сервер таким образом, мы создадим сценарий запуска для запуска и остановки сервера.
Создание и открытие файла
sudo nano /etc/init/gunicorn.conf
Введите в него следующие строки.
description "Gunicorn application server handling mydjangoproject" start on runlevel [2345] stop on runlevel [!2345]
Здесь в первой строке указано, для чего предназначен наш файл, т. Е. Описание нашего файла. Далее мы определим уровень запуска системы, на котором служба должна автоматически запускаться и останавливаться. Уровни выполнения Linux пронумерованы от 0 до 6. 0: Остановка системы
1: Однопользовательский
2-5: Полный многопользовательский режим
6: Перезагрузка системы
Таким образом, наш сервис будет работать, когда система находится на любом из 2, 3, 4 и 5. И он остановится, когда окажется на любом другом уровне, кроме этого.
Добавьте следующие строки, чтобы защитить его от сбоя
respawn setuid root setgid www-data chdir /root/myproject
Здесь команды 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
Если до сих пор все шло успешно, нам просто нужно настроить Nginx для прокси-экземпляров в нашем файле сокета Gunicorn. Будьте внимательны при использовании правильных путей, чтобы все работало правильно.
Настройте Nginx для передачи трафика процессам
Теперь, когда наш Gunicorn настроен, мы можем настроить Nginx для прокси-запросов к нему.
Шаг 1: Сначала мы создадим сайт под названием myproject в нашем каталоге доступных сайтов nginx
sudo nano /etc/nginx/sites-available/myproject
Шаг 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; }
Здесь мы включили стандартный proxy_params
, включенный в установку Nginx. Мы передаем трафик в сокет Gunicorn, который мы создали ранее.
Примечание: Пути, указанные в файлах, могут отличаться от машины к машине. Поэтому проверьте свои пути и внесите соответствующие изменения.
Сохраните и закройте файл.
Шаг 5: Включите файл.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
Мы можем проверить синтаксические ошибки с помощью
sudo nginx -t
Шаг 6: Если не сообщается о синтаксических ошибках, перезапустите Nginx
sudo service nginx restart
Перейдите на свой server_address/admin
, и вы увидите, что ваше приложение Django запущено
Вывод
Это подводит нас к концу этого урока! Теперь у нас есть сервер DigitalOcean, на котором работают Django, NGINX и Gunicorn. Каждый раз, когда мы хотим обновить наш репозиторий на DigitalOcean, мы можем войти в него по ssh и выполнить git-тянуть, чтобы получить последние обновления из репозитория Git! Весь процесс развертывания после первоначальной настройки можно автоматизировать с помощью сценария структуры. Но это часть другого урока. Если у вас есть какие-либо предложения, чтобы сделать это лучше, пожалуйста, напишите об этом в комментариях ниже!