Evgenii Legotckoi
Evgenii LegotckoiҚыр. 16, 2016, 1:56 Т.Қ.

Django - Сабақ 001. Сайтты Django + PostgreSQL + Gunicorn + Nginx жүйесінде орналастыру

Ubuntu 16.04 серверіне кіру [алдыңғы мақалалардың] бірінде конфигурацияланғаннан кейін (https://evileg.com/en/post/1/), сайтта жұмыс істеу үшін қажеттінің барлығын орналастыру уақыты келді. , атап айтқанда:

  • Джанго
  • Python тілінде веб-қосымшаларды әзірлеуге арналған фреймворк;
  • PostgreSQL
  • SQL деректер қоры;
  • Gunicorn - UNIX жүйелеріне арналған Python тіліндегі WSGI HTTP сервері;
  • Ngnix – HTTP сервері және кері прокси, пошта проксиі және жалпы мақсаттағы TCP/UDP проксиі;
  • Supervisor – ұзақ жұмыс істейтін бағдарламаларды, атап айтқанда, бұзылулардан кейін автоматты түрде қайта іске қосылуы қажет сайттарды басқаруды айтарлықтай жеңілдететін процесс менеджері.

1-қадам - Жүйені жаңарту

Бар пакеттерді жаңартайық. Сіз ешқашан білмейсіз, жүйеде ескірген пакеттер бар.

sudo apt-get update
sudo apt-get upgrade

2-қадам — Виртуалды ортаны орнатпай барлық қажетті пакеттерді орнату


Virtualenv арқылы пайдаланылмайтын барлық қажетті бумалардың бумасын орнатыңыз, атап айтқанда Python 3, PostgreSQL, Nginx.

sudo apt-get install python3-dev python3-setuptools libpq-dev postgresql postgresql-contrib nginx

Pip python3-setuptools бірге жеткізілетін easy_install3 утилитасы арқылы бөлек орнатуды аяқтадым, біріншіден, соңғы нұсқасы орнатылғандықтан, екіншіден, apt-get арқылы орнатылған болса, қателер болды. virtualenv ішінде бумаларды орнату кезінде.

sudo easy_install3 pip

3-қадам — Мәліметтер қорын және ДҚ пайдаланушысын құру


Ал енді PostgreSQL орнатылған кезде жасалатын sudo утилитасы арқылы postgres пайдаланушысына кеңейтілген құқықтар беретін мәліметтер базасы мен пайдаланушыны жасайық.

sudo -u postgres psql

Осы пәрменді орындағаннан кейін біз PostgreSQL консоліне өтеміз, онда біз қажетті дерекқорды және оның атынан Django қолданбасы осы дерекқорға қосылатын пайдаланушыны жасаймыз.

Мәліметтер қорын құрайық:

CREATE DATABASE myproject;

Пайдаланушыны жасайық:

CREATE USER myprojectuser WITH PASSWORD 'password';

Әрі қарай, жоба пайдаланушысын конфигурациялаңыз. Ол UTF8 кодтауын пайдаланады, өйткені Django да осы кодтауды пайдаланады және Python файлдарды UTF8 кодтауымен қатты кодтауды ұсынады, әсіресе оларда сайт беттерінде көрсетілетін мәтін болса. Ол сонымен қатар дерекқордағы оқшаулау деңгейін орнатады. Яғни, деректер оқу үшін қолжетімді болған кезде. Бұл жағдайда мәмілені жалпы жағдайда растағаннан кейін. Әрине, деректер растауға дейін қол жетімді болатын жағдайлар бар, бірақ бұл талқылауға арналған бөлек тақырып. Ол сонымен қатар уақыт белдеуі түрін орнатады, ол Django үшін әдепкі бойынша UTC болады.

ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';

Содан кейін біз осы пайдаланушыға дерекқорға кіру құқығын береміз:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Ал, PostgreSQL консолінен шығайық.

\q

Серверде кодтауға қатысты мәселелер туындаса, серверде LATIN1 кодтауы болғанда және дерекқорды UTF8 тілінде жасау қажет болса, [келесі мақаланы] қараңыз (https://evileg.com/en/post/2 /), бұл тапсырма шешілетін жерде.

4-қадам — Виртуалды ортаны орнату

Виртуалды ортаны орнату және іске қосу:

pip3 install virtualenv
virtualenv ~/myprojectenv
source myprojectenv/bin/activate

5-қадам — PostgreSQL драйверін орнату

Келесі пәрменмен орнатамыз

sudo pip install django psycopg2 

Виртуалды ортада pip3 емес, pip пәрменін пайдалану керек.

6-қадам – Жобаны құру

Виртуалды ортасы бар қалтаға барайық, біз әлі де виртуалды ортада жұмыс істеу режимінде болуымыз керек. Ал енді жоба жасайық.

cd ~/myprojectenv
django-admin.py startproject myproject

7-қадам — Дерекқорға қосылуды орнату

Енді Django конфигурация файлын SQLite дерекқорын жасап, кейіннен оған қосылмай, PostgreSQL дерекқорына қосылатындай етіп өңдейік.

nano ~/myproject/myproject/settings.py

Мұны істеу үшін файлдан келесі код бөлігін табыңыз:

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

...

Дерекқорға қосылу үшін деректеріңізді ескере отырып, оны келесімен ауыстырыңыз:

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

...

8-қадам — Дерекқорды тасымалдауды орындау

Джангоның бір үлкен артықшылығы бар – оның өмірді өте жеңілдететін кірістірілген басқару панелі бар. Бірақ оның жұмыс істеуі үшін дерекқорды көшіру қажет, яғни деректер базасының құрылымын құрайтын SQL деректер үлгілерінен сұраныстарды дайындау.

cd ~/myproject
python manage.py makemigrations
python manage.py migrate

Сондай-ақ біз сіздің сайтыңызға максималды кіру құқығы бар әкімші болатын суперпайдаланушыны жасаймыз. Келесі пәрменді іске қосыңыз және нұсқауларды орындаңыз.

python manage.py createsuperuser

9-қадам — Gunicorn орнату

Біздің веб-сайт үшін HTTP сервері ретінде әрекет ететін Gunicorn орнатайық. Біз оны виртуалды ортаға орнатамыз.

sudo pip install django gunicorn

Сайттың жұмыс істеп тұрғанын тексеруге болады:

gunicorn myproject.wsgi:application --bind 111.222.333.44:8000  # Укажите ваш IP-адрес

10-қадам — Статикалық файлдарды орнату

Django өндірістік серверде пайдаланылмайтын әдепкі бойынша Debug режимінде статикалық файлдарға ғана қызмет етеді. Өндіріс сервері үшін барлық жобалардағы барлық статикалық файлдар collectstatic пәрмені арқылы бөлек арнайы қалтаға жиналады және қалтаның өзі settings.py. файлында көрсетілуі керек.

Оны өңдеп көрейік:

nano ~/myproject/settings.py

Статикалық файлдарды қайда жинау керектігін көрсететін жолды қосыңыз.

STATIC_ROOT = '/home/user/myprojectenv/myproject/myproject/static/'

Енді осы каталогтағы барлық статистиканы жинайық:

python manage.py collectstatic

11-қадам — Nginx орнату

Nginx конфигурация файлын өңдейік.

sudo nano /etc/nginx/sites-available/default

Оның барлық мазмұнын жойып, келесімен ауыстырыңыз.

server {
    listen 80;
    server_name 111.222.333.44; # здесь прописать или IP-адрес или доменное имя сервера
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /home/user/myprojectenv/myproject/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;
    }
}

Nginx қайта іске қосайық.

sudo service nginx restart

Ал енді мылтықты жүгірейік

gunicorn myproject.wsgi:application

Осыдан кейін сіз сайттың 80 портында қол жетімді екенін көресіз.

12-қадам — Супервайзерді конфигурациялау

Сайт тәуліктің кез келген уақытында қолжетімді болуы үшін жадта қызмет ретінде ілінетін және сайттың үнемі жұмыс істейтініне көз жеткізетін супервайзерді конфигурациялау қажет.

sudo apt-get install supervisor

Gunicorn тұрақты жұмыс істеуі үшін оның конфигурация файлын жасау қажет. Ол біздің веб-қосымшамыз үшін іске қосылатын файлдың жанында орналасады.

cd /home/user/myprojectenv/myproject/myproject
touch gunicorn.conf.py
nano gunicorn.conf.py

Келесі конфигурация ақпаратын қосамыз:

bind = '127.0.0.1:8000'
workers = 3
user = "nobody"

Яғни, біз қай портқа байланыстыратынымызды және қандай пайдаланушы процесті бастайтынын көрсеттік. Сондай-ақ жұмыс процестерінің саны. Бұл жағдайда үшеуі бар. Мына формула бойынша есептелген:

жұмысшылар = Ncpu + 1

Содан кейін біз супервайзердің конфигурациясын жасаймыз

cd /etc/supervisor/conf.d/
touch myproject.conf
nano myproject.conf

Оған келесі параметрлерді жазыңыз

[program:myproject]
command=/home/user/myprojectenv/bin/gunicorn myproject.wsgi:application -c /home/user/myprojectenv/myproject/myproject/gunicorn.conf.py
directory=/home/user/myprojectenv/myproject
user=nobody
autorestart=true
redirect_stderr=true

Енді супервайзерді бастайық. Супервайзерді орнату кезінде бір ескерту бар. Ол орнатылғаннан кейін қызмет ретінде іске қосылмады. Сондықтан серверді қайта іске қосқыңыз келмесе, оны іске қосуға мәжбүрлеп қосып, қолмен бастау керек.

sudo update-rc.d supervisor enable
sudo service supervisor start

Сонымен, конфигурацияларды жаңартып, сайт қолданбасының күйін тексеріп, оны қайта іске қосуға болады.

supervisorctl reread
supervisorctl update
supervisorctl status myproject
supervisor restart myproject

Сервер қайта іске қосылғанда бәрі автоматты түрде басталады

Ескерту

Жоба файлдарын өзгерткен болсаңыз, gunicorn бағдарламасын қайта іске қосуыңыз керек. Ол үшін виртуалды ортаны белсендіріп, killall пәрменін пайдаланыңыз

source ~/myprojectenv/bin/activate
sudo killall gunicorn

Supervisor осы пәрменнен кейін Gunicorn қолданбасын автоматты түрде іске қосады, сондықтан сервер ұзақ уақыт жұмыс істемей қалады деп алаңдамайсыз. Екінші сәтсіздіктен артық емес.

Django үшін [Timeweb хостының VDS-серверін] ұсынамын (http://timeweb.com/ru/?i=27415)
.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

A
  • Қаз. 28, 2017, 9:30 Т.Ж.

С чем может быть связана ошибка? ставил всё на свою машину, статический ip не покупал.
(myprojectenv) ubuntu@ubuntu:~/myprojectenv/myproject$ gunicorn myproject.wsgi:application --bind мойайпишник:8000
[2017-10-28 11:54:39 +0000] [31426] [INFO] Starting gunicorn 19.7.1
[2017-10-28 11:54:39 +0000] [31426] [ERROR] Invalid address: ('мойайпишник', 8000)
[2017-10-28 11:54:39 +0000] [31426] [ERROR] Retrying in 1 second.
[2017-10-28 11:54:40 +0000] [31426] [ERROR] Invalid address: ('мойайпишник', 8000)
[2017-10-28 11:54:40 +0000] [31426] [ERROR] Retrying in 1 second.
[2017-10-28 11:54:41 +0000] [31426] [ERROR] Invalid address: ('мойайпишник', 8000)
[2017-10-28 11:54:41 +0000] [31426] [ERROR] Retrying in 1 second.
[2017-10-28 11:54:42 +0000] [31426] [ERROR] Invalid address: ('мойайпишник', 8000)
[2017-10-28 11:54:42 +0000] [31426] [ERROR] Retrying in 1 second.
[2017-10-28 11:54:43 +0000] [31426] [ERROR] Invalid address: ('мойайпишник', 8000)
[2017-10-28 11:54:43 +0000] [31426] [ERROR] Retrying in 1 second.
[2017-10-28 11:54:44 +0000] [31426] [ERROR] Can't connect to ('мойайпишник', 8000)

Evgenii Legotckoi
  • Қаз. 28, 2017, 9:55 Т.Ж.

Этот ваш IP адрес случайно не внешний IP адрес роутера, за которым Вы сидите со своим ПК?

A
  • Қаз. 28, 2017, 10:15 Т.Ж.

перепробывал все ip, которые нашёл у себя на компе. не подскажите, как найти нужный?

Evgenii Legotckoi
  • Қаз. 28, 2017, 10:21 Т.Ж.

А Вы делали вообще bind на '127.0.0.1:8000'?

то есть
bind = '127.0.0.1:8000'
gunicorn слушает порт на внутренней петле
b
  • Там. 24, 2018, 2:56 Т.Ж.
sudo pip install django gunicorn

sudo pip install django psycopg2





По моему sudo здесь лишнее. Разве sudo устанавливает внутри виртуального окружения?
Evgenii Legotckoi
  • Там. 24, 2018, 3 Т.Ж.

Как ни странно - Да.

Илья Чичак
  • Жел. 11, 2018, 9:25 Т.Ж.

Некропост, однако, хотел бы добавить, что в случае с продакшеном, миграции там делать нельзя. (точнее, конечно, можно, но нельзя)

Все миграции необходимо хранить в репозитории.

Evgenii Legotckoi
  • Жел. 11, 2018, 9:28 Т.Ж.

Твоя правда. Согласен. Свои миграции храню в репозитории. На продакшене только выполняю обновление структуры базы данных, после тестирования на дев сервере конечно (читай локальная машина разработки).

S
  • Маусым 25, 2020, 2:02 Т.Қ.

Здравствуйте, подскажите пожалуйста, как исправить:
в Ubuntu 20.04, в каталоге проекта пытаюсь создать вертуальную среду
virtualenv env
вылезает ошибка:
ModuleNotFoundError: No module named 'virtualenv.seed.via_app_data'
Спасибо.

Evgenii Legotckoi
  • Маусым 25, 2020, 2:40 Т.Қ.

Это может быть и ошибка в вашей версии virtualenv и не совсем верная установка, и косяки в процессе следования туториалу.
Но подобные ошибки вылезали на GitHub в репозитории virtualenv.
Впрочем я сам с таким не сталкивался, так что готового ответа у меня нет.

Илья Чичак
  • Маусым 25, 2020, 3:24 Т.Қ.
  • (өңделген)

Установите venv:

sudo apt install python3-venv

после этого можно сделать

python -m venv .venv
source .venv/bin/activate

virtualenv - устаревший, venv - часть стандартной библиотеки. в Windows - venv ставится вместе с питоном, в убунте, к сожалению, даже куски стандартной библиотеки приходится доставлять руками.

S
  • Маусым 25, 2020, 3:37 Т.Қ.

Ок, спасибо, буду пробовать.

S
  • Маусым 25, 2020, 3:56 Т.Қ.

Все заработало, немного ругнулся, что лучше:
python3 -m venv .venv
но в итоге все сработало.
Спасибо!

АМ
  • Жел. 20, 2020, 11:45 Т.Ж.

Стави все по статье. Добрался до шага 12 и после него перестал запускатся сервер через gunicorn myproject.wsgi:application. выдает ошибку
[ERROR] Exception in worker process
Traceback (most recent call last):
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/wo rkers/base.py", line 119, in init_process
self.load_wsgi()
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
self.wsgi = self.app.wsgi()
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
return self.load_wsgiapp()
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
return util.import_app(self.app_uri)
File "/home/user/myproject/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
mod = importlib.import_module(module)
File "/usr/lib/python3.8/importlib/ init .py", line 127, in import _module
return _bootstrap._gcd_import(name[level:], package, level)
File " ", line 1014, in _gcd_import
File " ", line 991, in _find_and_load
File " ", line 973, in _find_and_load_un locked
ModuleNotFoundError: No module named 'myproject.wsgi'

На что обратить внимание?

АМ
  • Жел. 20, 2020, 11:48 Т.Ж.
  • (өңделген)

После команд запуска supervisor'а

sudo update-rc.d supervisor enable
sudo service supervisor start

нужно ли вообще в виртуальном окружении запускать Gunicorn

Илья Чичак
  • Жел. 20, 2020, 12:47 Т.Қ.

я думаю, вам стоит кастовать сюда Евгения - я предпочитаю использовать systemd для запуска и менеджмента сервера

попробуйте призвать его через кнопку ответить

АМ
  • Жел. 20, 2020, 2:09 Т.Қ.

Евгений доброй ночи, можете что-то посоветовать?

Илья Чичак
  • Жел. 20, 2020, 8:01 Т.Қ.

привет
тут нужна твоя помощь=)
я в супервизоре - ноль=)

