Быстрый способ смены веб-серверов

У меня есть 2 веб-сервера CentOS с 2 разными хостами

  • 1 в настоящее время работает ( Сервер A )
  • Второй заменит первый ( Сервер B )

Наш домен в настоящее время указывает на Сервер A

В обычном сценарии для переключения между серверами, мы просто обновим DNS домена для переключения между серверами. Это действие, очевидно, может занять до 72 часов.

Поскольку мы запускаем новую платформу на сервере B , мне нужен план на случай непредвиденных обстоятельств, который позволит мне переключаться между двумя серверами на одном сервере. -fly вместо того, чтобы ждать распространения DNS. У меня нет опыта работы с балансировщиками нагрузки, Проблема в том, что что бы я ни делал, при вызове localhost / index.php получаю пустую страницу. Я использую две отдельные службы для: ...

У меня есть приложение Laravel, которое я планирую развернуть на Docker Swarm. Проблема в том, что что бы я ни делал, при вызове localhost / index.php получаю пустую страницу.

Я использую две отдельные службы для:

  1. Laravel App (php-fpm)
  2. Nginx

Некоторые примечания, которые могут быть вам полезны, помогая мне.

  • Контейнеры не разделяют ничего, кроме тома для статических файлов
  • Я могу проверить, что запросы принимаются php-fpm
  • Нет ошибок ни в одном из журналов, и все, что я получаю, это 200 кодов ответов как в журналах nginx, так и в php-fpm
  • Даже простой дает то же результат, так что это не проблема laravel

Это файлы Docker, из которых я создаю свои образы.

// Dockerfile for `Nginx`
FROM nginx

ADD ./api.conf /etc/nginx/conf.d/

RUN rm /etc/nginx/conf.d/default.conf

CMD ["nginx", "-g", "daemon off;"]

А это файл конфигурации nginx:

server {
    listen 80;
    server_name _;
    root /app/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass api:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

И это будет файл Docker для моего образа laravel:

FROM ubuntu:bionic

RUN apt update
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:ondrej/php

RUN apt install -y php7.2-fpm
RUN apt install -y php7.2-pgsql
RUN apt install -y php7.2-mongodb
RUN apt install -y php7.2-redis
RUN apt install -y php7.2-mbstring
RUN apt install -y php7.2-xml
RUN apt install -y php7.2-zip
RUN apt install -y php7.2-curl
RUN apt install -y ffmpeg

RUN mkdir /run/php

COPY . /app

RUN chmod 0777 /app/storage -R

RUN sed  -i 's/pm.max_children = 5/pm.max_children = 10/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.start_servers = 2/pm.start_servers = 4/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 3/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 5/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/;pm.max_requests = 500/pm.max_requests = 500/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|;access.log = log/$pool.access.log|access.log = /proc/self/fd/2|g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|;php_admin_value[error_log] = /var/log/fpm-php.www.log|php_admin_value[error_log] = /proc/self/fd/2|g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|error_log = /var/log/php7.2-fpm.log|error_log = /proc/self/fd/2|g' /etc/php/7.2/fpm/php-fpm.conf && \
    sed  -i 's|listen = /run/php/php7.2-fpm.sock|listen = "9000"|g' /etc/php/7.2/fpm/pool.d/www.conf

WORKDIR /app

EXPOSE 9000

CMD ["php-fpm7.2", "-F"]

И последняя мысль - это мой файл docker-compose.yml:

version: "3"
services:
  nginx:
    image: hamed/nginx
    ports: 
      - 80:80
    volumes:
      - my-files:/app/public/files
  api:
    image: hamed/api
    volumes:
      - my-files:/app/public/files

Обновление: Результат lsof -Pn | grep LISTEN | grep ': 80' по запросу @ GerardH.Pille:

nginx      13     root    6u     IPv4             206078      0t0    TCP *:80 (LISTEN)

Обновление 2: Это журналы моей службы nginx :

10.255.0.2 - - [21/Aug/2018:12:27:32 +0000] "GET /index.php HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" "-"

И из моей службы php-fpm :

10.0.0.2 -  21/Aug/2018:12:27:32 +0000 "- " 200
1
задан 21 August 2018 в 15:31
1 ответ

Хорошо, после многих часов отладки и поиска я обнаружил, что следующие две строки в моей конфигурации nginx объясняют, почему не работает и почему не отображаются ошибки:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;

nginx контейнер не передавал запрошенное имя файла в php-fpm . Имейте в виду, что для работы без фактического размещения index.php в URL-адресе вам необходимо иметь файл index.php внутри корневой папки nginx. Он просто должен существовать. Ничего страшного, если он пустой.

1
ответ дан 3 December 2019 в 23:13

Теги

Похожие вопросы