Chuyển tới nội dung

Tách web blog woocommerce thành 2 phần frontend và backend

1. Cài đặt backend và frontend

Tạo 2 website dùng wordpress trên host fe.diendo.pro.vn (là frontend) và be.diendo.pro.vn (là backend).
Cài đặt frontend:
Bước 1: Tải source lên host.
curl -o wordpress.tar.gz https://wordpress.org/latest.tar.gz \
&& tar -xzf wordpress.tar.gz --strip-components=1 \
&& rm wordpress.tar.gz

Bước 2: Tạo database, username, password để sử dụng cho wordpress
Tạo trên Cpanel hoặc connect trực tiếp vào mysql để tạo
Bước 3: Tiến hành cài đặt wordpress cho frontend và backend

fe_admin
!9%ft2JK5Tom7ozJu$FE

Làm tương tự với phần Backend
be_admin
a#p7H&Yj4kDfYaHqBj

Bước 4: Cài đặt và Import Source woocommerce
Vào Menu Plugin -> Add Plugin -> Upload Plugin

Chọn file All-In-One-WP-Migration-With-Import-master.zip Install Now

Activate Plugin. Sau khi Activate Plugin tiến hành import site. Vào All-in-One-WP-Migration -> Import -> File

Chọn file labk8s.tonytechlab.com-20250907-084221-945.wpress (đã download từ trước) rồi chờ để tiến hành import xong.

Sau khi Import xong, đăng nhập lại và đổi các thông tin quản trị.
Website đã hoàn thiện.

2. Cấu hình backend Woocommerce
Tạo API Keys trên Backend

Đăng nhập vào Quản trị WordPress, đi đến WooCommerce -> Settings -> Advance -> REST API

Bấm Add Key hoặc Create API Key

Nhâp Mô tả, User: Chọn tài khoản quản trị viên (admin), Permission: Chọn Read/Write

Lưu lại Consummer Key Consummer Secret

Dùng Postman để kiểm tra

Như vậy đã gọi được API lấy dữ liệu

3. Cấu hình Backend
Tạo 2 plugin backend-lite-woocommerce (chỉ load những thứ cần thiết cho backend) và backend-login-only (khi vào trang chủ chỉ nhìn thấy login chứ không hiện ra bất kỳ thông tin gì)
backend-lite-woocommerce

<?php
/*
Plugin Name: Backend Lite WooCommerce
Description: Tối ưu backend WooCommerce: chỉ login, ẩn menu, dashboard nhẹ
Version: 1.0
Author: DienDo
*/
function bd_restrict_admin_access() {
    if ( ! is_user_logged_in() && is_admin() && !defined('DOING_AJAX') ) {
        wp_redirect( wp_login_url() ); // Redirect về login
        exit;
    }
}
add_action('init', 'bd_restrict_admin_access');

function bd_remove_menus() {
    if( current_user_can('administrator') ) {
        remove_menu_page('edit.php'); // Bài viết
        remove_menu_page('upload.php'); // Media
        remove_menu_page('edit-comments.php'); // Bình luận
        remove_menu_page('themes.php'); // Giao diện
        remove_menu_page('plugins.php'); // Plugins
        remove_menu_page('tools.php'); // Tools
        remove_menu_page('options-general.php'); // Settings
    }
}
add_action('admin_menu', 'bd_remove_menus', 999);

function bd_remove_dashboard_widgets() {
    remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
    remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side');
    remove_meta_box('dashboard_primary', 'dashboard', 'side');
    remove_meta_box('dashboard_activity', 'dashboard', 'normal'); // WooCommerce activity
    remove_meta_box('woocommerce_dashboard_status', 'dashboard', 'normal'); // WooCommerce
}
add_action('wp_dashboard_setup', 'bd_remove_dashboard_widgets' );

function bd_remove_admin_bar() {
    if( ! current_user_can('administrator') ) {
        show_admin_bar(false);
    }
}
add_action('after_setup_theme', 'bd_remove_admin_bar');

backend-login-only

<?php
/*
Plugin Name: Backend Login Only
Plugin URI: https://diendo.pro.vn
Description: Ép be.diendo.pro.vn chỉ hiện login nếu chưa đăng nhập và tối ưu backend nhẹ.
Version: 1.0
Author: DienDo
Author URI: https://diendo.pro.vn
License: GPL2
*/
function bd_redirect_home_to_login() {
    if ( is_front_page() && ! is_user_logged_in() && ! is_admin() ) {
        wp_redirect( wp_login_url() );
        exit;
    }
}
add_action('template_redirect', 'bd_redirect_home_to_login');

function bd_restrict_admin_access() {
    if ( ! is_user_logged_in() && is_admin() && !defined('DOING_AJAX') ) {
        wp_redirect( wp_login_url() );
        exit;
    }
}
add_action('init', 'bd_restrict_admin_access');

