? ? ? ?之前使用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 ; thenecho "鏡像 test 已存在,繼續執行下一步..."
elseecho "錯誤:鏡像 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"; thenecho "容器 test 運行成功!"
elseecho "錯誤:容器 test 運行失敗!"
fi
? ? ? ?到這里我們有 dist前端資源文件夾,Dockerfile鏡像構建文件,default.conf nginx配置文件,還有/etc/ssl/certs/目錄下的ssl證書文件和 set.sh運行腳本。
cd到當前目錄,輸入 ./set.sh 運行啟動腳本。
搞定~~~~