docker部署前端,配置域名和ssl

发布于:2024-07-03 ⋅ 阅读:(10) ⋅ 点赞:(0)

       之前使用80端口部署前端项目后,可以使用IP+端口号在公网访问到部署的项目。

       进行ICP域名备案后,可以通过域名解析将IP套壳,访问域名直接访问到部署的项目~

       如果使用http协议可以很容易实现这个需求,对nginx.conf文件进行修改,具体看docker在服务器中部署多个前端_docker部署一个项目有两个前端怎么办-CSDN博客

  server_name  localhost;#这里localhost改成域名即可

       但是这样通过http协议访问的网站会提示网站不安全。我们需要使用https协议改用443端口访问我们的项目。

       所以我们需要在服务器的官网上给域名去申请一个ssl证书,在申请成功后,直接下载ssl文件到本地。可以得到这两个域名.crt和.key的文件。

       首先进到服务器的 /etc/ssl/certs/ 目录下放入这两个文件,后续启动容器会把当前目录的文件挂载到nginx内部的 /etc/ssl/certs/ 目录中,不然会ssl文件读取失败

       然后按照之前前端部署的方式,首先在前端打包项目,得到dist文件夹。

       来到服务器,在任意位置创建一个项目文件夹。再放入dist文件夹,然后开始创建其他文件

1. Dockerfile 文件

# 使用NGINX作为基础镜像
FROM nginx

# 复制解压后的网站文件到NGINX默认路径下
COPY rme/ /usr/share/nginx/html/
# 将你的 NGINX 配置文件复制到容器中的 NGINX 配置目录
COPY default.conf /etc/nginx/conf.d/default.conf

2. default.conf

upstream my_server{
  server 你的域名:8080; # 后端server 地址
  keepalive 2000;
}

server {
	    listen 80;
	    #填写绑定证书的域名
	    server_name  你的域名, localhost;
	    #把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
	    return 301 https://$host$request_uri; 
    }    

server {
        listen  443 ssl;
	    server_name  你的域名.cn; 
	    #证书文件名称
        ssl_certificate_key /etc/ssl/certs/你的域名.key;
        #私钥文件名称 .crt和.pem都可以用
        ssl_certificate /etc/ssl/certs/你的域名.crt; 
        
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
         ssl_session_tickets off;
         
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
    ssl_prefer_server_ciphers on;

		location / {
            root   /usr/share/nginx/html;
		  try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

3. set.sh 

#!/bin/bash

# 构建名为 test 的 Docker 镜像
docker build -t test .

# 检查是否存在构建的镜像
if docker images test | grep -q test ; then
    echo "镜像 test 已存在,继续执行下一步..."
else
    echo "错误:镜像 test 不存在!请先构建镜像。"
    exit 1
fi

# 运行容器
#docker run -d -p 80:80 --name test test 

# 创建新nginx容器 配置ssl证书
docker run --name test -p 80:80 -p 443:443    -v /usr/local/nginx/logs:/var/log/nginx -v /etc/ssl/certs:/etc/ssl/certs  --privileged=true -d --restart=always test 



# 检查容器是否成功运行
if docker ps -a --filter "name=^test $" --format "{{.Status}}" | grep -q "Up"; then
    echo "容器 test 运行成功!"
else
    echo "错误:容器 test 运行失败!"
fi

       到这里我们有 dist前端资源文件夹,Dockerfile镜像构建文件,default.conf nginx配置文件,还有/etc/ssl/certs/目录下的ssl证书文件和 set.sh运行脚本。

cd到当前目录,输入 ./set.sh 运行启动脚本。

搞定~~~~