Docker-php-fpm

Bạn đang mong muốn tạo một môi trường máy chủ web cho WordPress là php-fpm + nginx nhanh bằng Docker Compose trên tất cả các hệ điều hành Windows, MacOS, Linux, cùng mình tham khảo các bước dưới đây nhé.

lục mục

Yêu cầu tạo môi trường như sau

  1. Miền cho môi trường dev cục bộ là. ví dụ. đồng. 5000
  2. Máy chủ web là nginx
  3. Use php-fpm
  4. mã nguồn wordpress
  5. mysql
  6. Tất cả đều được ánh xạ tới nơi chứa dự án ví dụ như mã nguồn wordpress được lưu trữ trong dự án mình có thể thêm chỉnh sửa xóa

Điều kiện cần để tạo môi trường Docker WordPress Nginx

  1. Để làm được điều đó trước tiên bạn buộc phải cài đặt Docker nhé, bài viết này sẽ hướng dẫn bạn cách cài đặt Docker trên các hệ điều hành Windows, MacOS, Linux
  2. Cần hiểu các kiến ​​thức/lệnh cơ bản về Docker (image, container, docker hub,. )
  3. Hay là cần biết gì, chỉ cần biết ĐÈN WordPress trước đây được, bạn chỉ việc làm theo từng bước sau đó ngâm cứu tìm hiểu kỹ hơn sau cũng được, nhưng trong từng bước mình sẽ hướng dẫn thật dễ hiểu cho bạn hiểu

Tạo tệp docker-compose. yml cho WordPress + Nginx + Mysql

Trước khi tạo tệp docker-compose.yml, bạn chắc chắn rằng con trỏ mình đang ở trong thư mục dự án mà bạn muốn tạo

ví dụ ở đây mình sẽ sử dụng thư mục có tên là example

Khai báo cơ sở dữ liệu dịch vụ

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: db-example
    restart: unless-stopped
    env_file: ./app/.env
    environment:
      - MYSQL_DATABASE=example
    volumes:
      - ./dbdata:/var/lib/mysql
      #- ./db/db.sql:/docker-entrypoint-initdb.d/install_wordpress.sql #if you have db.sql of project input here
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network
...

Giải thích vài điểm quan trọng cho bạn hiểu

  1. Database ở đây mình sẽ dùng image mysql. 8. 0
  2. Container name will be set as db-example
  3. Tập tin. env khai báo biến môi trường trong thư mục ứng dụng (ví dụ như MYSQL_ROOT_PASSWORD(mật khẩu root của  mysql), MYSQL_USER, MYSQL_PASSWORD,. )
  4. Môi trường biến đổi. MYSQL_DATABASE=example (tên cơ sở dữ liệu là ví dụ)
  5. Ánh xạ mysql tới thư mục dbdata. /dbdata. /var/lib/mysql

Khai báo dịch vụ wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:5.1.1-fpm-alpine
    container_name: wordpress-example
    restart: unless-stopped
    env_file: ./app/.env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=root
      - WORDPRESS_DB_NAME=example
    volumes:
      - ./app:/var/www/html
    networks:
      - app-network

dịch vụ wordpress

  1. Có liên kết đến db phụ thuộc_on. db
  2. Hình ảnh mình sẽ sử dụng wordpress. 5. 5. 1-fpm-alpine
  3. Container mình đặt là. wp-ví dụ
  4. Cũng khai báo biến môi trường trong tệp. /ứng dụng/. env
  5. Khai báo biến môi trường trực tiếp. (WORDPRESS_DB_HOST, WORDPRESS_DB_USER, WORDPRESS_DB_PASSWORD, WORDPRESS_DB_NAME)
  6. Ánh xạ mã nguồn wordpress tới thư mục ứng dụng. . /ứng dụng. /var/www/html

Khai báo dịch vụ webserver

...
  webserver:
    depends_on:
      - wordpress
    image: nginx:1.15.12-alpine
    container_name: webserver-example
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./app:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - app-network
...

Dịch vụ máy chủ web Nginx

  1. Thuộc tính buộc phải có sẵn wordpress. phụ thuộc. - wordpress
  2. Image used as. nginx. 1. 15. 12-núi cao
  3. Tên container webserver là webserver-example
  4. Port used on host is 80 container is 5000. 5000. 80
  5. Ánh xạ webroot tại thư mục ứng dụng. . /ứng dụng. /var/www/html
  6. Ánh xạ thư mục cấu hình nginx /etc/nginx/conf. d to directory nginx-conf. . /nginx-conf. /etc/nginx/conf. d - Trong thư mục nginx-conf cần phải có tệp nginx. conf,  mình sẽ hướng dẫn tạo file nginx. conf bên dưới

Tập tin docker-compose. yml hoàn thiện

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: db-example
    restart: unless-stopped
    env_file: ./app/.env
    environment:
      - MYSQL_DATABASE=example
    volumes:
      - ./dbdata:/var/lib/mysql
      #- ./db/db.sql:/docker-entrypoint-initdb.d/install_wordpress.sql #if you have db.sql of project input here
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network

  wordpress:
    depends_on:
      - db
    image: wordpress:5.1.1-fpm-alpine
    container_name: wordpress-example
    restart: unless-stopped
    env_file: ./app/.env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=root
      - WORDPRESS_DB_NAME=example
    volumes:
      - ./app:/var/www/html
    networks:
      - app-network

  webserver:
    depends_on:
      - wordpress
    image: nginx:1.15.12-alpine
    container_name: webserver-example
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./app:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - app-network

volumes:
  wordpress-example:
  dbdata:

networks:
  app-network:
    driver: bridge

Tạo tệp nginx. conf

Tạo tệp cấu hình trong thư mục nginx-conf/nginx.conf

Mục đích tạo file này để config webser theo ý muốn của mình

  1. Tên miền sẽ là ví dụ. đồng
  2. Máy chủ cổng là 80
  3. Thực hiện chạy backend php-fpm port 9000
server {
        listen 80;
        #listen [::]:80;

        server_name example.co www.example.co;

        index index.php index.html index.htm;

        root /var/www/html;

        server_tokens off;

        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header Referrer-Policy "no-referrer-when-downgrade" always;
        add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
        # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
        # enable strict transport security only if you understand the implications

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass wordpress-example:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        location ~ /\.ht {
                deny all;
        }

        location = /favicon.ico {
                log_not_found off; access_log off;
        }
        location = /robots.txt {
                log_not_found off; access_log off; allow all;
        }
        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                expires max;
                log_not_found off;
        }
}

Giải thích quan trọng ở dòng fastcgi_pass wp-example:9000; có nghĩa là nginx sẽ thực hiện chạy phụ trợ wordpress-fpm thông qua cổng 9000 với tên vùng chứa được đặt ở trên là

  wordpress:
    depends_on:
      - db
    image: wordpress:5.1.1-fpm-alpine
    container_name: wordpress-example
    restart: unless-stopped
    env_file: ./app/.env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=root
      - WORDPRESS_DB_NAME=example
    volumes:
      - ./app:/var/www/html
    networks:
      - app-network
0

Kết quả

  1. Open terminal
  2. Thực hiện lệnh
      wordpress:
        depends_on:
          - db
        image: wordpress:5.1.1-fpm-alpine
        container_name: wordpress-example
        restart: unless-stopped
        env_file: ./app/.env
        environment:
          - WORDPRESS_DB_HOST=db:3306
          - WORDPRESS_DB_USER=root
          - WORDPRESS_DB_PASSWORD=root
          - WORDPRESS_DB_NAME=example
        volumes:
          - ./app:/var/www/html
        networks:
          - app-network
    
    0 để Docker bắt đầu khởi tạo wordpress php-fpm + webserver nginx + mysql 8. 0
  3. Thử truy cập http. //ví dụ. đồng. 5000 will see results ?

Chúc các bạn thành công, nếu có gì thắc mắc hoặc sai sót hãy comment bên dưới cho mình biết thêm nhé ?