Развертывание с помощью docker

Я новичок в развертывании с помощью docker. На самом деле, я запускаю свое приложение django на своем компьютере внутри контейнера docker, и оно успешно работает на порту localhost:8080. Затем я перенес код на удаленный сервер и запустил docker-compose, и приложение успешно работает и там. Я хочу спросить, как я могу увидеть приложение с помощью ip-адреса сервера? Например, если ip-адрес 123.45.67.89, я думаю, что приложение должно быть запущено на 123.45.67.89:8080, но оно там не запускается. Как я могу получить доступ к приложению, запущенному в контейнере на удаленном сервере?

P.S. Я не использовал nginx, должен ли я его использовать?

Технически это должно работать так, как вы это сделали, но, возможно, порт 8080 не открыт для внешнего мира.

Вы можете изменить отображение портов в вашем docker-compose.yml файле:

ports:
    - "80":"8080"

Затем вы можете получить доступ к вашему приложению с адреса 123.45.67.89, без указания какого-либо порта, поскольку 80 является портом по умолчанию. Если это не работает, дважды проверьте ip-адрес и правила брандмауэра.

<<<Однако использование Nginx почти всегда является хорошей идеей, поскольку локальный веб-сервер, который вы используете, не готов к работе (с точки зрения функциональности и безопасности). Я не буду объяснять здесь, как внедрить Nginx, потому что это немного не по теме, и есть много доступных ресурсов, но вы должны серьезно рассмотреть этот вопрос при развертывании на удаленном сервере

Ответ на этот вопрос во многом зависит от того, где вы размещаете свое производственное приложение и какие услуги оно предоставляет вам из коробки.

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

Поскольку вы начинаете с docker, и поскольку я предполагаю, что это личное или небольшое приложение, я могу порекомендовать следующее:

  1. If you are flexible in terms of hosting providers, try Digital Ocean. They are very developer friendly, and cost effective, at least until a certain scale point.
  2. Use the automated docker nginx-proxy. This tool lets you add a couple of lines to your docker-compose.yml file, and magically get a configured nginx proxy, without knowing anything about nginx.

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

Пример docker-compose.yml может выглядеть следующим образом:

services:
  nginx:
    image: nginxproxy/nginx-proxy
    ports: ["${PORT:-80}:80"]
    restart: always
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: www.yoursite.com

  app:
    depends_on: [nginx]
    restart: always
    image: your/image
    environment:
      VIRTUAL_HOST: myapp.localhost,www.yoursite.com

что в основном говорит nginx-proxy обслуживать ваше приложение на обоих http://myapp.localhost и http://www.yoursite.com.

Конечно, вам нужно будет указать DNS вашего домена на IP вашего цифрового океана.

Вернуться на верх