Я настраиваю живую и тестовую среду для веб-сайта, который я размещаю.В настоящее время я сталкиваюсь с проблемами и не могу понять, почему это происходит.Я использую MySQL, Nginx и PHP-fpm контейнер.Я хочу, чтобы обе среды имели свою собственную группу контейнеров.
Группа контейнеров A - это живая среда, а B будет ссылаться на тестовую среду.Запомните эти ссылки, поскольку они будут возвращаться в коде, представленном ниже.
Я изменил порты PHP-fpm и MySQL для группы B, чтобы они не мешали группе A. Для MySQL это работает(до этого момента) но контейнер PHP-fpm, похоже, не хочет работать.
Единственный раз, когда у меня была группа контейнеров B, функционирующая должным образом, это когда я менял свои extra_hosts в моем docker-compose для A, нотогда A перестанет работать.
docker-compose.yml для A
Same as the file below but uses port 9000:9001 for PHP
docker-compose.yml для B
version: '3.7'
networks:
web:
external: true
internal:
external: false
services:
# MySQL container code sits here but I think there is nothing wrong
with that one
php:
build: ./.docker/php-fpm
ports:
- "9002:9003"
volumes:
- ./:/var/www/symfony:cached
- ./logs/symfony:/var/www/symfony/var/log:cached
links:
- db
restart: always
extra_hosts:
- "docker-host.localhost:127.0.0.1" # Changing this to test-docker-host.localhost:127.0.0.1 doesn't work either.
networks:
- internal
labels:
- traefik.enable=false
nginx:
build: ./.docker/nginx
links:
- php
volumes:
- ./:/var/www/symfony:cached
- ./logs/nginx:/var/log/nginx:cached
restart: always
networks:
- internal
- web
labels:
- traefik.backend=Test-Website
- traefik.frontend.rule=Host:test.website.com
- traefik.frontend.redirect.regex=^https?://website.com/(.*)
- traefik.frontend.redirect.replacement=https://test.website.com/$${1}
- traefik.docker.network=web
- traefik.port=80
depends_on:
- db
Nginx Dockerfile (B)
FROM alpine:3.8
RUN apk add --update nginx
RUN rm -rf /var/cache/apk/* && rm -rf /tmp/*
ADD nginx.conf /etc/nginx/
ADD symfony.conf /etc/nginx/conf.d/
RUN rm -rf /etc/nginx/conf.d/default.conf
RUN echo "upstream php-upstream { server php:9003; }" > /etc/nginx/conf.d/upstream.conf # A uses php:9001
RUN adduser -D -g '' -G www-data www-data
RUN chown -R www-data.www-data /var/tmp/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
PHP-fpm Dockerfile (B)
FROM alpine:3.8
RUN apk add --update \
php7-fpm \
php7-apcu \
php7-ctype \
php7-curl \
php7-dom \
php7-gd \
php7-iconv \
php7-imagick \
php7-json \
php7-intl \
php7-mcrypt \
php7-fileinfo\
php7-mbstring \
php7-opcache \
php7-openssl \
php7-pdo \
php7-pdo_mysql \
php7-mysqli \
php7-xml \
php7-zlib \
php7-phar \
php7-tokenizer \
php7-session \
php7-simplexml \
php7-xdebug \
php7-zip \
make \
curl \
nodejs \
yarn \
autoconf \
libtool \
automake \
build-base \
nasm \
pkgconfig \
zlib-dev \
libpng-dev \
g++
RUN rm -rf /var/cache/apk/* && rm -rf /tmp/* && \
curl --insecure https://getcomposer.org/composer.phar -o /usr/bin/composer && chmod +x /usr/bin/composer
ADD symfony.ini /etc/php7/conf.d/
ADD symfony.ini /etc/php7/cli/conf.d/
ADD xdebug.ini /etc/php7/conf.d/
ADD symfony.pool.conf /etc/php7/php-fpm.d/
CMD ["php-fpm7", "-F"]
WORKDIR /var/www/symfony
EXPOSE 9003 # A exposes 9001
Symfony.pool.conf (B) Я изменил порт прослушивания fpm здесь
; A exposes :9001
listen = 0.0.0.0:9003
Яне появляется никаких ошибок, за исключением 504 тайм-аутов шлюза через определенное время.Я хочу иметь возможность запускать обе среды на одном и том же сервере, но с отдельными контейнерами в качестве своих служб.