Как выставить порт в героку? - PullRequest
0 голосов
/ 09 апреля 2020

Итак, я развернул приложение на heroku, и при развертывании оно говорит, что оно работает на localhost: 5000. Я хочу выставить этот порт, используя переменную $ PORT. Какова точная команда для этого? Это актуально: https://devcenter.heroku.com/articles/container-registry-and-runtime#dockerfile -commands-and-runtime , но как реально выставить порт? Вот как выглядит мой Dockerfile:

# We will use Ubuntu for our image
FROM ubuntu:latest

# Updating Ubuntu packages

ARG CLOJURE_TOOLS_VERSION=1.10.1.507


RUN apt-get -qq update && apt-get -qq -y install curl wget bzip2 openjdk-8-jdk-headless \
    && curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
    && bash /tmp/miniconda.sh -bfp /usr/local \
    && rm -rf /tmp/miniconda.sh \
    && conda install -y python=3 \
    && conda update conda \
    && curl -o install-clojure https://download.clojure.org/install/linux-install-${CLOJURE_TOOLS_VERSION}.sh \
    && chmod +x install-clojure \
    && ./install-clojure && rm install-clojure \
    && wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein \
    && chmod a+x lein \
    && mv lein /usr/bin \
    && apt-get -qq -y autoremove \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /var/log/dpkg.log \
    && conda clean --all --yes


ENV PATH /opt/conda/bin:$PATH

RUN conda create -n pyclj python=3.6 && conda install -n pyclj numpy mxnet

## To install pip packages into the pyclj environment do
RUN conda run -n pyclj python3 -mpip install numpy
#COPY . .
RUN lein uberjar
RUN java $JVM_OPTS -cp target/myapp.jar clojure.main -m myapp.application --server.port=$PORT

Пример Dockerfile здесь https://github.com/heroku/alpinehelloworld/blob/master/Dockerfile показывает команду gunicorn, но мой проект до сих пор не использовал gunicorn. Как настроить Dockerfile так, чтобы мое приложение использовало переменную среды $ PORT?

Я использую aleph.io:

(ns myapp.application
  (:gen-class)
  (:require ;; more requires 
              [system.components.aleph :refer [new-web-server]]
            ))

(defn app-system [config]
  (component/system-map
   :routes     (new-endpoint home-routes)
   :middleware (new-middleware {:middleware (:middleware config)})
   :handler    (-> (new-handler :router :bidi
                    )
                   (component/using [:routes :middleware]))
   :http       (-> (new-web-server (:http-port config) :handler)
                   (component/using [:handler]))
   :server-info (server-info (:http-port config))))

(defn -main [& _]
  (let [config (config)]
    (-> config
        app-system
        component/start)))

1 Ответ

0 голосов
/ 09 апреля 2020

Запись журнала "(...) when deployed, it says it's running on localhost:5000" гласит, что хост прослушивания ограничен localhost. Таким образом, ваш сервер не может быть доступен с inte rnet (или с помощью домена heroku).

Независимо от того, какой сервер вы используете, вам нужно установить хост прослушивания на 0.0.0.0. Не зная вашего серверного фреймворка, я бы предположил, что вам нужно отредактировать последнюю строку в вашем файле docker (и добавить --server.host=0.0.0.0):

RUN java $JVM_OPTS -cp target/myapp.jar clojure.main -m myapp.application --server.port=$PORT --server.host=0.0.0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...