Alexander
  • Қаң. 20, 2021, 3:40 Т.Қ.

Ошибка в конфиге инжинкса про статику в root последний слеш лишний путь в таком виде получается

/home/user/myprojectenv/myproject/myproject//static
IscanderChe
  • Ақп. 18, 2021, 5:32 Т.Ж.

На продакшене только выполняю обновление структуры базы данных

День добрый.
А как вы это делаете?

Илья Чичак
  • Ақп. 18, 2021, 5:39 Т.Ж.

python manage.py migrate

IscanderChe
  • Ақп. 18, 2021, 6:07 Т.Ж.

А разве это не миграция? И как тогда быть с вашим утверждением о миграциях:

в случае с продакшеном, миграции там делать нельзя. (точнее, конечно, можно, но нельзя)

Илья Чичак
  • Ақп. 18, 2021, 6:19 Т.Ж.

я имел в виду, что на проде нельзя делать

python manage.py makemigrations

правильнее было бы сказать, что на проде нельзя создавать миграции. мигрировать БД - без этого, естественно, никак

IscanderChe
  • Ақп. 18, 2021, 6:25 Т.Ж.

Всё, теперь понял. Спасибо!

IscanderChe
  • Ақп. 18, 2021, 9:04 Т.Ж.

Ещё вопрос: как правильно обновлять кодовую базу, если произошли изменения в ней?

