Я уже развернул приложение Django/Wagtail с помощью Supervisor, Gunicorn и Nginx (в Debian Buster), поэтому я могу связаться с ним с помощью http://хх.ххх.ххх.ххх:8090.
/etc/nginx/доступные сайты/cms
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 8090;
слушать [::]:8090 ipv6only=on;
error_log /home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-error.log;
журнал доступа /home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-access.log;
location = /favicon.ico { access_log off; log_not_found выключен; }
местоположение /статическое/ {
корень /home/www.mysite.com/www/my-site/cms/admin_panel;
}
местоположение /медиа/ {
корень /home/www.mysite.com/www/my-site/cms/admin_panel;
}
место расположения / {
включить proxy_params;
proxy_pass http://unix:/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/run/gunicorn.sock;
}
}
/etc/supervisor/conf.d/guni-mysite-admin.conf
[программа:guni-mysite-admin]
command=/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/bin/gunicorn admin_panel.wsgi:application --config /home/www.mysite.com/.local/share/virtualenvs/cms -WqsZ9qOt/etc/gunicorn/conf.py
пользователь = www.mysite.com
автозапуск = истина
автоматический перезапуск = истина
/etc/supervisor/conf.d/nginx-mysite-admin.conf
[программа: nginx-mysite-admin]
command=/usr/sbin/nginx -g "демон выключен;"
автозапуск = истина
автоматический перезапуск = истина
stderr_logfile=/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/nginx-error.log
stdout_logfile=/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/nginx-access.log
stderr_logfile_maxbytes = 2 МБ
stdout_logfile_maxbytes = 2 МБ
/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/etc/gunicorn/conf.py
рабочие = 3
поддерживать активность = 5
пользователь = 'www.mysite.com'
proc_name = 'admin_panel'
уровень журнала = 'ошибка'
errorlog = '/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-error.log'
accesslog = '/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-access.log'
bind = 'unix:/home/www.mysite.com/.local/share/virtualenvs/cms-WqsZ9qOt/run/gunicorn.sock'
raw_env = ['DJANGO_SETTINGS_MODULE=admin_panel.settings.production']
pythonpath = '/home/www.mysite.com/www/mysite/cms/admin_panel'
Таким же образом я добавил еще 2 приложения Django. К сожалению, Супервайзер не может поднять их. Иногда запускается 1 из 3, но в большинстве случаев ни один из них не работает. В случае, если он работает, он создает 3 процесса (не знаю, если так и должно быть).
$ судо lsof-i:8090
КОМАНДА PID ПОЛЬЗОВАТЕЛЬ ТИП FD УСТРОЙСТВО РАЗМЕР/ВЫКЛ НАЗВАНИЕ УЗЛА
nginx 3631 root 16u IPv4 961301189 0t0 TCP *:8090 (СЛУШАТЬ)
nginx 3631 root 17u IPv6 961301190 0t0 TCP *:8090 (СЛУШАТЬ)
nginx 3632 www-data 16u IPv4 961301189 0t0 TCP *:8090 (СЛУШАТЬ)
nginx 3632 www-data 17u IPv6 961301190 0t0 TCP *:8090 (СЛУШАТЬ)
nginx 3633 www-data 16u IPv4 961301189 0t0 TCP *:8090 (СЛУШАТЬ)
nginx 3633 www-data 17u IPv6 961301190 0t0 TCP *:8090 (СЛУШАТЬ)
Журнал ошибок Nginx дает 98: Адрес уже используется, даже на порту 81 (он был выбран как порт по умолчанию, потому что Apache использует 80), который не используется. Apache не должен быть проблемой, потому что он не работает, даже когда Apache выключен.
/var/журнал/nginx/error.log
...
06.08.2021 12:41:54 [появление] 24927#24927: bind() to [::]:4020 не удалось (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24927#24927: bind() to [::]:8090 не удалось (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24927#24927: bind() to [::]:81 не удалось (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24927#24927: bind() to [::]:8070 не удалось (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24927#24927: сбой привязки() к [::]:8080 (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24927#24927: bind() to [::]:4030 не удалось (98: адрес уже используется)
06.08.2021, 12:41:54 [появление] 24928#24928: до сих пор не удалось связать()
...
Вывод — #nginx-T
nginx: синтаксис файла конфигурации /etc/nginx/nginx.conf в порядке
nginx: проверка файла конфигурации /etc/nginx/nginx.conf прошла успешно
# файл конфигурации /etc/nginx/nginx.conf:
www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;
События {
worker_connections 768;
# multi_accept on;
}
http {
##
# Основные настройки
##
отправить файл включен;
tcp_nopush включен;
tcp_nodelay включен;
keepalive_timeout 65;
типы_хэш_макс_размер 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
включить /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Настройки SSL
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Удаление SSLv3, ссылка: POODLE
ssl_prefer_server_ciphers включен;
##
# Настройки ведения журнала
##
журнал_доступа /var/log/nginx/access.log;
журнал_ошибок /var/log/nginx/error.log;
##
# Настройки Gzip
##
gzip включен;
# gzip_vary on;
# gzip_proxyed любой;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Конфигурации виртуального хоста
##
включить /etc/nginx/conf.d/*.conf;
включить /etc/nginx/sites-enabled/*;
}
#почта {
# # См. пример сценария аутентификации по адресу:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# сервер {
# слушать localhost:110;
# протокол pop3;
# прокси включен;
# }
#
# сервер {
# слушать localhost:143;
# протокол imap;
# прокси включен;
# }
#}
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-auth-pam.conf:
модули load_module/ngx_http_auth_pam_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-dav-ext.conf:
модули load_module/ngx_http_dav_ext_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-echo.conf:
модули load_module/ngx_http_echo_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-geoip.conf:
модули load_module/ngx_http_geoip_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-image-filter.conf:
модули загрузки_модуля/ngx_http_image_filter_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-subs-filter.conf:
модули load_module/ngx_http_subs_filter_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-upstream-fair.conf:
модули load_module/ngx_http_upstream_fair_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-xslt-filter.conf:
модули load_module/ngx_http_xslt_filter_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-mail.conf:
модули load_module/ngx_mail_module.so;
# файл конфигурации /etc/nginx/modules-enabled/50-mod-stream.conf:
модули load_module/ngx_stream_module.so;
# файл конфигурации /etc/nginx/mime.types:
типы {
текст/html html htm shtml;
текст/CSS CSS;
текст/xml xml;
изображение/gif gif;
изображение/jpeg jpeg jpg;
приложение/javascript js;
приложение/атом+xml атом;
приложение/rss+xml rss;
текст/математика ммл;
текст/простой текст;
текст/vnd.sun.j2me.app-дескриптор jad;
текст/vnd.wap.wml wml;
текст/x-компонент htc;
изображение/png png;
изображение/tiff tif tiff;
изображение/vnd.wap.wbmp wbmp;
изображение/значок x ico;
изображение/x-jng jng;
изображение/x-ms-bmp bmp;
изображение/svg+xml svg svgz;
изображение/веб-сайт;
приложение/шрифт-woff woff;
приложение/java-архив jar war ear;
приложение/json json;
приложение/mac-binhex40 hqx;
документ приложения/msword;
заявка/pdf pdf;
приложение/постскриптум ps eps ai;
приложение/rtf rtf;
приложение /vnd.apple.mpegurl m3u8;
приложение/vnd.ms-excel xls;
приложение /vnd.ms-fontobject eot;
приложение /vnd.ms-powerpoint ppt;
приложение /vnd.wap.wmlc wmlc;
application/vnd.google-earth.kml+xml кмл;
application/vnd.google-earth.kmz кмз;
приложение /x-7z-сжатый 7z;
приложение /x-cocoa cco;
приложение/x-java-архив-diff jardiff;
приложение/x-java-jnlp-файл jnlp;
запуск приложения /x-makeself;
приложение/x-perl pl pm;
приложение/x-pilot prc pdb;
приложение /x-rar-сжатый rar;
application/x-redhat-package-manager об/мин;
приложение /х-море море;
приложение /x-shockwave-flash swf;
приложение /x-stuffit сидеть;
приложение/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
приложение /x-xpinstall xpi;
приложение/xhtml+xml xhtml;
приложение/xspf+xml xspf;
приложение/zip-архив;
приложение/октет-поток bin exe dll;
приложение/октетный поток deb;
приложение/октет-поток dmg;
приложение/октетный поток iso img;
приложение/октет-поток msi msp msm;
приложение/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
приложение/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
приложение/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
аудио/миди мид миди кар;
аудио/мпег мп3;
аудио/огг огг;
аудио/x-m4a m4a;
аудио/x-realaudio ra;
видео/3gpp 3gpp 3gp;
видео/mp2t ц;
видео/mp4 mp4;
видео/mpeg mpeg mpeg mpg;
видео/быстрое перемещение;
видео/вебм вебм;
видео/x-flv flv;
видео/x-m4v m4v;
видео/x-мнг мнг;
видео/x-ms-asf asx asf;
видео/x-ms-wmv wmv;
видео/x-msvideo avi;
}
# файл конфигурации /etc/nginx/conf.d/timeout.conf:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
# файл конфигурации /etc/nginx/sites-enabled/admin.mysite_2:
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 4020;
слушать [::]:4020 ipv6only=on;
error_log /home/www.mysite_2/.local/share/virtualenvs/cms-CiomF2CE/var/log/gunicorn-error.log;
журнал доступа /home/www.mysite_2/.local/share/virtualenvs/cms-CiomF2CE/var/log/gunicorn-access.log;
# add_header 'Access-Control-Allow-Origin' '*';
# add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
location = /favicon.ico { access_log off; log_not_found выключен; }
местоположение /статическое/ {
корень /home/mysite_2/www/translator-app-python/cms/wagtail_cms;
}
местоположение /медиа/ {
корень /home/mysite_2/www/translator-app-python/cms/wagtail_cms;
}
место расположения / {
включить proxy_params;
proxy_pass http://unix:/home/mysite_2/.local/share/virtualenvs/cms-CiomF2CE/run/gunicorn.sock;
}
}
# файл конфигурации /etc/nginx/proxy_params:
proxy_set_header Хост $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $ схема;
# файл конфигурации /etc/nginx/sites-enabled/cms:
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 8090;
слушать [::]:8090 ipv6only=on;
error_log /home/mysite_1/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-error.log;
access_log /home/mysite_1/.local/share/virtualenvs/cms-WqsZ9qOt/var/log/gunicorn-access.log;
# add_header 'Access-Control-Allow-Origin' '*';
# add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
location = /favicon.ico { access_log off; log_not_found выключен; }
местоположение /статическое/ {
корень /home/mysite_1/www/kc-site/cms/admin_panel;
}
местоположение /медиа/ {
корень /home/wmysite_1/www/kc-site/cms/admin_panel;
}
место расположения / {
включить proxy_params;
proxy_pass http://unix:/home/mysite_1/.local/share/virtualenvs/cms-WqsZ9qOt/run/gunicorn.sock;
}
}
# файл конфигурации /etc/nginx/sites-enabled/default:
##
# Вам следует просмотреть следующие URL-адреса, чтобы получить четкое представление
# файлов конфигурации Nginx, чтобы полностью раскрыть всю мощь Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удалят этот файл с сайтов с поддержкой/ и
# оставить его как ссылку на доступных сайтах, где он и дальше будет
# обновлено командой упаковки nginx.
#
# Этот файл будет автоматически загружать файлы конфигурации, предоставленные другими
# приложения, такие как Drupal или Wordpress. Эти приложения будут сделаны
# доступен по пути с этим именем пакета, например /drupal8.
#
# Более подробные примеры см. в /usr/share/doc/nginx-doc/examples/.
##
# Конфигурация сервера по умолчанию
#
сервер {
# новый синтаксис
слушать 81 default_server;
слушать [::]:81 ipv6only=on default_server;
# конфигурация SSL
#
# слушать 443 ssl default_server;
# слушать [::]:443 ssl default_server;
#
# Примечание. Вы должны отключить gzip для трафика SSL.
# См.: https://bugs.debian.org/773332
#
# Прочтите ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
# См.: https://bugs.debian.org/765782
#
# Самоподписанные сертификаты, созданные пакетом ssl-cert
# Не используйте их на рабочем сервере!
#
# включить фрагменты/snakeoil.conf;
корень /var/www/html/Nginx;
# Добавьте index.php в список, если вы используете PHP
index index.html index.htm index.nginx-debian.html index.php ;
имя сервера _;
место расположения / {
# Сначала пытаемся обслужить запрос как файл, затем
# в качестве каталога, затем вернуться к отображению 404.
try_files $uri $uri/ =404;
}
# передать PHP-скрипты на сервер FastCGI ( neu )
#
расположение ~ \.php$ {
включить фрагменты/fastcgi-php.conf;
включить /etc/nginx/conf.d/*.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
# передать PHP-скрипты на сервер FastCGI
#
#местоположение ~ \.php$ {
# включить сниппеты/fastcgi-php.conf;
#
# # С php-fpm (или другими сокетами unix):
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # С php-cgi (или другими сокетами tcp):
# # fastcgi_pass 127.0.0.1:9000;
#}
# запретить доступ к файлам .htaccess, если корневой каталог Apache
# совпадает с nginx
#
#местоположение ~ /\.ht {
# запретить все;
#}
}
# Конфигурация виртуального хоста для example.com
#
# Вы можете переместить это в другой файл в разделе sites-available/ и указать символическую ссылку, которая
# на site-enabled/, чтобы включить его.
#
# сервер {
# слушать 80;
# слушать [::]:80;
#
# имя_сервера example.com;
#
# корень /var/www/example.com;
# индекс index.html;
#
# место расположения / {
# try_files $uri $uri/ =404;
# }
#}
# файл конфигурации /etc/nginx/snippets/fastcgi-php.conf:
# регулярное выражение для разделения $uri на $fastcgi_script_name и $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
# Проверяем существование PHP-скрипта перед его передачей
try_files $fastcgi_script_name = 404;
# Обойти тот факт, что try_files сбрасывает $fastcgi_path_info
# см.: http://trac.nginx.org/nginx/ticket/321
установить $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
включить fastcgi.conf;
# файл конфигурации /etc/nginx/fastcgi.conf:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $схема;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param ИМЯ_СЕРВЕРА $server_name;
# Только PHP, требуется, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# файл конфигурации /etc/nginx/sites-enabled/kcanalytics:
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 8070;
слушать [::]:8070 ipv6only=on;
корень /home/mysite_1/www/kc-site/Open-Web-Analytics;
индекс index.php index.html index.htm;
место расположения / {
try_files $uri $uri/ =404;
}
расположение ~ \.php$ {
включить фрагменты/fastcgi-php.conf;
включить /etc/nginx/conf.d/*.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
error_log /var/log/nginx/kcanalyticslog/kcanalytics-error.log;
журнал_доступа /var/log/nginx/kcanalyticslog/kcanalytics-access.log;
}
# файл конфигурации /etc/nginx/sites-enabled/kcclient:
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 8080;
слушать [::]:8080 ipv6only=on;
корень /var/www/html/Nginx;
индекс index.nginx-debian.html;
место расположения / {
proxy_pass http://localhost:3000;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение «обновление»;
proxy_set_header Хост $host;
proxy_cache_bypass $http_upgrade;
}
}
# файл конфигурации /etc/nginx/sites-enabled/phrases-api.mysite_2:
сервер {
имя_сервера хх.ххх.ххх.ххх;
слушать 4030;
слушать [::]:4030 ipv6only=on;
error_log /home/mysite_2/.local/share/virtualenvs/api-dAF0CRIW/var/log/gunicorn-error.log;
access_log /home/mysite_2/.local/share/virtualenvs/api-dAF0CRIW/var/log/gunicorn-access.log;
# add_header 'Access-Control-Allow-Origin' '*';
# add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
location = /favicon.ico { access_log off; log_not_found выключен; }
местоположение /статическое/ {
корень /home/mysite_2/www/translator-app-python/api/translator_rest_api;
}
местоположение /медиа/ {
корень /home/mysite_2/www/translator-app-python/api/translator_rest_api;
}
место расположения / {
включить proxy_params;
proxy_pass http://unix:/home/mysite_2/.local/share/virtualenvs/api-dAF0CRIW/run/gunicorn.sock;
}
}