- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以我正在学习 Docker,并且我正在尝试部署一个带有指向我的服务器的子域(其域是从另一个提供商处购买的)的测试应用程序。服务器已经具有非 dockerized Nginx 设置,可以完美地服务于其他几个非 dockerized 应用程序。这部分意味着 Nginx 已经在使用端口 80 和 443。还值得一提的是,子域的主域(example.dev)有一个非 dockerized 应用程序,该应用程序具有来自 Let's Encrypt 的事件 SSL 证书已经在服务器中运行。现在子域(test.example.dev)在访问时会以某种方式显示 Nginx 默认页面。这是我的服务器情况。现在让我解释一下 Nginx 和 Certbot 在 dockerized 应用程序中会发生什么。
该应用程序使用 4 个图像来创建 4 个容器:Nodejs、Mongodb、Nginx 和 Certbot(用于 SSL)。在添加 Certbot 之前,我可以使用 :. 完美访问该应用程序。但是现在我需要使用 Let's Encrypt SSL 证书将该子域 (test.example.dev) 附加到我的应用程序中。
因此,在使用 Docker Compose 完成构建后,我看到 Nginx 和 Certbot 退出并出现错误。
这是我的 nginx/default.conf 文件:
server {
listen 80;
listen [::]:80;
server_name test.example.dev;
server_tokens off;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://test.example.dev$request_uri;
}
}
server {
listen 443 default_server ssl http2;
listen [::]:443 ssl http2;
server_name test.example.dev;
ssl_certificate /etc/nginx/ssl/live/test.example.dev/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/test.example.dev/privkey.pem;
location /api {
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_set_header X-NginX-Proxy true;
proxy_pass http://practice-app:3050;
proxy_redirect off;
}
}
这是我的 docker-compose.yml 文件:
version: '3'
services:
practice-app:
build:
context: .
args:
NODE_ENV: production
environment:
- NODE_ENV=production
command: node index.js
depends_on:
- mongo
nginx:
image: nginx:stable-alpine
ports:
- "4088:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./certbot/www:/var/www/certbot/:ro
- ./certbot/conf/:/etc/nginx/ssl/:ro
certbot:
image: certbot/certbot:latest
volumes:
- ./certbot/www/:/var/www/certbot/:rw
- ./certbot/conf/:/etc/letsencrypt/:rw
depends_on:
- nginx
mongo:
image: mongo:4.4.6
environment:
- MONGO_INITDB_ROOT_USERNAME=test
- MONGO_INITDB_ROOT_PASSWORD=test
volumes:
- mongo-db:/data/db
volumes:
mongo-db:
Nginx 日志 说:
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/01/31 13:42:28 [emerg] 1#1: cannot load certificate "/etc/nginx/ssl/live/test.example.dev/fullchain.pem": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/live/test.example.dev/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate "/etc/nginx/ssl/live/test.example.dev/fullchain.pem": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/live/test.example.dev/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
Certbot 日志说:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.
但添加以下代码后:
command: certonly --webroot -w /var/www/certbot --force-renewal --email example@gmail.com -d test.example.dev --agree-tos
在 certbot 服务下,日志更改为:
[17:00] [server1.com test] # docker logs test_certbot_1
Requesting a certificate for test.example.dev
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
Domain: test.example.dev
Type: unauthorized
Detail: Invalid response from http://test.example.dev/.well-known/acme-challenge/HCFXwB1BXb-provr8lr6mJCDG9LRoGbVV0e9BWiiwAo [63.250.33.76]: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx</center>\r\n"
Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
我在这里做错了什么?请给我一个初学者友好的解决方案,因为我是 DevOps 的新手。
最佳答案
您的 docker-compose 文件中有一些错误。您的 nginx 应该与 Practice_app 链接而不是在 nginx 上,并且您的练习应用程序应该在此处打开端口 3050。
version: '3'
services:
practice-app:
build:
context: .
args:
NODE_ENV: production
environment:
- NODE_ENV=production
command: node index.js
ports:
- "3050:3050"
depends_on:
- mongo
nginx:
image: nginx:stable-alpine
ports:
- "4088:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./certbot/www:/var/www/certbot/:ro
- ./certbot/conf/:/etc/nginx/ssl/:ro
links:
- practice-app
certbot:
image: certbot/certbot:latest
volumes:
- ./certbot/www/:/var/www/certbot/:rw
- ./certbot/conf/:/etc/letsencrypt/:rw
depends_on:
- nginx
mongo:
image: mongo:4.4.6
environment:
- MONGO_INITDB_ROOT_USERNAME=test
- MONGO_INITDB_ROOT_PASSWORD=test
volumes:
- mongo-db:/data/db
volumes:
mongo-db:
关于docker - Nginx docker 容器在 Ubuntu 20.04 中退出并出现错误 “fopen:No such file or directory:fopen('/etc/nginx/ssl/live/test.example.dev/fullchain.pem'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70952696/
我正在使用 Mechanize 配置 ssl , 根据 document我需要设置 agent.cert = 'example.cer' agent.key='example.cer' 但是我怎样才能
我有一个表格,允许人们将士兵添加到列表中,该列表可以很好地传输到 mysql。如果我在没有变量的情况下这样做甚至很好,但是一旦我尝试添加一个如下所示。 // Get Variable from Loc
使用 .htaccess 重写,我想要: http://example.com 重定向到:http://www.example.comhttps://www.example.com 重定向到:http
我想将所有流量重定向到 https://www.sitename.com 例子 http://sitename.com --> https://www.sitename.com http://www.
我只有 example.com 的 SSL 证书,并且想同时重定向 http://example.com和 http://*.example.com 到 https://example.com使用 n
我有服务器 A,它托管我们在 www.example.com 上的主要站点;我们有一个涵盖 *.example.com 的 SSL 证书。 在我们网站的安全部分,我们希望向我们编写并托管在单独机器/I
我正在努力平衡多行上的一些文本,并且我正在添加手动换行符以将文本均匀地分割在各行上。为了弄清楚这一点,我需要查看在哪里添加“\n”来测试我的代码,但我发现的唯一方法是将其全部打印为字符: ["T",
我在我们的域中安装了 Apache 和 Tomcat 服务器,因为我有超过 25 个服务,一些服务由 Apache 处理,一些服务由 Tomcat 处理。 tomcat 服务显示 http://exa
编辑:问题终于解决了。详细信息可以在此消息末尾的疑难解答部分中找到。 我在这里保留了详细的步骤,以防可能对某人有所帮助。 设置OpenLDAP I-创建服务器 该文档通常已经过时,并且您会找到多种实现
这个问题在这里已经有了答案: offsetting an html anchor to adjust for fixed header [duplicate] (28 个答案) 关闭 8 年前。
目前谷歌将我的网站链接显示为... example.com/ ...但是,我希望它显示为... example.com 我确实有以下元数据 ...下面是我的 htaccess 文件... Index
我使用 Microsoft Visual Studio 2012。当我将代码示例放入 C# 类/方法的 XML 注释中时,我想知道:引用我的程序集的用户将如何看到该代码示例? 我试图引用我自己的程序集
我对正则表达式还很陌生,无法真正弄清楚它是如何工作的。我试过这个: function change_email($email){ return preg_match('/^[\w]$/', $e
我正在使用 Hibernate 版本 4.3.5.Final。这里的问题是 Hibernate 找到 Foo 类型的实体,其中属性 address 的大小写不同(例如“BLAFOO”)。但是,在我的示
我为环境特定变量(如用户名和密码)设置了一个环境 YAML 文件。要在我的应用程序中使用这些变量,我需要使用 APP_CONFIG['username']而不是 APP_CONFIG[:usernam
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
这个问题在这里已经有了答案: Does Python have a string 'contains' substring method? (10 个答案) 关闭 8 年前。 我想检查发件人 hea
我已经在 https://arieldemian.it 上配置了 SSL/TLS但似乎https://www.arieldemian.it不安全。这是为什么?我需要注册他们两个吗?我正在使用 http
当我使用 ProGuard 时,com.example.** 和 com.example.**{*;} 之间的区别是什么?例如,每种情况会发生什么情况? -keep class com.examp
我的主页的内容是根据使用 slug“home”对数据库的查询提取的。例如,如果我在地址栏中输入 example.com/home,它会根据看到的“/home”查询数据库并提取正确的内容(使用变量“$p
我是一名优秀的程序员,十分优秀!