Urre wordpress nginx docker-compose image

Ngày nay, gần một nửa trong số 1 triệu trang web hàng đầu trên internet sử dụng WordPress CMS (Hệ thống quản lý nội dung). WordPress có rất nhiều tính năng và rất dễ sử dụng ngay cả đối với người dùng không có kỹ thuật, điều này khiến nó trở thành giải pháp CMS cho nhiều người. Tuy nhiên, thiết lập một trang web với WordPress trong máy chủ VPS hoặc máy chủ Đám mây có thể là một nhiệm vụ khá khó khăn đối với cả người dùng không có kỹ thuật cũng như kỹ thuật. Chúng ta sẽ học cách làm điều đó trong bài viết này

Cài đặt WordPress với Docker, Nginx, Apache với SSL. Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập hiệu suất tốt nhất với Docker, Docker Compose, Nginx, Apache, PHP 8. 1, MariaDB và Let's Encrypt để chạy WordPress trên Ubuntu 22. 04

Chúng tôi cũng sẽ tạo các khối để các thay đổi hoặc cập nhật sẽ được giữ nguyên trong khi khởi động lại vùng chứa

Thiết lập này được thử nghiệm trên đám mây của Google với phiên bản chạy Ubuntu 22. 04 HĐH. Bạn cũng có thể thực hiện thiết lập này trong bất kỳ dịch vụ đám mây nào như AWS hoặc Azure hoặc DigitalOcean hoặc bất kỳ máy chủ chuyên dụng hoặc VPS nào

Urre wordpress nginx docker-compose image

Urre wordpress nginx docker-compose image

BẮT ĐẦU

điều kiện tiên quyết

  1. Cài đặt Docker trên Ubuntu 22. 04
  2. Cài đặt Docker Compose trên Ubuntu 22. 04

Hãy chắc chắn rằng bạn đã hoàn thành tất cả các bước được đề cập ở trên

  • Tên miền trỏ đến địa chỉ IP máy chủ của bạn
  • Docker được cài đặt và cấu hình
  • Docker Compose được cài đặt và cấu hình

Khi bạn đã hoàn thành tất cả các điều kiện tiên quyết, bạn có thể tiến hành thiết lập và định cấu hình WordPress

Bước 1. Tạo một thư mục dự án

SSH đến máy chủ của bạn và bắt đầu bằng cách tạo một thư mục dự án mới có tên 

cd wp-project
2. Bạn cũng có thể đặt tên cho nó bất cứ điều gì bạn cần

mkdir wp-project

Bước 2. Tạo Docker Soạn tệp YML

Bây giờ điều hướng bên trong thư mục dự án và tạo một docker-compose mới. yml với cấu hình sau

cd wp-project

Tạo một tệp

cd wp-project
3 mới

nano docker-compose.yml

Copy toàn bộ nội dung bên dưới dán vào file

Đảm bảo thay thế các biến môi trường được đề cập bên dưới

version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:

Nhấn

cd wp-project
4 theo sau là
cd wp-project
5 và
cd wp-project
6 để lưu và thoát tệp

