Cài đặt và chạy Website WordPress trên Proxmox

Nguồn : KazeWP

A) CÀI ĐẶT WORDPRESS

1) Chuẩn bị Proxmox / LXC Ubuntu 24.04

Cập nhật hệ thống:

sudo apt update && sudo apt upgrade -y

Cài mấy gói cơ bản:

sudo apt install -y ca-certificates curl gnupg git openssl

Nếu đang bật UFW thì mở port web + SSH:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
sudo ufw status

Lý do mở 443/udp là để Caddy có thể phục vụ HTTP/3 nếu cấu hình/container dùng đến.

2) Cài Docker Engine chuẩn trên Ubuntu 24.04

Chạy lần lượt:

sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true

Thêm key và repo Docker:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Cài Docker + Compose plugin:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kiểm tra:

sudo docker version
sudo docker compose version

Các bước này bám theo hướng dẫn cài Docker Engine trên Ubuntu và Compose plugin chính thức.

3) Cho user chạy Docker không cần sudo

sudo usermod -aG docker $USER
newgrp docker

Test:

docker ps

Nếu chưa ăn ngay thì logout/login lại SSH một lần.

4) Trỏ domain về VPS

Ví dụ bạn muốn dựng site blog.example.com thì phải tạo bản ghi DNS A hoặc AAAA trỏ về IP máy Ubuntu trước. Caddy chỉ auto HTTPS ngon khi domain public trỏ đúng về máy và máy mở cổng 80/443.

Check nhanh:

ping blog.example.com

IP trả về phải là IP Proxmox của bạn.

5) Clone KazeWP

cd /opt
sudo git clone https://github.com/10h30/kazewp.git
sudo chown -R $USER:$USER /opt/kazewp
cd /opt/kazewp
chmod +x kazewp.sh
find . -type f -name "*.sh" -exec chmod +x {} \;

6) Chạy KazeWP lần đầu

Repo hỗ trợ 2 kiểu:

  • chạy menu tương tác: ./kazewp.sh
  • chạy thẳng: ./kazewp.sh install <domain>
./kazewp.sh install blog.example.com

Trong lúc cài, script sẽ hỏi các thông tin kiểu:

  • domain
  • email admin
  • username admin
  • password admin
  • site title

Theo mô tả repo, KazeWP sẽ tự:

  • tạo site WordPress riêng trong container,
  • tạo database MariaDB riêng,
  • cấu hình Caddy reverse proxy,
  • dùng Bash để tự động hóa tạo/xóa/list site

7) Sau khi install xong, kiểm tra container

Xem container đang chạy:

docker ps
docker logs <ten-container> --tail 100

Nếu KazeWP dựng thành công, bạn sẽ có ít nhất các phần kiểu:

  • Caddy
  • WordPress container cho domain
  • MariaDB riêng cho domain

8) Truy cập domain để hoàn tất / kiểm tra

Mở trình duyệt:

https://blog.example.com

9) Các lệnh quản lý hằng ngày

./kazewp.sh list
./kazewp.sh stop blog.example.com
./kazewp.sh start blog.example.com
./kazewp.sh restart blog.example.com
./kazewp.sh delete blog.example.com
./kazewp.sh delete all

 

10) Bộ lệnh full, copy-paste

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg git openssl

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable

sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo usermod -aG docker $USER
newgrp docker

cd /opt
sudo git clone https://github.com/10h30/kazewp.git
sudo chown -R $USER:$USER /opt/kazewp
cd /opt/kazewp
chmod +x kazewp.sh
find . -type f -name "*.sh" -exec chmod +x {} \;

./kazewp.sh install blog.example.com

 

B) Thêm DNS cho web mới trên Cloudflare

Trường hợp thêm subdomain blog.example.com

Vào Cloudflare > DNS > Add record:

  • Type: A
  • Name: blog
  • IPv4 address: 99.199.199.238 (ip wan)
  • Proxy status: DNS only
  • TTL: Auto

Kiểm tra DNS đã ăn chưa

Trên Ubuntu hoặc máy khác, chạy:

nslookup blog.example.com

Phải ra:

99.199.199.238 

 

D. Cài thêm web mới

SSH vào Ubuntu:

cd /opt/kazewp
./kazewp.sh install blog.example.com

Sau đó script sẽ hỏi các thông tin như:

  • domain
  • admin username
  • admin password
  • admin email
  • site title

