Evgenii Legotckoi
Evgenii Legotckoi16. September 2016 13:56

Django - Tutorial 001. Bereitstellen einer Site auf Django + PostgreSQL + Gunicorn + Nginx

Nachdem der Zugriff auf den Server mit Ubuntu 16.04 in einem der vorherigen Artikel konfiguriert wurde, ist es an der Zeit, alles Notwendige bereitzustellen, damit die Site darauf funktioniert. nämlich:

  • Django
  • ein Framework für die Entwicklung von Webanwendungen in Python;
  • PostgreSQL
  • SQL-Datenbank;
  • Gunicorn - WSGI HTTP-Server in Python für UNIX-Systeme;
  • Ngnix - HTTP-Server und Reverse-Proxy, Mail-Proxy und Allzweck-TCP/UDP-Proxy;
  • Supervisor ist ein Prozessmanager, der die Verwaltung von Programmen mit langer Laufzeit erheblich vereinfacht, insbesondere von Websites, die nach einem Absturz automatisch neu gestartet werden müssen.

Schritt 1 - Aktualisieren des Systems

Lassen Sie uns die vorhandenen Pakete aktualisieren. Man weiß nie, das System hat veraltete Pakete.

sudo apt-get update
sudo apt-get upgrade

Schritt 2 – Installieren aller erforderlichen Pakete, ohne die virtuelle Umgebung zu installieren


Installieren Sie einen Stapel aller erforderlichen Pakete, die nicht über virtualenv verwendet werden, nämlich Python 3, PostgreSQL, Nginx.

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

Pip Ich habe es letztendlich separat über das easy \ _install3 Dienstprogramm installiert, das mit python3-setuptools geliefert wird, erstens weil dann die neueste Version installiert wird und zweitens, wenn es über apt -get installiert wird Beim Installieren von Paketen in virtualenv sind Fehler aufgetreten.

sudo easy_install3 pip

Schritt 3 - Erstellen der Datenbank und des Datenbankbenutzers


Lassen Sie uns nun eine Datenbank und einen Benutzer erstellen und dem postgres-Benutzer erweiterte Rechte über das sudo-Dienstprogramm geben, das bei der Installation von PostgreSQL erstellt wird.

sudo -u postgres psql

Nach der Ausführung dieses Befehls werden wir zur PostgreSQL-Konsole weitergeleitet, wo wir die erforderliche Datenbank und einen Benutzer erstellen, in dessen Namen sich die Django-Anwendung mit dieser Datenbank verbindet.

Lassen Sie uns eine Datenbank erstellen:

CREATE DATABASE myproject;

Lassen Sie uns einen Benutzer erstellen:

CREATE USER myprojectuser WITH PASSWORD 'password';

Als nächstes richten Sie den Projektbenutzer ein. Es wird UTF8-Codierung verwenden, da diese Codierung auch von Django verwendet wird, und Python empfiehlt, Dateien mit UTF8-Codierung fest zu codieren, insbesondere wenn sie Text enthalten, der auf Site-Seiten angezeigt wird. Die Isolationsstufe in der Datenbank wird ebenfalls festgelegt. Das heißt, wenn Daten zum Lesen verfügbar sind. In diesem Fall nach Bestätigung der Transaktion im allgemeinen Fall. Natürlich gibt es Fälle, in denen Daten vor der Bestätigung verfügbar sind, aber dies ist ein separates Diskussionsthema. Es legt auch den Typ der Zeitzonen fest, der für Django standardmäßig UTC ist.

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';

Als nächstes gewähren wir diesem Benutzer Zugriffsrechte auf die Datenbank:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Nun, verlassen wir die PostgreSQL-Konsole.

\q

Wenn Sie Probleme mit Kodierungen auf dem Server haben, wenn der Server über LATIN1-Kodierung verfügt und die Datenbank in UTF8 erstellt werden muss, lesen Sie den nächsten Artikel . /), wo diese Aufgabe gelöst wurde.

Schritt 4 – Einrichten der virtuellen Umgebung

Installieren und aktivieren Sie die virtuelle Umgebung:

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

Schritt 5 – Installieren des PostgreSQL-Treibers

Wir werden den folgenden Befehl installieren

