Docker-compose部署vue+springboot项目配置ssl证书

整个部署过程使用docker-compose容器编排实现

已经部署成功!
博客地址:我的博客

1. 编排整个项目环境

docker-compose.yml

mysql:sql_mode修改

nginx:文件同步,名字和路径可以自己命名,自己要记得就行

version: "3"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - "80:80"
      - "443:443"
    volumes: # 挂载
      - /root/nginx/cert:/root/nginx/cert # 证书目录
      - /root/nginx/html:/usr/share/nginx/html # 前端代码
      - /root/nginx/nginx.conf:/etc/nginx/nginx.conf # 配置文件
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
  mysql:
    restart: always
    image: mysql:5.7.19
    ports:
       - 3306:3306
    environment: # 指定用户root的密码
       - MYSQL_ROOT_PASSWORD=sunjun
    command:
       --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  redis:
    image: redis:latest
  know:
    image: know:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - 8087:8087 # 这是后端https的端口
      - 8086:8086 # 这是后端http的端口
    depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
      - mysql
      - redis

2. Dockerfile文件编写

运行springboot项目

FROM java:8

EXPOSE 8087

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai’ >/etc/timezone

ADD know-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=dev"]

3. nginx配置文件编写(重点)

1. 前端(vue)配置
  1. 首先需要给要配置ssl证书的域名申请ssl证书,二级域名一级域名都可以。
    (img-fE0r7S8R-1664258195311)(E:\notes\Server\springboot+vue项目配置ssl证书.assets\image-20220927124430317.png)]

  2. 下载申请好的准备作为访问前端的域名证书(nginx版本的)放在对应的文件夹中,我这里的是/root/nginx/cert因为在编写docker-compose.yml文件时这个文件夹是作为证书文件夹映射到nginx容器中的,名字和路径可以自己定义,做好对应就行了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IV6kpP79-1664258195312)(E:\notes\Server\springboot+vue项目配置ssl证书.assets\image-20220927124856653.png)]

  3. 编写nginx配置文件我的放在/root/nginx/nginx.conf在编写docker-compose.yml作为配置文件映射到nginx容器中的。

    #user  root;
    worker_processes  1;
    events {
      worker_connections  1024;
    }
    http {
      include       mime.types;
      default_type  application/octet-stream;
      sendfile        on;
      keepalive_timeout  65;
      server {
          listen	  80;
          server_name domain_name; # domain_name是你的访问前端的域名
          rewrite ^(.*)$ https://$host$1 permanent; # 当访问80端口时是http请求重定向到https
      }
      server {
          # SSL 访问端口
          listen      443 ssl;
          # 绑定证书域名
          server_name  domain_name; # domain_name是你的访问前端的域名
          # 证书文件
          ssl_certificate     /root/nginx/cert/domain_nam.pem; # 注意! 这里是映射到容器内部的证书文件夹,文件名可以自定 后缀要注意!!!
          # 私钥文件
          ssl_certificate_key /root/nginx/cert/domain_nam.key; # 注意! 这里是映射到容器内部的证书文件夹,文件名可以自定 后缀要注意!!!
          ssl_session_timeout 5m;
          # 配置协议
          ssl_protocols       TLSv1.2 TLSv1.3;
          #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
          ssl_prefer_server_ciphers on;
          location / {
              root   /usr/share/nginx/html; # 静态文件地址 也是映射到容器内部的文件夹地址
              try_files $uri $uri/ /index.html last; # 别忘了这个哈
              index  index.html index.htm;
          }
      }
    }
    
2.后端(springboot)配置
  1. 编写配置文件以及java代码

    首先去申请证书的地方下载JKS证书包 将.jks文件放在resources文件夹(名字可修改)下

    在配置文件(application.yml)中添加配置,密码在另一个文件中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASBb1dkM-1664258195312)(E:\notes\Server\springboot+vue项目配置ssl证书.assets\image-20220927132941938.png)]
2. 在启动类下方编写代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ZmY0sju-1664258195313)(E:\notes\Server\springboot+vue项目配置ssl证书.assets\image-20220927133036904.png)]

@Value("${server.port}")
Integer port;

@Bean
public ServletWebServerFactory servletContainer() {
  TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory () {
    @Override
    protected void postProcessContext(Context context) {
      SecurityConstraint constraint = new SecurityConstraint();
      constraint.setUserConstraint("CONFIDENTIAL");
      SecurityCollection collection = new SecurityCollection();
      collection.addPattern("/*");
      constraint.addCollection(collection);
      context.addConstraint(constraint);
    }
  };
  tomcat.addAdditionalTomcatConnectors(httpConnector());
  return tomcat;
}

@Bean
public Connector httpConnector() {
  Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
  connector.setScheme("http");
  // Connector监听的http的端口号
  connector.setPort(8086); // 这是http端口
  connector.setSecure(false);
  // 监听到http的端口号后转向到的https的端口号
  connector.setRedirectPort(port); // 这是 https 端口 也就是项目的端口号
  return connector;
}
  1. 将后台使用nginx反向代理

    下载后端访问域名的nginx证书,与前端类似 直接把这段放在和前端同级位置

    server {
      listen 80;
      server_name domain_name; # domain_name 是访问后台的域名
      rewrite ^(.*)$ https://$host$1 permanent; # 访问http重定向到https
    }
    server {
      # 访问端口
      listen      443;
      # 绑定证书域名
      server_name  domain_name; # domain_name 是访问后台的域名
      # 证书文件
      ssl_certificate     /root/nginx/cert/api-know.sjun7.com.pem; # 注意! 这里是映射到容器内部的证书文件夹,文件名可以自定 后缀要注意!!!
      # 私钥文件
      ssl_certificate_key /root/nginx/cert/api-know.sjun7.com.key; # 注意! 这里是映射到容器内部的证书文件夹,文件名可以自定 后缀要注意!!!
    
      location / {
        proxy_pass https://domain_name:8087/;   # 这里通过反向代理把后端访问的端口映射到二级域名上            
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;               
        proxy_set_header X-Forwarded-Proto $scheme;               
        proxy_set_header X-Forwarded-Port $server_port;
    	}
    }
    

注意所有的域名或二级域名映射的都是服务器地址,只是会通过nginx反向代理到不同的端口号

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用内容,nginx docker可以通过以下步骤进行相关操作: 1. 将docker内的nginx.conf文件复制到外部的指定路径,可以使用命令:docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/config/nginx.conf。 2. 将docker内的default.conf文件复制到外部的指定路径,可以使用命令:docker cp nginx:/etc/nginx/conf.d/default.conf /usr/local/nginx/config/conf.d/default.conf。 3. 创建Nginx容器,可以使用以下命令: - 执行docker rm nginx或者以容器id方式关闭容器; - 找到nginx对应的容器id,可以使用docker ps -a命令; - 关闭该容器,可以使用docker stop nginx命令; - 删除该容器,可以使用docker rm nginx命令; - 删除正在运行的nginx容器,可以使用docker rm -f nginx命令; - 运行新的nginx容器,可以使用以下命令: docker run -p 9002:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx:latest。 4. 将容器中的nginx.conf文件和conf.d文件夹复制到宿主机,可以使用以下命令: - 生成容器,可以使用docker run --name nginx -p 9001:80 -d nginx命令; - 将容器中的nginx.conf文件复制到宿主机,可以使用docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf命令; - 将容器conf.d文件夹下内容复制到宿主机,可以使用docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d命令; - 将容器中的html文件夹复制到宿主机,可以使用docker cp nginx:/usr/share/nginx/html /home/nginx/命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值