Илья Чичак
  • Ақп. 18, 2021, 10:18 Т.Ж.
  • (өңделген)

обновлять где?
если на проде -

git pull && python manage.py migrate && python manage.py collectstatic --noinput && sudo systemctl service restart && sudo service nginx restart

если вы используете systemd для управления сервером

IscanderChe
  • Ақп. 18, 2021, 11:14 Т.Ж.

То есть я правильно понимаю, что на боевом сервере нужно ставить помимо всего ещё и git?

Илья Чичак
  • Ақп. 18, 2021, 11:51 Т.Ж.
  • (өңделген)

в целом, тут все не просто

в зависимости от способа доставки это может быть k8s, docker, rsync, ansible, git... да хоть wget-ом качать архив с условного гитхаба

и для каждого способа свои способы доставки и развертывания

для начала, если у вас 1 сервер и минимум каких-то особенностей, git pull вполне хватит. И да, для этого нужно, чтобы был git установлен

IscanderChe
  • Ақп. 18, 2021, 12:04 Т.Қ.

Ясно. Спасибо за развёрнутый ответ.

Думаю, что мне для моих целей хватит и git. Локально я им пользоваться умею, а вот с удалёнными серверами не сталкивался, только с github, отсюда и вопросы.

IscanderChe
  • Ақп. 20, 2021, 12:17 Т.Қ.

