На практике я пытаюсь развернуть пример Эндрю Годвина для нескольких чатов с каналами Django 2.1.1 в DigitalOcean Ubuntu 16.04.4. Однако я не знаю, как выйти из сервера Ubuntu без остановки Daphne-сервера каналов.
Прямо сейчас, почти все мое знакомство с развертыванием происходит из этого учебника , и именно так я развернул сайт. Но согласно документации по каналам , мне нужно запустить одну из этих трех программ, чтобы запустить Дафну:
- daphne myproject.asgi: приложение
- daphne -p 8001 myproject.asgi: приложение
- daphne -b 0.0.0.0 -p 8001 myproject.asgi: приложение
Итак, в дополнение к обучению DigitalOcean, я запустил и их. Третий работал на меня, и сайт работал хорошо. Однако, если я выйду из shell в Ubuntu, Дафна тоже остановится.
В этом уроке у gunicorn есть доступ к файлу sock (--bind unix:/home/sammy/myproject/myproject.sock
), и в своих исследованиях я до сих пор видел на нескольких сайтах, опубликованных до 2018 года, что где-то генерируется файл daphne.sock. Итак, я думаю, что каналы развертываются аналогично? Но я не видел подробностей о том, как это делается.
Как развернуть пример мультитача, чтобы я мог выйти из веб-сервера Ubuntu без остановки Дафни?
Обновление 6 мая 2018 года, 20:00 CET:
Я попробовал решение kagronick ниже и создал файл systemd по адресу /etc/systemd/system/daphne_seb.service:
[Unit]
Description=daphne daemon for seb
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/seb/seb
ExecStart=/home/seb/env_seb/bin/python /home/seb/seb/manage.py daphne -b 0.0.0.0 -p 8001 multichat.asgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
Я сделал systemctl daemon-reload
и systemctl start daphne_seb.service
, и он работал в течение нескольких секунд. Тогда systemctl status daphne_seb.service
сказал Unknown command: 'daphne'
.
Я попытался перезапустить его. Затем я перезагрузил ОС. Теперь status
говорит:
daphne_seb.service - daphne daemon for seb
Loaded: loaded (/etc/systemd/system/daphne_seb.service; enabled; vendor preset: enabled)
Active: inactive (dead) (Result: exit-code) since Sun 2018-05-06 19:33:31 UTC; 1s ago
Process: 2459 ExecStart=/home/seb/env_seb/bin/python /home/seb/seb/manage.py daphne -b 0.0.0.0 -p 8001 multichat.asgi:application (code=exited, status=1
Main PID: 2459 (code=exited, status=1/FAILURE)
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Main process exited, code=exited, status=1/FAILURE
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Unit entered failed state.
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Failed with result 'exit-code'.
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Service hold-off time over, scheduling restart.
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: Stopped daphne daemon for seb.
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Start request repeated too quickly.
May 06 19:33:31 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: Failed to start daphne daemon for seb.
Я проверил пути к файлам. Они правы. Я также попытался добавить Environment=DJANGO_SETTINGS_MODULE=multichat.settings
, который я видел здесь . Но это тоже не помогло.
Обновление 6 мая 2018 года, 22:00 CET:
Затем я прочитал здесь , что в течение 10 секунд разрешено только 5 перезапусков. Поэтому я удалил Restart=on-failure
, чтобы запустить службу самостоятельно.
Это вернуло меня к Unknown command: 'daphne'
. Это решение подсказало мне, что я должен указывать не на Python, а на Дафну в моем virtualenv, поэтому я изменил его: ExecStart=/home/seb/env_seb/bin/daphne
. Я также удалил /home/seb/seb/manage.py
на основе того же решения. Это дало мне новую проблему:
daphne_seb.service - daphne daemon for seb
Loaded: loaded (/etc/systemd/system/daphne_seb.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2018-05-06 19:55:24 UTC; 5s ago
Process: 2903 ExecStart=/home/seb/env_seb/bin/daphne daphne -b 0.0.0.0 -p 8001 multichat.asgi:application (code=exited, status=2)
Main PID: 2903 (code=exited, status=2)
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: [-v VERBOSITY] [-t HTTP_TIMEOUT] [--access-log ACCESS_LOG]
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: [--application-close-timeout APPLICATION_CLOSE_TIMEOUT]
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: [--ws-protocol [WS_PROTOCOLS [WS_PROTOCOLS ...]]]
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: [--root-path ROOT_PATH] [--proxy-headers]
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: application
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 daphne[2903]: daphne: error: unrecognized arguments: multichat.asgi:application
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Unit entered failed state.
May 06 19:55:24 ubuntu-s-1vcpu-1gb-ams3-01 systemd[1]: daphne_seb.service: Failed with result 'exit-code'.
Я проверяю свой multichat.asgi:application
, и он в нужном месте. Поэтому я не могу понять, почему написано error: unrecognized arguments: multichat.asgi:application
.