我按照Next.js文档中的说明使用Docker启动服务器:www.example.comhttps://nextjs.org/docs/deployment#docker-image
使用http加载站点可以工作,但https返回SSL协议错误。
我做的细节:
1.在我的DigitalOcean Ubuntu 22.4服务器上配置了NGINX和cerbot(请注意,本指南是针对Ubuntu 20的)https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal
1.将Dockerfile
和.dockerignore
从文档中链接的示例项目复制到我的项目:https://github.com/vercel/next.js/tree/canary/examples/with-docker
1.已创建映像并将其上载到服务器。
1.已在服务器上启动映像:docker run -p 80:3000 -p 443:3000 my_image
HTTP工作完美(https://mysite.mydomain
)。使用HTTPS时,我会收到错误,例如Chrome上的ERR_SSL_PROTOCOL_ERROR
和Firefox上的SSL_ERROR_RX_RECORD_TOO_LONG
。
有什么想法吗?
1条答案
按热度按时间idfiyjo81#
以下步骤解释了如何设置多容器Docker Compose环境,其中NGINX用作Next.js应用程序前面的反向代理,以处理SSL连接(并提供HTTPS URI)。
步骤1-停靠Next.js应用程序
幸运的是,这是Next.js官方文档本身的一部分,关键步骤是将this Dockerfile复制到您正在处理的Next.js repo中。
陷阱:
next.config.js
中设置output: 'standalone'
(类似于this)Dockerfile
中的端口(默认为3000)就不会对外公开;没有必要公开该端口docker build -t nextjs:latest -f Dockerfile .
步骤2-设置Docker编写环境
Docker合成环境将有两个正在运行的容器:Next.js应用程序和NGINX。
NGINX图像可以通过添加第二个
Dockerfile
来创建:使用
docker build -t nginx:latest -f nginx/Dockerfile nginx
从项目根目录构建映像。然后,我们可以创建一个
docker-compose.yml
文件:陷阱:
nginx.conf
,它将在下一步中进行配置/etc/ssl
下。另一种方法是将它们打包到NGINX映像中(例如,将COPY my_ssl_cert.crt /etc/nginx/ssl/my_ssl_cert.crt
添加到Dockerfile
,密钥同上)步骤3-将NGINX配置为反向代理
示例
nginx.conf
:陷阱:
nextjs
来引用它,因为 * 默认情况下,Compose会为您的应用设置一个网络 *(docs)步骤4-展开
1.构建两个Docker映像
1.将Docker映像、SSL文件和
docker-compose.yml
发送到服务器1.在服务器中,运行
docker compose up
1.如果需要,使用
docker logs [container_name]
调试任何问题;curl http://localhost:80
和curl --insecure https://localhost:443
也可以提供帮助