Vu Tech Smart Technology Creating Smart Cities

Các bước để xây dựng Docker cho dự án WordPress sử dụng Nginx làm Reverse Proxy

Tổng quan các bước để xây dựng Docker cho dự án WordPress sử dụng Nginx làm Reverse Proxy

Quy trình chính

  • Tạo Docker MySQL
  • Setup môi trường local
  • Setup GitLab
  • Setup Ubuntu Server
  • Build Docker local và push lên GitLab
  • Pull source code WordPress về
  • Pull image từ GitLab và chạy container
  1. Tạo Docker cho Database MySQL

Truy cập thư mục dự án DB trên Ubuntu Server:

cd /ctech/mysql5

Tạo file docker-compose.yml với nội dung:

version: ‘3’

services:

  db:

    image: mysql:5.7.44

    container_name: ctech_mysql

    restart: always

    ports:

      – “3306:3306”

    environment:

      MYSQL_ROOT_PASSWORD: your_root_password

      MYSQL_DATABASE: your_db

      MYSQL_USER: your_user

      MYSQL_PASSWORD: your_password

      # Vô hiệu hóa strict mode

      MYSQL_SQL_MODE: “NO_ENGINE_SUBSTITUTION”

      # Cho phép sử dụng zero dates

      MYSQL_INIT_COMMAND: “SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,’NO_ZERO_IN_DATE,NO_ZERO_DATE’,”));”

    volumes:

      – /ctech/mysql5/data:/var/lib/mysql

    command: –sql-mode=”NO_ENGINE_SUBSTITUTION” –explicit_defaults_for_timestamp=1

    networks:

      – ctech_mysql

networks:

  ctech_mysql:

    name: ctech_mysql

Build Docker để hệ thống kéo Docker mặc định về:

docker-compose build

Chạy Docker:

docker-compose up

Mở cổng 3306 để kết nối dữ liệu từ xa (đóng lại sau khi hoàn thành)

Sử dụng Navicat Tools kết nối qua SSH Tunnel để tạo database và import dữ liệu

  1. Setup Môi Trường Local (Windows)

Tải Docker Desktop Installer.exe (chọn phiên bản phù hợp với chip của máy)

Cài đặt Docker cho Windows (cần khởi động lại máy)

Khởi động Docker và các dịch vụ phụ trợ như memcache, redis (nếu có)

Trong thư mục dự án (ví dụ: E:\xampp\htdocs\vutechsmart), tạo file Dockerfile:

FROM php:7.4-fpm

 

# Cài đặt các gói phụ thuộc và extensions PHP cần thiết

RUN apt-get update && apt-get install -y \

    libpng-dev \

    libonig-dev \

    libxml2-dev \

    zip \

    unzip \

    git \

    curl

 

# Cài đặt các PHP extensions

RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd mysqli soap

 

# Cấu hình PHP theo nhu cầu

RUN echo “upload_max_filesize = 64M” >> /usr/local/etc/php/conf.d/docker-php-uploads.ini \

    && echo “post_max_size = 64M” >> /usr/local/etc/php/conf.d/docker-php-uploads.ini \

    && echo “memory_limit = 256M” >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini

 

# Set working directory

WORKDIR /var/www/html

 

# Đảm bảo quyền truy cập phù hợp

RUN chown -R www-data:www-data /var/www/html

 

# Expose port 9000

EXPOSE 9000

 

CMD [“php-fpm”]

Tạo file docker-compose.yml trong thư mục dự án:

version: ‘3’

services:

  wordpress:

    image: ${CI_REGISTRY_IMAGE:-anhvucnt/vout-wp-php7x}:${CI_COMMIT_SHORT_SHA:-latest}

    container_name: vutechsmart_wordpress

    restart: always

    volumes:

      – /ctech/vutechsmart.com/wordpress:/var/www/html

    environment:

      – WORDPRESS_DB_HOST=ctech_mysql

      – WORDPRESS_DB_USER=your_user

      – WORDPRESS_DB_PASSWORD=your_pass

      – WORDPRESS_DB_NAME=your_db

    networks:

      – ctech_mysql

    ports:

      – “9000:9000”

networks:

  ctech_mysql:

    external: true

    name: ctech_mysql

Tạo file .gitlab-ci.yml trong thư mục dự án:

stages:

  – build

  – deploy

 

variables:

  DOCKER_DRIVER: overlay2

  DOCKER_TLS_CERTDIR: “”

 

build:

  stage: build

  image: docker:20.10.16

  services:

    – docker:20.10.16-dind

  before_script:

    – docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

  script:

    – docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -t $CI_REGISTRY_IMAGE:latest .

    – docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

    – docker push $CI_REGISTRY_IMAGE:latest

  only:

    – main

 

