docker 安裝 wordpress,通過nginx反向代理,繫結域名,配置https

大資料技術派發表於2021-10-02

假設docker已經安裝好了,如果沒有安裝,可以照著 5分鐘安裝docker教程
安裝一下。

一. 下載映象

預設下載最新版本,如果想指定對應版本,可以用冒號後加版本,像這樣mysql:5.7

docker pull mysql:5.7
docker pull wordpress
docker pull nginx

二. 啟動container例項

已經下載好了image,接下來啟動container,需要分別啟動mysql,wordpress,nginx。

1. 啟動mysql

因為wordpress是需要安裝資料庫的,這裡安裝mysql並且啟動:

docker container run -d \
--name wordpressdb \
-p 3306:3306 \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7

各個引數含義:
-d: 指定容器以守護程式方式在後臺執行;
--name: 指定容器名稱,此處我指定的是wordpressdb;
-env 環境引數,MYSQL_ROOT_PASSWORD設定root使用者的密碼
-p: 指定主機與容器內部的埠號對映關係,
[宿主機埠號]:[容器內部埠],此處我使用了主機3306埠,對映容器3306埠;
mysql:5.7 是nginx的映象IMAGE ID前4位

這些引數中涉及了一些名詞,如果看不懂,建議去看看docker的基本概念。簡單來說就是,docker技術通過image這種模板,生成contaienr例項,下次還可以再生成一個contaienr例項,image像是一個模板,可以多次使用。contaienr例項可以看作小型的虛擬機器,多個虛擬機器在區域網裡面,需要將埠對映到宿主機上面,我們都知道直接訪問區域網的內網ip是不能訪問的,通過宿主機的公網ip:對映的埠即可訪問了。

2. 啟動wordpress

docker安裝wordpress,相比docker安裝mysql,這裡相比多了兩個引數,後面會解釋。如果安裝成功,通過docker ps可以看到wordpress的程式,瀏覽器輸入ip:8080,應該是可以在網頁安裝wordpress了。

docker run -d \
--name wordpress \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
-p 8080:80 \
wordpress

--link:關聯mysql容器,如果是使用非docker安裝的mysql,比如自己手動安裝的mysql,可以通過引數--env指定資料庫連線:

-e WORDPRESS_DB_HOST=192.168.80.129:3306 \
-e WORDPRESS_DB_USESR=root \
-e WORDPRESS_DB_PASSWORD=123456

--volume:將容器的/var/www/html對映到當前目錄下,這樣直接操作當前目錄,即可操作容器目錄,否則還得進去容器操作,我們都知道容器是一個閹割版的小型虛擬機器,像vim這種常用命令預設是沒有的;

注意:wordpress容器預設開的是80埠,這裡將容器的80埠對映到宿主機的8080埠,為什麼不也對映到80埠呢,因為後面要安裝nginx,nginx一般要監聽80埠,雲服務商一般配置域名:ikeguang.com繫結雲主機的80埠,所以最後nginx只能由nginx佔用宿主機的80埠,避免不必要的麻煩。

3. 啟動nginx

如果上面wordpress安裝好了,網站可以通過ip地址正常訪問,釋出文章了,可以考慮繫結域名了,加個nginx進行反向代理。

1). 配置http訪問:

nginx配置

http訪問的時候,預設一個server監聽80埠即可;如果配置https,需要加個server,監聽443埠,這裡先把http訪問配置好再說,貼出了我的配置:

include /etc/nginx/conf.d/*.conf;
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   
   location / {
      proxy_set_header Host $host;
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主機ip:8080;
   }
}

這裡http://宿主機ip:8080,因為前面我們的wordpress對映宿主機的埠是8080,這裡nginx代理宿主機8080埠,也就是說你訪問80埠(nginx),相當於代理訪問了8080埠(wordpress),並且雲服務商配置的域名也是繫結80埠,這樣訪問域名,就訪問了8080埠的wordpress了,就能訪問網站了。

說明:因我wordpress啟動埠不是80,需要新增配置:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

啟動nginx容器
既然nginx.conf配置好了,接下來啟動nginx容器:

docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx

這裡需要注意:

  • 這裡將容器的目錄/etc/nginx對映,需要先通過docker cp命令複製一份完整nginx的目錄到宿主機,然後修改檔案,再執行上面docker run命令。資料夾對映的時候,資料夾裡面的所有檔案應該是一樣的,檔案內容可以不一樣。

經過上面的配置,應該是可以通過瀏覽器輸入域名:ikeguang.com訪問網站了。

2). 配置https訪問:

經過前面的配置,通過域名應該可以訪問網站了,接下來配置https:
nginx.conf配置:

include /etc/nginx/conf.d/*.conf;
server {
    #監聽443埠
    listen 443 ssl;
    #對應的域名
    server_name ikeguang.com www.ikeguang.com;
    ssl_certificate ssl/1_ikeguang.com_bundle.crt;
    ssl_certificate_key ssl/2_ikeguang.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    location / {
	  proxy_set_header Host $host;
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主機ip:8080;
   }
}
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   #把http的域名請求轉成https
   rewrite ^(.*)$ https://$host$1; #將所有HTTP請求通過rewrite指令重定向到HTTPS。

   location / {
      proxy_set_header Host $host;
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主機ip:8080;
   }
}

把前面啟動http的nginx容器刪除,配置好ssl證照,再次啟動,需要啟動80埠和443埠。

docker run -d -p 80:80 -p 443:443 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
  • -p 443:443,如果配置ssl,才需要這個引數,開始去掉,這裡先把域名繫結成功,http可以訪問了,再進行第二步配置https訪問,ssl證照可以在雲服務商那裡申請免費的,然後按照幫助文件安裝即可,沒啥坑。

相關文章