Сижу, ковыряюсь с git pull на виртуалке, и ни черта не понимаю.

Как правильно залить проект на удалённый сервер, чтобы он по git pull принимал изменения? Отправить изменения с локальной машины у меня получилось, а вот на git pull ругается:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> master
IscanderChe
  • Ақп. 20, 2021, 3:39 Т.Қ.

Всё, разобрался.

IscanderChe
  • Ақп. 21, 2021, 3:17 Т.Ж.

В виртуальном окружении ругается на отсутствие pip:

sudo: pip: command not found

pip ставил вот так:

sudo apt-get install python3-pip

поскольку easy_install3 почему-то не поставился вместе с setuptools.

Илья Чичак
  • Ақп. 21, 2021, 10:55 Т.Ж.

в виртуальном окружении не надо использовать sudo

используя sudo вы ставите пакеты глобально. Если у вас один проект на сервере - ок. но если нет, все плюсы от venv-ов идут на смарку.
кстати, советую посмотреть в сторону poetry - на мой взгялд, это проект уже production-ready. пакеты ставятся в несколько потоков, фиксируются не только зависимости, но и зависимости зависимостей. А venv-вы создаются автоматически и не в проекте. может быть не очень удобно, но можно переопределить поведение локально и глобально. в целом, советую

IscanderChe
  • Ақп. 21, 2021, 1:18 Т.Қ.

