Thời lượng 9 giờ 32 phút. Gồm 69 bài học. Hoàn thành có chứng chỉ.

Những điều giúp mọi người thành công trong series Devops

Devops là một ngành mới.

Devops là gì?

Là tổ hợp văn hóa con người và công cụ. Điều đầu tiên là biết sử dụng các quy trình công nghệ giúp tối ưu quy trình làm việc. Tìm ra phương án phù hợp cho tổ chức.

Khi làm những việc lặp đi lặp lại. Cta luôn muốn nó tự động. Cái bạn cần nắm được là công cụ

Để thuận tiện cho học series này cần 1 máy tính 16GB Ram.

Nội dung:

  • Tập chung vào thực hành cụ thể
  • Linux: Cách triển khai mọi dự án trên linux
  • Git: host server cá nhân
  • Docker: làm sao docker hóa mọi dự án
  • CI/CD: tối ưu quy trình. Làm sao 1 click triển khai 1 dự án
  • Jenkins: tự động hóa everything
  • Monitoring: Giám sát mọi thứ. Chỉ cần ngồi chơi khi gặp vấn đề nó sẽ tự cảnh bảo đến bạn

Linux

Tại sao lại sử dụng Linux?

Kiến thức quan trọng nhất của 1 Devops.

6 ưu điểm của sử dụng linux:

  1. TỐi ưu hiệu suất và chi phí do chỉ dùng các dòng lệnh.
  2. Bảo mật và ổn định.
  3. Khả năng quản lý truy cập mạnh mẽ
  4. Ổn định, Tương thích đa nền tảng
  5. Khả năng kiểm soát và linh hoạt
  6. Cộng đồng phát triển lớn (Những người có kiến thức về công nghệ)

Cài đặt máy ảo Linux, Ubuntu

VM Ware 2 cái loại mạng chính

Bridge

Thiết bị mạng trong cùng mạng có thể kết nối trực tiếp đến máy ảo, như code web xong chạy node ở local thì những người chung wifi đều có thể truy cập và sử dụng web của bạn

NAT

Máy ảo chỉ có thể truy cập từ chính laptop của bạn

Các setting cần lưu ý cho VMware

Sau khi tạo VMware cần set IP tĩnh để nó không đổi sau mỗi lần truy cập.

dhcp4: True -> Đã có ip tĩnh

Các lệnh Linux thông dụng

pwd: xem đang ở thư mục nào (vị trí hiện tại)
whoami: xem user đang dùng là user nào
ls /: những file trong /
ls -l : hiển thị dưới dạng danh sách
ls -a : hiển thị những file, thư mục ẩn
ls - t: sắp xếp nội dung từ mới nhất đến cũ nhất
có thể kết hợp -lat
mkdir data: tạo thư mục data
tourch data/data.txt: tạo file data.txt
rm data.txt: xóa file
rm -r data1: xóa thư mục data1
cp : copy từ file này sang file kia
cp -r : nếu là file
mv data.txt: di chuyển file
echo “abc”: in nội dung ra màn hình
echo “abc” > a.txt: ghi nội dung vào file
cat a.txt: xem nội dung
echo “abc” >> a.txt: ghi nội dung vào file ko đè
tail -n <số dòng> <tên file>: hiển thị dòng trong file
tail -n <số dòng> <tên file> > log.txt: hiển thị dòng sa đó ghi vào file log.txt
tail -f log.txt: xem trực tiếp thay đổi của file log.txt
sudo + : nâng quyền lên cho câu lệnh

linux system file

/: cao nhất

Cách sử dụng vim trong linux

đơn giản chỉ là công cụ để mở và làm việc với file

Cài đặt:

1
sudo apt install vim -y
1
vi data.txt 

tạo một file data.txt và mở nó lên

nhấn i: chế độ insert
esc: thoát
rr: xóa 1 dòng
u: ctrl z
yy: copy
p: paste

/5: tìm kiếm 5 trong văn bản
:x: lưu file

:q!: không lưu

Làm việc với vi

free -m: thông tin ram hiện tại
df -h: xem dung lượng còn lại

top: y trang task manager

sudo hostnameqctl sethostname : đặt lại tên server, sau đó phát restart lại thì server mới nhận tên mới
bắt kỳ câu lệnh làm việc với hệ thống đều phải dùng sudo
sudo reboot: khởi động lại server
sudo -i: qua tài khoản admin
netstat -tlpun: hiển thị thông tin liên quan đến kết nối tcp

