Как организовать правильное взаимодействие контейнеров nginx, и node fronted (nginx virtual host), node backend (nginx reverse proxy)?

Я делаю проект, состоящий из Nginx, frontend, который при помощи вебпак собирает мне html и js файлы в отдельную папку, которую я хочу добавлять в location nginx, и бэкенд, который будет вероятно на ноде, и подключается через reverse proxy.

Вопрос состоит в том, как грамотно организовать контейнеризацию и хранение в репозиториях. Мне нужно это разворачивать на удалённом сервере, что я планирую делать через github-actions (очень хотелось бы, потому что я пока новичок, и такие вещи, как jenkins, я пока не освоил).

Так вот, стоит ли, к примеру, фронт и бэк побить на разные репозитории, настроить каждому отдельный воркфлоу? Стоит ли билдить фронтенд в контейнере, что очень хотелось бы, чтобы нода с зависимостями была изолирована от сервера? Как при этом перезапускать (и нужно ли) nginx в контейнере? Стоит ли вообще nginx в контейнер пихать, что тоже очень хотелось бы (при том, что я буду собирать его через make)?

Может, вообще было бы разумнее всё в одном репозитории хранить, но сделать несколько dockerfile, docker-compose?

Вопросы возникают в основном из-за отсутствия опыта и каши в голове. В самих принципах я более менее разобрался, настроив один github-actions, который разворачивает на моём сервере контейнер.

Хотелось бы получить развёрнутый ответ, чтобы привести все мысли в порядок =)

Дополнительно:

Ответы:

Стоит ли билдить фронтенд в контейнере, что очень хотелось бы, чтобы нода с зависимостями была изолирована от сервера?

стоит

фронт и бэк побить на разные репозитории, настроить каждому отдельный воркфлоу?

лучше разнести, да, чтобы потом изменения фронта не тащили деплой фронта и наоборот, ну тут все и так понятно

Может, вообще было бы разумнее всё в одном репозитории хранить, но сделать несколько dockerfile, docker-compose?

это можно (иногда очень удобно, как в моем проекте, где всего бек сервиса и 1 фронт), но деплой и воркфлоу будут разные все равно

Стоит ли вообще nginx в контейнер пихать, что тоже очень хотелось бы (при том, что я буду собирать его через make)?

Да вполне, максимально близко к проду

Как при этом перезапускать (и нужно ли) nginx в контейнере?

Нжинкс сам не перезапускают, просто контейнер перезапустить

 

Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

 

    • Как организовать правильное взаимодействие контейнеров nginx, и node fronted (nginx virtual host), node backend (nginx reverse proxy)?Есть ответ
    • 07.04.2024
    Ответить

    Для организации правильного взаимодействия контейнеров nginx, node fronted и node backend через nginx virtual host и reverse proxy, необходимо следовать определенным шагам.

    1. Настройка контейнера nginx:
    Сначала необходимо создать контейнер nginx, в котором будут настроены виртуальные хосты для fronted и backend. Для этого в файле конфигурации nginx (обычно это файл nginx.conf) необходимо добавить блоки server для каждого виртуального хоста. Например, для fronted:

    server {
        listen 80;
        server_name fronted.example.com;
     
        location / {
            proxy_pass http://node_fronted:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    А для backend:

    server {
        listen 80;
        server_name backend.example.com;
     
        location / {
            proxy_pass http://node_backend:4000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    2. Настройка контейнеров node fronted и node backend:
    Для контейнеров node fronted и node backend необходимо настроить их приложения так, чтобы они слушали порты, указанные в конфигурации nginx. Например, для node fronted:

    const express = require('express');
    const app = express();
     
    app.get('/', (req, res) => {
        res.send('Fronted App');
    });
     
    app.listen(3000, () => {
        console.log('Fronted App is running on port 3000');
    });

    А для node backend:

    const express = require('express');
    const app = express();
     
    app.get('/', (req, res) => {
        res.send('Backend App');
    });
     
    app.listen(4000, () => {
        console.log('Backend App is running on port 4000');
    });

    3. Сборка и запуск контейнеров:
    После настройки всех компонентов, необходимо собрать и запустить контейнеры с помощью Docker Compose (или другого инструмента управления контейнерами). В файле docker-compose.yml необходимо указать настройки для каждого контейнера, а также их взаимодействие.

    4. Проверка работоспособности:
    После запуска контейнеров можно проверить работоспособность приложения, обратившись к соответствующим виртуальным хостам в браузере. Например, открыв fronted.example.com и backend.example.com должны отображаться соответствующие приложения.

    Следуя этим шагам, вы сможете успешно организовать взаимодействие контейнеров nginx, node fronted и node backend через nginx virtual host и reverse proxy.

Оставить комментарий