Ага, спасибо, завелось!

Да мне бы хотя бы с основами разобраться, куда уж продвинутые уровни...

IscanderChe
  • Ақп. 22, 2021, 3:14 Т.Ж.
  • (өңделген)

На шаге 11 вылезла вот такая ошибка:

DisallowedHost at /
Invalid HTTP_HOST header: '10.0.3.15'. You may need to add '10.0.3.15' to ALLOWED_HOSTS

Проблема решилась добавлением в settings.py в ALLOWED_HOSTS IP-адреса 10.0.3.15.

IscanderChe
  • Ақп. 22, 2021, 3:44 Т.Ж.

После шага 12 сайт вместо стартовой страницы Django показывает: "502 Bad Gateway".

Что не так?

Илья Чичак
  • Ақп. 22, 2021, 5 Т.Ж.

покажите конфиг nginx и ка запускаете gunicorn

IscanderChe
  • Ақп. 22, 2021, 5:07 Т.Ж.
  • (өңделген)

Всё по мануалу выше, буква в букву.

gunicorn mysite.wsgi:application
server {
        listen 80;
        server_name 10.0.3.15;
        access_log /var/log/nginx/example.log;

        location /static/ {
                root /home/django/.env/mysite/mysite/;
                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;
        }
}
IscanderChe
  • Ақп. 22, 2021, 5:08 Т.Ж.