Sau khi cài xong, kiểm tra container

docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"

Tiếp tục xem danh sách site:

cd /opt/kazewp
./kazewp.sh list

 

C) DDNS cho Cloudflare cho WAN IP trên Mikrotik

1) Lấy thông tin cần thiết từ Cloudflare

Bạn cần 4 thứ:

A. API Token

Vào Cloudflare tạo API Token mới với quyền:

  • Zone - DNS - Edit
  • Zone - Zone - Read

Scope:

  • chỉ đúng zone (blog.example.com)

Không dùng Global API Key nếu không cần.

B. Record ID

Hai cái này lấy bằng API.

Bạn thay:

  • YOUR_TOKEN
  • YOUR_ZONE_ID
curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records?type=A" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"

 

Cách lấy zone_idrecord_id

Có thể dùng 2 lệnh này trên Ubuntu/Windows có curl:

Lấy zone:

curl -X GET "https://api.cloudflare.com/client/v4/zones?name=blog.example.com" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"

Lấy record:

curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records?type=A&name=blog.example.com" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"

 

2) Tạo script update Cloudflare trên MikroTik

Vào:

System → Scripts → Add

Đặt tên:
cf-ddns-website

Nội dung script này:

:local cfToken "PASTE_CLOUDFLARE_API_TOKEN_HERE"
:local zoneId "PASTE_ZONE_ID_HERE"
:local recordRoot "PASTE_RECORD_ID_TYANX_COM_HERE"
:local recordWww "PASTE_RECORD_ID_WWW_HERE"

:local rootName "tyanx.com"
:local wwwName "www.tyanx.com"

:local wanIP ""
:local ddnsHost "hg309kheq7q.sn.mynetname.net"

# Lay IP public tu DDNS hostname cua MikroTik
:do {
    :set wanIP [:resolve $ddnsHost]
} on-error={
    :log error "CF-DDNS: khong resolve duoc DDNS hostname"
    :error "resolve failed"
}

:if ([:len $wanIP] = 0) do={
    :log error "CF-DDNS: WAN IP rong"
    :error "empty wan ip"
}

:global lastCloudflareIP

:if ($lastCloudflareIP = $wanIP) do={
    :log info ("CF-DDNS: IP khong doi, bo qua: " . $wanIP)
    :return
}

:local urlRoot ("https://api.cloudflare.com/client/v4/zones/" . $zoneId . "/dns_records/" . $recordRoot)
:local urlWww  ("https://api.cloudflare.com/client/v4/zones/" . $zoneId . "/dns_records/" . $recordWww)

:local headers ("Authorization: Bearer " . $cfToken . ",Content-Type: application/json")

:local bodyRoot ("{\"type\":\"A\",\"name\":\"" . $rootName . "\",\"content\":\"" . $wanIP . "\",\"ttl\":1,\"proxied\":false}")
:local bodyWww  ("{\"type\":\"A\",\"name\":\"" . $wwwName  . "\",\"content\":\"" . $wanIP . "\",\"ttl\":1,\"proxied\":false}")

:do {
    /tool fetch url=$urlRoot http-method=put http-header-field=$headers http-data=$bodyRoot output=none
    /tool fetch url=$urlWww  http-method=put http-header-field=$headers http-data=$bodyWww  output=none
    :set lastCloudflareIP $wanIP
    :log info ("CF-DDNS: da cap nhat Cloudflare -> " . $wanIP)
} on-error={
    :log error "CF-DDNS: loi khi goi Cloudflare API"
}

Chạy test ngay

/system script run cf-ddns-website

 

3) Tạo scheduler chạy tự động

Vào:

System → Scheduler → Add

Đặt như này:

  • Name: cf-ddns-website-scheduler
  • Interval: 00:05:00
  • On Event:
/system script run cf-ddns-website

Như vậy cứ 5 phút router sẽ check 1 lần.
Muốn nhanh hơn có thể để 00:01:00.

Chạy test ngay

nslookup blog.example.com
nslookup www.blog.example.com

 

Như vậy là đã xong !

Previous Article

Dự Án : A2T Games BETA - Host Tải Game Switch (Custom Games, Việt hoá thủ công , Cheats,MTP, File Brower ...)

Next Article

A2T Games Ver 1.1.1, App tải Games cho Nintendo Switch (Meta Custom Data, Việt hoá thủ công ,Cheats , MTP ....)

Write a Comment

Leave a Comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *