我想通过 nginx 反向代理和使用 docker 的 letsencrypt ssl 在我的域 ( www.myapp.com ) 上运行我的应用程序 (myapp)。一切看起来都很好,但我看不到我的应用程序在我的域上运行。
如果我在不使用反向代理和 SSL 的情况下运行我的 docker 应用程序,我可以看到我的应用程序在我的域上运行。
我做了以下事情:
- 运行代理
$ cd
$ mkdir certs
$ docker run -d -p 80:80 -p 443:443 \
--name nginx-proxy \
-v $HOME/certs:/etc/nginx/certs:ro \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true \
jwilder/nginx-proxy
- 运行 Let's Encrypt 配套容器:
$ docker run -d \
--name nginx-letsencrypt \
--volumes-from nginx-proxy \
-v $HOME/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
jrcs/letsencrypt-nginx-proxy-companion
- 我的应用 dockerfile:
# get shiny server and R from the rocker project
FROM rocker/shiny:4.0.5
RUN apt-get update && apt-get install -y \
sudo \
gdebi-core \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libxt-dev \
libssl-dev \
libxml2 \
libxml2-dev \
libsodium-dev
# install R packages required
# Change the packages list to suit your needs
RUN R -e "install.packages(c('shiny', 'shinythemes', 'dygraphs', 'shinyWidgets', 'manipulateWidget', 'DT', 'zoo', 'shinyjs','emayili', 'wordcloud2', 'rmarkdown', 'xts', 'shinyauthr', 'curl', 'jsonlite', 'httr'), repos='http://cran.rstudio.com/')"
# copy the app directory into the image
WORKDIR /srv/shiny-server/myapp/app
COPY app .
# run app
EXPOSE 80
CMD ["R", "-e", "shiny::runApp('/srv/shiny-server/myapp/app', host = '0.0.0.0', port = 8080)"]
- 最后,我构建并运行了我的 docker 应用程序:
$ cd /srv/shiny-server/myapp
$ sudo docker build -t myapp .
$ docker run -d \
--name mysite \
-e 'LETSENCRYPT_EMAIL=info@myapp.com' \
-e 'LETSENCRYPT_HOST=myapp.com' \
-e 'VIRTUAL_HOST=myapp.com' myapp
不幸的是,当我访问我的域时,我看到一个包含以下消息的页面:
http://myapp.com -> 502 错误网关 nginx/1.21.6
https://myapp.com -> 500 内部服务器错误 nginx/1.21.6
我看不到我的应用正在运行。
如果我在运行 nginx-proxy 和 nginx-letsencrypt 容器后运行以下命令,
$ docker run -d \
--name nginx \
-e 'LETSENCRYPT_EMAIL=info@myapp.com' \
-e 'LETSENCRYPT_HOST=myapp.com' \
-e 'VIRTUAL_HOST=myapp.com' nginx
我能看到:
http://myapp.com -> 欢迎使用 nginx!
https://myapp.com -> 500 内部服务器错误 nginx/1.21.6
如果我只运行 nginx-proxy 和 nginx-letsencrypt 容器,我会得到以下信息:
http://myapp.com -> 503 服务暂时不可用 nginx
https://myapp.com -> 503 服务暂时不可用 nginx
最佳答案
也许这里有多个问题。
端口
在您的 Dockerfile 中,您编写了EXPOSE 80
,然后您开始使用端口8080
Shiny 。
您应该改为编写EXPOSE 8080
。当您启动应用程序容器时,您可能必须指定 VIRTUAL_PORT .SSL 证书
我认为,nginx 对证书不满意。500
总是意味着服务器端有问题。
查看nginx的日志(docker logs nginx-proxy
)。
一般来说,我建议避免 dockerized 证书(它们非常复杂并且经常导致错误)。看看我的其他答案的第 4 点:Can't enable ssl by docker-letsencrypt-nginx-proxy-companion未使用的坐骑
也许我错了,但我认为有些卷是没有必要的。比如-v/etc/nginx/vhost.d
。
祝你好运。
关于docker - 通过 nginx 和 letsencrypt ssl 使用 docker 运行 Shiny 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73266324/