使用 Docker 和 Traefik 搭建 WordPress

傳智黑馬發表於2019-05-10

使用 Docker 和 Traefik 搭建 WordPress
其實不止一次想重新提筆聊聊 WordPress ,然而之前因為定製程式碼量比較多,許多文章不得不擱置在草稿箱中。恰逢假期,整理草稿箱,從搭建開始聊起吧。

本文將使用 Docker、Compose、Traefik 對 WordPress 進行搭建,完整操作時間應該在十分鐘內。

為什麼選擇 WordPress
每當聊起 CMS 類軟體,聊起社群資源豐富,不由地會想到一個“萬金油”:WordPress ,官方資料稱:

Over 60 million people have chosen WordPress to power the place on the web they call “home”

Hundreds of thousands of developers, content creators, and site owners gather at monthly meetups in 436 cities worldwide.

WordPress 為 33% 的網際網路提供支援。

許多人對它的印象還停留在執行速度慢、安全性差、程式碼臃腫的部落格系統上。但是事實上,經過十幾年的迭代,它的大版本來到了 5.0 (PHP 主流執行時也來到了 7.0 時代),效能早已不是問題、安全問題只要做適當的防護能杜絕絕大多數。

emmm, 程式碼確實還是挺臃腫的。

基於官方映象
官方提供了容器映象,映象下載可以直接使用下面的命令:

docker pull wordpress
1
但是為了更好的配置使用,我們使用 compose 的方式進行編排,將下面的內容儲存為 docker-compose.yml :

version: '3'

services:

  wp:
    image: ${WP_IMAGE}
    restart: always
    networks:
      - traefik
    environment:
        WORDPRESS_DB_HOST: ${DB_HOST}
        WORDPRESS_TABLE_PREFIX: ${WP_DB_PREFIX}
        WORDPRESS_DB_NAME: ${DB_NAME}
        WORDPRESS_DB_USER: ${DB_USER}
        WORDPRESS_DB_PASSWORD: ${DB_PASS}
    volumes:
    # 如果你有定製上傳檔案尺寸的需求
    # - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - ./wp-app:/var/www/html
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:${WP_DOMAINS}"
      - "traefik.frontend.entryPoints=https,http"

  mariadb:
    image: ${DB_IMAGE}
    restart: always
    container_name: ${DB_HOST}
    networks:
      - traefik
    environment:
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
    volumes:
      - ./data:/var/lib/mysql

  pma:
    image: ${PMA_IMAGE}
    restart: always
    networks:
      - traefik
    environment:
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      PMA_HOST: ${DB_HOST}
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:${PMA_DOMAIN}"

networks:
  traefik:
    external: true

如果你還不會使用 Traefik ,可以翻看我之前的文章,這裡不做過多贅述。

為了可維護性,我們將容器映象版本資訊,應用域名,資料庫配置等抽象為單獨的環境配置檔案 .env,內容示例:

WP_IMAGE=wordpress:5.1.1-php7.3-apache
WP_DOMAINS=wp.lab.com,wp.lab.io
WP_DB_PREFIX=wp

DB_IMAGE=mariadb:10.3.8
DB_HOST=wp-db
DB_NAME=wordpress
DB_USER=wordpress
DB_PASS=wordpress
DB_ROOT_PASS=soulteary

PMA_IMAGE=phpmyadmin/phpmyadmin:4.8.2
PMA_DOMAIN=pma.wp.lab.com,pma.wp.lab.io

當兩個檔案都儲存完畢之後,我們執行 docker-compose up 命令,你將會看到許多日誌資訊,當看到類似下面的資訊時,WordPress 環境便準備就緒啦。

wp-db      |
wp-db      | MySQL init process done. Ready for start up.
wp-db      |
wp-db      | 2019-04-06 16:26:48 0 [Note] mysqld (mysqld 10.3.8-MariaDB-1:10.3.8+maria~jessie) starting as process 1 ...
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Using Linux native AIO
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Uses event mutexes
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Number of pools: 1
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Using SSE2 crc32 instructions
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Completed initialization of buffer pool
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Creating shared tablespace for temporary tables
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: 10.3.8 started; log sequence number 1630833; transaction id 21
wp-db      | 2019-04-06 16:26:48 0 [Note] Plugin 'FEEDBACK' is disabled.
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
wp-db      | 2019-04-06 16:26:48 0 [Note] Server socket created on IP: '::'.
wp-db      | 2019-04-06 16:26:48 0 [Note] InnoDB: Buffer pool(s) load completed at 190406 16:26:48
wp-db      | 2019-04-06 16:26:48 0 [Warning] 'proxies_priv' entry '@% root@e97787886b74' ignored in --skip-name-resolve mode.
wp-db      | 2019-04-06 16:26:48 0 [Note] Reading of all Master_info entries succeded
wp-db      | 2019-04-06 16:26:48 0 [Note] Added new Master_info '' to hash table
wp-db      | 2019-04-06 16:26:48 0 [Note] mysqld: ready for connections.
wp-db      | Version: '10.3.8-MariaDB-1:10.3.8+maria~jessie'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
wp_1       | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.23.0.8. Set the 'ServerName' directive globally to suppress this message

此時啟動瀏覽器,開啟我們配置檔案中配置好的域名(WP_DOMAIN),便可以開始著名的“三分鐘”安裝了。
填寫適當資訊,一路 Next ,WordPress 就安裝成功了。
後續便是具體的應用配置,以及效能、安全方面的最佳化啦。
其他
如果你有運算元據庫的需求,又不想下載資料庫工具或者使用命令列進行操作,可以使用 **PHPMyAdmin ** ,同樣的,在瀏覽器中開啟之前配置檔案中的 PMA 域名地址(PMA_DOMAIN),就可以進行操作了。

不過需要注意的是,需要使用 root 和 root password 進行登入,因為預設情況下,Mariadb 未對其他使用者賬號進行遠端訪問授權。


本文轉自黑馬程式設計師官網社群,免費獲取更多技術知識與教程 關注主頁

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69915785/viewspace-2643938/,如需轉載,請註明出處,否則將追究法律責任。

相關文章