{"id":34933,"date":"2024-08-29T09:46:53","date_gmt":"2024-08-29T02:46:53","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/29\/yaml-anchors-aliases-and-overrides\/"},"modified":"2024-08-29T09:46:53","modified_gmt":"2024-08-29T02:46:53","slug":"yaml-anchors-aliases-and-overrides","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/29\/yaml-anchors-aliases-and-overrides\/","title":{"rendered":"YAML Anchors, Aliases, v\u00e0 Overrides"},"content":{"rendered":"<p>C\u00e1c neo, b\u00ed danh, ghi \u0111\u00e8 v\u00e0 ph\u1ea7n m\u1edf r\u1ed9ng YAML gi\u00fap gi\u1ea3m s\u1ef1 l\u1eb7p l\u1ea1i d\u1eef li\u1ec7u trong c\u00e1c t\u1ec7p YAML c\u1ee7a b\u1ea1n. C\u00e1c t\u00ednh n\u0103ng n\u00e0y c\u1ee7a YAML \u0111\u01b0\u1ee3c th\u1ea3o lu\u1eadn trong h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u1ec3 \u0111\u01b0a b\u1ea1n v\u01b0\u1ee3t ra ngo\u00e0i nh\u1eefng \u0111i\u1ec1u c\u01a1 b\u1ea3n \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/yaml-reference\/\">Tham kh\u1ea3o c\u00fa ph\u00e1p YAML<\/a>&nbsp;.<\/p>\n<h2 id=\"yaml-anchors-and-aliases\">M\u1ecf neo v\u00e0 b\u00ed danh YAML<a href=\"https:\/\/www.linode.com\/docs\/guides\/yaml-anchors-aliases-overrides-extensions\/#yaml-anchors-and-aliases\"><\/a><\/h2>\n<p>Gi\u1ea3 s\u1eed b\u1ea1n s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker Compose<\/a>&nbsp;\u0111\u1ec3 ch\u1ec9 \u0111\u1ecbnh m\u1ed9t t\u00f9y ch\u1ec9nh WordPress c\u1ee5 th\u1ec3. B\u1ea3n th\u00e2n Docker cung c\u1ea5p m\u1ed9t&nbsp;<a href=\"https:\/\/docs.docker.com\/compose\/wordpress\/\" target=\"_blank\" rel=\"noreferrer noopener\">th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt v\u00ed d\u1ee5<\/a>&nbsp;, t\u1ea1i th\u1eddi \u0111i\u1ec3m vi\u1ebft b\u00e0i n\u00e0y, b\u1eaft \u0111\u1ea7u nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>version: \"3.9\"\n\nservices:\n  db:\n    image: mysql:5.7\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n...<\/code><\/pre>\n<p>T\u00e0i li\u1ec7u c\u1ee7a Docker minh h\u1ecda c\u00e1ch s\u1eed d\u1ee5ng a&nbsp;<code>docker-compose.yml<\/code>\u0111\u1ec3 t\u1ea1o m\u1ed9t blog c\u01a1 b\u1ea3n \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u1eb1ng kho d\u1eef li\u1ec7u c\u00f3 \u1ed5 \u0111\u0129a \u0111\u01b0\u1ee3c g\u1eafn tr\u00ean&nbsp;<code>\/var\/lib\/mysql<\/code>.<\/p>\n<p>Tuy nhi\u00ean, trong b\u1ed1i c\u1ea3nh chuy\u00ean nghi\u1ec7p, b\u1ea1n kh\u00f4ng ch\u1ec9 c\u1ea7n m\u1ed9t kho d\u1eef li\u1ec7u sao l\u01b0u cho phi\u00ean b\u1ea3n WordPress m\u00e0 c\u00f2n c\u1ea7n nhi\u1ec1u phi\u00ean b\u1ea3n WordPress. Ng\u01b0\u1eddi ta th\u01b0\u1eddng \u0111\u1ecbnh ngh\u0129a m\u1ed9t phi\u00ean b\u1ea3n s\u1ea3n xu\u1ea5t h\u1ed7 tr\u1ee3 ng\u01b0\u1eddi d\u00f9ng cu\u1ed1i trong c\u00e1c ho\u1ea1t \u0111\u1ed9ng WordPress th\u1ef1c t\u1ebf c\u1ee7a h\u1ecd, c\u00f9ng v\u1edbi m\u1ed9t phi\u00ean b\u1ea3n th\u1eed nghi\u1ec7m \u0111\u1ec3 x\u00e1c minh t\u00ednh ch\u00ednh x\u00e1c c\u1ee7a ch\u1ee9c n\u0103ng tr\u01b0\u1edbc khi cho ng\u01b0\u1eddi d\u00f9ng cu\u1ed1i bi\u1ebft. M\u1ed9t c\u00e1ch \u0111\u1ec3 tri\u1ec3n khai nhi\u1ec1u \u0111\u1ecbnh ngh\u0129a ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 vi\u1ebft ch\u00fang m\u1ed9t c\u00e1ch ng\u00e2y th\u01a1.<\/p>\n<pre class=\"wp-block-code\"><code>version: \"3.9\"\n\nservices:\n  production-db:\n    image: mysql:5.7\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n    environment:\n  MYSQL_ROOT_PASSWORD: somewordpress\n  MYSQL_DATABASE: wordpress\n  MYSQL_USER: wordpress\n  MYSQL_PASSWORD: wordpress\n      ...\n  test-db:\n    image: mysql:5.7\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n    environment:\n    MYSQL_ROOT_PASSWORD: somewordpress\n    MYSQL_DATABASE: wordpress\n    MYSQL_USER: wordpress\n    MYSQL_PASSWORD: wordpress<\/code><\/pre>\n<p>M\u1ed9t&nbsp;<em>neo<\/em>&nbsp;(&nbsp;<code>&amp;<\/code>) v\u00e0&nbsp;<em>b\u00ed danh<\/em>&nbsp;(&nbsp;<code>*<\/code>) r\u00fat g\u1ecdn c\u00e1c \u0111\u1ecbnh ngh\u0129a n\u00e0y th\u00e0nh:<\/p>\n<pre class=\"wp-block-code\"><code>version: \"3.9\"\n\nservices:\n  production-db: &amp;database-definition\n    image: mysql:5.7\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n    environment:\n  MYSQL_ROOT_PASSWORD: somewordpress\n  MYSQL_DATABASE: wordpress\n  MYSQL_USER: wordpress\n  MYSQL_PASSWORD: wordpress\n      ...\n  test-db: *database-definition<\/code><\/pre>\n<p>Trong v\u00ed d\u1ee5 n\u00e0y, the&nbsp;<code>&amp;database-definition<\/code>l\u00e0 m\u1ed9t&nbsp;<em>m\u1ecf neo<\/em>&nbsp;m\u00e0&nbsp;<code>*database-definition<\/code>&nbsp;<em>b\u00ed danh tham chi\u1ebfu<\/em>&nbsp;t\u1edbi.<\/p>\n<p>B\u00ed danh r\u00fat g\u1ecdn n\u1ed9i dung YAML, n\u00e9n n\u00f3 l\u1ea1i \u0111\u1ec3 n\u00f3 chi\u1ebfm \u00edt byte h\u01a1n trong h\u1ec7 th\u1ed1ng t\u1ec7p. Quan tr\u1ecdng h\u01a1n,&nbsp;<em>ng\u01b0\u1eddi<\/em>&nbsp;\u0111\u1ecdc ph\u1ea3i ti\u1ebfp nh\u1eadn \u00edt h\u01a1n v\u00e0 do \u0111\u00f3 t\u1eadp trung hi\u1ec7u qu\u1ea3 h\u01a1n v\u00e0o c\u00e1c y\u1ebfu t\u1ed1 c\u1ed1t l\u00f5i c\u1ee7a \u0111\u1ecbnh ngh\u0129a. H\u01a1n n\u1eefa, c\u00e1c k\u1ebft h\u1ee3p neo-b\u00ed danh n\u00e0y c\u00f3 th\u1ec3 gi\u00fap c\u00f4ng vi\u1ec7c b\u1ea3o tr\u00ec d\u1ec5 d\u00e0ng h\u01a1n. Gi\u1ea3 s\u1eed&nbsp;<code>MYSQL_USER<\/code>c\u1ea7n c\u1eadp nh\u1eadt t\u1eeb&nbsp;<code>wordpress<\/code>th\u00e0nh&nbsp;<code>special_wordpress_account<\/code>: trong khi YAML ng\u00e2y th\u01a1 y\u00eau c\u1ea7u ch\u1ec9nh s\u1eeda trong m\u1ed7i l\u1ea7n s\u1eed d\u1ee5ng c\u1ee7a n\u00f3 &#8211; c\u00f3 l\u1ebd gi\u1ed1ng nh\u01b0 s\u1ed1 l\u01b0\u1ee3ng c\u01a1 s\u1edf d\u1eef li\u1ec7u trong t\u1ea5t c\u1ea3 c\u00e1c m\u00f4i tr\u01b0\u1eddng &#8211; th\u00ec YAML \u0111\u01b0\u1ee3c vi\u1ebft l\u1ea1i ch\u1ec9 c\u1ea7n c\u1eadp nh\u1eadt m\u1ed9t neo c\u1ee7a n\u00f3. Sau \u0111\u00f3, m\u1ed7i b\u00ed danh s\u1ebd&nbsp;<em>t\u1ef1<\/em><code>MYSQL_USER<\/code>&nbsp;\u0111\u1ed9ng nh\u1eadn \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt \u0111\u00fang c\u00e1ch&nbsp;. \u00cdt gi\u00e1 tr\u1ecb ri\u00eang bi\u1ec7t h\u01a1n \u0111\u1ec3 sao ch\u00e9p v\u00e0 d\u00e1n ch\u1eafc ch\u1eafn c\u00f3 ngh\u0129a l\u00e0 \u00edt c\u01a1 h\u1ed9i x\u1ea3y ra l\u1ed7i v\u00f4 \u00fd h\u01a1n.<code>special_wordpress_account<\/code><em><\/em><\/p>\n<p>C\u00e1c b\u00ed danh th\u01b0\u1eddng thu nh\u1ecf c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt YAML ph\u1ee9c t\u1ea1p xu\u1ed1ng c\u00f2n m\u1ed9t n\u1eeda ho\u1eb7c th\u1eadm ch\u00ed m\u1ed9t ph\u1ea7n nh\u1ecf h\u01a1n k\u00edch th\u01b0\u1edbc ban \u0111\u1ea7u.<\/p>\n<h2 id=\"yaml-overrides\">Ghi \u0111\u00e8 YAML<a href=\"https:\/\/www.linode.com\/docs\/guides\/yaml-anchors-aliases-overrides-extensions\/#yaml-overrides\"><\/a><\/h2>\n<p>\u0110\u00f4i khi c\u00e1c ph\u00e2n \u0111o\u1ea1n c\u1ee7a t\u1ec7p YAML ch\u1ec9 chia s\u1ebb m\u1ed9t ph\u1ea7n n\u1ed9i dung c\u1ee7a ch\u00fang. V\u00ed d\u1ee5 WordPress c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh c\u00e1c c\u01a1 s\u1edf d\u1eef li\u1ec7u gi\u1ed1ng h\u1ec7t nhau ngo\u1ea1i tr\u1eeb vi\u1ec7c m\u1ed7i phi\u00ean b\u1ea3n c\u00f3 m\u1ed9t m\u1eadt kh\u1ea9u ri\u00eang bi\u1ec7t.&nbsp;<em>C\u00e1c ghi \u0111\u00e8<\/em>&nbsp;c\u1ee7a YAML cho ph\u00e9p t\u00ecnh hu\u1ed1ng n\u00e0y.<\/p>\n<pre class=\"wp-block-code\"><code>version: \"3.9\"\n\nservices:\n  production-db: &amp;database-definition\n    image: mysql:5.7\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n    environment: &amp;environment-definition\n  MYSQL_ROOT_PASSWORD: somewordpress\n  MYSQL_DATABASE: wordpress\n  MYSQL_USER: wordpress\n  MYSQL_PASSWORD: production-password\n      ...\n  test-db:\n    &lt;&lt;: *database-definition\n    environment:\n        &lt;&lt;: *environment-definition\n  MYSQL_PASSWORD: test-password\n  ...<\/code><\/pre>\n<p>\u0110\u00e2y&nbsp;<code>&lt;&lt;<\/code>l\u00e0 c\u00fa ph\u00e1p&nbsp;<em>ghi \u0111\u00e8<\/em>&nbsp;\u0111\u1eb7c bi\u1ec7t cho ph\u00e9p s\u1eed d\u1ee5ng b\u00ed danh c\u00f3 th\u1ec3 c\u1eadp nh\u1eadt c\u00e1c gi\u00e1 tr\u1ecb ri\u00eang l\u1ebb.<\/p>\n<h2 id=\"economy-of-expression\">N\u1ec1n kinh t\u1ebf c\u1ee7a s\u1ef1 bi\u1ec3u \u0111\u1ea1t<a href=\"https:\/\/www.linode.com\/docs\/guides\/yaml-anchors-aliases-overrides-extensions\/#economy-of-expression\"><\/a><\/h2>\n<p>Anchor, alias v\u00e0 overrides cung c\u1ea5p s\u1ef1 ng\u1eafn g\u1ecdn cho c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh YAML c\u1ee7a b\u1ea1n. B\u1ea5t k\u1ef3 YAML n\u00e0o \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng c\u00e1c c\u1ea5u tr\u00fac n\u00e0y \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c m\u1edf r\u1ed9ng th\u00e0nh m\u1ed9t d\u1ea1ng h\u1ee3p l\u1ec7 gi\u00fap b\u1ea1n gi\u1eef cho c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a m\u00ecnh DRY. C\u00e1c t\u00ednh n\u0103ng n\u00e0y c\u1ee7a ng\u00f4n ng\u1eef YAML gi\u00fap gi\u1eef cho c\u00e1c t\u1ec7p c\u1ee7a b\u1ea1n nh\u1ecf g\u1ecdn v\u00e0 d\u1ec5 hi\u1ec3u v\u00e0 b\u1ea3o tr\u00ec h\u01a1n.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker So\u1ea1n th\u1ea3o<\/a><\/li>\n<li><a href=\"https:\/\/docs.docker.com\/compose\/wordpress\/\" target=\"_blank\" rel=\"noreferrer noopener\">Quickstart-Compose v\u00e0 WordPress<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/yaml-anchors-aliases-overrides-extensions\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00e1c neo, b\u00ed danh, ghi \u0111\u00e8 v\u00e0 ph\u1ea7n m\u1edf r\u1ed9ng YAML gi\u00fap gi\u1ea3m s\u1ef1 l\u1eb7p l\u1ea1i d\u1eef li\u1ec7u trong c\u00e1c t\u1ec7p YAML c\u1ee7a b\u1ea1n. C\u00e1c t\u00ednh n\u0103ng n\u00e0y c\u1ee7a YAML \u0111\u01b0\u1ee3c th\u1ea3o lu\u1eadn trong h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u1ec3 \u0111\u01b0a b\u1ea1n v\u01b0\u1ee3t ra ngo\u00e0i nh\u1eefng \u0111i\u1ec1u c\u01a1 b\u1ea3n \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp trong h\u01b0\u1edbng d\u1eabn&nbsp;Tham kh\u1ea3o c\u00fa<\/p>\n","protected":false},"author":1,"featured_media":35795,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[107],"tags":[],"class_list":["post-34933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-configuration-management-basics"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34933"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34933\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35795"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}