如何在phusion/passenger-nodejs docker容器中定义启动文件

3pvhb19x  于 2022-11-22  发布在  Docker
关注(0)|答案(2)|浏览(146)

我尝试在基于phusion/passenger-docker的docker容器中运行一个next.js应用程序。
我有什么,我认为是一个完整的设置基于乘客码头文档,但我得到了一个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;
}

我希望Passenger会启动nginx并运行我应用程序。
当我构建并启动Docker容器时,它似乎期望index.html
我正在用docker image build -t nhe_app .构建docker容器
使用docker container run --name nhe_app -p 80:3000 nhe_app运行它
浏览http://glen-mac.local/会显示nginx的格式化404页面。
如何配置passenger-docker来查找和执行我的server.js而不是index.html

bvk5enib

bvk5enib1#

OP问题中有几个微妙的问题。
最值得注意的是,Passenger似乎要求应用根路径(在上面的nginx配置中由root定义)有一个名为public的顶级文件夹。该文件夹不能包含index.html文件,并且可能应该为空。这在示例中显示,但在文档中没有明确说明为硬要求。
第二个主要错误是Passenger绕过了应用的server.js中指定的端口(本例中为3000),并将其替换为nginx配置中指定的端口。
docker容器运行--名称nhe_app -p 80:3000 nhe_app

Docker容器运行-名称nhe_app -p 80:80 nhe_app.
否则,我能给予出的最好建议是:
1.通过本地安装(没有Docker)学习Passenger basics。让Passenger演示应用程序工作。
1.让您的应用程序在本地Passenger安装中运行。
1.应用你所学到的在passenger-docker中实现你的应用。

kmbjn2e3

kmbjn2e32#

服务器{ listen 7063;

server_name localhost;
 root /home/app/nhe_app; 
    passenger_enabled on;
    passenger_min_instances 1;
    passenger_max_request_queue_size 100; # default: 100
    passenger_app_env staging; # NODE_ENV; default: staging
    passenger_app_root /home/app/nhe_app;
    passenger_app_type node;
    passenger_startup_file server.js;

}

相关问题