sudo pip install django psycopg2 

In der virtuellen Umgebung müssen Sie den Befehl pip verwenden, nicht pip3

Schritt 6 – Erstellen des Projekts

Gehen wir zum Ordner mit der virtuellen Umgebung, wir sollten uns immer noch im virtuellen Umgebungsmodus befinden. Und lassen Sie uns ein Projekt erstellen.

cd ~/myprojectenv
django-admin.py startproject myproject

Schritt 7 - Konfigurieren der Datenbankverbindung

Bearbeiten wir nun die Django-Konfigurationsdatei so, dass sie eine Verbindung zur PostgreSQL-Datenbank herstellt, anstatt die SQLite-Datenbank zu erstellen und dann eine Verbindung herzustellen.

nano ~/myproject/myproject/settings.py

Suchen Sie dazu den folgenden Codeabschnitt in der Datei:

...

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

...

Und ersetzen Sie es durch Folgendes, wobei Sie Ihre Daten für die Verbindung mit der Datenbank berücksichtigen:

...

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

...

Schritt 8 – Durchführen von Datenbankmigrationen

Django hat einen sehr großen Vorteil - es hat einen eingebauten Admin-Bereich, der das Leben viel einfacher macht. Damit dies jedoch funktioniert, müssen Sie die Datenbank migrieren, dh SQL-Abfragen aus den Datenmodellen vorbereiten, die die Struktur der Datenbank bilden.

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

Wir werden auch einen Superuser erstellen, der ein Administrator mit maximalen Zugriffsrechten auf Ihre Site ist. Führen Sie den folgenden Befehl aus und befolgen Sie die Anweisungen.

python manage.py createsuperuser

Schritt 9 - Gunicorn installieren

Installieren Sie Gunicorn, das als HTTP-Server für unsere Website fungiert. Installieren Sie es in der virtuellen Umgebung.

sudo pip install django gunicorn

Sie können überprüfen, ob die Site bereits aktiv ist:

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

Schritt 10 - Statische Dateien konfigurieren

Django stellt standardmäßig nur statische Dateien im Debug-Modus bereit, der auf einem Produktionsserver nicht verwendet wird. Bei einem Produktionsserver werden alle statischen Dateien aus allen Projekten mit dem Befehl collectstatic in einem separaten speziellen Ordner gesammelt, und der Ordner selbst muss in der Datei settings.py angegeben werden.

Lass es uns bearbeiten:

nano ~/myproject/settings.py

Und fügen Sie eine Zeile hinzu, die angibt, wo statische Dateien gesammelt werden sollen.

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

Lassen Sie uns nun alle Statiken in diesem Verzeichnis sammeln:

python manage.py collectstatic

Schritt 11 - Konfigurieren von Nginx

Lassen Sie uns die Nginx-Konfigurationsdatei bearbeiten.

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

Lassen Sie uns den gesamten Inhalt löschen und durch den nächsten ersetzen.

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;
    }
}

Starten wir Nginx neu.

sudo service nginx restart

Und lass uns Gunicorn laufen lassen

gunicorn myproject.wsgi:application

Danach werden Sie feststellen, dass die Site bereits auf Port 80 verfügbar ist.

Schritt 12 - Supervisor konfigurieren

Damit die Site zu jeder Tageszeit verfügbar ist, muss ein Supervisor konfiguriert werden, der als Dienst im Speicher hängt und überwacht, dass die Site immer funktioniert.

sudo apt-get install supervisor

Für einen stabilen Betrieb von Gunicorn müssen Sie die Konfigurationsdatei erstellen. Es befindet sich neben der Datei, die für unsere Webanwendung gestartet wird.

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

Fügen wir die folgenden Konfigurationsinformationen hinzu:

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

Das heißt, wir haben angegeben, an welchen Port wir binden und welcher Benutzer den Prozess startet. Und auch die Anzahl der Arbeitsgänge. In diesem Fall sind es drei davon. Berechnet nach folgender Formel:

Arbeiter = Ncpu + 1

Dann erstellen wir die Konfiguration des Supervisors selbst

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

Schreiben wir die folgenden Einstellungen hinein