deploy:

  stage: deploy

  image: alpine:latest

  before_script:

    – apk add –no-cache openssh-client

    – mkdir -p ~/.ssh

    – echo “$SSH_PRIVATE_KEY” > ~/.ssh/id_rsa

    – chmod 600 ~/.ssh/id_rsa

    – echo -e “Host *\n\tStrictHostKeyChecking no\n\n” > ~/.ssh/config

  script:

    – ssh root@YOUR_SERVER_IP “cd /ctech/vutechsmart.com && \

        docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && \

        docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA && \

        docker-compose down && \

        docker-compose up -d”

  only:

    – main

III. Setup GitLab

Đăng ký tài khoản GitLab

Tạo SSH Key

Import SSH Key vào GitLab

Tạo dự án mới trên GitLab

Thiết lập các biến môi trường (CI/CD variables):

  • SSH_PRIVATE_KEY: Khóa SSH private để kết nối đến server Ubuntu
  • SERVER_USER: Tên người dùng SSH trên server
  • SERVER_IP: Địa chỉ IP của server

Push dự án lên GitLab:

git clone <repository-url>

git add .

git commit -m “Initial commit”

git push

  1. Setup Ubuntu Server

Cài đặt NGINX trên Ubuntu

Truy cập cấu hình NGINX:

cd /etc/nginx/sites-available

Tạo file cấu hình vutechsmart.com:

server {

    listen 80;

    server_name vutechsmart.com www.vutechsmart.com;

    location / {

        return 301 https://$host$request_uri;

    }

}

 

server {

    listen 443 ssl;

    server_name vutechsmart.com www.vutechsmart.com;

 

    # SSL configuration

    ssl_certificate /etc/letsencrypt/live/vutechsmart.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/vutechsmart.com/privkey.pem;

 

    root /ctech/vutechsmart.com/wordpress;

    index index.php;

 

    access_log /ctech/vutechsmart.com/logs/access.log;

    error_log /ctech/vutechsmart.com/logs/error.log;

 

    location / {

        try_files $uri $uri/ /index.php?$args;

    }

 

    location ~ \.php$ {

        fastcgi_pass 192.168.16.3:9000;

        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

        fastcgi_index index.php;

        include fastcgi_params;

    }

 

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {

        expires max;

        log_not_found off;

    }

}

Lưu ý quan trọng:

  • fastcgi_pass 192.168.16.3:9000; – IP này phải trỏ đến PHP-FPM trong Docker container. Kiểm tra bằng docker network inspect ctech_mysql
  • fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; – Đây là đường dẫn trong container, không phải trên host

Tạo symbolic link sang sites-enabled:

ln /etc/nginx/sites-available/vutechsmart.com /etc/nginx/sites-enabled/

Tạo thư mục logs:

mkdir -p /ctech/vutechsmart.com/logs

cd /ctech/vutechsmart.com/logs

touch access.log error.log

cd ..

chmod 0777 -R logs

Tạo file docker-compose.yml trên server:

version: ‘3’

services:

  wordpress:

    image: registry.gitlab.com/anhvucnt/vout-wp-php7x:latest

    container_name: vutechsmart_wordpress

    restart: always

    volumes:

      – /ctech/vutechsmart.com/wordpress:/var/www/html

    environment:

      – WORDPRESS_DB_HOST=your_db_host

      – WORDPRESS_DB_USER=your_user_host

      – WORDPRESS_DB_PASSWORD=your_db_pass

      – WORDPRESS_DB_NAME=your_db_name

    networks:

      – ctech_mysql

    ports:

      – “9000:9000”

networks:

  ctech_mysql:

    external: true

  1. Build Docker Local và Push lên GitLab

Trên môi trường local, truy cập thư mục dự án:

cd E:\xampp\htdocs\vutechsmart

Đăng nhập vào GitLab Registry:

docker login registry.gitlab.com -u your_gitlab_username -p your_password_or_access_token

Build Docker để test:

docker build -t vutechsmart:test .

Nếu không có lỗi, build Docker chính thức:

docker build –no-cache -t registry.gitlab.com/anhvucnt/vout-wp-php7x:latest -f Dockerfile .

Push Docker image lên GitLab:

docker push registry.gitlab.com/anhvucnt/vout-wp-php7x:latest

  1. Pull Code và Docker Image về Server Ubuntu

Truy cập thư mục dự án trên server:

cd /ctech/vutechsmart.com/

Đăng nhập vào GitLab Registry:

docker login registry.gitlab.com -u your_gitlab_username -p your_password_or_access_token

Pull Docker image:

docker pull registry.gitlab.com/anhvucnt/vout-wp-php7x:latest

Pull source code WordPress về thư mục /ctech/vutechsmart.com/wordpress

Khởi chạy Docker container:

docker-compose up -d

Truy cập website của bạn (vutechsmart.com) để kiểm tra kết quả

Lưu ý quan trọng: Trong cấu hình Nginx, chú ý đặc biệt đến fastcgi_pass 192.168.16.3:9000 và fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name. IP phải là IP của network Docker container và đường dẫn phải chính xác với đường dẫn bên trong container.

Chúc bạn thành công! 😊

 

 

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

logo

With nearly two decades of experience in technology development and leadership, I serve as the Business Director of CTech High Technology JSC

Press ESC to close