一台伺服器上的多個 WordPress 站點與 docker

您需要一個或兩個或三個網站嗎?雖然您可以轉到 WordPress.org 並擁有多個站點,但它的功能非常有限 — 沒有插件,除非您支付我認為是可笑的金額和自定義域的費用。有點糟透了。

下一步是轉到一個網路主機並獲得一個共享的 cpanel 實例,它非常易於使用,並在其上安裝 WordPress。很簡單的東西。您可以轉到 Hostgator 等網站,以這種方式以 3.95 美元的價格獲得一個網站,並能夠使用自定義域名,並安裝完整版的 WordPress。這是以低廉的價格獲得單個全功能 WordPress 實例的最簡單方法,但在入門級共享託管計划上運行多個站點並不理想。

我想託管多個 WordPress 站點並有空間運行其他服務,所以我朝著稍微複雜的方向前進。我從 Contabo 獲得了一個 VPS(虛擬專用伺服器)——每月 6.99 美元,你可以獲得一個帶有 4 個 vCPU、8GB 內存和 50GB NMVe ssd 的 VPS。每月只需​​ 7 美元,這真是太棒了!我幾乎可以託管任意數量的 wordpress 網站。通過使用 docker 將我的 wordpress 網站容器化,如果其中一個成為妥協的受害者,它將與其他網站隔離開來,如果需要,我可以運行不同的版本。我也可以獨立重啟它們,它們不會共享資料庫。

擊敗共享主機!

它比共享託管多一點動手,比 wordpress.org 多得多,但它仍然很容易管理。我將通過 SSH 訪問 VPS、安裝 docker 和 docker compose、NGINx 代理管理器、設置 DNS 和 WordPress 容器。我使用 VPS,但您可以在本地伺服器或專用伺服器上輕鬆地做同樣的事情。

首先,從某個地方購買 VPS,在哪裡並不重要。有些主機在客戶支持方面比其他主機更好,有些主機的價格比其他主機好得多。

其次,獲取您的域名。域名註冊商一毛錢一打,但再一次,有些比其他的更好。我喜歡 namecheap,因為他們的域帶有免費的 DNS 隱私,而像 godaddy 這樣的地方需要額外收費。個人喜好在這裡。

購買 vps 後,您將獲得用於訪問伺服器的 SSH 登錄憑據。接下來,如果您使用的是 Mac 或 Linux,您將打開終端,或者如果您使用的是 Windows,則在 SSH 客戶端上下載。您所要做的就是輸入:

ssh username@127.0.0.1

顯然替換提供的用戶名和 IP 地址,然後輸入您設置的密碼,或者他們也提供的密碼。

我們的 Nginx 代理管理器和我們的 WordPress 站點都將託管在 docker 容器中,因此下一步是安裝 docker。我在我的 VPS 上使用 Ubuntu,所以確切的命令對你來說可能不一樣,但它的要點是一樣的。

安裝 Docker

首先,我們將更新系統。apt-get update 查看系統上是否有軟體包的更新,apt-get upgrade 實際上會安裝它們。

sudo apt-get update && sudo apt-get upgrade

現在我們可以安裝 docker 的先決條件並添加存儲庫,因為它不在標準的 Ubuntu 存儲庫中。

sudo apt-get install \ca-certificates \curl \gnupg \lsb-release

下面的命令添加了 dockers GPG 密鑰。當我們從存儲庫下載時,GPG 密鑰確保我們知道我們正在安裝一個簽名的官方版本的 docker。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg - dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

然後我們添加 docker 存儲庫:

echo \"deb [arch=$(dpkg - print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

最後一次運行 sudo apt-get update 以載入新的存儲庫,我們終於可以安裝 docker 了。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

使用 sudo docker run hello-world 確保 docker 已正確安裝。

您應該得到如下所示的輸出:

1QBNYuHPEr5cyU_r_QTfxtw 通過下拉 hello world 鏡像確保 docker 正常工作

安裝 Nginx 代理管理器

Nginx 代理管理器是一個基於 Web 的工具,充當反向代理。現在,什麼是反向代理,我們為什麼需要它?

我們的伺服器有 1 個 IP 地址。如果我們想在我們的伺服器上託管多個網站,我們需要一種方法來將單個 IP 用於多個網站。反向代理可以讓我們做到!它接受到伺服器的傳入連接,並將其轉發到正確的埠。例如,假設我們的網站 A、B 和 C 都在公共 IP 為 162.159.153.4 的伺服器上運行。在內部,這 3 個網站分別運行在埠 80、81 和 82 上。

在 DNS 中,每個站點都指向相同的 IP,但我們能夠單獨訪問所有 3 個站點。如何?反向代理接收傳入請求,查看請求的域名,並將請求指向正確的埠。因此,如果我們訪問 B.com,反向代理將知道將我們指向埠 81,依此類推。

我們將使用 docker compose 在 docker 容器中設置 Nginx。我正在從 https://nginxproxymanager.com 中提取代碼。

我們將創建一個文件夾「apps」來保存我們所有的 docker-compose 腳本,並在該文件夾內創建一個用於 nginxproxymanager 的文件夾。

mkdir appscd appsmkdir nginxproxymanagercd nginxproxymanager

並創建一個 docker-compose 文件

nano docker-compose.yml

只需將其複製到文件中,我們不需要更改埠或任何內容。

version: "3"services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt

使用 ctrl + x 保存並運行 docker-compose up -d 以啟動容器。轉到網路瀏覽器並輸入您的伺服器地址,如下所示:127.0.0.0:81。

瞧!

1KOA8HObseSkTGLWZupZBmQ

使用默認憑據 admin@example.com 和密碼「changeme」登錄,它會提示您創建新憑據。我們將在安裝 WordPress 之後再回來討論這個問題。

獲取一個 wordpress 容器

將目錄更改回應用程序,為您的站點創建一個文件夾,然後將其放入 cd 中。製作另一個 docker compose 文件(確保它也是 docker-compose.yml)並粘貼到下面。

version: "3.9"services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpressvolumes: db_data: {} wordpress_data: {}

在此撰寫文件中,埠號很重要。它將伺服器上的埠 8000 映射到 docker 容器中的埠 80。

如果您想在同一台伺服器上創建另一個站點,請在新目錄中重複上述步驟,粘貼上面相同的代碼並將外部埠更改為其他埠,例如 8001。

運行 docker-compose up -d 以啟動容器,它將可以在您的伺服器 ip 和埠上訪問,如下所示:127.0.0.1:8000。

域名系統

前往您註冊域的位置以設置指向您的伺服器 IP 的 A 記錄。您會將主機設置為「@」,並將值設置為您的實例 IP 地址。如果您計劃將多個域連接到多個 WordPress 實例,它們將全部指向同一個 IP——我們安裝的代理管理器將負責將流量引導至適當的容器。

最後的步驟

回到 nginx 代理管理器,登錄並前往 hosts < proxy hosts < add proxy host。添加您的域名,您的伺服器的 ip 和我們之前設置的埠。如果託管多個,您也會為每個後續的 WordPress 實例做同樣的事情。

1NpksWVRlREZmyED18z_uxg

然後轉到 SSL 選項卡,並請求新的 SSL 證書。我們完成了!十分簡單。

現在您可以轉到您的域,該域現在已連接到您剛剛 dockerized 的 WordPress 站點!

相關文章