1. Chạy LAB
Copy 6 lệnh dưới → dán trên PowerShell bằng cách click chuột phải
→ không phải gõ gõ từng lệnh mất thời gian
Chạy 6 lệnh sau trên Powershell quyền Administrator → dấu # là giải thích (comment)
# Giả sử có ổ đĩa D:
# Tạo thư mục D:ansible-lab09 + chuyển vào thư mục
mkdir D:ansible-lab09 > $null ; cd D:ansible-lab09
# Khai báo biến là link tới file cần download
$URL="https://devsecops.edu.vn/wp-content/uploads/2023/11/ansible-lab09-tVsvhhN5K516Kqp1OPthHwLyd93MPT.zip"
# Download file zìa
Invoke-WebRequest -URI $URL -OutFile ansible-lab09.zip
# Giải nén file + đổi tên
Expand-Archive ansible-lab09.zip -DestinationPath .
# Coi trong thư mục đang đứng có gì
dir
# Tạo máy ảo + chạy LAB từ A tới Á
vagrant up
2. Các file nội dung mới nhất ở đây
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "ansiblecontainer" do |ansiblecontainer|
ansiblecontainer.vm.box = "ubuntu/jammy64"
ansiblecontainer.vm.hostname = 'ubuntu2204'
ansiblecontainer.vm.provider :virtualbox do |v|
v.gui = true
v.cpus = 2
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", 2048]
v.customize ["modifyvm", :id, "--name", "Ansible-1VM-3Container-Optimize"]
end
ansiblecontainer.vm.provision "shell", path: "install.sh"
ansiblecontainer.vm.provision "shell", path: "by-optimize.sh"
end
end
install.sh
#!/bin/bash
echo -e "n1. Cài Docker, docker-composen"
apt update && apt install docker.io docker-compose pip -y
systemctl status docker
echo -e "n2. Cài Ansiblen"
apt -y install ansible-core sshpass
ansible --version
# Chép file config của Ansible
mkdir /etc/ansible
cp /vagrant/ansible.cfg /etc/ansible/
cp /vagrant/hosts /etc/ansible/
# Sửa lỗi https://devsecops.edu.vn/ansible-control-node-tren-ubuntu-server-2204-loi-ansible-galaxy/
pip install -Iv 'resolvelib<0.6.0'
# Cài collection community.general để chạy được lệnh apk
# https://docs.ansible.com/ansible/latest/collections/community/general/apk_module.html
ansible-galaxy collection install community.general
echo -e "n3. Xem Ansible collection đã càin"
ansible-galaxy collection list
# END
by-optimize.sh
#!/bin/bash
echo -e "n1. Build 3 Docker Container image tối ưun"
# Phải vào thư mục chứa docker-compose.yml
cd /vagrant/optimize
docker-compose up -d
echo -e "n2. Xem 3 Container image tối ưu (READ ONLY)n"
docker images
echo -e "n3. Xem 3 Container đã build tối ưu đang chạy (READ WRITE)n"
docker container ls
echo -e "n4. Ansible inventory coi group vừa tạo có 3 Containern"
# Lấy 3 IP của 3 Container đang chạy
export Alma92_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' alma92-optimize)
export Ubuntu2204_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ubuntu2204-optimize)
export Alpine318_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' alpine318-optimize)
# Thay 3 IP của 3 Container vào file Ansible Inventory dưới
sed -i "s/alma92_ip_optimize/$Alma92_IP/" /etc/ansible/hosts
sed -i "s/ubuntu2204_ip_optimize/$Ubuntu2204_IP/" /etc/ansible/hosts
sed -i "s/alpine318_ip_optimize/$Alpine318_IP/" /etc/ansible/hosts
ansible-inventory --graph
echo -e "n5. Ansible ping 3 node chạy 3 Container tối ưun"
ansible ssh_optimize -m ping
echo -e "n6. Ansible chạy lịnh tới 3 Container tối ưun"
ansible ssh_optimize -a 'cat /etc/os-release'
echo -e "n7. Ansible chạy playbook tới 3 Container tối ưun"
ansible-playbook /vagrant/web-server.yml
# END
ansible.cfg
[defaults]
host_key_checking=False
# Sửa lỗi
# https://devsecops.edu.vn/ansible-galaxy-bi-loi-gi-vay-khi-cai-ansible-collections/
[galaxy]
server = https://old-galaxy.ansible.com/
hosts
[ssh_optimize]
alma92_ip_optimize
ubuntu2204_ip_optimize
alpine318_ip_optimize
[all:vars]
ansible_user=root
ansible_password=1
web-server.yml
---
- hosts: ssh_optimize
tasks:
- name: Cài Apache Web Server mới nhứt trên Ubuntu 22.04
apt:
name: apache2
when: ansible_distribution == "Ubuntu"
- name: Cài Apache Web Server mới nhứt trên AlmaLinux 9
yum:
name: httpd
when: ansible_distribution == "AlmaLinux"
- name: Cài Apache Web Server mới nhứt trên Alpine Linux 3.18
apk:
name: apache2
state: present
when: ansible_distribution == "Alpine"
# Lấy cục image container zìa
FROM almalinux:9.2
# Tối ưu image container
# Mỗi lần RUN là tạo thêm 1 layer cho image
# --> 1 lần RUN thôi --> các lịnhn nối đuôi nhau = &&
# Cài xong xóa cache = dnf clean all
# Chỉ cần cài gói openssh-server + passwd
RUN dnf -y install openssh-server passwd &&
dnf clean all &&
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -C 'DevSecOps.Edu.VN' -t rsa &&
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -C 'DevSecOps.Edu.VN' -t ecdsa &&
echo "1" | passwd root --stdin
EXPOSE 22
# Do hổng có systemd start dịch vụ sshd
# Chạy sshd trực tiếp bằng lịnh dưới
CMD ["/usr/sbin/sshd", "-D"]
FROM alpine:3.18.2
# Tối ưu image container
# Mỗi lần RUN là tạo thêm 1 layer cho image
# --> 1 lần RUN thôi --> các lịnhn nối đuôi nhau = &&
# Cài xong xóa cache = apk --no-cache
# Chỉ cần cài gói openssh-server
# Cài python3 để Ansible control node móc vào được
# apk --no-cache để xóa các gói đã download về để cài
RUN apk --no-cache add openssh-server python3 &&
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config &&
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config &&
ssh-keygen -A &&
echo 'root:1' | chpasswd &&
mkdir -p /run/openrc &&
touch /run/openrc/softlevel
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
# Lấy cục image container zìa, nó là read only nhen
FROM ubuntu:22.04
# Tối ưu image container
# Mỗi lần RUN là tạo thêm 1 layer cho image
# --> 1 lần RUN thôi --> các lịnh chạy nối đuôi nhau = &&
# Cài xong xóa cache = apt clean + rm -rf ... bên dưới
# Chỉ cần cài gói openssh server, init-system-helpers là đủ
RUN apt update &&
apt -y install openssh-server init-system-helpers &&
apt clean &&
rm -rf /var/lib/apt/lists/* &&
echo "root:1" | chpasswd &&
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config &&
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config &&
service ssh start
EXPOSE 22
# Do hổng có systemd start dịch vụ sshd
# Chạy sshd trực tiếp bằng lịnh dưới
CMD ["/usr/sbin/sshd", "-D"]
docker-compose.yml
version: '3'
services:
alma92-optimize:
image: devsecops.edu.vn/alma92-ssh-optimize:1.0
container_name: alma92-optimize
# Chỉ ra thư mục có file Dockerfile
build: ./alma92
# Container chạy có daemon thì k cần tty: true
#tty: true
ubuntu2204-optimize:
image: devsecops.edu.vn/ubuntu2204-ssh-optimize:1.0
container_name: ubuntu2204-optimize
build: ./ubuntu2204
# Container chạy có daemon thì k cần tty: true
#tty: true
alpine318-optimize:
image: devsecops.edu.vn/alpine318-ssh-optimize:1.0
container_name: alpine318-optimize
build: ./alpine318
# Container chạy có daemon thì k cần tty: true
#tty: true