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:
- TỐi ưu hiệu suất và chi phí do chỉ dùng các dòng lệnh.
- Bảo mật và ổn định.
- Khả năng quản lý truy cập mạnh mẽ
- Ổn định, Tương thích đa nền tảng
- Khả năng kiểm soát và linh hoạt
- 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
ls -a
ls - 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
cp -r
mv
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 +
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
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
adduser
su
vi etc/pass
deluser
groupadd
delgroup
usermode -aG
groups
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 |
|
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 | stages: |
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 | mkdir docker/ |
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
- Kéo 1 server đã được cài java 8: from maven:3.5.3-jdk-8-alpine
- workdir /app
- copy …
- run mvn install -DskipTest=true
Chạy run stage
- from amazoncorrecto:8u402-alpine-jre
- Copy --from=build /app/target/shoe-ShoppingCart-0.0.1-SNAPSHOT…
- a
- docker build -t shoeshop:v1
- docker images
- docker run --name shoeshop -dp 8888:8080 shoeshop:v1
- 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ề:
- from node:18.18-alpine
- workdir /app
- copy …
- run npm install
run stage:
- from nginx:alpine
- copy --from build /app/dict…
- docker build -t <project name>
Cài đặt docker registry miễn phí
3 Cách:
- dockerhub
- self-certified
- harbor: thực tế, đầy đủ công cụ (recommand)
dockerhub
- Đă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 |
|
Cài đặt harbour
1 | apt update -y |
Chỉnh sửa cấu hình harbor.yml như hướng dẫn và chạy các lệnh:
1 | ./prepare |
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