function bd_remove_admin_menus() {
    if( current_user_can('administrator') ) {
        remove_menu_page('edit.php');                  // Posts
        remove_menu_page('edit.php?post_type=page');   // Pages
        remove_menu_page('upload.php');                // Media
        remove_menu_page('edit-comments.php');         // Comments
        remove_menu_page('themes.php');                // Appearance
        remove_menu_page('plugins.php');               // Plugins
        remove_menu_page('tools.php');                 // Tools
        // remove_menu_page('options-general.php');    // Settings (nếu muốn ẩn luôn)
        // Plugin phổ biến (ẩn nếu không dùng)
        remove_menu_page('jetpack');                   // Jetpack
        remove_menu_page('wpseo_dashboard');           // Yoast SEO
        remove_menu_page('elementor');                 // Elementor
        remove_menu_page('wpcf7');                     // Contact Form 7
    }
}
add_action('admin_menu', 'bd_remove_admin_menus', 999);

function bd_remove_dashboard_widgets() {
    remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
    remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side');
    remove_meta_box('dashboard_primary', 'dashboard', 'side');
    remove_meta_box('dashboard_activity', 'dashboard', 'normal');
    remove_meta_box('woocommerce_dashboard_status', 'dashboard', 'normal');
}
add_action('wp_dashboard_setup', 'bd_remove_dashboard_widgets' );

function bd_hide_admin_bar() {
    if ( ! current_user_can('administrator') ) {
        show_admin_bar(false);
    }
}
add_action('after_setup_theme', 'bd_hide_admin_bar');

Sau đó login vào trang admin và kích hoạt 2 plugin vừa tạo

Kiểm tra. vào trang be.backend.pro.vn

4. Cấu hình FrontEnd
Có 2 phướng án, dùng wordpress khác tạo themes hiện thị WooCommerce hoăc dùng Nodejs
Source nằm ở đây
https://drive.google.com/drive/folders/16p5Eeoyrdg0ErWCJ6vLCN7BhBmdcnduo?usp=sharing

Với themes wordpress

Kích hoạt themes. Appearance -> Themes -> Chọn WooCommerce HeadlessActive
Cấu hình API: Setting -> WC Headless Settings: Nhập Consumer KeyConsumer Secret vào 2 ô tương ứng và Save Changes
Đặt trang Cửa hàng làm trang chủ
Giao diện có dạng

Dùng nodejs, down source, giải nén trên máy có cài nodejs chạy các lệnh trong thư mục chứa source nodejs
npm install
npm install
Giao diện sau khi dùng Nodejs làm FrontEnd

5. Container hóa backend và frontend
5.1 Cấu trúc thư mục

wordpress-ols-docker/
│── docker-compose.yml
│── backend/
│   ├── config/
│   │	├── php.ini
│   ├── src/
│	└── Dockerfile
│── frontend/
│   ├── node_modules/
│   ├── public/
│   │	├── php.ini
│   ├── src/
│   ├── Dockerfile
│   ├── .env
│   ├── package.json
│── config/
│   ├── httpd_config.conf
│   ├── vhost.conf
│   └── redis.conf

File docker-compose.yaml

services:
  backend:
    build:
      context: .
      dockerfile: backend/Dockerfile
    container_name: wp-backend
    volumes:
      - ./backend/src:/var/www/vhosts/localhost/html
   ports:
      - "80:80"
      - "8443:443"
      - "7080:7080"
    environment:
      WORDPRESS_DB_HOST: mariadb:3306
      WORDPRESS_DB_USER: be_woo_user
      WORDPRESS_DB_PASSWORD: 2BJocsfsLGA_6jnB
      WORDPRESS_DB_NAME: be_woo_db
      REDIS_HOST: redis
      REDIS_PORT: 6379
    depends_on:
      - mariadb
      - redis
    networks:
      - wpnet

  mariadb:
    image: mariadb:11.3
    container_name: wp-mariadb
    environment:
      MYSQL_ROOT_PASSWORD: RootPass@2025
      MYSQL_DATABASE: be_woo_db
      MYSQL_USER: be_woo_user
      MYSQL_PASSWORD: 2BJocsfsLGA_6jnB
    volumes:
      - ./backend/be_woo_db.sql:/docker-entrypoint-initdb.d/be_woo_db.sql
      - db_data:/var/lib/mysql
    networks:
      - wpnet

  redis:
    image: redis:7.4
    container_name: wp-redis
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    volumes:
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf
    networks:
      - wpnet

  frontend:
    build:
      context: .
      dockerfile: frontend/Dockerfile
      args:
        API_URL: http://backend:80
    container_name: wp-frontend
    ports:
      - "3000:80"
    networks:
      - wpnet

volumes:
  db_data:

networks:
  wpnet:
    driver: bridge

Để chạy: docker compose up -d
Sau khi chạy vào http:localhost để vào backend và localhost:3000 để vào frontend
Sau khi kiểm tra và cài đặt ta build 2 image: beobeo/openlitespeed-wordpress:v1 dùng làm backend
beobeo/frontend-nodejs:v1
5.2 Đóng gói image và đưa lên registry
docker build -t beobeo/openlitespeed-wordpress:v1 .
docker build -t beobeo/frontend-nodejs:v1 .
docker login
docker push beobeo/openlitespeed-wordpress:v1
docker push beobeo/frontend-nodejs:v1

Đến đây quá trình containize đã xong. Bước tiếp theo chuyển sang việc deploy lên k8s

Liên hệ