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 ()

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

Мой самый первый рабочий деплой 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 ()
Ответ на: комментарий от 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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.