如何在 phusion/passenger-nodejs docker 容器中定义启动文件
How to define startup file in phusion/passenger-nodejs docker container
我正在尝试根据 phusion/passenger-docker.
在 docker 容器中获取 next.js 应用程序 运行ning
我认为我有一个基于 passenger-docker 文档的完整设置,但我从 nginx 获得了一个 404 页面。
A docker 日志转储显示 passenger 或 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/
显示 nginx 的格式化 404 页面。
如何配置 passenger-docker 来查找并执行我的 server.js
而不是 index.html
?
OP题中有几个细微的问题。
最值得注意的是,Passenger 似乎要求在上面的 nginx 配置中由 root
定义的应用程序根路径有一个名为 public
的顶级文件夹。此文件夹不得包含 index.html
文件,并且可能应该为空。这已在示例中显示,但并未在文档中明确说明为硬性要求。
第二个主要错误是 Passenger 绕过了应用程序 server.js
中指定的端口(本例中为 3000),并将其替换为 nginx 配置中指定的端口。所以 docker 运行 命令从:
docker container run --name nhe_app -p 80:3000 nhe_app
至
docker container run --name nhe_app -p 80:80 nhe_app.
否则,我能给的最好的建议是:
- 通过本地安装(无 Docker)了解 Passenger basics。运行 Passenger 演示应用程序。
- 让您的应用在本地 Passenger 安装中运行。
- 将您学到的知识应用到 passenger-docker.
中实现您的应用程序
我正在尝试根据 phusion/passenger-docker.
在 docker 容器中获取 next.js 应用程序 运行ning我认为我有一个基于 passenger-docker 文档的完整设置,但我从 nginx 获得了一个 404 页面。
A docker 日志转储显示 passenger 或 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/
显示 nginx 的格式化 404 页面。
如何配置 passenger-docker 来查找并执行我的 server.js
而不是 index.html
?
OP题中有几个细微的问题。
最值得注意的是,Passenger 似乎要求在上面的 nginx 配置中由 root
定义的应用程序根路径有一个名为 public
的顶级文件夹。此文件夹不得包含 index.html
文件,并且可能应该为空。这已在示例中显示,但并未在文档中明确说明为硬性要求。
第二个主要错误是 Passenger 绕过了应用程序 server.js
中指定的端口(本例中为 3000),并将其替换为 nginx 配置中指定的端口。所以 docker 运行 命令从:
docker container run --name nhe_app -p 80:3000 nhe_app
至
docker container run --name nhe_app -p 80:80 nhe_app.
否则,我能给的最好的建议是:
- 通过本地安装(无 Docker)了解 Passenger basics。运行 Passenger 演示应用程序。
- 让您的应用在本地 Passenger 安装中运行。
- 将您学到的知识应用到 passenger-docker. 中实现您的应用程序