前言
在前端开发结束后,将网页部署到服务器的方法普遍使用Ngxin作为资源代理,将请求的网页内容分发给用户,这篇文章极速入门使用Docker部署Nginx服务,以及如何开启并配置SSL证书。
打包前端Docker镜像
开发完项目后,在src同级目录下创建.dockerignore文件以及Dockerfile文件
将SSL证书放到与src同级目录下,我这里是将公钥与私钥放到cert文件中
.dockerignore文件用来忽略那些文件不需要打包。
Dockerfile文件用来编写打包命令。
# build stage
FROM node:18 as build-stage
RUN mkdir -p /app
WORKDIR /app
COPY package.json ./
RUN npm config set registry https://registry.npmmirror.com/
RUN npm install
COPY . .
RUN npm run build
# production stage
FROM nginx:stable as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY --from=build-stage /app/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/cert /usr/share/nginx/cert/
EXPOSE 80
EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
打包流程分为两个环节,第一个环节下载前端依赖库并build,第二个环节是从第一个环节复制build到nginx镜像并将cert、nginx配置文件也复制到nginx镜像中,随后暴露出80 443 端口,最后运行nginx。
upstream server {
server xx.xx.xx.xx:8080;
}
server {
#监听443端口
listen 443 ssl;
#你的域名
server_name lslt.net;
#ssl证书的pem文件路径
ssl_certificate /usr/share/nginx/cert/xxx.pem;
#ssl证书的key文件路径
ssl_certificate_key /usr/share/nginx/cert/xxx.key;
ssl_session_timeout 5m;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location /api/ {
proxy_pass http://server/api/;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 80;
listen [::]:80;
server_name localhost;
return 301 https://$host$request_uri;
}
nginx配置中的公钥、私钥名称以及后端请求地址要根据自己具体的名称做修改,其余皆可直接复制。
随后运行一下命令
docker build -t docker-container:first .
等待打包成镜像即可,如果需要将镜像传输到服务器中,可使用阿里云镜像服务做中转,将镜像传输到服务器上并部署。