Попытка заставить прокси-сервер nginx работать на портах 80 и 443 для node.js с докером

Поэтому я пытаюсь следовать примеру здесь для создания прокси-контейнера nginx, который будет обрабатывать все остальные контейнеры. Я пробовал следовать формату, который настраивает переменные среды, чтобы сайты работали через nginx-proxy. До сих пор я развернул сайт только в том случае, если я использую порт, отличный от моего 80 или 443. Мне было интересно, могу ли я получить какую-либо помощь по этому поводу. Я вставил два своих файла ниже.

Докерфайл

FROM node:carbon                                                                                                      
# Create app directory
WORKDIR ./home/username/website/production

COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

докер-compose.yml

version: "3"                                                                                                          
    services:
        website:
            build: .
            volumes:
                - .:/home/user/website
                - ./home/user/website/node_modules
            ports:
                - "8080:8080"
            expose:
                - 80
            environment:
                VIRTUAL_HOST: domain.com
                LETSENCRYPT_HOST: domain.com
                LETSENCRYPT_EMAIL: domain.com
    networks:
        default:
            external:
                name: nginx-proxy      

Я пытался прослушивать порты 80 и 443. Однако nginx возвращает ошибку 503. Поэтому мне было интересно, может ли кто-нибудь пролить свет на то, как это должно быть настроено.


person Community    schedule 19.05.2018    source источник
comment
Работает ли он на порту 8080? Я ничего не вижу в вашем docker-compose.yml файле, отображающем 80 или 443 на порт 8080, который прослушивает ваше приложение узла   -  person brandon-barnett    schedule 20.05.2018
comment
Кроме того, вы работаете с узлом? Какой порт слушает ваше приложение? Вам нужно сопоставить 443/80 с этим портом   -  person brandon-barnett    schedule 20.05.2018
comment
Я работаю на порту 80 прямо сейчас, поэтому app.listen(80), и когда я заставил его работать с портом 8080, я добавил строку порта в файл docker-compose. На самом деле я думаю просто попробовать это через обычный докер, как на GitHub контейнера докеров.   -  person    schedule 20.05.2018


Ответы (1)


Итак, я развернул два отдельных контейнера, один как domain.com, а другой как subdomain.domain.com, причем оба прослушивают порт 80. Сайт даже по умолчанию использует https, как и ожидалось, поскольку nginx обрабатывает это. Вместо того, чтобы использовать файл docker-compose.yml, я переделал nginx-proxy, следуя инструкциям страница github, а не блог с использованием обычного докера. После этого я развернул, используя их формат, следующим образом:

docker run --detach \
    --name your-proxyed-app
    --env "VIRTUAL_HOST=subdomain.yourdomain.tld" \
    --env "LETSENCRYPT_HOST=subdomain.yourdomain.tld" \
    --env "[email protected]" \
    nginx

Их можно найти на их wiki здесь. Я думаю, что пока буду избегать docker-compose, по крайней мере, до тех пор, пока не узнаю больше о самом docker, но если кто-нибудь может пролить свет на то, почему настройка docker-compose не работает, это было бы оценено.

person Community    schedule 20.05.2018