В этой статье приведено пошаговое руководство по развертыванию проектов Django на сервере DigitalOcean.
DigitalOcean является одним из ведущих VPS провайдеров, и их тарифные планы очень дешевые — всего от 5 долларов в месяц.
Если у вас нет учетной записи, воспользуйтесь этой ссылкой, чтобы зарегистрироваться, и вы получите бесплатный баланс в размере 100 долларов США на 60 дней. Сможете купить пару выделенных серверов, задеплоить свой проект, потестировать, может и намайните че за 2 месяца, если знаете как.
Git-репозиторий Django-проекта, используемый в этой статье, доступен здесь. Но вы также можете использовать свой собственный проект, если хотите.
Создание дроплета
Войдите в свою учетную запись DigitalOcean, и вы попадете на страницу панели инструментов.
Нажмите кнопку «Create» в верхней части страницы и выберите «Droplets».
На странице «Droplets creation» в разделе «Choose an image» выберите Ubuntu 16.04.
Выберите необходимую память под дроплет:
Выберите регион, в котором будет расположен сервер:
Дополнительные параметры и ключи SSH являются необязательными.
Дайте название вашему дроплету и нажмите кнопку «Create».
После создания дроплета вы получите электронное письмо с учетными данными, необходимыми для входа на сервер.
Подключение к серверу
Для подключения к серверу запустите терминал и введите следующую команду:
$ ssh root@167.99.235.81
Примечание. Пользователи Windows могут использовать PuTTY SSH-клиент для подключения к серверу.
Если вы входите в систему в первый раз, вам будет предложено изменить пароль.
Создание пользователя с ограниченным доступом
Вы никогда не должны запускать приложения как суперпользователь, потому что если злоумышленник проник в ваше приложение, он сразу же получает доступ ко всей системе как суперпользователь.
Кроме того, суперпользователь является очень мощным и, таким образом, может выполнять любые действия, даже если это приведет к поломке системы. Хотите отформатировать диски? или удалить директорию /usr, просто выполните команду, и все готово. Когда вы суперпользователь, система предполагает, что вы знаете, что делаете.
По этой причине большинство приложений в Linux запускаются как пользователи системы с ограниченным доступом.
Чтобы добавить дополнительный уровень безопасности, некоторые дистрибутивы поставляются с отключенным доступом root. Для выполнения действий администратора вам нужно будет повысить свои привилегии с помощью команды sudo.
Чтобы создать нового пользователя введите следующую команду:
$ adduser django
Вам будет предложено ввести пароль и некоторые дополнительные данные.
Затем добавьте пользователя в группу sudo, выполнив следующую команду:
$ gpasswd -a django sudo
Теперь этот пользователь имеет возможность выполнять команды администратора.
Для входа в систему с использованием только что созданного пользователя введите su, а затем имя пользователя:
$ su django
Измените свой текущий рабочий каталог на домашний каталог пользователя django, используя команду cd:
$ cd
В следующем шаге мы обновим нашу систему и установим некоторые необходимые пакеты.
Установка PIP, PostgreSQL и Nginx
Для начала обновите систему с помощью следующей команды:
$ sudo apt-get update $ sudo apt-get upgrade
Ubuntu 16.04 поставляется с предустановленным Python 3.5, поэтому нам не нужно устанавливать Python. Однако вам нужно установить pip.
PIP
Для установки pip введите следующее:
$ sudo apt-get install python3-pip
Virtualenv
Как и в процессе разработки, мы будем использовать virtualenv для создания виртуальной среды. Установите virtualenv, набрав:
$ pip3 install virtualenv
PostgreSQL
PostgreSQL является наиболее предпочтительной базой данных в сообществе Django. Чтобы установить его, наберите:
$ sudo apt-get install postgresql postgresql-contrib
После установки сервер базы данных запустится автоматически. Чтобы проверить состояние сервера, наберите:
$ sudo service postgresql status
Вывод будет таким:
● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Fri 2018-05-18 13:33:21 UTC; 1h 54min ago Main PID: 20416 (code=exited, status=0/SUCCESS) CGroup: /system.slice/postgresql.service May 18 13:33:21 djangobin-ubuntu systemd[1]: Starting PostgreSQL RDBMS... May 18 13:33:21 djangobin-ubuntu systemd[1]: Started PostgreSQL RDBMS. May 18 13:33:26 djangobin-ubuntu systemd[1]: Started PostgreSQL RDBMS.
Nginx
Nginx — это высокопроизводительный веб-сервер с очень низким потреблением ресурсов. Мы будем использовать Nginx в качестве прокси-сервера и для обслуживания статических файлов. Чтобы установить его пропишите:
$ sudo apt-get install nginx
После установки Nginx запустится автоматически. Мы можем проверить состояние сервера Nginx, набрав:
$ sudo service nginx status
Вывод будет примерно таким:
● nginx.service - A high-performance web server <strong>and</strong> a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-05-18 15:17:51 UTC; 9min ago Main PID: 22691 (nginx) CGroup: /system.slice/nginx.service ├─22691 nginx: master process /usr/sbin/nginx -g daemon on; master_process on └─22692 nginx: worker process May 18 15:17:51 djangobin-ubuntu systemd[1]: Starting A high performance web server <strong>and</strong> a reverse proxy server... May 18 15:17:51 djangobin-ubuntu systemd[1]: Started A high performance web server <strong>and</strong> a reverse proxy server.
Мы также можем проверить, работает ли Nginx или нет, напрямую запросив у него страницу. Откройте браузер и укажите адрес http://167.99.235.81/ (замените 167.99.235.81 на свой IP). Вы должны получить страницу, похожую на эту:
RabbitMQ
Установите RabbitMQ набрав следующий запрос:
$ sudo apt-get install rabbitmq-server
Создание базы данных и пользователя
Когда вы устанавливаете PostgreSQL, он автоматически создает пользователя с именем postgres для выполнения задач администратора.
Прежде чем что-то делать, давайте войдем в систему через эту учетную запись написав psql и создадим новую базу данных.
$ sudo -u postgres psql
Вывод будет примерно таким:
psql (9.5.12) Type "help" for help. postgres=# postgres=# Create a new database by typing: postgres=# CREATE DATABASE djangobin; CREATE DATABASE postgres=# Next, create a new user by typing: postgres=# postgres=# CREATE ROLE db_user WITH LOGIN PASSWORD 'password' CREATEDB; CREATE ROLE postgres=# Finally, grant all privileges on database `djangobin` <strong>to</strong> `db_user`: postgres=# postgres=# GRANT ALL PRIVILEGES ON DATABASE djangobin <strong>TO</strong> db_user; GRANT postgres=#
Создание виртуальной среды и настройка проекта
Чтобы клонировать репозиторий, введите следующую команду:
$ git clone https://github.com/overiq/djangobin.git
Так вы создадите каталог с именем djangobin внутри вашего текущего рабочего каталога. Измените текущий рабочий каталог на djangobin используя команду cd и создайте новую виртуальную среду:
$ cd djangobin $ virtualenv env
После этого активируйте виртуальную среду и переместитесь в каталог django_project.
$ source env/bin/activate $ cd django_project/
Затем установите зависимости из файла requirements.txt.
$ pip install -r requirements.txt
Поскольку мы используем базу данных PostgreSQL в разработке, нам нужно установить адаптер базы данных PostgreSQL для Python, который называется psycopg2.
$ pip install psycopg2
Создайте JSON-файл для хранения конфиденциальной конфигурации.
$ nano djangobin-secrets.json
И добавьте в него следующий код:
djangobin/django_project/djangobin-secrets.json
{ "SECRET_KEY": "rj3vhyKiDRNmth75sxJKgS9JP8Gp7SpsS9xAlvBMTXW3Z6VTODvvFcV3TmtrZUbGkHBcs$", "DATABASE_NAME": "djangobin", "DATABASE_USER": "db_user", "DATABASE_PASSWORD": "password", "DATABASE_HOST": "127.0.0.1", "DATABASE_PORT": "5432", "EMAIL_HOST_USER": "apikey", "EMAIL_HOST": "smtp.sendgrid.net", "EMAIL_HOST_PASSWORD": "TW.qQecgRphQDa3TkLLlj18pqA.5Xrjod3G8XXojH45W4loxAsktdY3Nc", "EMAIL_PORT": 587 }
Обязательно замените учетные данные базы данных и ключи API на свои собственные.
На этом этапе, если вы попытаетесь исполнить файл ./manage.py, вы получите ошибку, потому что Django не знает, где находится ваш файл настроек:
Укажите местоположение файла настроек временно с помощью команды export :
export DJANGO_SETTINGS_MODULE = django_project.settings.prod
С помощью этой команды мы перевели наше приложение в рабочий режим.
Для создания всех необходимых таблиц в базе данных djangobin выполните команду migrate:
$ ./manage.py migrate
Создайте суперпользователя для проекта, набрав:
$ ./manage.py createsuperuser Username (leave blank to use 'django'): admin Email address: admin@mail.com Password: Password (again): Superuser created successfully.
Затем создайте гостевого пользователя и установите для него атрибут is_active=False, чтобы учетную запись нельзя было использовать для входа.
$ ./manage.py createsuperuser Username (leave blank to use 'django'): guest Email address: guest@mail.com Password: Password (again): Superuser created successfully. $ $ $ ./manage.py shell Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> >>> from django.contrib.auth.models import User >>> >>> u = User.objects.get(username="guest") >>> >>> u.is_active True >>> >>> u.is_active = False >>> >>> u.save() >>> >>> u.is_active False >>>
Как было сказано ранее, мы будем обслуживать статические файлы через сервер Nginx. Чтобы собрать все статические файлы проекта из каталога static, введите следующую команду:
$ ./manage.py collectstatic
Gunicorn
Nginx начнет работать и будет обслуживать статические файлы. Тем не менее, он не может коммуницировать с приложением Django; ему нужно что-то, что будет запускать приложение, отправлять запросы в Интернет и возвращать ответы. Вот тогда Gunicorn вступает в игру.
Установите Gunicorn, набрав:
$ pip install gunicorn
Для работы сервера нашего приложения через Gunicorn введите следующую команду:
$ gunicorn -w 3 -b 0.0.0.0:8000 django_project.wsgi [2018-05-19 07:07:32 +0000] [25653] [INFO] Starting gunicorn 19.8.1 [2018-05-19 07:07:32 +0000] [25653] [INFO] Listening at: http://0.0.0.0:8000 (25653) [2018-05-19 07:07:32 +0000] [25653] [INFO] Using worker: sync [2018-05-19 07:07:32 +0000] [25656] [INFO] Booting worker with pid: 25656 [2018-05-19 07:07:32 +0000] [25658] [INFO] Booting worker with pid: 25658 [2018-05-19 07:07:32 +0000] [25659] [INFO] Booting worker with pid: 25659 This command starts Gunicorn with three worker processes and binds the socket to `0.0.0.0` address. By default, Gunicorn only listens on the local interface (i.e `127.0.0.1`), which means you can't access your work from other computers on the network. To tell Gunicorn to listen on all interfaces bind the socket to `0.0.0.0`.
Откройте браузер и перейдите по адресу http://167.99.235.81:8000/. Вы должны увидеть такую страницу:
Наше приложение, похоже, не работает. Так получается, потому что мы еще не обслуживаем статические файлы.
Настройка Nginx
Gunicorn запущен и работает, теперь нам нужно настроить Nginx для передачи ему запросов.
Начните с создания файла конфигурации сервера в каталоге /etc/nginx/sites-available/:
$ sudo nano /etc/nginx/sites-available/djangobin
Затем добавьте следующую конфигурацию в файл:
/etc/nginx/sites-available/djangobin
server { server_name 167.99.235.81; access_log off; location /static/ { alias /home/django/djangobin2/django_project/static/; } location / { proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8000; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; } }
Замените 167.99.235.81 на свой IP и укажите путь к каталогу static , чтобы он соответствовал вашей файловой системе.
Чтобы включить эту конфигурацию, создайте symbolic-ссылку в папке sites-enabled.
$ sudo ln -s /etc/nginx/sites-available/djangobin /etc/nginx/sites-enabled/djangobin
Проверьте синтаксис файла конфигурации:
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Наконец, перезапустите сервер, чтобы изменения вступили в силу.
$ sudo service nginx restart
Теперь мы готовы проверить, все ли работает.
Прежде всего, запустите воркера celery вместе с самим celery, набрав:
$ celery -A django_project worker -l info -B
Нажмите Ctrl + Z, а затем пропишите bg и поместите процесс в фоновый режим. Затем запустите Gunicorn, набрав:
$ gunicorn -w 3 -b 127.0.0.1:8000 django_project.wsgi
Обратите внимание, что на этот раз мы привязываем сокет для прослушивания на локальном интерфейсе (т. е. 127.0.0.1), потому что на этот раз Nginx будет работать нелокально, а не с Gunicorn.
Откройте браузер и зайдите на http://167.99.235.81/. Вы должны увидеть стартовую страницу DjangoBin, которая выглядит следующим образом:
Если вы попытаетесь посетить страницу About или EULA, вы получите ошибку 404, поскольку эти страницы еще не существуют в базе данных. Для создания этих страниц войдите на сайт администратора Django, посетив сайт http://167.99.235.81/admin/.
Введите имя пользователя и пароль, которые мы создали ранее в этой главе.
Нажмите на ссылку «Добавить» перед «Flat pages» и добавьте страницу «About» и EULA следующим образом:
Пока мы занимаемся этим, давайте обновим доменное имя в фреймворке sites (django.contrib.sites), чтобы платформа Sitemap могла генерировать правильные ссылки.
Посетите страницу со списком сайтов по адресу http://<ваш_айпи_адрес>/admin/sites/site/. Нажмите на имя домена для редактирования и введите IP-адрес вашего сервера в поля «Имя домена» и «Отображаемое имя» следующим образом:
Все работает, как и ожидалось, но что произойдет, если gunicorn или celery по какой-то причине будут остановлены или DigitalOcean перезапустит ваш дроплет после некоторого технического обслуживания?
В этом случае пользователи увидят ошибку 502 Bad Gateway:
Мы можем предотвратить такие ошибки, используя инструмент мониторинга процессов, называемый Supervisor.
Процесс мониторинга с Supervisor
Supervisor — это инструмент, который позволяет нам отслеживать процессы. Его задача — убедиться, что определенные процессы продолжают работать. Если процесс завершается или по какой-либо причине погибает, Supervisor запустит его автоматически.
Установите Supervisor, введя следующую команду:
$ sudo apt-get install supervisor
Supervisor запустится автоматически после установки. Мы можем проверить его статус, набрав:
$ sudo service supervisor status ● supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2018-05-19 15:27:28 UTC; 1min 16s ago Docs: http://supervisord.org Main PID: 592 (supervisord) CGroup: /system.slice/supervisor.service └─592 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf May 19 15:27:28 djangobin-ubuntu systemd[1]: Started Supervisor process control system for UNIX. May 19 15:27:28 djangobin-ubuntu supervisord[592]: 2018-05-19 15:27:28,830 CRIT Supervisor running a May 19 15:27:28 djangobin-ubuntu supervisord[592]: 2018-05-19 15:27:28,831 WARN No file matches via May 19 15:27:28 djangobin-ubuntu supervisord[592]: 2018-05-19 15:27:28,847 INFO RPC interface 'super May 19 15:27:28 djangobin-ubuntu supervisord[592]: 2018-05-19 15:27:28,847 CRIT Server 'unix_http_se May 19 15:27:28 djangobin-ubuntu supervisord[592]: 2018-05-19 15:27:28,848 INFO supervisord started
С установленным Supervisor теперь у нас есть доступ к команде echo_supervisord_conf для создания файлов конфигурации.
Файл конфигурации представляет собой файл в стиле Windows-INI, который определяет программу, которую нужно запустить, чтобы обрабатывать выходные данные, переменные среды для передачи в программы и так далее.
Когда Supervisor запускается, он автоматически считывает конфигурации из каталога /etc/supervisor/conf.d.
Создайте новый файл конфигурации, набрав:
$ echo_supervisord_conf > ./djangobin.conf
А затем переместите его в каталог /etc/supervisor/conf.d/ с помощью команды mv:
$ sudo mv djangobin.conf /etc/supervisor/conf.d/
Если вы откроете файл djangobin.conf, вы обнаружите, что он содержит много разделов и комментариев (строки начинаются с ;). Удалите все разделы, кроме раздела supervisor в верхней части файла.
Следующим шагом является добавление одного или нескольких разделов [program:x], чтобы Supervisor знал, какие программы следует запускать и отслеживать. В разделе Х программы указывается произвольная уникальная метка, присваиваемая каждому разделу. Этот ярлык будет использоваться для управления программой.
В следующей таблице перечислены некоторые общие параметры, которые мы можем определить внутри раздела [program].
опция | Описание | обязательна? |
---|---|---|
command | Эта опция указывает путь к программе для запуска. | да |
directory | Она указывает каталог, в который будет обращаться супервизор cd до запуска программы | нет |
autostart | Если установлено значение true , говорит Supervisor запускать программу при загрузке системы. | нет |
autorestart | Если установлено значение, true говорит Supervisor запускать программу, если она закрывается | нет |
stdout_logfile | Файл для хранения стандартного вывода процесса. | нет |
stderr_logfile | Файл для хранения стандартной ошибки процесса. | нет |
Откройте файл djangobin.conf и добавьте следующие три раздела [program] в конец файла:
[supervisord] logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) [program:gunicorn] command=/home/django/djangobin2/env/bin/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 django_project.wsgi:application directory=/home/django/djangobin2/django_project autostart=true autorestart=true stderr_logfile=/var/log/gunicorn.err.log stdout_logfile=/var/log/gunicorn.out.log [program:celery_worker] command=/home/django/djangobin2/env/bin/celery -A django_project worker -l info directory=/home/django/djangobin2/django_project autostart=true autorestart=true stderr_logfile=/var/log/celery.err.log stdout_logfile=/var/log/celery.out.log [program:celery_beat] command=/home/django/djangobin2/env/bin/celery -A django_project beat -l info directory=/home/django/djangobin2/django_project autostart=true autorestart=true stderr_logfile=/var/log/celery_beat.err.log stdout_logfile=/var/log/celery_beat.out.log
Мы также хотим, чтобы Supervisor передавал переменные среды DJANGO_SETTINGS_MODULE всем трем процессам. Для этого добавьте опцию environment в конце раздела [supervisord] следующим образом:
[supervisord] logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) environment=DJANGO_SETTINGS_MODULE="django_project.settings.prod" [program:gunicorn] command=/home/django/djangobin2/env/bin/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 django_project.wsgi:application directory=/home/django/djangobin2/django_project autostart=true autorestart=true #...
Скажите Supervisor, чтобы загрузил этот новый тип конфигурации следующими двумя командами:
$ sudo supervisorctl reread celery_beat: available celery_worker: available gunicorn: available $ sudo supervisorctl update celery_beat: added process group celery_worker: added process group gunicorn: added process group
Вам придется выполнять эти две команды каждый раз, когда вы изменяете файл конфигурации.
Теперь все наши программы запущены и работают. В любой момент вы можете проверить статус программ, набрав:
$ sudo supervisorctl status celery_beat RUNNING pid 6027, uptime 1:44:03 celery_worker RUNNING pid 6028, uptime 1:44:03 gunicorn RUNNING pid 6029, uptime 1:44:03 supervisor>
Если мы запустим программу supervisorctl без каких-либо аргументов, она запустит интерактивную оболочку, которая позволит нам контролировать процессы, в настоящее время управляемые Supervisor.
$ sudo supervisorctl celery_beat RUNNING pid 6027, uptime 1:48:42 celery_worker RUNNING pid 6028, uptime 1:48:42 gunicorn RUNNING pid 6029, uptime 1:48:42 supervisor>
Как видите, в интерактивном режиме supervisorctl начинает выводить состояния управляемых в данный момент программ.
Когда вы окажетесь внутри интерактивной оболочки, чтобы увидеть доступные команды, введите help:
supervisor> supervisor> help default commands (type help <topic>): ===================================== add exit open reload restart start tail avail fg pid remove shutdown status update clear maintail quit reread signal stop version supervisor>
Теперь мы можем остановить, запустить и перезапустить процесс, используя соответствующую команду с меткой программы.
supervisor> supervisor> stop gunicorn gunicorn: stopped supervisor> supervisor> start gunicorn gunicorn: started supervisor> supervisor> restart gunicorn gunicorn: stopped gunicorn: started supervisor>
Чтобы получить статус всех запущенных процессов, наберите status:
celery_beat RUNNING pid 6027, uptime 5:51:00 celery_worker RUNNING pid 6028, uptime 5:51:00 gunicorn RUNNING pid 12502, uptime 0:02:06 supervisor>
Мы также можем просмотреть содержимое файла журнала, используя команду tail:
supervisor> supervisor> tail gunicorn 27.0.0.1 - - [20/May/2018:13:56:42 +0000] "GET / HTTP/1.0" 200 10327 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 127.0.0.1 - - [20/May/2018:13:56:42 +0000] "GET / HTTP/1.0" 200 10327 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 127.0.0.1 - - [20/May/2018:13:56:43 +0000] "POST /GponForm/diag_Form?images/ HTTP/1.0" 404 92 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 127.0.0.1 - - [20/May/2018:13:57:31 +0000] "GET / HTTP/1.0" 200 10327 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" supervisor>
По умолчанию команда tail читает из stdout. Вот как мы можем читать stderr.
supervisor> supervisor> tail gunicorn stderr [2018-05-20 17:29:28 +0000] [12492] [INFO] Worker exiting (pid: 12492) [2018-05-20 17:29:28 +0000] [12493] [INFO] Worker exiting (pid: 12493) [2018-05-20 17:29:28 +0000] [12490] [INFO] Worker exiting (pid: 12490) [2018-05-20 17:29:29 +0000] [12487] [INFO] Shutting down: Master [2018-05-20 17:29:29 +0000] [12502] [INFO] Starting gunicorn 19.8.1 [2018-05-20 17:29:29 +0000] [12502] [INFO] Listening at: http://127.0.0.1:8000 (12502) [2018-05-20 17:29:29 +0000] [12502] [INFO] Using worker: sync [2018-05-20 17:29:29 +0000] [12505] [INFO] Booting worker with pid: 12505 [2018-05-20 17:29:29 +0000] [12507] [INFO] Booting worker with pid: 12507 [2018-05-20 17:29:29 +0000] [12508] [INFO] Booting worker with pid: 12508 supervisor>
Наконец, мы можем остановить, запустить и перезапустить все процессы сразу следующим образом:
supervisor> supervisor> stop all celery_beat: stopped gunicorn: stopped celery_worker: stopped supervisor> supervisor> supervisor> start all celery_beat: started celery_worker: started gunicorn: started supervisor> supervisor> supervisor> restart all celery_beat: stopped gunicorn: stopped celery_worker: stopped celery_beat: started celery_worker: started gunicorn: started supervisor>
Как только вы закончите, нажмите Ctrl + C или введите quit чтобы выйти из оболочки supervisorctl.
В настоящее время Supervisor контролирует все наши процессы. Если какой-либо процесс завершается по какой-либо причине, Supervisor запустит процесс автоматически.
В качестве теста попробуйте перезагрузить дроплет с помощью команды sudo reboot. Вы обнаружите, что все процессы будут запускаться автоматически при загрузке.
Поздравляем, вы успешно развернули проект DjangoBin.