# Ke hoach CI/CD cho frontend (Gitea) ## 1) Tong quan Ke hoach nay thiet lap: - CI: build va test moi lan push/PR - CD: deploy Docker tu dong len staging ## 2) Thong tin du an - Build tool: Vite - Script: - test: `npm run test` - build: `npm run build` - Thu muc output: `dist` ## 3) Quy uoc da chot 1) Cach deploy: Docker 2) Node version: 22.14.0 3) Branch staging: `main` 4) Runner dat tren web server (deploy truc tiep, khong SSH) ## 4) Dieu kien truoc - Web server Ubuntu 22.04 co Docker - Web server truy cap duoc: - Gitea: http://203.171.20.94:3000 - Docker Hub ## 5) Cai dat act_runner tren web server (Ubuntu 22.04) ### 5.1 Dung user compmanage lam runner ```bash sudo usermod -aG docker compmanage ``` ### 5.2 Tai act_runner ```bash mkdir -p /home/compmanage/gitea-runner/bin cd /home/compmanage/gitea-runner/bin curl -L -o act_runner \ https://dl.gitea.com/act_runner/0.2.10/act_runner-0.2.10-linux-amd64 chmod +x act_runner ``` ### 5.3 Lay token va dang ky runner - Gitea Admin -> Actions -> Runners -> Create new runner - Dang ky runner: ```bash /home/compmanage/gitea-runner/bin/act_runner register \ --instance http://203.171.20.94:3000 \ --token EcAi7bNFMbDf1OcwTCem3dyFXOao1IW9Qfs1Ugb6 \ --name webserver-runner \ --labels docker:docker://node:22.14.0 ``` ### 5.4 Chay runner bang systemd Tao file `/etc/systemd/system/act_runner.service`: ```ini [Unit] Description=Gitea Actions Runner After=network.target [Service] User=compmanage Group=compmanage ExecStart=/home/compmanage/gitea-runner/bin/act_runner daemon WorkingDirectory=/home/compmanage/gitea-runner Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` Khoi dong: ```bash sudo systemctl daemon-reload sudo systemctl enable --now act_runner sudo systemctl status act_runner ``` ## 6) Secrets can tao trong Gitea Vao repo -> Settings -> Actions -> Secrets, them cac key sau: - REGISTRY_URL = docker.io - REGISTRY_USER = - REGISTRY_PASSWORD = - IMAGE_NAME = /ttmt-frontend - CONTAINER_NAME = ttmt-frontend - HOST_PORT = 80 ## 7) Workflow can co - .gitea/workflows/ci.yml - .gitea/workflows/deploy-staging.yml ## 8) Luong CI (build + test) - Trigger: push, pull_request - Cac buoc: 1) Checkout 2) Setup Node 22.14.0 3) npm ci 4) npm run test 5) npm run build 6) Upload dist artifact ## 9) Luong CD (deploy Docker truc tiep) - Trigger: push len branch `main` - Cac buoc: 1) Build image tu Dockerfile 2) Push len Docker Hub 3) Pull va restart container tren chinh web server ## 10) Kiem tra sau khi deploy - Gitea -> Actions: job thanh cong - Tren server: `docker ps` thay container dang chay - Truy cap web bang IP/port da map ## 11) Rollback nhanh - Deploy lai tag cu: `staging-` ## 12) Buoc tiep theo 1) Them secrets tren Gitea 2) Push len `main` de trigger deploy