使用Docker和Nginx部署Web服務的操作指南
前言
Docker是一種容器化技術,它可以將應用程序及其依賴項打包到一個獨立的、可移植的容器中。這意味著開發(fā)人員可以在任何環(huán)境中輕松部署和運行他們的應用程序,而無需擔心環(huán)境差異和依賴問題。而Nginx則是一款高性能的Web服務器和反向代理服務器,它可以處理大量并發(fā)請求并提供高可用性和負載均衡。Docker+Nginx是一種高效、靈活且可擴展的解決方案。
在當今快速發(fā)展的技術領域,C/C++、云原生、人工智能等前沿技術正引領著軟件工程的發(fā)展。作為后端開發(fā)人員,掌握Java、JavaScript、PHP、Python等編程語言是必不可少的。同時,結合云原生的理念,將應用程序容器化部署,能夠更好地適應云環(huán)境的動態(tài)性和彈性需求。使用Docker和Nginx可以幫助開發(fā)團隊實現(xiàn)快速部署和持續(xù)集成,提高開發(fā)效率和代碼質量。
準備工作
Docker環(huán)境安裝
這里簡單講述下docker的安裝,可以通過官方提供的安裝腳本安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果因為網絡問題無法正常安裝,也可以使用國內 daocloud 一鍵安裝命令
curl -sSL https://get.daocloud.io/docker | sh
啟動docker
sudo systemctl start docker
這里推薦個比較好用的面板1Panel,我拿到云服務器后一般習慣先裝個1Panel,他安裝的同時也會把Docker 和Docker Compose安裝好,還是很方便的
部署Web應用
1.拉取nginx鏡像
這里我們可以直接拉取最新版本
docker pull nginx
2.創(chuàng)建掛載目錄
接下來我們創(chuàng)建容器的掛載目錄文件夾,主要有三個目錄,目錄位置可根據(jù)自己的習慣調整
- nginx_logs :日志文件目錄
- nginx_conf :配置文件目錄
- nginx_web :項目文件目錄(這里可以存放web文件)
mkdir /root/nginx_conf mkdir /root/nginx_logs mkdir /root/nginx_web

授權文件夾,防止nginx操作文件夾權限不足
chmod 777 /root/nginx_conf chmod 777 /root/nginx_logs chmod 777 /root/nginx_web
3.創(chuàng)建容器并掛載目錄
掛載操作會直接將兩個文件夾內容同步,若是直接用宿主機的空文件夾直接掛載到容器內部的配置文件目錄上,會造成nginx容器配置文件目錄被同步為空文件夾,進而導致容器啟動失敗。故我們需要先啟動一遍容器,將初始配置拷貝出來。
創(chuàng)建容器
docker run -itd --name nginx -p 80:80 nginx
復制容器配置文件到宿主機
docker cp nginx:/etc/nginx /root/nginx_conf
這樣就完成了配置文件的復制

刪除容器,啟動容器并掛載目錄
這里的-v參數(shù)掛載目錄記得檢查一下路徑是否有誤
docker rm -f nginx docker run -itd --name nginx -p 80:80 -v /root/nginx_web:/var/www/html -v /root/nginx_conf/nginx:/etc/nginx -v /root/nginx_logs:/var/log/nginx nginx
4.修改配置文件
到掛載的配置文件夾/root/nginx_conf/conf.d下,修改default.conf,或者新建conf文件,在這個目錄下,conf后綴的文件都會被讀取為配置文件(因為/root/nginx_conf/nginx.conf中配置了include)

