LINUX.ORG.RU
ФорумAdmin

Конфиг демона gunicorn для джанги

 ,


0

1
  1 [Unit]                                                                                                                                                      
  2 Description=gunicorn daemon
  3 After=network.target
  4  
  5 [Service]
  6 User=root
  7 Group=www-data
  8 WorkingDirectory=/root/projects/chat
  9 ExecStart=/root/projects/chat/chat_env/bin/gunicorn --workers 3 --bind unix:/root/projects/chat/chat.sock chat.wsgi:application
 10  
 11 [Install]
 12 WantedBy=multi-user.target
systemctl status gunicorn

и ошибка

Jan 24 21:16:02 localhost gunicorn[4856]:   File "/root/projects/chat/chat_env/lib/python3.5/site-packages/gunicorn/util.py", line 352, in import_app
Jan 24 21:16:02 localhost gunicorn[4856]:     __import__(module)
Jan 24 21:16:02 localhost gunicorn[4856]: ImportError: No module named 'chat.wsgi'

tree -L 3 из /root/projects/chat

  1 ├── chat
  3 │   ├── chat
  4 │   │   ├── __init__.py
  5 │   │   ├── __pycache__
  6 │   │   ├── settings.py
  7 │   │   ├── urls.py
  8 │   │   └── wsgi.py
  9 │   ├── manage.py
 10 │   └── static
 11 │       └── admin
 12 ├── chat_env
 13 │   ├── bin
 14 │   │   ├── activate
 15 │   │   ├── activate.csh
 16 │   │   ├── activate.fish
 17 │   │   ├── activate_this.py
 18 │   │   ├── django-admin
 19 │   │   ├── django-admin.py
 20 │   │   ├── easy_install
 21 │   │   ├── easy_install-3.5
 22 │   │   ├── gunicorn
 23 │   │   ├── gunicorn_paster
 24 │   │   ├── pip
 25 │   │   ├── pip3
 26 │   │   ├── pip3.5
 27 │   │   ├── __pycache__
 28 │   │   ├── python -> python3
 29 │   │   ├── python3
 30 │   │   ├── python3.5 -> python3
 31 │   │   ├── python-config
 32 │   │   └── wheel
 33 │   ├── include
 34 │   │   └── python3.5m -> /usr/include/python3.5m
 35 │   ├── lib
 36 │   │   └── python3.5
 37 │   └── pip-selfcheck.json
Чего гуникорн не видит приложение?


Ответ на: комментарий от greek_31

Ну так

chat.wsgi:application
не так? Кстати когда запускают так, то все ок
(chat_env) root@localhost:~/projects/chat/chat# gunicorn --bind 0.0.0.0:8000 chat.wsgi:application
[2018-01-25 10:48:28 +0000] [16630] [INFO] Starting gunicorn 19.7.1
[2018-01-25 10:48:28 +0000] [16630] [INFO] Listening at: http://0.0.0.0:8000 (16630)
[2018-01-25 10:48:28 +0000] [16630] [INFO] Using worker: sync
[2018-01-25 10:48:28 +0000] [16633] [INFO] Booting worker with pid: 16633

cr0
() автор топика
Ответ на: комментарий от anonymous

Антошь теперь

● gunicorn.service - gunicorn daemon
   Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2018-01-25 11:03:55 UTC; 1min 47s ago
  Process: 16785 ExecStart=/root/projects/chat/chat_env/bin/gunicorn --workers 3 --bind unix:/root/projects/chat/chat.sock chat.chat.wsgi:application (code=exited, status=1/FAILURE)
 Main PID: 16785 (code=exited, status=1/FAILURE)

Jan 25 11:03:55 localhost gunicorn[16785]:   File "/root/projects/chat/chat_env/lib/python3.5/site-packages/gunicorn/arbiter.py", line 393, in stop
Jan 25 11:03:55 localhost gunicorn[16785]:     time.sleep(0.1)
Jan 25 11:03:55 localhost gunicorn[16785]:   File "/root/projects/chat/chat_env/lib/python3.5/site-packages/gunicorn/arbiter.py", line 244, in handle_chld
Jan 25 11:03:55 localhost gunicorn[16785]:     self.reap_workers()
Jan 25 11:03:55 localhost gunicorn[16785]:   File "/root/projects/chat/chat_env/lib/python3.5/site-packages/gunicorn/arbiter.py", line 524, in reap_workers
Jan 25 11:03:55 localhost gunicorn[16785]:     raise HaltServer(reason, self.WORKER_BOOT_ERROR)
Jan 25 11:03:55 localhost gunicorn[16785]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
Jan 25 11:03:55 localhost systemd[1]: gunicorn.service: Main process exited, code=exited, status=1/FAILURE
Jan 25 11:03:55 localhost systemd[1]: gunicorn.service: Unit entered failed state.
Jan 25 11:03:55 localhost systemd[1]: gunicorn.service: Failed with result 'exit-code'.

cr0
() автор топика

Потому что ты трогаешь себя ночью. Надо делать так:

import gunicorn.app.base
from chat.wsgi import application

class ChatApplication(gunicorn.app.base.BaseApplication):
    def load_config(self):
        return {
            'workers': 3,
            'bind': 'unix:/root/projects/chat/chat.sock',
        }

    def load(self):
        return application

if __name__ == '__main__':
    ChatApplication().run()

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