Всё по мануалу выше, буква в букву.

gunicorn mysite.wsgi:application
server {
        listen 80;
        server_name 10.0.3.15;
        access_log /var/log/nginx/example.log;

        location /static/ {
                root /home/django/.env/mysite/mysite/;
                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;
        }
}
Илья Чичак
  • Ақп. 22, 2021, 9:09 Т.Ж.

нужна твоя помощь=)

IscanderChe
  • Ақп. 23, 2021, 1:15 Т.Қ.

Поднял сервис с помощью systemd, вот по этому мануалу: https://habr.com/ru/post/501414/

D
  • Наурыз 2, 2021, 3 Т.Ж.

А почему нельзя? Где можно об этом почитать? Киньте, пожалуйста, в меня ссылкой.

L
  • Мамыр 29, 2021, 9:44 Т.Қ.

При любых попытках взаимодействовать с супервизаром, выбивает в такую ошибку

error: <class 'FileNotFoundError'>, [Errno 2] No such file or directory: file: /usr/local/lib/python3.8/dist-packages/supervisor/xmlrpc.py line: 560

Помогите пожалуйста, уже все волосы выдрал

D
  • Мамыр 30, 2021, 12:12 Т.Қ.

Это на какую команду так отвечает?

L
  • Мамыр 30, 2021, 1:18 Т.Қ.

Отвечал на все команды после

sudo service supervisor start

Исправил таким образом

sudo killall supervisord
sudo supervisord -c /etc/supervisor/supervisord.conf

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
m
moogoҚар. 22, 2024, 7:17 Т.Ж.
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

Бізді әлеуметтік желілерде бақылаңыз