UMGUM.COM 

Шаблон для web-сервера стенда ( Шаблон конфигурации web-сервера тестового стенда "Docker + Bash". )

4 мая 2019  (обновлено 17 июня 2019)

Эта публикация скрыта. Она доступна только по прямой ссылке.

OS: "Linux Debian 9 (Stretch)", "Linux Ubuntu 18.04 LTS (Bionic Beaver)".
Apps: "Bash", "Docker" & etc.

В этой заметке описан один из этапов реализации поставленной в вышестоящей публикации задачи автоматизации процедур развёртывания тестовых стендов из docker-контейнеров.

Перед запуском каждого контейнера "Nginx" каждого тестового стенда возможно понадобится добавить описание конфигурации сайта этого тестового стенда - автоматизируем это скриптом-шаблоном:

# vi /usr/local/etc/devops/lib/bunch-nginx-conf.sh.snippet


#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell).
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell).

cat << EOF > "${OPSROOT}/bunch/${SITENAME}/etc/nginx/conf.d/${FQDN[$I]}.conf"

$([ ${PHPFPM_ENABLE} ] && cat << EOS | sed "s/^[\t]/  /; s/^[ ]\{2\}//"
  # Перечисляем FastCGI-обработчиков PHP-интерпретатора
  upstream fcgi-upstream-${FQDN[$I]} {
    ip_hash;
    server unix:/var/run/php/php-fpm.sock max_fails=2 fail_timeout=300 weight=2;
    server bunch-${SITENAME}-php:9000 max_fails=2 fail_timeout=300 weight=1;
  }
EOS
)
$([ ${NODEJS_ENABLE} ] && cat << EOS | sed "s/^[\t]/  /; s/^[ ]\{2\}//"
  # Перечисляем точки входа NodeJS-приложения
  upstream nodejs-upstream-${FQDN[$I]} {
    server bunch-${SITENAME}-nodejs:8000 max_fails=2 fail_timeout=300;
  }
EOS
)

# Приём и обработка HTTP-трафика
server {
  server_name ${FQDN[$I]};
  listen 80;
  set \$root ${SITEROOT};
  root \$root;
  index index.html;
  location ~* /\.(ht|hg|sub|svn|git|env) { deny all; }
$([ ${PHPFPM_ENABLE} ] && cat << EOS
  set \$php_pass fcgi-upstream-${FQDN[$I]};
  location ~* \.php\$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass \$php_pass;
    fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
  }
EOS
)
$([ ${NODEJS_ENABLE} ] && cat << EOS
  set \$nodejs_pass nodejs-upstream-${FQDN[$I]};
  location / { try_files \$uri @nodejs; }
  location @nodejs {
    proxy_pass http://\$nodejs_pass;
    proxy_set_header Host \$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-Host \$host;
    proxy_set_header X-Forwarded-Server \$host;
    proxy_set_header X-NginX-Proxy true;
    # (включение поддержки HTTPv1.1 и WebSocket)
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_cache_bypass \$http_upgrade;
  }
EOS
)
}

# Приём и обработка HTTPS-трафика
server {
  server_name ${FQDN[$I]};
  listen 443 ssl http2;
  include ${FQDN_SSL_CONF[$I]};
  set \$root ${SITEROOT};
  root \$root;
  index index.html;
  location ~* /\.(ht|hg|sub|svn|git|env) { deny all; }
$([ ${PHPFPM_ENABLE} ] && cat << EOS
  set \$php_pass fcgi-upstream-${FQDN[$I]};
  location ~* \.php\$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass \$php_pass;
    fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
  }
EOS
)
$([ ${NODEJS_ENABLE} ] && cat << EOS
  set \$nodejs_pass nodejs-upstream-${FQDN[$I]};
  location / { try_files \$uri @nodejs; }
  location @nodejs {
    proxy_pass http://\$nodejs_pass;
    proxy_set_header Host \$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-Host \$host;
    proxy_set_header X-Forwarded-Server \$host;
    proxy_set_header X-NginX-Proxy true;
    # (включение поддержки HTTPv1.1 и WebSocket)
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_cache_bypass \$http_upgrade;
  }
EOS
)
$([ ${PMA_ENABLE} ] && cat << EOS
  # Приоритетный перехват запросов и проксирование к "phpMyAdmin"
  location ^~ /pma {
    # Обеспечиваем работу подсайта в произвольной виртуальной поддиректории
    location ~* /pma\$ { return 301 /pma/; }
    rewrite ^/pma(/.*)\$ \$1 break;
    proxy_redirect ~*^/(?!(pma))(.+)\$ /pma/\$2;
    #
    proxy_pass http://bunch-${SITENAME}-pma:80;
    proxy_set_header Host \$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-Host \$host;
    proxy_set_header X-Forwarded-Server \$host;
  }
EOS
)
}
EOF


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )