如何解决Rails 6 Docker + NGINX 为 webpacker 资产提供服务
我正在尝试使用 Docker 部署我的 Rails 6.1.4 应用程序,并让 Nginx 处理资产服务。现在一切正常,除了当我尝试在 0.0.0.0:3000
上访问我的服务器时似乎找不到资产。
Nginx.conf
upstream app {
server app:3000;
}
server {
listen 80;
server_name localhost;
keepalive_timeout 5;
root $RAILS_ROOT/public;
access_log $RAILS_ROOT/log/access.log;
error_log $RAILS_ROOT/log/error.log;
location @app {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://app;
}
location / {
try_files $uri @app;
}
location ~ ^/(assets|packs)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /500.html {
}
}
Nginx.Dockerfile
FROM Nginx
RUN apt-get update -qq && apt-get -y install apache2-utils
ENV RAILS_ROOT /var/www/dicom_dwh
workdir $RAILS_ROOT
RUN mkdir log
copY public public/
copY Nginx.conf /tmp/docker.Nginx
RUN envsubst '$RAILS_ROOT' < /tmp/docker.Nginx > /etc/Nginx/conf.d/default.conf
EXPOSE 80
CMD [ "Nginx","-g","daemon off;" ]
app.Dockerfile
FROM ruby:3.0.1
# Install Node 14 and yarn
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get update -qq && apt-get install -qq --no-install-recommends \
nodejs \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g yarn@1
ENV RAILS_ROOT /var/www/dicom_dwh
ENV RAILS_ENV production
ENV RACK_ENV production
workdir $RAILS_ROOT
copY Gemfile Gemfile
copY Gemfile.lock Gemfile.lock
RUN bundle install --jobs 20 --retry 5 --without development test
copY . .
RUN bundle exec rails assets:precompile
EXPOSE 3000
CMD ["bundle","exec","puma","-C","config/puma.rb"]
docker-compose.yml
services:
app:
build:
context: .
dockerfile: app.Dockerfile
container_name: application_instance
command: bash -c "bundle exec puma -C config/puma.rb"
volumes:
- .:/app
- node-modules:/app/node_modules
ports:
- "3000:3000"
depends_on:
- database
- redis
database:
image: postgres
container_name: database_instance
restart: always
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"
env_file:
- .env
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_PRODUCTION_DB}
Nginx:
build:
context: .
dockerfile: Nginx.Dockerfile
depends_on:
- app
ports:
- 80:80
volumes:
- ./public:/app/public
redis:
image: redis
container_name: redis_instance
command: redis-server
ports:
- "6379"
volumes:
- redis:/data
volumes:
db_data:
redis:
node-modules:
服务器启动正常,但我无法访问我的资产:
有谁知道这里出了什么问题?提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。