1
apt install netstat

pf-ef: xem các tiến trình đang chạy trên hệ thống

telnet 192.168.199: test kết nối từ server này đến server khác

traceroute -T -p 80 192.168.199: kiểm tra port đến cổng của một ip cụ thể

tương tự phải cài đặt traceroute mới dùng được

apt remove net-tools: xóa gói net-tools

Quyền trong linux

1 Server tương ứng với một ngôi nhà. Và ngôi nhà đó sẽ có chủ sở hữu, nhóm sở hữu liên quan. Từng đối tượng được quyền làm gì đó trong ngôi nhà. PHải thực hiện phân quyền cho từng đối tượng

user, group: tạo trực tiếp các đối tượng tác động lên server

useradd : tạo 1 user
adduser : thêm user vào group, thư mục làm việc
su : chuyển sang một user name nào đó

vi etc/pass

deluser : xóa user
groupadd : tạo 1 group
delgroup : xóa group

usermode -aG devops2 : thêm 1 user vào một group
groups : kiểm tra các group của user

phân quyền sở hữu

chown :

quyền truy cập

R, W, X(excute)
u, g, o: user, group, other

Thêm quyền cho nhóm sở hữu
chmod g=rwx data/

Thêm quyền cho cả user và nhóm sở hữu
chmod u=rwx, g=rwx data/, o=- data/: phân quyền tác động vào file

-> Để tác động vào một thư mục thì một user or group phải có quyền X(excute)

phân quyền tác động bằng số

r=4,w=2,x=1 => 4+2+1=7
chmod 750 data/

mẹo nhớ:

Triển khai dự án

Copy dự án từ máy tính cá nhân sang máy server: scp /<file dự án/> <server/folder>

unzip <file-nén>

để triển khai: mỗi dự án có 1 user riêng và tên user = tên dự án

Chú ý:

  • Mỗi dự án sẽ có thư mục riêng
  • Mỗi dự án sẽ có user riêng
  • Triển khai dự án cần có 2 bước build và run
1
apt install <package>
1
apt update
1
systemctl restart nginxs

Cập nhập các thay đổi của nginx

1
2
3
4
5
6
7
8

- Version của công cụ phải lớn hơn hoặc = version của dự án

### Cài maria db

