使用Docker部署Nginx以及配置SSL证书

282 阅读2分钟

前言

在前端开发结束后,将网页部署到服务器的方法普遍使用Ngxin作为资源代理,将请求的网页内容分发给用户,这篇文章极速入门使用Docker部署Nginx服务,以及如何开启并配置SSL证书。

打包前端Docker镜像

开发完项目后,在src同级目录下创建.dockerignore文件以及Dockerfile文件

将SSL证书放到与src同级目录下,我这里是将公钥与私钥放到cert文件中

image.png

.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 .

等待打包成镜像即可,如果需要将镜像传输到服务器中,可使用阿里云镜像服务做中转,将镜像传输到服务器上并部署。