Sau đây là chi tiết cấu hình

  • phiên bản. Soạn phiên bản tệp tương thích với Docker Engine. Bạn có thể kiểm tra tính tương thích tại đây
  • dịch vụ. ở đây chúng tôi có 4 dịch vụ có tên là
    cd wp-project
    7,
    cd wp-project
    8,
    cd wp-project
    9 và
    nano docker-compose.yml
    0
  • hình ảnh. Chúng tôi sử dụng WordPress mới nhất với PHP 8. 1, hình ảnh Apache, Mariadb, Nginx và Certbot có sẵn trong trung tâm Docker
  • tập
    • cd wp-project
      7. chúng tôi đã định cấu hình thư mục này để được đồng bộ hóa với thư mục mà chúng tôi muốn sử dụng làm gốc web bên trong vùng chứa
    • nano docker-compose.yml
      2. ở đây chúng tôi sẽ đặt tệp cấu hình Nginx được đồng bộ hóa với Nginx conf mặc định. d thư mục bên trong container
    • nano docker-compose.yml
      3. đây là nơi chúng tôi sẽ nhận chứng chỉ SSL và chứng chỉ này sẽ được đồng bộ hóa với thư mục chúng tôi muốn bên trong vùng chứa
    • nano docker-compose.yml
      4. định cấu hình vùng chứa để lắng nghe các cổng được liệt kê
    • nano docker-compose.yml
      5. lệnh được sử dụng để nhận chứng chỉ SSL
  • Môi trường. ở đây chúng tôi liệt kê tất cả các biến môi trường có sẵn cho hình ảnh WordPress
    • nano docker-compose.yml
      6. Ở đây chúng tôi đang sử dụng tên dịch vụ của bộ chứa MariaDB
    • nano docker-compose.yml
      7. Giống như dịch vụ chúng tôi đã định cấu hình trong dịch vụ mariadb
    • nano docker-compose.yml
      8. Giống như dịch vụ chúng tôi đã định cấu hình trong dịch vụ mariadb
    • nano docker-compose.yml
      9. Giống như dịch vụ chúng tôi đã định cấu hình trong dịch vụ mariadb

Bước 3. Định cấu hình Nginx

Theo cấu hình

cd wp-project
3, chúng ta cần tạo tệp
version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:
1 bên trong thư mục
version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:
2

Tạo thư mục bên cạnh tệp

cd wp-project
3 của bạn để chứa tệp cấu hình

mkdir -p nginx/conf

Tạo một tệp có tên

version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:
1

nano nginx/conf/default.conf

Đặt các cấu hình sau, ở đây chúng tôi sử dụng cấu hình proxy ngược để chứa wordpress chạy Apache

 server {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain.com;

    root /var/www/html;
    index index.php;

    location ~ /.well-known/acme-challenge {
        allow all; 
        root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~/. {
        deny all;
        access_log off;
        log_not_found off;
    }
} 

Nhấn

cd wp-project
4 theo sau là
cd wp-project
5 và
cd wp-project
6 để lưu và thoát tệp

Bây giờ bạn đã có cấu hình soạn thảo docker và cấu hình Nginx của mình

Bước 4. Triển khai WordPress với Docker Compose

Bắt đầu các vùng chứa bằng lệnh sau, bạn sẽ nhận được chứng chỉ SSL sau khi các vùng chứa được khởi động

docker-compose up -d

Sau khi tất cả các vùng chứa được khởi động, bạn sẽ thấy hai thư mục bổ sung

nano docker-compose.yml
0 và
cd wp-project
7 được tạo cùng với tệp
cd wp-project
3 của bạn

Thư mục

cd wp-project
7 chứa tất cả mã nguồn trang web WordPress của bạn

Thư mục

nano docker-compose.yml
0 chứa tất cả các tệp liên quan đến chứng chỉ SSL của bạn

Để xem các thùng chứa, bạn có thể thực hiện lệnh sau

docker-compose ps

Bước 5. Cấu hình Let's Encrypt SSL với Nginx

Khi bạn đã nhận được chứng chỉ Let's Encrypt SSL, bạn có thể định cấu hình HTTPS và thiết lập chuyển hướng sang HTTPS

Chỉnh sửa

version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:
1 và thực hiện các thay đổi sau

nano nginx/conf/default.conf
cd wp-project
0

Nhấn

cd wp-project
4 theo sau là
cd wp-project
5 và
cd wp-project
6 để lưu và thoát tệp

Bây giờ hãy khởi động lại dịch vụ Nginx để tải các cấu hình mới

cd wp-project
1

Bây giờ bạn có thể kiểm tra tên miền của mình từ trình duyệt. Bạn sẽ nhận được chuyển hướng đến HTTPS và bạn sẽ thấy trang cài đặt WordPress để hoàn tất cài đặt

Tìm hiểu các Kỹ thuật nâng cao nhất của WordPress với khóa học dễ học này ngay bây giờ

Phần kết luận

Bây giờ bạn đã học cách cài đặt và thiết lập WordPress với Nginx, Apache, PHP 8. 1, MariaDB và Let's Encrypt with Docker và Docker Compose trên Ubuntu 22. 04