使用nginx - docker鏡像部署服務器,配置https,附帶java後端部署例子

經過一次部署案例剖析細節

背景

- 需求https,已有備案經過域名
- 騰訊雲服務器,因此從騰訊雲上申請了免費的https證書(阿里雲服務器上阿里雲申請)
- 服務器安全組打開443端口
- 純docker部署(nginx、java後端)
- 服務器上準備好nginx鏡像:docker pull nginx
- 使用docker-compose編排

大體流程圖

image.png

步驟

域名解析至目標服務器,在目標服務器新增目錄 nginx-config,用於存放nginx配置文件。

下載https證書,它有多種部署方案的證書選擇(Apache、IIS、Nginx、Tomcat),將Nginx使用的證書儲存至目標服務器nginx-config目錄下,它包含兩個文件:html

1_[這裏是你的域名].top_bundle.crt
2_[這裏是你的域名].key
nginx-config目錄下新建文件:
docker-compose.yml
service.conf
當前服務器nginx-config目錄結構:
/root/nginx-config/docker-compose.yml
/root/nginx-config/service.conf
/root/nginx-config/1_[這裏是你的域名]_bundle.crt
/root/nginx-config/2_[這裏是你的域名].key

修改docker-compose.yml,完整代碼:java

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 443:443
    volumes:
      - "/root/nginx-config/service.conf:/etc/nginx/conf.d/service.conf"
      - "/root/nginx-config/1_[這裏是你的域名]_bundle.crt:/etc/nginx/1_[這裏是你的域名]_bundle.crt"
      - "/root/nginx-config/2_[這裏是你的域名].key:/etc/nginx/2_[這裏是你的域名].key"
  java:
    image: java:8
    ports:
      - 8088:8088
    volumes: 
      - "/root/java/[java打包後的jar包].jar:/root/java/[java打包後的jar包].jar"
    command: ["java", "-jar", "/root/java/java打包後的jar包.jar"]

docker-compose.yml解讀nginx

兩個docker鏡像
nginx:
    image: nginx:latest
    
java:
    image: java:8
nginx使用443端口。左邊爲宿主機端口,右邊爲容器端口。 https使用的是443端口,http使用的是80端口

java服務使用 8088端口docker

ports:
  - 443:443
  
  
ports:
  - 8088:8088
掛載文件至容器。nginx配置文件和java配置文件分別掛載至對應的容器下。
volumes:
      - "/root/nginx-config/service.conf:/etc/nginx/conf.d/service.conf"
      - "/root/nginx-config/1_[這裏是你的域名]_bundle.crt:/etc/nginx/1_[這裏是你的域名]_bundle.crt"
      - "/root/nginx-config/2_[這裏是你的域名].key:/etc/nginx/2_[這裏是你的域名].key"
      
      
      
volumes: 
      - "/root/java/[java打包後的jar包].jar:/root/java/[java打包後的jar包].jar"
commond,在容器內執行的shell命令。這裏爲啓動服務。
command: ["java", "-jar", "/root/java/java打包後的jar包.jar"]

修改service.conf:shell

upstream javaserver {
    server [宿主機內網ip]:[後端java服務docker容器的端口];
}

server {
    listen         443 ssl;
    server_name   [這裏是你的域名];

    ssl_certificate      1_[這裏是你的域名]_bundle.crt; # https的證書文件路徑
    ssl_certificate_key  2_[這裏是你的域名].key; # https的證書文件路徑
    ssl_session_timeout  5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    # 這裏是騰訊雲的配置,阿里雲的ssl_ciphers請上阿里雲查看
    ssl_prefer_server_ciphers on;

    location /api {
        # 接口前綴爲/api開頭的,所有轉發至java後端服務,能夠配置多個location
        proxy_pass http://javaserver;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

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

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

啓動服務:後端

進入docker-compose.yml所在目錄
$ cd ngixn-config

前臺啓動,能夠看到log:
$ docker-compose up

後臺啓動:
$ docker-compose up -d

關閉服務:
$ docker-compose down
附:

從本地上傳文件至服務器命令:api

scp -r [本地文件路徑][服務器登陸名]@[服務器公網IP]:[服務器路徑]

例子:安全

scp -r /Users/lnxbyu/JsProject/docker-compose.yml root@188.88.88.88:/root/nginx-config/docker-compose.yml

歡迎糾錯。服務器

相關文章
相關標籤/搜索