我想使用ng-serve --host 0.0.0.0
通过HTTPS服务Angular应用程序。我的项目使用Angular CLI 1.2。
Angular无法识别我提供的证书,并正在创建它自己的证书。我要使用的证书是.pem
文件。
正确启用--ssl
标志可以使用HTTPS服务。如果禁用它,它将返回HTTP,因此此标志有效。
我正在Docker容器中工作。我将证书作为卷传递到撰写文件中,当我用docker exec -i <id> bash
检查时,它们在容器中的预期位置。
如果忽略客户端和服务器端的无效证书错误,一切都会按预期进行。我要解决的问题是让ng-serve
使用我的证书。
这就是我所做的:
ng-serve --ssl true --ssl-cert <path-to-cert> --ssl-key <path-to-key>
及其变体,例如绝对/相对路径。
在package.json
文件中设置以上标志。
设置我的.angular-cli.json
默认值:
{
...
"defaults": {
...
"serve": {
"sslKey": "<relative-path>",
"sslCert": "<relative-path>"
},
...
},
...
}
我已经尝试了答案:
Get angular-cli to ng serve over HTTPS
答案 0 :(得分:0)
您不应该在生产Docker容器中使用ng serve
,因为它会调用开发HTTP服务器,这一点都不安全,只是为了在本地测试应用程序。这就是命令ng serve --prod
触发以下警告的原因:
****************************************************************************************
This is a simple server for use in testing or debugging Angular applications locally. It hasn't been reviewed for security issues.
DON'T USE IT FOR PRODUCTION!
****************************************************************************************
我将为您提供一个Dockerfile示例,该示例文件将Angular应用程序与Nginx HTTP服务器(两个使用最广泛的服务器之一)包装在一起:
FROM node:10.13.0-stretch as build-stage
WORKDIR /app
COPY package*.json /app/
RUN npm install
RUN npm install -g --unsafe-perm @angular/cli@latest
COPY ./ /app/
ARG configuration=production
RUN ng build --prod --build-optimizer=true --aot=true --output-hashing=all --extract-css=true --named-chunks=false --vendor-chunk=true
FROM nginx:1.14.1
# Add application files
COPY --from=build-stage /app/dist/name-of-your-app/ /var/www/html
COPY --from=build-stage /app/nginx/nginx.conf /etc/nginx/nginx.conf
COPY --from=build-stage /app/nginx/site.conf /etc/nginx/conf.d/default.conf
RUN touch /var/run/nginx.pid && \
chown -R www-data: /etc/nginx/ && \
chown -R www-data: /var/run/nginx.pid && \
chown -R www-data: /var/cache/nginx && \
chown -R www-data: /var/www/html
USER www-data
#Expose the port
EXPOSE 8080
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
这将创建两个容器,第一个容器安装CLI并构建应用程序,第二个容器将文件从“构建容器”复制到Nginx HTTP服务器服务的文件夹中,然后第一个容器被破坏。
这假设您在nginx.conf
文件夹中有正确的site.conf
和nginx
,这些文件夹用于保存证书配置(并且必须在证书中添加证书和私钥文件) Dockerfile)。
您还可以将Apache用作HTTP服务器。