В этой статье приведено пошаговое руководство по развертыванию проектов 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
В следующем шаге мы обновим нашу систему и установим некоторые необходимые пакеты.
Для начала обновите систему с помощью следующей команды:
$ sudo apt-get update $ sudo apt-get upgrade
Ubuntu 16.04 поставляется с предустановленным Python 3.5, поэтому нам не нужно устанавливать Python. Однако вам нужно установить pip.
Для установки pip введите следующее:
$ sudo apt-get install python3-pip
Как и в процессе разработки, мы будем использовать virtualenv для создания виртуальной среды. Установите virtualenv, набрав:
$ pip3 install virtualenv
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 в качестве прокси-сервера и для обслуживания статических файлов. Чтобы установить его пропишите:
$ 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 набрав следующий запрос:
$ 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
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/. Вы должны увидеть такую страницу:
Наше приложение, похоже, не работает. Так получается, потому что мы еще не обслуживаем статические файлы.
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, введя следующую команду:
$ 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.
При анализе данных часто требуется быстро найти абсолютное значение набора чисел. Для выполнения этой задачи…
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…
При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…