### Gán quyền cho db
```shell
grant all privileges on /database/name.* to 'shoeshop'@'%';

Xem tiến trình đang chạy

1
ps -ef | grep shoes

Dừng tiến trình

1
kill 9

buộc dừng

Git, Github

Thứ tự các branch trong git: main --> stagging --> develop --> features

CI/CD

CI/CD là gì?

CI: Clone code build dự án, test, tích hợp

CD: Triển khai tự động, hoàn toàn (1 bước triển khai)

1
gitlab-runner run
1
2
3
4
5
6
7
8
9
10
11
12
13
stages:
- build
- deploy
- checklog
build:
stage: build
script:
- whoami
- pwd
- ls
- mvn install -Dskip
tags:
- lab-server

Công cụ

Gitlab, Jenkins

Tại sao CI/CD lại quan trọng đến vậy

Tối ưu trực tiếp các tài nguyên của công ty. Chuyển sang Devops được thuận lợi.

CI/CD riêng đối với từng hệ thống, doanh nghiệp

Docker

Tạo sao cần sử dụng docker

Version các công cụ khác nhau. Nếu không cần thận các dự án có thể ảnh hưởng đến nhau do trên cùng 1 hạ tầng

Đóng gọi dự án thành 1 cục gọi là docker image

từ docker image chạy lên container và ko bị phụ thuộc nền tảng

Docker là gì

Docker là nền tảng ảo hóa cấp container nó tạo ra một môi trường độc lập và đóng gói thành duy nhất

Docker architech

Registry để lưu trữ Docker image

Luồng hoạt động đúng của Container: Source code -> Dockerfile -> Docker image -> Docker container

Cài đặt docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir docker/
cd docker/
vi install-docker.sh
chmod +x install-docker.sh
ls-l
sh <file-sh>

docker pull unbuntu:22.04

docker images

docker run --name ubuntu -it ubuntu:22.4

pwd

docker exec -it unbuntu bash:

docker run --name nginx -dp 9999:80: -d để chạy dưới nền, -p public

docker stop ubuntu: để dừng các container

docker rm car-serv

docker rm -f $(docker ps -a): xóa bỏ toàn bộ container hiện có

Để xóa 1 docker image thì docker image đó phải không đang chạy

Docker là một 1 môi trường độc lập

8080 là port của server và 80 là port của container

Lệnh Copy …: Copy file và thư mục từ vị trí hiện tại ngoài server vào trong container

Trong dockerfile sử dụng “EXPOSE”: Để có thể truy cập từ bên ngoài

Cách dockerfile dự án Backend

Chọn base image là: alpine

  1. Kéo 1 server đã được cài java 8: from maven:3.5.3-jdk-8-alpine
  2. workdir /app
  3. copy …
  4. run mvn install -DskipTest=true

Chạy run stage

  1. from amazoncorrecto:8u402-alpine-jre
  2. Copy --from=build /app/target/shoe-ShoppingCart-0.0.1-SNAPSHOT…
  3. a
  4. docker build -t shoeshop:v1
  5. docker images
  6. docker run --name shoeshop -dp 8888:8080 shoeshop:v1
  7. docker ps -a

Push docker này thành một registry

Cách dockerfile dự án frontend

vi dockerfile:

kéo 1 basa image về:

  1. from node:18.18-alpine
  2. workdir /app
  3. copy …
  4. run npm install

run stage:

  1. from nginx:alpine
  2. copy --from build /app/dict…
  3. docker build -t <project name>

Cài đặt docker registry miễn phí

3 Cách:

  1. dockerhub
  2. self-certified
  3. harbor: thực tế, đầy đủ công cụ (recommand)

dockerhub

  1. Đăng nhập vào docker:
1
docker images

Đăng nhập tài khoản docker của bạn với username, password

Sau khi log in thành công thì chúng ta phải đổi tên images để có thể push lên một nền tảng nào đó

1
docker image = domain/project/repo:tag

đổi tên:

1
docker tag <project-name>:v1 <user-name>/<project-name>:v1 

push:

1
docker push <user-name><project-name>:v1

pull:

1
docker pull <user-name><project-name>:v1

self-certified

harbor

Script cài đặt docker và docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker --version
docker-compose --version

Cài đặt harbour

1
2
3
4
5
6
7
8
9
10
apt update -y
apt install certbot -y
mkdir -p /tools/harbor && cd /tools/harbor
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '.tgz$' | wget -i -
tar xvzf harbor-offline-installer*.tgz
cd harbor/
cp harbor.yml.tmpl harbor.yml
export DOMAIN="registry.domain.cuaban"
export EMAIL="email@cuaban"
sudo certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -m $EMAIL --keep-until-expiring

Chỉnh sửa cấu hình harbor.yml như hướng dẫn và chạy các lệnh:

1
2
3
./prepare
./install.sh
docker-compose ps

Jenkins

mình đã note tại phần Jenkins trong series của blog

Monitoring

Làm sao để phát hiện lỗi trong server để nhanh chóng xử lý. Không thể để lỗi mới đi sửa lỗi được.

Hệ thống giám sát sẽ cảnh báo cho chúng ta trước khi tài nguyên bị giới hạn như CPA, bộ nhớ

Monitoring db xem truy vấn nào chậm để yêu cầu khắc phục

Trong series này chủ yếu làm việc với Zabbix( tích hợp với nhiều cái như telegram, slack).

Cài đặt Zabbix

cài zabbix agent

Zabbix server phải cài Zabbiz agent để có thể tự monitoring chính mình.

Cài đặt các thứ cho Zabbix tìm doc của Zabbix trên google xong cài đặt là xong.

Config để cấu hình connect từ Zabbix server đến server của db

Để monitoring cái server nào thì chỉ cần cài đặt zabbix server trên server đó là được (lưu ý là Zabbix phải hỗ trợ server đó và version phải đúng và phù hợp thì mới được)

Port Zabbix chạy mặc định là 10050

Thư mục làm việc của Zabbix để Ngix trỏ tới là thư mục /usr/share/zabbix

Công cụ dùng để monitoring được cài đặt trên các server là Zabbix agent

Sử dụng item và trigger

item là cái cảnh báo chúng ta cấu hình có nhiệm vụ:Giám sát và thu thập dựa trên điều kiện

Để tự động được item thì chúng ta sử dụng trigger

Thông thường để thực tế thì nên để cài đặt server không hoạt động (hoặc bị treo) trong khoảng 10s

Mục đích để phát hiện nó đang nhanh hay chậm