LINUX.ORG.RU
ФорумAdmin

Запуск gunicorn не под рутом

 , , , ,


0

2

Если запускать не под рутом, то получаю такое

[2020-03-24 14:47:56 +0000] [10112] [INFO] Starting gunicorn 19.7.1
[2020-03-24 14:47:56 +0000] [10112] [ERROR] Retrying in 1 second.
[2020-03-24 14:47:57 +0000] [10112] [ERROR] Retrying in 1 second.
[2020-03-24 14:47:58 +0000] [10112] [ERROR] Retrying in 1 second.
[2020-03-24 14:47:59 +0000] [10112] [ERROR] Retrying in 1 second.
[2020-03-24 14:48:00 +0000] [10112] [ERROR] Retrying in 1 second.
[2020-03-24 14:48:01 +0000] [10112] [ERROR] Can't connect to ('0.0.0.0', 443)

У меня веб-приложение на фласке, которое должно работать под определенным пользователем в системе. Все зависимости установлены локально для этого пользователя.

Если использовать специальные флаги -u и -g для смены пользователя рабочих процессов, то получаю ошибки, связанные с отсутствием необходимых модулей

[2020-03-24 14:26:58 +0000] [9776] [INFO] Starting gunicorn 19.7.1
[2020-03-24 14:26:58 +0000] [9776] [INFO] Listening at: https://0.0.0.0:443 (9776)
[2020-03-24 14:26:58 +0000] [9776] [INFO] Using worker: sync
[2020-03-24 14:26:58 +0000] [9779] [INFO] Booting worker with pid: 9779
[2020-03-24 14:26:59 +0000] [9779] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python3/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/lib/python3/dist-packages/gunicorn/util.py", line 377, in import_app
    __import__(module)
  ...
ModuleNotFoundError: No module named 'psycopg2'
[2020-03-24 14:26:59 +0000] [9779] [INFO] Worker exiting (pid: 9779)
[2020-03-24 14:26:59 +0000] [9776] [INFO] Shutting down: Master
[2020-03-24 14:26:59 +0000] [9776] [INFO] Reason: Worker failed to boot.

Это странно, потому что я думал, что рабочий процесс выполняет веб-приложение… Я решил сделать переключение домашней директории по умолчанию при использовании sudo (у меня убунта 18.04), но это не помогло.

Есть идеи?


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

uwsgi тоже не получается на 443 порту запустить

Rot1
() автор топика
Ответ на: комментарий от eternal_sorrow
$ sudo uwsgi --master --uid ususer --gid ususer --http-socket :443 --plugin python3 --module receiver:receiver
*** Starting uWSGI 2.0.15-debian (64bit) on [Tue Mar 24 16:43:28 2020] ***
compiled with version: 7.3.0 on 28 September 2018 15:41:15
os: Linux-4.15.0-65-generic #74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019
nodename: vagrant
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /opt/Server/WebApp
detected binary path: /usr/bin/uwsgi-core
dropping root privileges as early as possible
setgid() to 1001
setuid() to 1001
your processes number limit is 3697
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
bind(): Permission denied [core/socket.c line 769]
Rot1
() автор топика
Ответ на: комментарий от Rot1

Вот и запускай nginx от рута и проксируй через него что угодно от юзера

Goury ★★★★★
()
Ответ на: комментарий от Rot1

Если ставить вопрос так:

А есть некостыльные решения?

то нет.

Под гуникорном воркеры ассептят соединения сами, т.е. они же и биндятся. Уж не помню как там мертвячина uwsgi работает, но как бы она ни работала, у тебя всё равно будет модель прокси и воркер, если ты хочешь код под юзером пускать.

Вот за докер, кстати, лорчую. Жопич дело говорит.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от zolden

Для чего тогда там ключи для изменения пользователя рабочего процесса? Если сервер не запускается на привилегированном порту даже от рута с этими ключами

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

Под гуникорном воркеры ассептят соединения сами, т.е. они же и биндятся

Это проясняет ситуацию

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

Как бы логично, что оно не видит psycopg2 из /home/ususer/.local когда под рутом запускается.

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