{"id":1462,"date":"2026-04-03T01:39:02","date_gmt":"2026-04-02T18:39:02","guid":{"rendered":"https:\/\/tyanx.com\/?p=1462"},"modified":"2026-04-03T01:42:36","modified_gmt":"2026-04-02T18:42:36","slug":"cai-dat-va-chay-website-wordpress-tren-proxmox","status":"publish","type":"post","link":"https:\/\/tyanx.com\/?p=1462","title":{"rendered":"C\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y Website WordPress tr\u00ean Proxmox"},"content":{"rendered":"<p>Ngu\u1ed3n : <a href=\"https:\/\/github.com\/10h30\/kazewp\" target=\"_blank\" rel=\"noopener\">KazeWP<\/a><\/p>\n<h2 id=\"mcetoc_1jl7msr697\">A) C\u00c0I \u0110\u1eb6T WORDPRESS<\/h2>\n<h4>1) Chu\u1ea9n b\u1ecb Proxmox \/ LXC Ubuntu 24.04<\/h4>\n<p>C\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng:<\/p>\n<pre class=\"language-php\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y<\/code><\/pre>\n<p data-start=\"730\" data-end=\"749\">C\u00e0i m\u1ea5y g\u00f3i c\u01a1 b\u1ea3n:<\/p>\n<pre class=\"language-php\"><code>sudo apt install -y ca-certificates curl gnupg git openssl<\/code><\/pre>\n<p>N\u1ebfu \u0111ang b\u1eadt UFW th\u00ec m\u1edf port web + SSH:<\/p>\n<pre class=\"language-php\"><code>sudo ufw allow OpenSSH\r\nsudo ufw allow 80\/tcp\r\nsudo ufw allow 443\/tcp\r\nsudo ufw allow 443\/udp\r\nsudo ufw enable\r\nsudo ufw status<\/code><\/pre>\n<p>L\u00fd do m\u1edf <code data-start=\"1009\" data-end=\"1018\">443\/udp<\/code> l\u00e0 \u0111\u1ec3 Caddy c\u00f3 th\u1ec3 ph\u1ee5c v\u1ee5 HTTP\/3 n\u1ebfu c\u1ea5u h\u00ecnh\/container d\u00f9ng \u0111\u1ebfn.<\/p>\n<h4 id=\"mcetoc_1jl7ma9de0\">2) C\u00e0i Docker Engine chu\u1ea9n tr\u00ean Ubuntu 24.04<\/h4>\n<p>Ch\u1ea1y l\u1ea7n l\u01b0\u1ee3t:<\/p>\n<pre class=\"language-markup\"><code>sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true<\/code><\/pre>\n<p>Th\u00eam key v\u00e0 repo Docker:<\/p>\n<pre class=\"language-markup\"><code>sudo install -m 0755 -d \/etc\/apt\/keyrings\r\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\r\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<pre class=\"language-markup\"><code>echo \\\r\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\r\n  $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" | \\\r\n  sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<\/code><\/pre>\n<p>C\u00e0i Docker + Compose plugin:<\/p>\n<pre class=\"language-markup\"><code>sudo apt update\r\nsudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<\/code><\/pre>\n<p>Ki\u1ec3m tra:<\/p>\n<pre class=\"language-markup\"><code>sudo docker version\r\nsudo docker compose version<\/code><\/pre>\n<p>C\u00e1c b\u01b0\u1edbc n\u00e0y b\u00e1m theo h\u01b0\u1edbng d\u1eabn c\u00e0i Docker Engine tr\u00ean Ubuntu v\u00e0 Compose plugin ch\u00ednh th\u1ee9c.<\/p>\n<h4 data-section-id=\"h7mcd0\" data-start=\"2497\" data-end=\"2540\" id=\"mcetoc_1jl7mgba21\"><span>3) Cho user ch\u1ea1y Docker kh\u00f4ng c\u1ea7n <code data-start=\"2534\" data-end=\"2540\">sudo<\/code><\/span><\/h4>\n<pre class=\"language-markup\"><code>sudo usermod -aG docker $USER\r\nnewgrp docker<\/code><\/pre>\n<p>Test:<\/p>\n<pre class=\"language-markup\"><code>docker ps<\/code><\/pre>\n<p data-start=\"2752\" data-end=\"2802\">N\u1ebfu ch\u01b0a \u0103n ngay th\u00ec logout\/login l\u1ea1i SSH m\u1ed9t l\u1ea7n.<\/p>\n<h4 data-section-id=\"54yu0j\" data-start=\"2809\" data-end=\"2832\"><\/h4>\n<h4 data-section-id=\"54yu0j\" data-start=\"2809\" data-end=\"2832\" id=\"mcetoc_1jl7mhiod2\">4) Tr\u1ecf domain v\u1ec1 VPS<\/h4>\n<p data-start=\"2834\" data-end=\"3067\">V\u00ed d\u1ee5 b\u1ea1n mu\u1ed1n d\u1ef1ng site <code data-start=\"2859\" data-end=\"2877\">blog.example.com<\/code> th\u00ec ph\u1ea3i t\u1ea1o b\u1ea3n ghi DNS <code data-start=\"2903\" data-end=\"2906\">A<\/code> ho\u1eb7c <code data-start=\"2912\" data-end=\"2918\">AAAA<\/code> tr\u1ecf v\u1ec1 IP m\u00e1y Ubuntu tr\u01b0\u1edbc. Caddy ch\u1ec9 auto HTTPS ngon khi domain public tr\u1ecf \u0111\u00fang v\u1ec1 m\u00e1y v\u00e0 m\u00e1y m\u1edf c\u1ed5ng 80\/443. <span class=\"\" data-state=\"closed\"><\/span><\/p>\n<p data-start=\"2834\" data-end=\"3067\">Check nhanh:<\/p>\n<pre class=\"language-markup\"><code>ping blog.example.com<\/code><\/pre>\n<p data-start=\"3166\" data-end=\"3199\">IP tr\u1ea3 v\u1ec1 ph\u1ea3i l\u00e0 IP Proxmox c\u1ee7a b\u1ea1n.<\/p>\n<h4 data-section-id=\"1ld615s\" data-start=\"3206\" data-end=\"3224\" id=\"mcetoc_1jl7mj21i3\">5) Clone KazeWP<\/h4>\n<pre class=\"language-markup\"><code>cd \/opt\r\nsudo git clone https:\/\/github.com\/10h30\/kazewp.git\r\nsudo chown -R $USER:$USER \/opt\/kazewp\r\ncd \/opt\/kazewp\r\nchmod +x kazewp.sh\r\nfind . -type f -name \"*.sh\" -exec chmod +x {} \\;<\/code><\/pre>\n<h4 data-start=\"2834\" data-end=\"3067\">6) Ch\u1ea1y KazeWP l\u1ea7n \u0111\u1ea7u<\/h4>\n<p data-start=\"3625\" data-end=\"3644\">Repo h\u1ed7 tr\u1ee3 2 ki\u1ec3u:<\/p>\n<ul data-start=\"3645\" data-end=\"3764\">\n<li data-section-id=\"ao0nm6\" data-start=\"3645\" data-end=\"3681\">ch\u1ea1y menu t\u01b0\u01a1ng t\u00e1c: <code data-start=\"3668\" data-end=\"3681\">.\/kazewp.sh<\/code><\/li>\n<li data-section-id=\"ennwsf\" data-start=\"3682\" data-end=\"3764\">ch\u1ea1y th\u1eb3ng: <code data-start=\"3696\" data-end=\"3726\">.\/kazewp.sh install &lt;domain&gt;<\/code><\/li>\n<\/ul>\n<pre class=\"language-markup\"><code>.\/kazewp.sh install blog.example.com<\/code><\/pre>\n<p data-start=\"3913\" data-end=\"3961\">Trong l\u00fac c\u00e0i, script s\u1ebd h\u1ecfi c\u00e1c th\u00f4ng tin ki\u1ec3u:<\/p>\n<ul data-start=\"3962\" data-end=\"4031\">\n<li data-section-id=\"1aueors\" data-start=\"3962\" data-end=\"3970\">domain<\/li>\n<li data-section-id=\"11sdu7f\" data-start=\"3971\" data-end=\"3984\">email admin<\/li>\n<li data-section-id=\"3v3inl\" data-start=\"3985\" data-end=\"4001\">username admin<\/li>\n<li data-section-id=\"kh99co\" data-start=\"4002\" data-end=\"4018\">password admin<\/li>\n<li data-section-id=\"1bmudnn\" data-start=\"4019\" data-end=\"4031\">site title<\/li>\n<\/ul>\n<p data-start=\"4033\" data-end=\"4063\">Theo m\u00f4 t\u1ea3 repo, KazeWP s\u1ebd t\u1ef1:<\/p>\n<ul data-start=\"4064\" data-end=\"4253\">\n<li data-section-id=\"583wtf\" data-start=\"4064\" data-end=\"4107\">t\u1ea1o site WordPress ri\u00eang trong container,<\/li>\n<li data-section-id=\"12h23zn\" data-start=\"4108\" data-end=\"4137\">t\u1ea1o database MariaDB ri\u00eang,<\/li>\n<li data-section-id=\"brfgde\" data-start=\"4138\" data-end=\"4169\">c\u1ea5u h\u00ecnh Caddy reverse proxy,<\/li>\n<li data-section-id=\"1y63jpe\" data-start=\"4170\" data-end=\"4253\">d\u00f9ng Bash \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a t\u1ea1o\/x\u00f3a\/list site<\/li>\n<\/ul>\n<h4 data-section-id=\"11hzv2h\" data-start=\"4260\" data-end=\"4306\" id=\"mcetoc_1jl7mlpe74\">7) Sau khi install xong, ki\u1ec3m tra container<\/h4>\n<p data-start=\"4308\" data-end=\"4332\">Xem container \u0111ang ch\u1ea1y:<\/p>\n<pre class=\"language-markup\"><code>docker ps<\/code><\/pre>\n<pre class=\"language-markup\"><code>docker logs &lt;ten-container&gt; --tail 100<\/code><\/pre>\n<p data-start=\"4501\" data-end=\"4561\">N\u1ebfu KazeWP d\u1ef1ng th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd c\u00f3 \u00edt nh\u1ea5t c\u00e1c ph\u1ea7n ki\u1ec3u:<\/p>\n<ul data-start=\"4562\" data-end=\"4701\">\n<li data-section-id=\"16xb4ib\" data-start=\"4562\" data-end=\"4569\">Caddy<\/li>\n<li data-section-id=\"16zyyo2\" data-start=\"4570\" data-end=\"4602\">WordPress container cho domain<\/li>\n<li data-section-id=\"18hv36c\" data-start=\"4603\" data-end=\"4701\">MariaDB ri\u00eang cho domain<\/li>\n<\/ul>\n<h4 data-section-id=\"1q1m56i\" data-start=\"4708\" data-end=\"4752\" id=\"mcetoc_1jl7mmt815\">8) Truy c\u1eadp domain \u0111\u1ec3 ho\u00e0n t\u1ea5t \/ ki\u1ec3m tra<\/h4>\n<p data-start=\"2834\" data-end=\"3067\">M\u1edf tr\u00ecnh duy\u1ec7t:<\/p>\n<pre class=\"language-markup\"><code>https:\/\/blog.example.com<\/code><\/pre>\n<h4 data-start=\"2834\" data-end=\"3067\">9) C\u00e1c l\u1ec7nh qu\u1ea3n l\u00fd h\u1eb1ng ng\u00e0y<\/h4>\n<pre class=\"language-markup\"><code>.\/kazewp.sh list\r\n.\/kazewp.sh stop blog.example.com\r\n.\/kazewp.sh start blog.example.com\r\n.\/kazewp.sh restart blog.example.com\r\n.\/kazewp.sh delete blog.example.com\r\n.\/kazewp.sh delete all<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h4 data-section-id=\"1wtv5g6\" data-start=\"6854\" data-end=\"6893\" id=\"mcetoc_1jl7moj7d6\">10) B\u1ed9 l\u1ec7nh full, copy-paste<\/h4>\n<pre class=\"language-markup\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y\r\nsudo apt install -y ca-certificates curl gnupg git openssl\r\n\r\nsudo ufw allow OpenSSH\r\nsudo ufw allow 80\/tcp\r\nsudo ufw allow 443\/tcp\r\nsudo ufw allow 443\/udp\r\nsudo ufw enable\r\n\r\nsudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true\r\n\r\nsudo install -m 0755 -d \/etc\/apt\/keyrings\r\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\r\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\r\n\r\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n\r\nsudo apt update\r\nsudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\r\n\r\nsudo usermod -aG docker $USER\r\nnewgrp docker\r\n\r\ncd \/opt\r\nsudo git clone https:\/\/github.com\/10h30\/kazewp.git\r\nsudo chown -R $USER:$USER \/opt\/kazewp\r\ncd \/opt\/kazewp\r\nchmod +x kazewp.sh\r\nfind . -type f -name \"*.sh\" -exec chmod +x {} \\;\r\n\r\n.\/kazewp.sh install blog.example.com<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h2 data-section-id=\"1609er0\" data-start=\"1238\" data-end=\"1279\" id=\"mcetoc_1jl7mt3a18\">B) Th\u00eam DNS cho web m\u1edbi tr\u00ean Cloudflare<\/h2>\n<h4 data-section-id=\"7lyh0e\" data-start=\"1281\" data-end=\"1326\" id=\"mcetoc_1jl7mt3a19\"><span>Tr\u01b0\u1eddng h\u1ee3p th\u00eam subdomain <code data-start=\"1310\" data-end=\"1326\">blog.example.com<\/code><\/span><\/h4>\n<p data-start=\"1328\" data-end=\"1362\">V\u00e0o Cloudflare &gt; DNS &gt; Add record:<\/p>\n<ul data-start=\"1364\" data-end=\"1466\">\n<li data-section-id=\"gsx4mj\" data-start=\"1364\" data-end=\"1375\">Type: <code data-start=\"1372\" data-end=\"1375\">A<\/code><\/li>\n<li data-section-id=\"eopvpv\" data-start=\"1376\" data-end=\"1390\">Name: <code data-start=\"1384\" data-end=\"1390\">blog<\/code><\/li>\n<li data-section-id=\"129tvk0\" data-start=\"1391\" data-end=\"1423\">IPv4 address: <code>99.199.199.238<\/code> (ip wan)<\/li>\n<li data-section-id=\"a6o2h3\" data-start=\"1424\" data-end=\"1452\">Proxy status: <strong data-start=\"1440\" data-end=\"1452\">DNS only<\/strong><\/li>\n<li data-section-id=\"y34yc1\" data-start=\"1453\" data-end=\"1466\">TTL: <code data-start=\"1460\" data-end=\"1466\">Auto<\/code><\/li>\n<\/ul>\n<h4 id=\"mcetoc_1jl7mv8mda\">Ki\u1ec3m tra DNS \u0111\u00e3 \u0103n ch\u01b0a<\/h4>\n<p data-start=\"1763\" data-end=\"1795\">Tr\u00ean Ubuntu ho\u1eb7c m\u00e1y kh\u00e1c, ch\u1ea1y:<\/p>\n<pre class=\"language-markup\"><code>nslookup blog.example.com<\/code><\/pre>\n<p>Ph\u1ea3i ra:<\/p>\n<pre class=\"language-markup\"><code>99.199.199.238 <\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3 id=\"mcetoc_1jl7n1lhfb\">D. C\u00e0i th\u00eam web m\u1edbi<\/h3>\n<p>SSH v\u00e0o Ubuntu:<\/p>\n<pre class=\"language-markup\"><code>cd \/opt\/kazewp\r\n.\/kazewp.sh install blog.example.com<\/code><\/pre>\n<p data-start=\"2124\" data-end=\"2163\">Sau \u0111\u00f3 script s\u1ebd h\u1ecfi c\u00e1c th\u00f4ng tin nh\u01b0:<\/p>\n<ul data-start=\"2164\" data-end=\"2233\">\n<li data-section-id=\"1aueors\" data-start=\"2164\" data-end=\"2172\">domain<\/li>\n<li data-section-id=\"ttqp\" data-start=\"2173\" data-end=\"2189\">admin username<\/li>\n<li data-section-id=\"1xq5h6g\" data-start=\"2190\" data-end=\"2206\">admin password<\/li>\n<li data-section-id=\"1l6744r\" data-start=\"2207\" data-end=\"2220\">admin email<\/li>\n<li data-section-id=\"1bmudnn\" data-start=\"2221\" data-end=\"2233\">site title<\/li>\n<\/ul>\n<p>Sau khi c\u00e0i xong, ki\u1ec3m tra container<\/p>\n<pre class=\"language-markup\"><code>docker ps --format \"table {{.Names}}\\t{{.Ports}}\\t{{.Status}}\"<\/code><\/pre>\n<p>Ti\u1ebfp t\u1ee5c xem danh s\u00e1ch site:<\/p>\n<pre class=\"language-markup\"><code>cd \/opt\/kazewp\r\n.\/kazewp.sh list<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h2 id=\"mcetoc_1jl7n62a6c\">C) DDNS cho Cloudflare cho WAN IP tr\u00ean Mikrotik<\/h2>\n<h4 data-section-id=\"1g9cncp\" data-start=\"150\" data-end=\"193\" id=\"mcetoc_1jl7n6r6td\">1) L\u1ea5y th\u00f4ng tin c\u1ea7n thi\u1ebft t\u1eeb Cloudflare<\/h4>\n<p data-start=\"195\" data-end=\"209\">B\u1ea1n c\u1ea7n 4 th\u1ee9:<\/p>\n<h5 data-section-id=\"1mnbgga\" data-start=\"211\" data-end=\"227\" id=\"mcetoc_1jl7n79h3e\">A. API Token<\/h5>\n<p data-start=\"228\" data-end=\"275\">V\u00e0o Cloudflare t\u1ea1o <strong data-start=\"247\" data-end=\"260\">API Token<\/strong> m\u1edbi v\u1edbi quy\u1ec1n:<\/p>\n<ul data-start=\"276\" data-end=\"320\">\n<li data-section-id=\"1xtcqgj\" data-start=\"276\" data-end=\"297\"><code data-start=\"278\" data-end=\"297\">Zone - DNS - Edit<\/code><\/li>\n<li data-section-id=\"1ekrbu\" data-start=\"298\" data-end=\"320\"><code data-start=\"300\" data-end=\"320\">Zone - Zone - Read<\/code><\/li>\n<\/ul>\n<p data-start=\"322\" data-end=\"328\">Scope:<\/p>\n<ul data-start=\"329\" data-end=\"356\">\n<li data-section-id=\"1c3onk3\" data-start=\"329\" data-end=\"356\">ch\u1ec9 \u0111\u00fang zone (blog.example.com)<\/li>\n<\/ul>\n<p data-start=\"358\" data-end=\"398\">Kh\u00f4ng d\u00f9ng Global API Key n\u1ebfu kh\u00f4ng c\u1ea7n.<\/p>\n<h5 data-start=\"358\" data-end=\"398\">B. Record ID<\/h5>\n<p data-start=\"581\" data-end=\"606\">Hai c\u00e1i n\u00e0y l\u1ea5y b\u1eb1ng API.<\/p>\n<p data-start=\"608\" data-end=\"617\">B\u1ea1n thay:<\/p>\n<ul data-start=\"618\" data-end=\"649\">\n<li data-section-id=\"10qh0u5\" data-start=\"618\" data-end=\"632\"><code data-start=\"620\" data-end=\"632\">YOUR_TOKEN<\/code><\/li>\n<li data-section-id=\"3dzx9m\" data-start=\"633\" data-end=\"649\"><code data-start=\"635\" data-end=\"649\">YOUR_ZONE_ID<\/code><\/li>\n<\/ul>\n<pre class=\"language-markup\"><code>curl -X GET \"https:\/\/api.cloudflare.com\/client\/v4\/zones\/YOUR_ZONE_ID\/dns_records?type=A\" \\\r\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\r\n  -H \"Content-Type: application\/json\"<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><strong>C\u00e1ch l\u1ea5y <code data-start=\"6988\" data-end=\"6997\">zone_id<\/code> v\u00e0 <code data-start=\"7001\" data-end=\"7012\">record_id<\/code><\/strong><\/p>\n<p>C\u00f3 th\u1ec3 d\u00f9ng 2 l\u1ec7nh n\u00e0y tr\u00ean Ubuntu\/Windows c\u00f3 curl:<\/p>\n<p>L\u1ea5y zone:<\/p>\n<pre class=\"language-markup\"><code>curl -X GET \"https:\/\/api.cloudflare.com\/client\/v4\/zones?name=blog.example.com\" \\\r\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\r\n  -H \"Content-Type: application\/json\"<\/code><\/pre>\n<p>L\u1ea5y record:<\/p>\n<pre class=\"language-markup\"><code>curl -X GET \"https:\/\/api.cloudflare.com\/client\/v4\/zones\/YOUR_ZONE_ID\/dns_records?type=A&amp;name=blog.example.com\" \\\r\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\r\n  -H \"Content-Type: application\/json\"<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h4 data-section-id=\"19ze66o\" data-start=\"1367\" data-end=\"1415\" id=\"mcetoc_1jl7nb5n3f\">2) T\u1ea1o script update Cloudflare tr\u00ean MikroTik<\/h4>\n<p data-start=\"1417\" data-end=\"1421\">V\u00e0o:<\/p>\n<p data-start=\"1423\" data-end=\"1449\"><strong data-start=\"1423\" data-end=\"1449\">System \u2192 Scripts \u2192 Add<\/strong><\/p>\n<p data-start=\"1451\" data-end=\"1477\">\u0110\u1eb7t t\u00ean:<br data-start=\"1459\" data-end=\"1462\" \/><code data-start=\"1462\" data-end=\"1477\">cf-ddns-website<\/code><\/p>\n<p data-start=\"1479\" data-end=\"1499\">N\u1ed9i dung script n\u00e0y:<\/p>\n<pre class=\"language-markup\"><code>:local cfToken \"PASTE_CLOUDFLARE_API_TOKEN_HERE\"\r\n:local zoneId \"PASTE_ZONE_ID_HERE\"\r\n:local recordRoot \"PASTE_RECORD_ID_TYANX_COM_HERE\"\r\n:local recordWww \"PASTE_RECORD_ID_WWW_HERE\"\r\n\r\n:local rootName \"tyanx.com\"\r\n:local wwwName \"www.tyanx.com\"\r\n\r\n:local wanIP \"\"\r\n:local ddnsHost \"hg309kheq7q.sn.mynetname.net\"\r\n\r\n# Lay IP public tu DDNS hostname cua MikroTik\r\n:do {\r\n    :set wanIP [:resolve $ddnsHost]\r\n} on-error={\r\n    :log error \"CF-DDNS: khong resolve duoc DDNS hostname\"\r\n    :error \"resolve failed\"\r\n}\r\n\r\n:if ([:len $wanIP] = 0) do={\r\n    :log error \"CF-DDNS: WAN IP rong\"\r\n    :error \"empty wan ip\"\r\n}\r\n\r\n:global lastCloudflareIP\r\n\r\n:if ($lastCloudflareIP = $wanIP) do={\r\n    :log info (\"CF-DDNS: IP khong doi, bo qua: \" . $wanIP)\r\n    :return\r\n}\r\n\r\n:local urlRoot (\"https:\/\/api.cloudflare.com\/client\/v4\/zones\/\" . $zoneId . \"\/dns_records\/\" . $recordRoot)\r\n:local urlWww  (\"https:\/\/api.cloudflare.com\/client\/v4\/zones\/\" . $zoneId . \"\/dns_records\/\" . $recordWww)\r\n\r\n:local headers (\"Authorization: Bearer \" . $cfToken . \",Content-Type: application\/json\")\r\n\r\n:local bodyRoot (\"{\\\"type\\\":\\\"A\\\",\\\"name\\\":\\\"\" . $rootName . \"\\\",\\\"content\\\":\\\"\" . $wanIP . \"\\\",\\\"ttl\\\":1,\\\"proxied\\\":false}\")\r\n:local bodyWww  (\"{\\\"type\\\":\\\"A\\\",\\\"name\\\":\\\"\" . $wwwName  . \"\\\",\\\"content\\\":\\\"\" . $wanIP . \"\\\",\\\"ttl\\\":1,\\\"proxied\\\":false}\")\r\n\r\n:do {\r\n    \/tool fetch url=$urlRoot http-method=put http-header-field=$headers http-data=$bodyRoot output=none\r\n    \/tool fetch url=$urlWww  http-method=put http-header-field=$headers http-data=$bodyWww  output=none\r\n    :set lastCloudflareIP $wanIP\r\n    :log info (\"CF-DDNS: da cap nhat Cloudflare -&gt; \" . $wanIP)\r\n} on-error={\r\n    :log error \"CF-DDNS: loi khi goi Cloudflare API\"\r\n}<\/code><\/pre>\n<p>Ch\u1ea1y test ngay<\/p>\n<pre class=\"language-markup\"><code>\/system script run cf-ddns-website<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h4>3) T\u1ea1o scheduler ch\u1ea1y t\u1ef1 \u0111\u1ed9ng<\/h4>\n<p data-start=\"3916\" data-end=\"3920\">V\u00e0o:<\/p>\n<p data-start=\"3922\" data-end=\"3950\"><strong data-start=\"3922\" data-end=\"3950\">System \u2192 Scheduler \u2192 Add<\/strong><\/p>\n<p data-start=\"3952\" data-end=\"3964\">\u0110\u1eb7t nh\u01b0 n\u00e0y:<\/p>\n<ul data-start=\"3966\" data-end=\"4034\">\n<li data-section-id=\"br0kst\" data-start=\"3966\" data-end=\"3999\">Name: <code data-start=\"3974\" data-end=\"3999\">cf-ddns-website-scheduler<\/code><\/li>\n<li data-section-id=\"ufnu6g\" data-start=\"4000\" data-end=\"4022\">Interval: <code data-start=\"4012\" data-end=\"4022\">00:05:00<\/code><\/li>\n<li data-section-id=\"118txb3\" data-start=\"4023\" data-end=\"4034\">On Event:<\/li>\n<\/ul>\n<pre class=\"language-markup\"><code>\/system script run cf-ddns-website<\/code><\/pre>\n<p>Nh\u01b0 v\u1eady c\u1ee9 5 ph\u00fat router s\u1ebd check 1 l\u1ea7n.<br data-start=\"4138\" data-end=\"4141\" \/>Mu\u1ed1n nhanh h\u01a1n c\u00f3 th\u1ec3 \u0111\u1ec3 <code data-start=\"4166\" data-end=\"4176\">00:01:00<\/code>.<\/p>\n<p>Ch\u1ea1y test ngay<\/p>\n<pre class=\"language-markup\"><code>nslookup blog.example.com\r\nnslookup www.blog.example.com<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Nh\u01b0 v\u1eady l\u00e0 \u0111\u00e3 xong !<\/p>\n","protected":false},"excerpt":{"rendered":"Ngu\u1ed3n : KazeWP A) C\u00c0I \u0110\u1eb6T WORDPRESS 1) Chu\u1ea9n b\u1ecb Proxmox \/ LXC Ubuntu 24.04 C\u1eadp nh\u1eadt h\u1ec7&hellip;","protected":false},"author":1,"featured_media":1469,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[18,2,14],"tags":[48,50,49],"class_list":{"0":"post-1462","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-wordpress","8":"category-self-hosted","9":"category-virtualization","10":"tag-proxmox","11":"tag-self-hosted","12":"tag-wordpress","13":"cs-entry"},"_links":{"self":[{"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/posts\/1462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tyanx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1462"}],"version-history":[{"count":11,"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/posts\/1462\/revisions"}],"predecessor-version":[{"id":1474,"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/posts\/1462\/revisions\/1474"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tyanx.com\/index.php?rest_route=\/wp\/v2\/media\/1469"}],"wp:attachment":[{"href":"https:\/\/tyanx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tyanx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tyanx.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}