Как определить файл запуска в контейнере док-станции phusion / passenger-nodejs - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь запустить приложение next.js в док-контейнере на основе phusion / passenger-docker.

У меня есть то, что я считаю полной установкой, основанной на документации пассажирского докера, но яполучаю страницу 404 от nginx.

Дамп журнала Docker показывает, что пассажир или nginx ищет index.html

[error] 48#48: *1 "/home/app/nhe_app/index.html" is not found

Мой файл запуска /home/app/nhe_app/server.js

Последний этап Dockerfile:

# Build production container from builder stage
FROM phusion/passenger-nodejs:1.0.8

# Set correct environment variables.
ENV HOME /root
ENV NODE_ENV=production

# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]

# Enable Nginx and Passenger
RUN rm -f /etc/service/nginx/down

WORKDIR /home/app/nhe_app
RUN rm /etc/nginx/sites-enabled/default

COPY --chown=app:app ./nhe_app.conf /etc/nginx/sites-enabled/nhe_app.conf
COPY --chown=app:app ./secret_key.conf /etc/nginx/main.d/secret_key.conf
COPY --chown=app:app ./gzip_max.conf /etc/nginx/conf.d/gzip_max.conf

COPY --chown=app:app --from=builder /app/server.js /app/.env /home/app/nhe_app/
COPY --chown=app:app --from=builder app/src /home/app/nhe_app/src
COPY --chown=app:app --from=builder app/node_modules /home/app/nhe_app/node_modules

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Конфигурация nginx - nhe_app.conf:

server {
    listen 80;
    server_name glen-mac.local;
    root /home/app/nhe_app/server.js;

    passenger_enabled on;
    passenger_user app;
    passenger_startup_file server.js;
}

Я ожидаю, что пассажир запустит nginx и запустит мое приложение.

Когда я собираю и запускаю Docker-контейнер, кажется, он ожидает index.html.

Я собираю Docker-контейнер с помощью docker image build -t nhe_app .

И запускаю его с помощью docker container run --name nhe_app -p 80:3000 nhe_app

При просмотре http://glen-mac.local/ отображается отформатированная страница 404 nginx.

Как настроить пассажирский докер для поиска и выполнения моего server.js вместо index.html?

1 Ответ

0 голосов
/ 05 октября 2019

В вопросе OP есть несколько тонких проблем.

Наиболее примечательно, что Passenger, похоже, требует, чтобы корневой путь приложения, определенный root в конфигурации nginx выше, имел папку верхнего уровня с именем public. Эта папка не должна содержать файл index.html и, вероятно, должна быть пустой. Это показано в примерах, но не прописано в документах как жесткое требование.

Вторая серьезная ошибка заключается в том, что Passenger обходит порт, указанный в server.js приложения (в данном случае 3000), и заменяет его напорт, указанный в конфигурации nginx. Таким образом, команда запуска docker была изменена с:

запуск контейнера докера --name nhe_app -p 80: 3000 nhe_app

на

dockerзапуск контейнера --name nhe_app -p 80:80 nhe_app.

В противном случае лучший совет, который я могу дать:

  1. Изучите Основы работы с пассажирами через локальную установку (без Docker). Запустите демонстрационное приложение Passenger.
  2. Запустите приложение, работающее в локальной установке Passenger.
  3. Примените полученные знания для реализации приложения в пассажирском докере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...