1. Chuẩn bị môi trường
Get code về máy tính. Edit config file thay thế tonytechlab.com bằng domain của bạn bằng notepad ++
Trong notepad ++ ta chọn File > Open Folder as Workspace sau đó mở tới folder dự án và bấm Control + F sau đó chọn File in file

Thay thế domain của bạn vào code
2. Đóng gói image và đưa lên docker hub
Upload source code lên máy cài docker để tiến hành build FrontEnd và BackEnd sau đó đưa lên docker hub
Build image frontend
cd C:\Project\Fullstack-Ecommerce-Web\03-frontend_angular-ecommerce>
docker build -t beobeo/ecommerce-frontend:v1 .

Build image Backend
cd C:\Project\Fullstack-Ecommerce-Web\02-backend_spring-boot-rest-api
docker build -t beobeo/ecommerce-backend:v1 .

Push image lên dockerhub
docker login -u beobeo
docker push beobeo/ecommerce-backend:v1
docker push beobeo/ecommerce-frontend:v1


3. Tạo server mariadb qua docker-compose sau đó copy thư mục 01-starter-files_db-scripts sau đó chạy các lệnh để khởi tạo db
Trong trường hợp này ta dùng file docker-compose.yml của bài lab trước, tái sư dụng mariadb server của nginx-proxy-manager.
version: '3.9'
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: always
ports:
- '80:80' # HTTP
- '81:81' # Web UI
- '443:443' # HTTPS
environment:
DB_MYSQL_HOST: "10.100.1.56"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm_password"
DB_MYSQL_NAME: "npm_db_1"
volumes:
- /opt/data/nginx/data:/data
- /opt/data/nginx/letsencrypt:/etc/letsencrypt
networks:
VLAN88:
ipv4_address: 10.100.1.55
npm-db-1:
image: 'mariadb:10.5'
container_name: npm-db-1
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'npm_rootpass'
MYSQL_DATABASE: 'npm_db_1'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm_password'
volumes:
- /opt/data/mysql:/var/lib/mysql
networks:
VLAN88:
ipv4_address: 10.100.1.56
rancher:
image: rancher/rancher:v2.12.0
container_name: rancher
restart: always
volumes:
- /opt/data/rancher/data:/var/lib/rancher
environment:
CATTLE_BOOTSTRAP_PASSWORD: "DienDo@2025"
networks:
VLAN88:
ipv4_address: 10.100.1.54
privileged: true
nginx-lb:
image: nginx:stable-alpine
container_name: nginx-lb
restart: always
ports:
- "80:80"
volumes:
- /opt/data/nginx-lb/nginx.conf:/etc/nginx/nginx.conf:ro
- /opt/data/nginx-lb/conf.d:/etc/nginx/conf.d:ro
networks:
VLAN88:
ipv4_address: 10.100.1.57
networks:
VLAN88:
external: true
Copy tất cả các file *.sql vào thư mục data map của mariadb (trong trường hợp này là /opt/data/mariadb)
sudo cp ~/devops/01-starter-files_db-scripts /opt/data/mariadb
Truy cập vào container npm-db-1
docker exec -it npm-db-1 /bin/bash
cd /var/lib/mysql/01-starter-files_db-scripts
Tiến hành import databases
mysql -u root -p // sau đó gõ password root của mysql
source <đường dẫn đến 01-starter-files_db-scripts/01-create-user.sql>
source <đường dẫn đến 01-starter-files_db-scripts/02-create-products.sql>
source <đường dẫn đến 01-starter-files_db-scripts/03-refresh-database-with-100-products.sql>
source <đường dẫn đến 01-starter-files_db-scripts/04-countries-and-states.sql>
source <đường dẫn đến 01-starter-files_db-scripts/05-create-order-tables.sql>
mysql -u root -p // sau đó gõ password root của mysql
source 01-create-user.sql
source 02-create-products.sql
source 03-refresh-database-with-100-products.sql
source 04-countries-and-states.sql
source 05-create-order-tables.sql

Kiểm tra kết quả
show databases;

show tables;

4. Triển khai hệ thống Deployment, ClusterIP, Ingress
– Triển khai FrontEnd, FrontEnd.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ecommerce-frontend-selector
name: ecommerce-frontend-deployment
namespace: beobeo-ecommerce
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 11
selector:
matchLabels:
app: ecommerce-frontend-selector
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: ecommerce-frontend-selector
namespace: beobeo-ecommerce
spec:
containers:
- image: beobeo/ecommerce-frontend:v1
imagePullPolicy: Always
name: ecommerce-frontend
ports:
- containerPort: 80
name: tcp
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: ecommerce-frontend-clusterip
namespace: beobeo-ecommerce
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
selector:
app: ecommerce-frontend-selector
sessionAffinity: None
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ecommerce-frontend-ingress
namespace: beobeo-ecommerce
spec:
ingressClassName: nginx
rules:
- host: ecommerce.diendo.lc
http:
paths:
- backend:
service:
name: ecommerce-frontend-clusterip
port:
number: 80
path: /
pathType: Prefix
– Triển khai Backend, file Backend.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ecommerce-backend-selector
name: ecommerce-backend-deployment
namespace: beobeo-ecommerce
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 11
selector:
matchLabels:
app: ecommerce-backend-selector
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: ecommerce-backend-selector
namespace: beobeo-ecommerce
spec:
containers:
- image: beobeo/ecommerce-backend:v1
imagePullPolicy: Always
name: ecommerce-backend
ports:
- containerPort: 8080
name: tcp
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: ecommerce-backend-clusterip
namespace: beobeo-ecommerce
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: tcp
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: ecommerce-backend-selector
sessionAffinity: None
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ecommerce-backend-ingress
namespace: beobeo-ecommerce
spec:
ingressClassName: nginx
rules:
- host: api-ecommerce.diendo.lc
http:
paths:
- backend:
service:
name: ecommerce-backend-clusterip
port:
number: 8080
path: /
pathType: Prefix
– Triển khai Backend/FrontEnd trên giao diện bấm Import

Chọn Namespace sau đó đưa file yml cần thiết lên

Nếu file yml hợp lệ thì hệ thống sẽ triển khai thành công

Trỏ file host
10.100.1.57 api-ecommerce.diendo.lc
10.100.157 ecommerce.diendo.lc
Kết quả truy cập vào trang api-ecommerce.diendo.lc