Begpoug
()
Ответ на: комментарий от Begpoug

Т.е. не делать через демон вообще? Я видел еще вариант с спервизором, хз как правильно.

cr0
() автор топика

Воп прямо от души отсылаю тебе рабочую схему.

Мой самый первый рабочий деплой Django на Ubuntu Server. Cколько времени я промаялся, чтобы Джанга завелась. Эти конфиги потом еще снились.

#Усиановка pip install Django gunicorn

#создание Django project django-admin startproject myproject cd myproject

#Тест gunicorn gunicorn myproject.wsgi:application --bind тут_ip_сервера:8000

#Настройка nginx cd /etc/nginx/sites-available nano default

server {
    listen 80;
    server_name ip_моего_сервера; #либо ip, либо доменное имя
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /opt/myenv/myproject/;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000; 
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

#переход в папку с Django проектом /var/www/projects/my_site

#перезагрузка nginx sudo /etc/init.d/nginx restart

#Запуск gunicorn gunicorn myproject.wsgi:application в браузере открыть ip адресс сервера(загрузится стартовая страница Django)

#Установим supervisor apt-get install supervisor

#Создадим конфиг файл для gunicorn

cd /opt/myenv/myproject/myproject #лучше делать именно в каталоге с settings.py touch gunicorn.conf.py

bind = '127.0.0.1:8000' workers = 3 user = «nobody»

#создадим конфиг файл для супервизора (например для приложения emailcollector)

в /etc/supervisor/conf.d/ создать name_project.conf

[program:emailcollector]

command=/var/www/projects/env/bin/gunicorn emailcollector.wsgi:application -c /var/www/projects/emailcollector/emailcollector/gunicorn.conf.py

directory=/var/www/projects/emailcollector user=nobody autorestart=true redirect_stderr=true

#команды супервизора: supervisorctl reread supervisorctl update supervisorctl status my_project supervisorctl restart my_app

#перезагрузка сервера shutdown -r now

NetSurf
()
Ответ на: комментарий от Begpoug
>>> from chat import chat
>>> chat
<module 'chat.chat' from '/root/projects/chat/chat/chat/__init__.py'>

А сеттингс.пай уже с ошибкой импортируется, что может быть?

cr0
() автор топика
Ответ на: комментарий от Begpoug

Ох блин так и знал что давать одинаковые иимена плохая идея, отбекаплю бд и пересоздам проект. Имхо так проще будет.

cr0
() автор топика
Ответ на: комментарий от cr0

Попробуй запустить из корня и посмотреть, откроется ли в браузере сайт

gunicorn my_project.wsgi:application --bind тут_ip_сервера:8000

Если норм, то создай конфиг гуникорна

gunicorn.conf.py

bind = '127.0.0.1:8000' workers = 3 user = «nobody»

#конфиг супервизора

в /etc/supervisor/conf.d/ создать name_project.conf

[program:emailcollector]

command=/var/www/projects/env/bin/gunicorn emailcollector.wsgi:application -c /var/www/projects/emailcollector/emailcollector/gunicorn.conf.py

directory=/var/www/projects/emailcollector user=nobody autorestart=true redirect_stderr=true

#выполнить команды супервизора и перезагрузить сервер supervisorctl reread supervisorctl update supervisorctl status my_project supervisorctl restart my_app

NetSurf
()
Ответ на: комментарий от NetSurf
2018/01/25 17:27:20 [crit] 21246#21246: *20 connect() to unix:/root/projects/project_chat/django_chat.sock failed (13: Permission denied) while connecting to upstream, client: 

Теперь с нжиниксом проблемы, это я в айпитеёблс накосячил? Как там ресет сделать всем правилам?

cr0
() автор топика
Ответ на: комментарий от cr0

Да, то что с nginx проблемы , это все фигня. Я помню , когда в первый раз деплоил джанго, то 2 суток сидел и курил эти логи с ошибками , вроде мануалов по деплою 100500 в интернете, а как начнеш их повторять то там ошибка выскочит, то там и сидишь настраиваешь до покраснения глаз)

Попробуй еще пробежаться по этому мануалу и нужно обязательно читать логи, там у nginx и supervisora они пишутся в файлы. Потом сюда напиши, что получилось али нет.

https://djbook.ru/examples/62/

NetSurf
()
Ответ на: комментарий от NetSurf

Окей, у меня глупый вопрос, ./manage.py collectstatic директория static сама должно создаться после этой команды?

cr0
() автор топика
Ответ на: комментарий от cr0

Да, просто выполняешь python manage.py collectstatic, не забудь только в файле settings.py в самом низу прописать STATIC_ROOT , как в мануале написано было

NetSurf
()
Ответ на: комментарий от NetSurf

Со статикколлектом получилось, но я видать где то еще натупил теперь даже runsever с 8000 не отррываеться ошибка Unable to connect. А если просто без порта то 502 Bad Gateway. Завтра уже попробую полностью убить nginx и поставить заново, может что и получится.

cr0
() автор топика
Ответ на: комментарий от cr0

у себя на компе делаешь python manage.py runserver Когда сайт запускаешь на сервере, уже не нужно и не рекомендовано выполнять данную команду

NetSurf
()
Ответ на: комментарий от NetSurf

Спасибо, сегодня сделаю все с начала по этому конфигу. Правда у меня дебиан, но думаю это не существенно.

cr0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.