[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

Beginnen wir nun mit dem Supervisor. Es gibt einen Vorbehalt bei der Installation von Supervisor. Es wurde nach der Installation nicht als Dienst gestartet. Daher müssen Sie es zwangsweise zum Start hinzufügen und manuell starten, wenn Sie den Server nicht neu starten möchten.

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

Nun, dann können Sie die Konfigurationen aktualisieren, den Status der Site-Anwendung und ihren Neustart überprüfen.

supervisorctl reread
supervisorctl update
supervisorctl status myproject
supervisor restart myproject

Beim Neustart des Servers startet alles automatisch

Notiz

Wenn Sie die Projektdateien geändert haben, müssen Sie gunicorn neu starten. Aktivieren Sie dazu einfach die virtuelle Umgebung und verwenden Sie den Befehl killall

source ~/myprojectenv/bin/activate
sudo killall gunicorn

Supervisor startet Gunicorn nach diesem Befehl automatisch, sodass Sie sich keine Sorgen machen müssen, dass der Server für längere Zeit ausfällt. Nicht mehr als ein zweiter Ausfall.

Für Django empfehle ich Timeweb VDS-Server
.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

A
  • 28. Oktober 2017 09: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. Oktober 2017 09:55

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

A
  • 28. Oktober 2017 10:15

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

Evgenii Legotckoi
  • 28. Oktober 2017 10:21

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

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

sudo pip install django psycopg2





По моему sudo здесь лишнее. Разве sudo устанавливает внутри виртуального окружения?
Evgenii Legotckoi
  • 24. August 2018 03:00

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

Илья Чичак
  • 11. Dezember 2018 09:25

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

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

Evgenii Legotckoi
  • 11. Dezember 2018 09:28

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

S
  • 25. Juni 2020 14:02

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

Evgenii Legotckoi
  • 25. Juni 2020 14:40

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

Илья Чичак
  • 25. Juni 2020 15:24
  • (bearbeitet)

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

sudo apt install python3-venv

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

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

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

S
  • 25. Juni 2020 15:37

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

S
  • 25. Juni 2020 15:56

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

АМ
  • 20. Dezember 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'

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

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

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

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

Илья Чичак
  • 20. Dezember 2020 12:47

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

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

АМ
  • 20. Dezember 2020 14:09

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

Илья Чичак
  • 20. Dezember 2020 20:01

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

Alexander
  • 20. Januar 2021 15:40

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

/home/user/myprojectenv/myproject/myproject//static
IscanderChe
  • 18. Februar 2021 05:32

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

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

Илья Чичак
  • 18. Februar 2021 05:39

python manage.py migrate

IscanderChe
  • 18. Februar 2021 06:07

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

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

Илья Чичак
  • 18. Februar 2021 06:19

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

python manage.py makemigrations

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

IscanderChe
  • 18. Februar 2021 06:25

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

IscanderChe
  • 18. Februar 2021 09:04

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

Илья Чичак
  • 18. Februar 2021 10:18
  • (bearbeitet)

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

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

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

IscanderChe
  • 18. Februar 2021 11:14

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

Илья Чичак
  • 18. Februar 2021 11:51
  • (bearbeitet)

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

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

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

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

IscanderChe
  • 18. Februar 2021 12:04

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

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

IscanderChe
  • 20. Februar 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. Februar 2021 15:39

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

IscanderChe
  • 21. Februar 2021 03:17

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

sudo: pip: command not found

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

sudo apt-get install python3-pip

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

Илья Чичак
  • 21. Februar 2021 10:55

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

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

IscanderChe
  • 21. Februar 2021 13:18

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

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

IscanderChe
  • 22. Februar 2021 03:14
  • (bearbeitet)

На шаге 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. Februar 2021 03:44

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

Что не так?

Илья Чичак
  • 22. Februar 2021 05:00

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

IscanderChe
  • 22. Februar 2021 05:07
  • (bearbeitet)

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

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. Februar 2021 05: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. Februar 2021 09:09

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

IscanderChe
  • 23. Februar 2021 13:15

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

D
  • 2. März 2021 03:00

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

L
  • 29. Mai 2021 21: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. Mai 2021 12:12

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

L
  • 30. Mai 2021 13:18

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

sudo service supervisor start

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

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

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken