Как организовать доступ по доменным именам к разным проектам к vps?

Для организации доступа по доменным именам к разным проектам на VPS используйте ряд шагов, основанных на работе с Docker.

1. Установите Docker на ваш VPS. Docker - это платформа для контейнеризации, которая позволяет вам запускать приложения в изолированных контейнерах. Вы можете установить Docker на различные операционные системы, в том числе на Linux, Windows и macOS.

2. Зарегистрируйте доменное имя для вашего VPS. Для этого вам потребуется выбрать и зарегистрировать уникальное доменное имя у одного из регистраторов доменных имен. Вам также понадобится настроить DNS-записи для указания IP-адреса вашего VPS.

3. Создайте Docker образы для каждого из ваших проектов. Docker образы - это снимки, которые содержат все необходимое для запуска вашего приложения, включая код, библиотеки и зависимости. Подготовьте Dockerfile для каждого проекта, в котором описывается, как собрать контейнер для этого проекта.

4. Запустите контейнеры для каждого из ваших проектов. Для запуска контейнера используйте команду docker run. При этом вам понадобится определить порт, на котором будет запущено ваше приложение в контейнере, и привязать его к внешнему порту на вашем VPS.

Например, для запуска контейнера с проектом "Project A" на порту 80, используйте команду:

   docker run -d -p 80:80 project_a

Для запуска контейнера с проектом "Project B" на порту 8080, используйте команду:

   docker run -d -p 8080:8080 project_b

5. Настройте обратный прокси сервер для обработки входящих запросов по доменным именам и перенаправления их на соответствующие контейнеры. Несколько популярных вариантов для этого - это использование Nginx или Traefik.

- Если вы выбрали Nginx, создайте конфигурационный файл nginx.conf и добавьте следующие настройки, заменив example.com на ваше доменное имя и порты, на которых запущены ваши контейнеры:

   server {
     listen 80;
     server_name project-a.example.com;

     location / {
       proxy_pass http://localhost:80;
     }
   }

   server {
     listen 80;
     server_name project-b.example.com;

     location / {
       proxy_pass http://localhost:8080;
     }
   }

- Если вы выбрали Traefik, создайте файл docker-compose.yml со следующим содержимым, опять же заменяя example.com на ваше доменное имя:

   version: '3'

   services:
     reverse-proxy:
       image: traefik:v2.3
       command:
         - "--providers.docker=true"
         - "--providers.docker.exposedbydefault=false"
         - "--entrypoints.web.address=:80"
       ports:
         - "80:80"
         - "8080:8080"
       volumes:
         - "/var/run/docker.sock:/var/run/docker.sock"

   networks:
     default:
       external:
         name: traefik_default

   labels:
     - "traefik.http.routers.project-a.rule=Host(`project-a.example.com`)"
     - "traefik.http.routers.project-a.entrypoints=web"
     - "traefik.http.services.project-a.loadbalancer.server.port=80"

     - "traefik.http.routers.project-b.rule=Host(`project-b.example.com`)"
     - "traefik.http.routers.project-b.entrypoints=web"
     - "traefik.http.services.project-b.loadbalancer.server.port=8080"

6. Запустите обратный прокси сервер с использованием Docker. Если вы использовали Nginx, запустите контейнер с помощью команды docker run, указав путь к вашему конфигурационному файлу nginx.conf:

   docker run -d -p 80:80 -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx

Если вы использовали Traefik, запустите контейнер с помощью команды docker-compose up -d -f /path/to/docker-compose.yml.

7. Настройте DNS-записи для соответствия доменных имен вашему VPS IP-адресу. Для этого вам потребуется добавить A-записи или CNAME-записи в вашей DNS-зоне, указывающие на IP-адрес вашего VPS для каждого из ваших доменных имен.

8. И, наконец, проверьте доступность ваших проектов по доменным именам, введя их в адресной строке браузера.