安裝Dockerphp
獲取 images
docker pull linuxserver/letsencrypt
linux
hub.docker.com/r/linuxserver/letsencryptnginx
github.com/linuxserver/docker-letsencryptgit
此鏡像包含了Nginx服務器、反向代理、PHP和用於生成或續簽證書的letsencrypt client,也包含了用於防護入侵的fail2ban。
本文使用的是http
的方式請求的證書,故使用tls-sni
或 dns
方式的讀者,請參考【詳細介紹及使用方法】連接裏的原文github
在<>
中加入合適的值便可。docker
docker run \ --cap-add=NET_ADMIN \ --name=letsencrypt \ -v <path to data>:/config \ -e PGID=<gid> -e PUID=<uid> \ -e EMAIL=<email> \ -e URL=<url> \ -e SUBDOMAINS=<subdomains> \ -e VALIDATION=http \ -p 80:80 -p 443:443 \ -e TZ=Asia/Shanghai \ linuxserver/letsencrypt
參考來自github.com,有修改。ubuntu
-p 80 -p 443
- 端口號-v /config
- 全部的配置文件及網站根目錄路徑(筆者:只需指定可讀寫路徑便可,容器生成時會在此路徑生成一堆文件),下文<your-path>
指的就是這個。-e URL
- 頂級域名,好比 test.com
-e SUBDOMAINS
- 二級域名 好比 www,ftp,cloud
多個二級域名用「,
」隔開, http
方式不支持泛域名,如想使用,請使用dns
方式,本文不作介紹。-e VALIDATION
- letsencrypt 驗證所使用的方法-e PGID
for GroupID - 詳情見下面說明, 不可以使用root的GID
-e PUID
for UserID - 詳情見下面說明, 不可以使用root的UID
-e TZ
- timezone ie. Asia/Shanghai
有時在使用數據卷( -v標誌)時,主機操做系統和容器之間可能會出現權限問題。 咱們經過容許您指定用戶PUID和組PGID來避免此問題。 確保主機上的數據卷目錄由您指定的同一用戶擁有而且它能「正常工做」。segmentfault
在這種狀況下, PUID=1001而且PGID=1001 。 要找到你的id user ,請使用id user ,以下所示:服務器
id <dockeruser>
敲入上面的命令(docker run ....)後,首次使用須要生成DH參數,須要耐心等待啦。
查看狀態
docker logs -f letsencrypt
若是看到以下所示就大功告成啦。
...... ...... ...... Server ready
那麼,申請的證書在哪?
在輸出的狀態中可知:證書存在於<your-path>
/config/etc/letsencrypt/live/<domain> 中,至於裏面的證書都是用來幹嗎的,請參考該目錄下的README。本文不作描述
該鏡像默認的設置已經對反向代理作了優化(感謝大佬),最簡單的方式就是找到<your-path>
/config/nginx/proxy-confs下適合本身的配置文件,去掉.sample
便可。可是筆者發現,好像這裏面的配置不適合全部狀況,故還要本身寫配置文件.......
注意:反向代理分爲兩種方式,第一種是經過同一域名不一樣路徑做爲反向代理,第二種是不一樣域名指向不一樣虛擬主機做爲反向代理。本文使用的第二種,詳情能夠看<your-path>
/config/nginx/proxy-confs/_readme
切換路徑
cd <your-path>/config/nginx/site-confs
不要理會 default , 固然,直接修改裏面的文件也行,筆者爲了簡潔,直接新建文件
建立文件 <your-domain>
好比
touch test.com
修改文件
vi test.com
文件內容以下
server { listen 443 ssl; server_name <your-domain>; charset utf-8; include /config/nginx/ssl.conf; client_max_body_size 0; location / { include /config/nginx/proxy.conf; proxy_pass <Web-OR-ContainerName>; } }
注意<your-domain>
中填寫域名,<Web-OR-ContainerName>
中要填寫反向代理的網址或者是容器名稱,好比說proxy_pass http://gogsWeb:3000/;
,至於容器之間如何互聯,請看下節。若是須要建立多個反向代理,就如法炮製,再建立文件,再新建個虛擬主機,以server_name區分便可。
docker network create cert_network docker network connect cert_network <other-container> docker network connect cert_network letsencrypt
注意,須要互聯的容器創建時不須要指定'-P'即端口與主機端口綁定!!!只須要確保容器內端口開放便可。
docker restart letsencrypt
https://github.com/linuxserver/docker-letsencrypt
https://hub.docker.com/r/linuxserver/letsencrypt/
https://letsencrypt.org/
https://docs.docker.com/engine/reference/commandline
http://nginx.org/en/docs/http/configuring_https_servers.html
https://www.zybuluo.com/phper/note/89391
http://www.javashuo.com/article/p-uzsrhkjc-ky.html
https://blog.csdn.net/gripleaf/article/details/8552324
本文采用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議進行許可,發表在CSDN和博客園,歡迎讀者轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接!請讀者/爬蟲們尊重版權