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 Backendbe_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 và 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 và 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 Headless và Active
Cấu hình API: Setting -> WC Headless Settings: Nhập Consumer Key và Consumer 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 nodejsnpm installnpm 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
và beobeo/frontend-nodejs:v1
5.2 Đóng gói image và đưa lên registrydocker 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