示例配置文件內容如下
server{
#監(jiān)聽的端口號
listen 80;
#要監(jiān)聽的服務器地址,域名也可行,根據(jù)實際情況修改
server_name 154.111.111.111;
client_max_body_size 20m;
access_log /var/log/nginx/host.access.log main;
#開啟gzip功能(這段可選,如果web界面資源有壓縮格式文件可開啟)
gzip on;
#開啟gzip靜態(tài)壓縮功能
gzip_static on;
#gzip緩存大小
gzip_buffers 4 16k;
#gzip http版本
gzip_http_version 1.1;
#gzip 壓縮級別 1-10 r
gzip_comp_level 5;
#gzip 壓縮類型
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
#配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持
gzip_disable "MSIE [1-6]\.";
#前端,根據(jù)實際情況修改
location / {
# 項目地址,這里指的是nginx容器的地址
root /var/www/html/luckysj;
try_files $uri $uri/ /index.html?s=$uri&$args;
# 默認訪問的資源
index index.html index.htm index.php;
}
# 錯誤網頁配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}5.上傳web文件到掛載目錄中
將你的web文件上傳到/root/nginx_web這個目錄中,如下

重啟nginx容器,使配置生效
docker restart nginx
6.訪問網頁測試
可通過ip+nginx設置的監(jiān)聽端口來訪問Web服務,如http://1.1.1.231:80
若報錯或者啟動失敗,可查看日志排除錯誤
docker logs nginx
域名配置
接下來我們講解如何配置域名,讓我們能通過域名(如www.baidu.com)訪問自己的網站
域名購入
域名購入的話可以去騰訊云,便宜的域名幾塊錢可以買一年

設置DNS解析
購買域名后還不能直接使用,需要設置DNS解析,將域名指向我們的服務器Ip


輸入Ip并保存解析

一般來說,成功設置解析后幾分鐘就會正常生效,可以嘗試通過ping 域名來確定是否成功解析
Nginx配置監(jiān)聽域名
這里只要把我們上面的配置中的server_name從ip改成我們的域名就可以了
#監(jiān)聽的端口號
listen 80;
#要監(jiān)聽的服務器地址,域名也可行,根據(jù)實際情況修改
server_name 你的域名;重啟nginx容器,使配置生效,就可通過域名訪問網站啦~
docker restart nginx
SSL證書配置
為什么要配置SSL證書
當我們沒有配置SSL證書訪問網頁時,會發(fā)現(xiàn)地址欄左邊會提示不安全,這是由于http明文方式傳輸缺乏安全性,谷歌等主流瀏覽器也會對沒有安裝SSL證書的網站顯示“不安全”。

故我們需要配置SSL證書,從Http請求訪問網站改為Https請求訪問網站。
申請SSL證書
申請SSL證書可以去阿里云免費申請SSL證書。一年可以申請20次,每次申請的證書有效期為三個月,也夠個人使用了。

申請SSL證書成功后,我們可下載該SSL證書的pem/key文件

上傳pem/key文件到服務器上,比如我上傳的位置為/root/nginx_conf/ssl目錄下
配置SSL證書
修改Nginx配置,轉發(fā)80端口請求,轉發(fā)至443端口
#以下為啟用SSL證書的配置
server {
listen 80;
#支持IPV6
listen [::]:80;
server_name 你的域名;
client_max_body_size 20m;
access_log /var/log/nginx/host.access.log main;
#開啟gzip功能
gzip on;
#開啟gzip靜態(tài)壓縮功能
gzip_static on;
#gzip緩存大小
gzip_buffers 4 16k;
#gzip http版本
gzip_http_version 1.1;
#gzip 壓縮級別 1-10 r
gzip_comp_level 5;
#gzip 壓縮類型
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
#配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持
gzip_disable "MSIE [1-6]\.";
rewrite ^(.*) https://$server_name$1 permanent;
}443端口監(jiān)聽配置如下,主要注意的地方為ssl_certificate和ssl_certificate_key要改成你的文件名
server {
listen 443 ssl;
server_name www.luckysj.online;
ssl_certificate /etc/nginx/ssl/你的pem文件;
ssl_certificate_key /etc/nginx/ssl/你的key文件;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定義設置使用的TLS協(xié)議的類型以及加密套件(以下為配置示例,請您自行評估是否需要配置)
#TLS協(xié)議版本越高,HTTPS通信的安全性越高,但是相較于低版本TLS協(xié)議,高版本TLS協(xié)議對瀏覽器的兼容性較差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示優(yōu)先使用服務端加密套件。默認開啟
ssl_prefer_server_ciphers on;
location / {
# 項目地址,這里指的是nginx容器的地址
root /var/www/html/luckysj;
try_files $uri $uri/ /index.html?s=$uri&$args;
# 默認訪問的資源
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}重啟nginx容器,通過域名訪問網站就會發(fā)現(xiàn)請求自動變?yōu)閔ttps啦~

這里需要注意的是,如果你web服務改為了Https請求,那么web服務請求后端也需要通過Https協(xié)議,也就是后端服務也需要配置SSL證書服務(可通過nginx反向代理實現(xiàn),這里就不細講啦)
總結
本文簡單的介紹了如何使用Docker和Nginx來部署和管理Web服務,以及域名與SSL證書的配置,感謝您的觀看,有幫助就多多三連吧~
以上就是使用Docker和Nginx部署Web服務的操作指南的詳細內容,更多關于Docker Nginx部署Web的資料請關注腳本之家其它相關文章!
相關文章
解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)
這篇文章主要介紹了解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
基于Docker實現(xiàn)MySQL主從復制的詳細教程
這篇博客整理了如何在Docker環(huán)境下配置MySQL主從復制,通過創(chuàng)建和命名兩個MySQL容器,設置獨立IP,并詳細說明了在宿主機上持久化數(shù)據(jù)、開啟root遠程訪問及添加復制用戶的過程,需要的朋友可以參考下2024-10-10
Docker容器搭建運行python的深度學習環(huán)境的方法
本文主要介紹了Docker容器搭建運行python的深度學習環(huán)境的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
docker創(chuàng)建鏡像并上傳云端服務器的實現(xiàn)示例
鏡像是一種輕量級、可執(zhí)行的獨立軟件包,用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件,本文介紹了如何使用Docker創(chuàng)建鏡像,并將其上傳到云端,感興趣的可以了解一下2023-08-08

