主機環境更新實錄 (2) – Docker 篇


首先撰寫一支 compose file,設定要使用的 docker image,以及掛載 volumes 的路徑,掛載的部分包含網頁程式碼、主機設定檔以及憑證路徑。

version: '3.7'
services:
  home:
    container_name: home
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - /html:/usr/share/nginx/html
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - /ssl:/etc/nginx/ssl

如法炮製一個 port 為 8000:80、8001:443 的 container,如此一來首頁以及個人頁面就已經完成架設。

WordPress

wordpress 的部分,官方 image 使用 apache 做為 web server,但也可以改為使用 nginx + wp-fpm 的方式,使用 nginx 的話要額外再做一些設定,一開始我是打算使用 nginx,但最後因為多站點的導向問題處理不了,最後放棄還是使用官方的版本,詳細會在後續文章中說明。

以下是 docker-compose 設定檔:

version: '3.7'
services:
  db:
    container_name: db
    image: mysql:8.0
    restart: always
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - wp_db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=wordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress

  wordpress:
    container_name: wp
    image: wordpress
    depends_on:
      - db
    restart: always
    ports:
      - 8010:80
      - 8011:443
    volumes:
      - /wp/html:/var/www/html
      - /wp/conf:/etc/apache2/sites-available
      - ./ssl/certificate.crt:/etc/ssl/certificate.crt
      - ./ssl/ca_bundle.crt:/etc/ssl/ca_bundle.crt
      - ./ssl/private.key:/etc/ssl/private/private.key
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress

volumes:
  wp_db_data:

1. 執行 docker-compose up 之後,DB 一直重複 restart:

可以透過以下指令查看 container 的狀態,後來發現是因為主機記憶體不足,沒辦法成功啟動。

docker logs <container-name>
2. docker 成功啟動,但是無法進入該機器:

AWS 預設會將絕大部分的 port 關閉,要到 EC2 的安全群組去設定對應的 port 開啟才可以。

3. 進入 wordpress 頁面時看到 Error Establishing a Database Connection 錯誤:

由於啟動過程中各種 up & down,先前 up 時已經掛載了 volume,因此後續的設定無法正常套用,沒有正確建立出給 wordpress 使用的帳密,可透過以下指令清除後再重新啟動。

docker-compose down -v

若有在使用 wordpress 會知道這是非常常見的錯誤,因此也不一定是這個原因所導致,建議先透過以下指令碼去查看帳密是否都有正確寫入:

docker exec -it mysql bash
mysql -u root -p
// 輸入密碼
mysql> SELECT User,Host FROM mysql.user;

另外也有可能是 mySQL 8 版的驗證方式wp-config.php 設定錯誤等原因。

4. 輸入 IP 將 wordpress 安裝完成後,從 domain 進入網站,樣式會跑掉

初次安裝時,會將 server IP 寫入資料表,可以透過以下指令查看及修改:

mysql -u root -p
mysql> select * from wp_options where option_id=1;
mysql> update wp_options set option_value="http://xxxx" where option_id=1;

個人的建議是,如果還沒安裝的話就先不要安裝,讓畫面停在 wordpress 的介紹安裝頁,等待 DNS 以及 SSL 等等設定都全部完成之後,最後再來安裝。


參考資料:


主機環境更新實錄:

  1. 主機環境更新實錄 (1) – 前情提要篇
  2. 主機環境更新實錄 (2) – Docker 篇
  3. 主機環境更新實錄 (3) – DNS 及轉導篇
  4. 主機環境更新實錄 (4) – SSL 篇
  5. 主機環境更新實錄 (5) – WP 篇
  6. 主機環境更新實錄 (6) – 完結篇

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *