{"id":34935,"date":"2024-09-04T10:10:01","date_gmt":"2024-09-04T03:10:01","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/04\/creating-your-first-chef-cookbook\/"},"modified":"2024-09-04T10:10:01","modified_gmt":"2024-09-04T03:10:01","slug":"creating-your-first-chef-cookbook","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/04\/creating-your-first-chef-cookbook\/","title":{"rendered":"T\u1ea1o Chef Cookbook \u0111\u1ea7u ti\u00ean c\u1ee7a b\u1ea1n"},"content":{"rendered":"<p>S\u00e1ch h\u01b0\u1edbng d\u1eabn c\u1ee7a Chef m\u00f4 t\u1ea3&nbsp;<em>tr\u1ea1ng th\u00e1i mong mu\u1ed1n<\/em>&nbsp;c\u1ee7a c\u00e1c n\u00fat c\u1ee7a b\u1ea1n v\u00e0 cho ph\u00e9p Chef \u0111\u01b0a ra c\u00e1c thay \u0111\u1ed5i c\u1ea7n thi\u1ebft \u0111\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c tr\u1ea1ng th\u00e1i n\u00e0y. Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch t\u1ea1o s\u00e1ch h\u01b0\u1edbng d\u1eabn c\u1ea5u h\u00ecnh ng\u0103n x\u1ebfp LAMP tr\u00ean Linode.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/creating-your-first-chef-cookbook_hu8a0d95ddbdd1e42d79dc7f8d11902536_664525_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"T\u1ea1o s\u00e1ch d\u1ea1y n\u1ea5u \u0103n \u0111\u1ea7u ti\u00ean c\u1ee7a b\u1ea1n\" title=\"T\u1ea1o s\u00e1ch d\u1ea1y n\u1ea5u \u0103n \u0111\u1ea7u ti\u00ean c\u1ee7a b\u1ea1n\"\/><\/figure>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#before-you-begin\"><\/a><\/h2>\n<ol>\n<li>Thi\u1ebft l\u1eadp Chef v\u1edbi h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-chef-server-workstation-on-ubuntu-18-04\/\">Thi\u1ebft l\u1eadp m\u00e1y ch\u1ee7, m\u00e1y tr\u1ea1m v\u00e0 n\u00fat Chef<\/a>&nbsp;. Khi l\u00e0m theo h\u01b0\u1edbng d\u1eabn \u0111\u00f3,&nbsp;<strong>h\u00e3y ch\u1ecdn Ubuntu 16.04 l\u00e0m \u1ea3nh Linux c\u1ee7a b\u1ea1n cho n\u00fat Chef m\u00e0 b\u1ea1n s\u1ebd kh\u1edfi \u0111\u1ed9ng v\u00e0 qu\u1ea3n l\u00fd<\/strong>&nbsp;. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/supermarket.chef.io\/cookbooks\/mysql\/\" target=\"_blank\" rel=\"noreferrer noopener\">s\u00e1ch h\u01b0\u1edbng d\u1eabn MySQL Chef<\/a>&nbsp;, hi\u1ec7n ch\u01b0a h\u1ed7 tr\u1ee3 Ubuntu 18.04.<\/li>\n<li>Sau khi n\u00fat c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng s\u1ed5 tay h\u01b0\u1edbng d\u1eabn Chef \u0111\u1ec3 b\u1ea3o m\u1eadt n\u00fat c\u1ee7a m\u00ecnh. H\u00e3y c\u00e2n nh\u1eafc s\u1eed d\u1ee5ng s\u1ed5 tay h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/supermarket.chef.io\/cookbooks\/users\" target=\"_blank\" rel=\"noreferrer noopener\">Users<\/a>&nbsp;v\u00e0 s\u1ed5 tay h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/supermarket.chef.io\/cookbooks\/firewall\" target=\"_blank\" rel=\"noreferrer noopener\">Firewall<\/a>&nbsp;cho c\u00f4ng vi\u1ec7c n\u00e0y. M\u1eb7c d\u00f9 kh\u00f4ng b\u1eaft bu\u1ed9c ph\u1ea3i l\u00e0m nh\u01b0 v\u1eady \u0111\u1ec3 ho\u00e0n th\u00e0nh h\u01b0\u1edbng d\u1eabn n\u00e0y, nh\u01b0ng b\u1ea1n n\u00ean l\u00e0m nh\u01b0 v\u1eady.<\/li>\n<li>B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 tham kh\u1ea3o&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-chef\/\">H\u01b0\u1edbng d\u1eabn \u0111\u1ea7u b\u1ebfp cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<\/a>&nbsp;\u0111\u1ec3 c\u00f3 c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 c\u00e1c kh\u00e1i ni\u1ec7m \u0111\u1ea7u b\u1ebfp.<\/li>\n<li>C\u00e1c v\u00ed d\u1ee5 trong h\u01b0\u1edbng d\u1eabn n\u00e0y y\u00eau c\u1ea7u t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng c\u00f3 quy\u1ec1n sudo. Ng\u01b0\u1eddi \u0111\u1ecdc s\u1eed d\u1ee5ng t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng h\u1ea1n ch\u1ebf s\u1ebd c\u1ea7n th\u00eam ti\u1ec1n t\u1ed1 sudo v\u00e0o l\u1ec7nh khi ph\u00e1t l\u1ec7nh cho n\u00fat m\u00e1y kh\u00e1ch Chef v\u00e0 thay th\u1ebf&nbsp;<code>-x root<\/code>b\u1eb1ng&nbsp;<code>-x username<\/code>where&nbsp;<code>username<\/code>is your limited user account.<\/li>\n<li>\u0110\u1ea3m b\u1ea3o r\u1eb1ng&nbsp;<code>\/etc\/hosts<\/code>t\u1ec7p c\u1ee7a m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n ch\u1ee9a \u0111\u1ecba ch\u1ec9 IP ri\u00eang, \u0111\u1ecba ch\u1ec9 IP c\u1ee7a m\u00e1y ch\u1ee7 Chef v\u00e0 t\u00ean mi\u1ec1n \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n, c\u0169ng nh\u01b0 \u0111\u1ecba ch\u1ec9 IP v\u00e0 t\u00ean m\u00e1y ch\u1ee7 cho b\u1ea5t k\u1ef3 n\u00fat n\u00e0o b\u1ea1n s\u1ebd t\u01b0\u01a1ng t\u00e1c t\u1eeb m\u00e1y tr\u1ea1m. V\u00ed d\u1ee5:<\/li>\n<\/ol>\n<pre class=\"wp-block-code\"><code>    127.0.0.1       localhost\n    192.0.2.0       workstation\n    192.0.1.0       www.example.com\n    198.51.100.0    node-hostname\n<\/code><\/pre>\n<h2 id=\"create-the-cookbook\">Create the Cookbook<\/h2>\n<p>1.T\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, di chuy\u1ec3n \u0111\u1ebfn&nbsp;<code>chef-repo\/cookbooks<\/code>th\u01b0 m\u1ee5c:<code> <\/code><\/p>\n<pre class=\"wp-block-code\"><code>cd chef-repo\/cookbooks<\/code><\/pre>\n<p>2.T\u1ea1o s\u00e1ch d\u1ea1y n\u1ea5u \u0103n. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, s\u00e1ch d\u1ea1y n\u1ea5u \u0103n c\u00f3 ti\u00eau \u0111\u1ec1 l\u00e0&nbsp;<code>lamp_stack<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code><code>chef generate cookbook lamp_stack<\/code><\/code><\/pre>\n<p>3.Di chuy\u1ec3n \u0111\u1ebfn th\u01b0 m\u1ee5c m\u1edbi t\u1ea1o c\u1ee7a s\u00e1ch d\u1ea1y n\u1ea5u \u0103n:<\/p>\n<pre class=\"wp-block-code\"><code><code>cd lamp_stack<\/code><\/code><\/pre>\n<p>N\u1ebfu b\u1ea1n th\u1ef1c hi\u1ec7n&nbsp;<code>ls<\/code>l\u1ec7nh, b\u1ea1n s\u1ebd th\u1ea5y c\u00e1c t\u1ec7p v\u00e0 th\u01b0 m\u1ee5c sau:<\/p>\n<pre class=\"wp-block-code\"><code>Berksfile  CHANGELOG.md  chefignore  LICENSE  metadata.rb  README.md  recipes  spec  test\n<\/code><\/pre>\n<h3 id=\"defaultrb\">default.rb<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#defaultrb\"><\/a><a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#defaultrb\"><\/a><\/h3>\n<p>Thu\u1ed9c t\u00ednh l\u00e0 c\u00e1c ph\u1ea7n d\u1eef li\u1ec7u gi\u00fap chef-client x\u00e1c \u0111\u1ecbnh tr\u1ea1ng th\u00e1i hi\u1ec7n t\u1ea1i c\u1ee7a m\u1ed9t n\u00fat v\u00e0 b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o \u0111\u00e3 di\u1ec5n ra tr\u00ean n\u00fat t\u1eeb l\u1ea7n ch\u1ea1y chef-client n\u00e0y sang l\u1ea7n ch\u1ea1y chef-client kh\u00e1c. Thu\u1ed9c t\u00ednh \u0111\u01b0\u1ee3c thu th\u1eadp t\u1eeb tr\u1ea1ng th\u00e1i c\u1ee7a n\u00fat, cookbook, vai tr\u00f2 v\u00e0 m\u00f4i tr\u01b0\u1eddng. S\u1eed d\u1ee5ng c\u00e1c ngu\u1ed3n n\u00e0y, m\u1ed9t danh s\u00e1ch thu\u1ed9c t\u00ednh \u0111\u01b0\u1ee3c t\u1ea1o cho m\u1ed7i l\u1ea7n ch\u1ea1y chef-client v\u00e0 \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho n\u00fat. N\u1ebfu m\u1ed9t&nbsp;<code>default.rb<\/code>t\u1ec7p t\u1ed3n t\u1ea1i trong cookbook, t\u1ec7p \u0111\u00f3 s\u1ebd \u0111\u01b0\u1ee3c t\u1ea3i tr\u01b0\u1edbc, nh\u01b0ng c\u00f3 m\u1ee9c \u0111\u1ed9 \u01b0u ti\u00ean thu\u1ed9c t\u00ednh th\u1ea5p nh\u1ea5t.<\/p>\n<p><code>default.rb<\/code>T\u1ec7p&nbsp;n\u00e0y&nbsp;<code>recipes<\/code>ch\u1ee9a c\u00e1c t\u00e0i nguy\u00ean c\u00f4ng th\u1ee9c \u201cm\u1eb7c \u0111\u1ecbnh\u201d.<\/p>\n<p>Trong v\u00ed d\u1ee5 n\u00e0y, t\u1ec7p&nbsp;<code>lamp_stack<\/code>s\u00e1ch h\u01b0\u1edbng d\u1eabn n\u1ea5u \u0103n&nbsp;<code>default.rb<\/code>\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 c\u1eadp nh\u1eadt ph\u1ea7n m\u1ec1m ph\u00e2n ph\u1ed1i c\u1ee7a n\u00fat.<\/p>\n<p>1.T\u1eeb trong th\u01b0&nbsp;<code>lamp_stack<\/code>m\u1ee5c, \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>recipes<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>cd recipes<\/code><\/pre>\n<p>2.M\u1edf&nbsp;<code>default.rb<\/code>t\u1ec7p v\u00e0 th\u00eam \u0111o\u1ea1n m\u00e3 sau:<\/p>\n<pre class=\"wp-block-code\"><code>#\n# Cookbook Name:: lamp_stack\n# Recipe:: default\n#\n#\n\nexecute \"update-upgrade\" do\n  command \"sudo apt-get update &amp;&amp; sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' upgrade\"\n  action :run\nend<\/code><\/pre>\n<p>C\u00f4ng th\u1ee9c bao g\u1ed3m m\u1ed9t lo\u1ea1t&nbsp;<em>c\u00e1c t\u00e0i nguy\u00ean<\/em>&nbsp;. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, t\u00e0i nguy\u00ean&nbsp;<em>th\u1ef1c thi<\/em>&nbsp;\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng, t\u00e0i nguy\u00ean n\u00e0y y\u00eau c\u1ea7u m\u1ed9t l\u1ec7nh \u0111\u01b0\u1ee3c th\u1ef1c thi m\u1ed9t l\u1ea7n. C\u00e1c&nbsp;<code>apt-get update &amp;&amp; apt-get upgrade -y<\/code>l\u1ec7nh \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a trong&nbsp;<code>command<\/code>ph\u1ea7n v\u00e0&nbsp;<code>action<\/code>\u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<code>:run<\/code>c\u00e1c l\u1ec7nh.<\/p>\n<p>C\u00e1c bi\u1ebfn v\u00e0 c\u1edd b\u1ed5 sung \u0111\u01b0\u1ee3c truy\u1ec1n v\u00e0o&nbsp;<code>upgrade<\/code>l\u1ec7nh c\u00f3 m\u1ee5c \u0111\u00edch ng\u0103n ch\u1eb7n menu c\u1ea5u h\u00ecnh GRUB, \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 khi\u1ebfn Chef b\u1ecb treo khi ch\u1edd ng\u01b0\u1eddi d\u00f9ng nh\u1eadp d\u1eef li\u1ec7u.<\/p>\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng c\u00f4ng th\u1ee9c n\u1ea5u \u0103n \u0111\u01a1n gi\u1ea3n h\u01a1n c\u1ee7a Chef \u0111\u1ec3 vi\u1ebft v\u00e0 l\u00e0 c\u00e1ch t\u1ed1t \u0111\u1ec3 b\u1eaft \u0111\u1ea7u. B\u1ea5t k\u1ef3 quy tr\u00ecnh kh\u1edfi \u0111\u1ed9ng n\u00e0o kh\u00e1c m\u00e0 b\u1ea1n cho l\u00e0 quan tr\u1ecdng \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o t\u1ec7p b\u1eb1ng c\u00e1ch m\u00f4 ph\u1ecfng m\u1eabu m\u00e3 \u1edf tr\u00ean.<\/p>\n<p>3.\u0110\u1ec3 ki\u1ec3m tra c\u00f4ng th\u1ee9c, h\u00e3y th\u00eam s\u00e1ch d\u1ea1y n\u1ea5u \u0103n LAMP v\u00e0o m\u00e1y ch\u1ee7 Chef:<\/p>\n<pre class=\"wp-block-code\"><code>knife cookbook upload lamp_stack\n<\/code><\/pre>\n<p>4.X\u00e1c minh r\u1eb1ng c\u00f4ng th\u1ee9c \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o m\u00e1y ch\u1ee7 Chef:<\/p>\n<pre class=\"wp-block-code\"><code>knife cookbook list\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y k\u1ebft qu\u1ea3 t\u01b0\u01a1ng t\u1ef1:<\/p>\n<pre class=\"wp-block-code\"><code>Uploading lamp_stack   &#91;0.1.0]\nUploaded 1 cookbook.<\/code><\/pre>\n<p>5.Th\u00eam c\u00f4ng th\u1ee9c v\u00e0o&nbsp;<em>danh s\u00e1ch ch\u1ea1y<\/em>&nbsp;c\u1ee7a n\u00fat b\u1ea1n ch\u1ecdn , thay th\u1ebf&nbsp;<code>nodename<\/code>b\u1eb1ng t\u00ean n\u00fat c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife node run_list add nodename \"recipe&#91;lamp_stack]\"<\/code><\/pre>\n<p>6.T\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, \u00e1p d\u1ee5ng c\u00e1c c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong cookbook b\u1eb1ng c\u00e1ch ch\u1ea1y chef-client tr\u00ean n\u00fat c\u1ee7a b\u1ea1n. Thay th\u1ebf&nbsp;<code>nodename<\/code>b\u1eb1ng t\u00ean n\u00fat c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife ssh 'name:nodename' 'sudo chef-client' -x root\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra c\u1ee7a b\u1ea1n s\u1ebd hi\u1ec3n th\u1ecb m\u1ed9t l\u1ea7n ch\u1ea1y Chef th\u00e0nh c\u00f4ng. N\u1ebfu kh\u00f4ng, h\u00e3y xem l\u1ea1i m\u00e3 c\u1ee7a b\u1ea1n \u0111\u1ec3 t\u00ecm b\u1ea5t k\u1ef3 l\u1ed7i n\u00e0o, th\u01b0\u1eddng \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong \u0111\u1ea7u ra c\u1ee7a l\u1ea7n&nbsp;<code>chef-client<\/code>ch\u1ea1y.<\/p>\n<h2 id=\"apache\">Ng\u01b0\u1eddi Apache<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#apache\"><\/a><\/h2>\n<h3 id=\"install-and-enable\">C\u00e0i \u0111\u1eb7t v\u00e0 k\u00edch ho\u1ea1t<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#install-and-enable\"><\/a><\/h3>\n<p>1.Trong m\u00e1y tr\u1ea1m Chef c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t t\u1ec7p m\u1edbi trong&nbsp;<code>~\/chef-repo\/cookbooks\/lamp_stack\/recipes<\/code>th\u01b0 m\u1ee5c c\u00f3 t\u00ean l\u00e0&nbsp;<code>apache.rb<\/code>. T\u1ec7p n\u00e0y s\u1ebd ch\u1ee9a t\u1ea5t c\u1ea3 th\u00f4ng tin c\u1ea5u h\u00ecnh Apache c\u1ee7a b\u1ea1n.<\/p>\n<p>2.M\u1edf t\u1ec7p v\u00e0 x\u00e1c \u0111\u1ecbnh t\u00e0i nguy\u00ean&nbsp;<em>g\u00f3i<\/em>&nbsp;\u0111\u1ec3 c\u00e0i \u0111\u1eb7t Apache:<\/p>\n<pre class=\"wp-block-code\"><code>package \"apache2\" do\n  action :install\nend<\/code><\/pre>\n<p>M\u1ed9t l\u1ea7n n\u1eefa, \u0111\u00e2y l\u00e0 m\u1ed9t c\u00f4ng th\u1ee9c r\u1ea5t c\u01a1 b\u1ea3n. T\u00e0i nguy\u00ean&nbsp;<em>g\u00f3i<\/em>&nbsp;g\u1ecdi \u0111\u1ebfn m\u1ed9t g\u00f3i (&nbsp;<code>apache2<\/code>). Gi\u00e1 tr\u1ecb n\u00e0y ph\u1ea3i l\u00e0 t\u00ean g\u00f3i h\u1ee3p l\u1ec7. H\u00e0nh \u0111\u1ed9ng l\u00e0&nbsp;<em>c\u00e0i \u0111\u1eb7t<\/em>&nbsp;v\u00ec Apache \u0111ang \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t trong b\u01b0\u1edbc n\u00e0y. Kh\u00f4ng c\u1ea7n th\u00eam gi\u00e1 tr\u1ecb n\u00e0o \u0111\u1ec3 ch\u1ea1y c\u00e0i \u0111\u1eb7t.<\/p>\n<p>3.\u0110\u1eb7t Apache \u0111\u1ec3 b\u1eadt v\u00e0 kh\u1edfi \u0111\u1ed9ng khi kh\u1edfi \u0111\u1ed9ng l\u1ea1i. Trong c\u00f9ng m\u1ed9t t\u1ec7p, th\u00eam c\u00e1c d\u00f2ng m\u00e3 b\u1ed5 sung:<\/p>\n<pre class=\"wp-block-code\"><code>service \"apache2\" do\n  action &#91;:enable, :start]\nend<\/code><\/pre>\n<p>\u0110i\u1ec1u n\u00e0y s\u1eed d\u1ee5ng t\u00e0i nguy\u00ean&nbsp;<em>d\u1ecbch v\u1ee5<\/em>&nbsp;, g\u1ecdi \u0111\u1ebfn d\u1ecbch v\u1ee5 Apache. H\u00e0nh \u0111\u1ed9ng&nbsp;<em>enable<\/em>&nbsp;s\u1ebd b\u1eadt d\u1ecbch v\u1ee5 khi kh\u1edfi \u0111\u1ed9ng v\u00e0&nbsp;<em>start<\/em>&nbsp;s\u1ebd kh\u1edfi \u0111\u1ed9ng Apache.<\/p>\n<p>L\u01b0u v\u00e0 \u0111\u00f3ng&nbsp;<code>apache.rb<\/code> t\u1ec7p.<\/p>\n<p>4.\u0110\u1ec3 ki\u1ec3m tra c\u00f4ng th\u1ee9c Apache, h\u00e3y c\u1eadp nh\u1eadt c\u00f4ng th\u1ee9c LAMP Stack tr\u00ean m\u00e1y ch\u1ee7:<\/p>\n<pre class=\"wp-block-code\"><code>knife cookbook upload lamp_stack\n<\/code><\/pre>\n<p>5.Th\u00eam c\u00f4ng th\u1ee9c v\u00e0o danh s\u00e1ch ch\u1ea1y c\u1ee7a m\u1ed9t n\u00fat, thay th\u1ebf&nbsp;<code>nodename<\/code>b\u1eb1ng t\u00ean n\u00fat b\u1ea1n ch\u1ecdn:<\/p>\n<pre class=\"wp-block-code\"><code>knife node run_list add nodename \"recipe&#91;lamp_stack::apache]\"\n<\/code><\/pre>\n<p>V\u00ec \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0&nbsp;<code>default.rb<\/code>c\u00f4ng th\u1ee9c n\u00ean t\u00ean c\u00f4ng th\u1ee9c,&nbsp;<em>apache<\/em>&nbsp;, ph\u1ea3i \u0111\u01b0\u1ee3c th\u00eam v\u00e0o gi\u00e1 tr\u1ecb c\u00f4ng th\u1ee9c.<\/p>\n<p>Ghi ch\u00fa: \u0110\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c n\u00fat \u0111\u01b0\u1ee3c m\u00e1y ch\u1ee7 Chef c\u1ee7a b\u1ea1n qu\u1ea3n l\u00fd, h\u00e3y \u0111\u01b0a ra l\u1ec7nh sau t\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife node list<\/code><\/pre>\n<p>6.T\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, \u00e1p d\u1ee5ng c\u00e1c c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong cookbook b\u1eb1ng c\u00e1ch ch\u1ea1y chef-client tr\u00ean n\u00fat c\u1ee7a b\u1ea1n. Thay th\u1ebf&nbsp;<code>nodename<\/code>b\u1eb1ng t\u00ean n\u00fat c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife ssh 'name:nodename' 'sudo chef-client' -x root<\/code><\/pre>\n<p>N\u1ebfu c\u00f4ng th\u1ee9c kh\u00f4ng th\u00e0nh c\u00f4ng do l\u1ed7i c\u00fa ph\u00e1p, Chef s\u1ebd ghi ch\u00fa trong qu\u00e1 tr\u00ecnh xu\u1ea5t c\u00f4ng th\u1ee9c.<\/p>\n<p>7.Sau khi ch\u1ea1y th\u00e0nh c\u00f4ng&nbsp;<code>chef-client<\/code>, h\u00e3y ki\u1ec3m tra xem Apache c\u00f3 \u0111ang ch\u1ea1y hay kh\u00f4ng:<\/p>\n<pre class=\"wp-block-code\"><code>knife ssh 'name:nodename' 'systemctl status apache2' -x root<\/code><\/pre>\n<p>Ghi ch\u00fa: L\u1eb7p l\u1ea1i c\u00e1c b\u01b0\u1edbc 4-7 \u0111\u1ec3 t\u1ea3i t\u1eebng c\u00f4ng th\u1ee9c l\u00ean m\u00e1y ch\u1ee7 Chef khi b\u1ea1n t\u1ea1o c\u00f4ng th\u1ee9c. Ch\u1ea1y&nbsp;<code>chef-client<\/code>tr\u00ean n\u00fat c\u1ee7a b\u1ea1n khi c\u1ea7n trong su\u1ed1t ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o c\u00f4ng th\u1ee9c c\u1ee7a b\u1ea1n ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng v\u00e0 kh\u00f4ng c\u00f3 l\u1ed7i. Khi th\u00eam c\u00f4ng th\u1ee9c m\u1edbi, h\u00e3y \u0111\u1ea3m b\u1ea3o b\u1ea1n \u0111ang s\u1eed d\u1ee5ng \u0111\u00fang t\u00ean c\u1ee7a c\u00f4ng th\u1ee9c \u0111\u00f3 trong danh s\u00e1ch ch\u1ea1y.<\/p>\n<p>\u0110\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 quy tr\u00ecnh l\u00e0m vi\u1ec7c \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb cho m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t. B\u1ea1n c\u00f3 th\u1ec3 c\u00e2n nh\u1eafc t\u1ea1o&nbsp;<a href=\"https:\/\/docs.chef.io\/environments.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c m\u00f4i tr\u01b0\u1eddng Chef<\/a>&nbsp;kh\u00e1c nhau \u0111\u1ec3 th\u1eed nghi\u1ec7m, d\u00e0n d\u1ef1ng v\u00e0 s\u1ea3n xu\u1ea5t.<\/p>\n<h3 id=\"configure-virtual-hosts\">C\u1ea5u h\u00ecnh m\u00e1y ch\u1ee7 \u1ea3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#configure-virtual-hosts\"><\/a><\/h3>\n<p>C\u1ea5u h\u00ecnh n\u00e0y d\u1ef1a tr\u00ean h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-lamp-stack-on-ubuntu-16-04\/\">C\u00e1ch c\u00e0i \u0111\u1eb7t LAMP Stack tr\u00ean Ubuntu 16.04<\/a>&nbsp;.<\/p>\n<p>1.V\u00ec c\u00f3 th\u1ec3 c\u1ea7n c\u1ea5u h\u00ecnh nhi\u1ec1u trang web, h\u00e3y s\u1eed d\u1ee5ng t\u00ednh n\u0103ng thu\u1ed9c t\u00ednh c\u1ee7a Chef \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u00e1c kh\u00eda c\u1ea1nh nh\u1ea5t \u0111\u1ecbnh c\u1ee7a t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o. ChefDK c\u00f3 l\u1ec7nh t\u00edch h\u1ee3p \u0111\u1ec3 t\u1ea1o th\u01b0 m\u1ee5c v\u00e0&nbsp;<code>default.rb<\/code>t\u1ec7p thu\u1ed9c t\u00ednh trong s\u1ed5 tay n\u1ea5u \u0103n. Thay th\u1ebf&nbsp;<code>~\/chef-repo\/cookbooks\/lamp_stack<\/code>b\u1eb1ng \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a s\u1ed5 tay n\u1ea5u \u0103n c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code><code>chef generate attribute ~\/chef-repo\/cookbooks\/lamp_stack default<\/code><\/code><\/pre>\n<p>2.Trong ph\u1ea7n m\u1edbi&nbsp;<code>default.rb<\/code>, t\u1ea1o c\u00e1c gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh cho s\u1ed5 tay h\u01b0\u1edbng d\u1eabn:<\/p>\n<pre class=\"wp-block-code\"><code>default&#91;\"lamp_stack\"]&#91;\"sites\"]&#91;\"example.com\"] = { \"port\" =&gt; 80, \"servername\" =&gt; \"example.com\", \"serveradmin\" =&gt; \"webmaster@example.com\" }<\/code><\/pre>\n<p>Ti\u1ec1n t\u1ed1&nbsp;<code>default<\/code>x\u00e1c \u0111\u1ecbnh r\u1eb1ng \u0111\u00e2y l\u00e0 c\u00e1c gi\u00e1 tr\u1ecb b\u00ecnh th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng t\u1ea1i&nbsp;<code>lamp_stack<\/code>n\u01a1i trang web&nbsp;<code>example.com<\/code>s\u1ebd \u0111\u01b0\u1ee3c g\u1ecdi \u0111\u1ebfn. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c xem nh\u01b0 m\u1ed9t h\u1ec7 th\u1ed1ng ph\u00e2n c\u1ea5p: B\u00ean d\u01b0\u1edbi ch\u00ednh s\u1ed5 tay h\u01b0\u1edbng d\u1eabn l\u00e0 c\u00e1c trang web, sau \u0111\u00f3 \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh theo URL c\u1ee7a ch\u00fang.<\/p>\n<p>C\u00e1c gi\u00e1 tr\u1ecb sau trong m\u1ea3ng (\u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1eb1ng d\u1ea5u ngo\u1eb7c nh\u1ecdn (&nbsp;<code>{}<\/code>)) l\u00e0 c\u00e1c gi\u00e1 tr\u1ecb s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 c\u1ea5u h\u00ecnh t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o. Apache s\u1ebd \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp \u0111\u1ec3 l\u1eafng nghe tr\u00ean c\u1ed5ng&nbsp;<code>80<\/code>v\u00e0 s\u1eed d\u1ee5ng c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea cho t\u00ean m\u00e1y ch\u1ee7 v\u00e0 email c\u1ee7a qu\u1ea3n tr\u1ecb vi\u00ean.<\/p>\n<p>N\u1ebfu b\u1ea1n c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t trang web ho\u1eb7c URL kh\u1ea3 d\u1ee5ng (v\u00ed d\u1ee5:&nbsp;<code>example.org<\/code>), c\u00fa ph\u00e1p n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c m\u00f4 ph\u1ecfng cho URL th\u1ee9 hai:<\/p>\n<pre class=\"wp-block-code\"><code>default&#91;\"lamp_stack\"]&#91;\"sites\"]&#91;\"example.com\"] = { \"port\" =&gt; 80, \"servername\" =&gt; \"example.com\", \"serveradmin\" =&gt; \"webmaster@example.com\" }\ndefault&#91;\"lamp_stack\"]&#91;\"sites\"]&#91;\"example.org\"] = { \"port\" =&gt; 80, \"servername\" =&gt; \"example.org\", \"serveradmin\" =&gt; \"webmaster@example.org\" }<\/code><\/pre>\n<p>3.Quay l\u1ea1i&nbsp;<code>apache.rb<\/code>t\u1ec7p c\u1ee7a b\u1ea1n b\u00ean d\u01b0\u1edbi&nbsp;<code>recipes<\/code>\u0111\u1ec3 g\u1ecdi c\u00e1c thu\u1ed9c t\u00ednh v\u1eeba \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh. Th\u1ef1c hi\u1ec7n \u0111i\u1ec1u n\u00e0y v\u1edbi&nbsp;<code>node<\/code>t\u00e0i nguy\u00ean:<\/p>\n<pre class=\"wp-block-code\"><code>#Install &amp; enable Apache\n\npackage \"apache2\" do\n  action :install\nend\n\nservice \"apache2\" do\n  action &#91;:enable, :start]\nend\n\n\n# Virtual Host Files\n\nnode&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\nend<\/code><\/pre>\n<p>\u0110i\u1ec1u n\u00e0y g\u1ecdi c\u00e1c gi\u00e1 tr\u1ecb b\u00ean d\u01b0\u1edbi&nbsp;<code>[\"lamp_stack\"][\"sites\"]<\/code>. M\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o kh\u1ed1i n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o cho m\u1ed7i gi\u00e1 tr\u1ecb, \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a b\u1edfi t\u1eeb&nbsp;<code>sitename<\/code>.&nbsp;<code>data<\/code>Gi\u00e1 tr\u1ecb g\u1ecdi c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong m\u1ea3ng c\u1ee7a m\u1ed7i&nbsp;<code>sitename<\/code>thu\u1ed9c t\u00ednh.<\/p>\n<p>4.Trong&nbsp;<code>node<\/code>t\u00e0i nguy\u00ean, h\u00e3y x\u00e1c \u0111\u1ecbnh g\u1ed1c t\u00e0i li\u1ec7u. G\u1ed1c n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u00e1c t\u1ec7p HTML c\u00f4ng khai v\u00e0 b\u1ea5t k\u1ef3 t\u1ec7p nh\u1eadt k\u00fd n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>node&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\n  document_root = \"\/var\/www\/html\/#{sitename}\"\nend<\/code><\/pre>\n<p>5.T\u1ea1o th\u01b0&nbsp;<code>document_root<\/code>m\u1ee5c. Khai b\u00e1o m\u1ed9t&nbsp;<code>directory<\/code>t\u00e0i nguy\u00ean v\u1edbi&nbsp;<code>true<\/code>gi\u00e1 tr\u1ecb \u0111\u1ec7 quy \u0111\u1ec3 t\u1ea5t c\u1ea3 c\u00e1c th\u01b0 m\u1ee5c d\u1eabn \u0111\u1ebfn&nbsp;<code>sitename<\/code>s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. Gi\u00e1 tr\u1ecb quy\u1ec1n&nbsp;<code>0755<\/code>cho ph\u00e9p ch\u1ee7 s\u1edf h\u1eefu t\u1ec7p c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ea7y \u0111\u1ee7 v\u00e0o th\u01b0 m\u1ee5c, trong khi nh\u00f3m v\u00e0 ng\u01b0\u1eddi d\u00f9ng th\u00f4ng th\u01b0\u1eddng s\u1ebd c\u00f3 quy\u1ec1n \u0111\u1ecdc v\u00e0 th\u1ef1c thi:<\/p>\n<pre class=\"wp-block-code\"><code>node&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\n  document_root = \"\/var\/www\/html\/#{sitename}\"\n\n  directory document_root do\n    mode \"0755\"\n    recursive true\n  end\n\nend<\/code><\/pre>\n<p>6.T\u00ednh n\u0103ng m\u1eabu s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o c\u00e1c t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o c\u1ea7n thi\u1ebft. Trong th\u01b0&nbsp;<code>chef-repo<\/code>m\u1ee5c, h\u00e3y ch\u1ea1y&nbsp;<code>chef generate template<\/code>l\u1ec7nh v\u1edbi \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn cookbook v\u00e0 t\u00ean t\u1ec7p m\u1eabu \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh:<\/p>\n<pre class=\"wp-block-code\"><code>chef generate template ~\/chef-repo\/cookbooks\/lamp_stack virtualhosts\n<\/code><\/pre>\n<p>7.M\u1edf v\u00e0 ch\u1ec9nh s\u1eeda&nbsp;<code>virtualhosts.erb<\/code>t\u1ec7p. Thay v\u00ec vi\u1ebft gi\u00e1 tr\u1ecb th\u1ef1c cho t\u1eebng tham s\u1ed1 VirtualHost, h\u00e3y s\u1eed d\u1ee5ng bi\u1ebfn Ruby. Bi\u1ebfn Ruby \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1eb1ng c\u00fa&nbsp;<code>&lt;%= @variable_name %&gt;<\/code>ph\u00e1p. T\u00ean bi\u1ebfn b\u1ea1n s\u1eed d\u1ee5ng s\u1ebd c\u1ea7n \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong t\u1ec7p recipe:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:&lt;%= @port %&gt;&gt;\n        ServerAdmin &lt;%= @serveradmin %&gt;\n        ServerName &lt;%= @servername %&gt;\n        ServerAlias www.&lt;%= @servername %&gt;\n        DocumentRoot &lt;%= @document_root %&gt;\/public_html\n        ErrorLog &lt;%= @document_root %&gt;\/logs\/error.log\n        &lt;Directory &lt;%= @document_root %&gt;\/public_html&gt;\n                Require all granted\n        &lt;\/Directory&gt;\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<p>M\u1ed9t s\u1ed1 bi\u1ebfn tr\u00f4ng quen thu\u1ed9c. Ch\u00fang \u0111\u01b0\u1ee3c t\u1ea1o \u1edf B\u01b0\u1edbc 2, khi \u0111\u1eb7t t\u00ean cho c\u00e1c thu\u1ed9c t\u00ednh m\u1eb7c \u0111\u1ecbnh.<\/p>\n<p>8.Quay l\u1ea1i&nbsp;<code>apache.rb<\/code>c\u00f4ng th\u1ee9c. Trong kho\u1ea3ng tr\u1ed1ng sau t\u00e0i&nbsp;<code>directory<\/code>nguy\u00ean, s\u1eed d\u1ee5ng&nbsp;<code>template<\/code>t\u00e0i nguy\u00ean \u0111\u1ec3 g\u1ecdi t\u1ec7p m\u1eabu v\u1eeba t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\n#Virtual Host Files\n\nnode&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\n  document_root = \"\/var\/www\/html\/#{sitename}\"\n\n  directory document_root do\n    mode \"0755\"\n    recursive true\n  end\n\n  template \"\/etc\/apache2\/sites-available\/#{sitename}.conf\" do\n    source \"virtualhosts.erb\"\n    mode \"0644\"\n    variables(\n      :document_root =&gt; document_root,\n      :port =&gt; data&#91;\"port\"],\n      :serveradmin =&gt; data&#91;\"serveradmin\"],\n      :servername =&gt; data&#91;\"servername\"]\n    )\n  end\n\nend<\/code><\/pre>\n<p>T\u00ean c\u1ee7a t\u00e0i nguy\u00ean m\u1eabu ph\u1ea3i l\u00e0 v\u1ecb tr\u00ed m\u00e0 t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o \u0111\u01b0\u1ee3c \u0111\u1eb7t tr\u00ean c\u00e1c n\u00fat. \u0110\u00e2y&nbsp;<code>source<\/code>l\u00e0 t\u00ean c\u1ee7a t\u1ec7p m\u1eabu. Ch\u1ebf \u0111\u1ed9&nbsp;<code>0644<\/code>cung c\u1ea5p cho ch\u1ee7 s\u1edf h\u1eefu t\u1ec7p quy\u1ec1n \u0111\u1ecdc v\u00e0 ghi, v\u00e0 m\u1ecdi ng\u01b0\u1eddi kh\u00e1c quy\u1ec1n \u0111\u1ecdc. C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong&nbsp;<code>variables<\/code>ph\u1ea7n n\u00e0y \u0111\u01b0\u1ee3c l\u1ea5y t\u1eeb t\u1ec7p thu\u1ed9c t\u00ednh v\u00e0 ch\u00fang l\u00e0 c\u00e1c gi\u00e1 tr\u1ecb gi\u1ed1ng nhau \u0111\u01b0\u1ee3c g\u1ecdi trong m\u1eabu.<\/p>\n<p>9.C\u00e1c trang web c\u1ea7n \u0111\u01b0\u1ee3c b\u1eadt trong Apache v\u00e0 m\u00e1y ch\u1ee7 \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea1i. \u0110i\u1ec1u n\u00e0y&nbsp;<em>ch\u1ec9<\/em>&nbsp;n\u00ean x\u1ea3y ra n\u1ebfu c\u00f3 thay \u0111\u1ed5i \u0111\u1ed1i v\u1edbi m\u00e1y ch\u1ee7 \u1ea3o, v\u00ec v\u1eady gi\u00e1&nbsp;<code>notifies<\/code>tr\u1ecb n\u00ean \u0111\u01b0\u1ee3c th\u00eam v\u00e0o&nbsp;<code>template<\/code>t\u00e0i nguy\u00ean.&nbsp;<code>notifies<\/code>th\u00f4ng b\u00e1o cho Chef khi m\u1ecdi th\u1ee9 \u0111\u00e3 thay \u0111\u1ed5i v\u00e0&nbsp;<strong>ch\u1ec9 sau \u0111\u00f3 m\u1edbi<\/strong>&nbsp;ch\u1ea1y c\u00e1c l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>template \"\/etc\/apache2\/sites-available\/#{sitename}.conf\" do\n  source \"virtualhosts.erb\"\n  mode \"0644\"\n  variables(\n    :document_root =&gt; document_root,\n    :port =&gt; data&#91;\"port\"],\n    :serveradmin =&gt; data&#91;\"serveradmin\"],\n    :servername =&gt; data&#91;\"servername\"]\n  )\n  notifies :restart, \"service&#91;apache2]\"\nend<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y&nbsp;<code>notifies<\/code>\u0111\u1eb7t t\u00ean cho m\u1ee5c&nbsp;<code>:action<\/code>c\u1ea7n cam k\u1ebft, sau \u0111\u00f3 l\u00e0 t\u00e0i nguy\u00ean v\u00e0 t\u00ean t\u00e0i nguy\u00ean trong d\u1ea5u ngo\u1eb7c vu\u00f4ng.<\/p>\n<p>10. <code>notifies<\/code> c\u0169ng c\u00f3 th\u1ec3 g\u1ecdi&nbsp;<code>execute<\/code>l\u1ec7nh, l\u1ec7nh n\u00e0y s\u1ebd ch\u1ea1y&nbsp;<code>a2ensite<\/code>v\u00e0 k\u00edch ho\u1ea1t c\u00e1c trang web c\u00f3 t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o t\u01b0\u01a1ng \u1ee9ng. Th\u00eam&nbsp;<code>execute<\/code>l\u1ec7nh sau&nbsp;<strong>v\u00e0o ph\u00eda tr\u00ean<\/strong>&nbsp;m\u00e3&nbsp;<code>template<\/code>t\u00e0i nguy\u00ean \u0111\u1ec3 t\u1ea1o&nbsp;<code>a2ensite<\/code>t\u1eadp l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\ndirectory document_root do\n  mode \"0755\"\n  recursive true\nend\n\nexecute \"enable-sites\" do\n  command \"a2ensite #{sitename}\"\n  action :nothing\nend\n\ntemplate \"\/etc\/apache2\/sites-available\/#{sitename}.conf\" do\n\n# &#91;...]<\/code><\/pre>\n<p>Ch\u1ec9 th\u1ecb n\u00e0y&nbsp;<code>action :nothing<\/code>c\u00f3 ngh\u0129a l\u00e0 t\u00e0i nguy\u00ean s\u1ebd ch\u1edd \u0111\u01b0\u1ee3c g\u1ecdi. Th\u00eam m\u1ed9t&nbsp;<code>notifies<\/code>d\u00f2ng m\u1edbi ph\u00eda tr\u00ean&nbsp;<code>notifies<\/code>d\u00f2ng tr\u01b0\u1edbc \u0111\u00f3 v\u00e0o&nbsp;<code>template<\/code>m\u00e3 t\u00e0i nguy\u00ean \u0111\u1ec3 s\u1eed d\u1ee5ng n\u00f3:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\ntemplate \"\/etc\/apache2\/sites-available\/#{sitename}.conf\" do\n  # &#91;...]\n  notifies :run, \"execute&#91;enable-sites]\"\n  notifies :restart, \"service&#91;apache2]\"\nend\n\n# &#91;...]<\/code><\/pre>\n<p>11.C\u00e1c \u0111\u01b0\u1eddng d\u1eabn \u0111\u01b0\u1ee3c tham chi\u1ebfu trong c\u00e1c t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o c\u1ea7n \u0111\u01b0\u1ee3c t\u1ea1o. M\u1ed9t l\u1ea7n n\u1eefa, \u0111i\u1ec1u n\u00e0y \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n v\u1edbi t\u00e0i&nbsp;<code>directory<\/code>nguy\u00ean v\u00e0 n\u00ean \u0111\u01b0\u1ee3c th\u00eam v\u00e0o tr\u01b0\u1edbc&nbsp;<code>end<\/code>th\u1ebb cu\u1ed1i c\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\nnode&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\n  # &#91;...]\n\n  directory \"\/var\/www\/html\/#{sitename}\/public_html\" do\n    action :create\n  end\n\n  directory \"\/var\/www\/html\/#{sitename}\/logs\" do\n    action :create\n  end\nend<\/code><\/pre>\n<h3 id=\"apache-configuration\">C\u1ea5u h\u00ecnh Apache<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#apache-configuration\"><\/a><\/h3>\n<p>V\u1edbi c\u00e1c t\u1ec7p m\u00e1y ch\u1ee7 \u1ea3o \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh v\u00e0 trang web c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c b\u1eadt, h\u00e3y c\u1ea5u h\u00ecnh Apache \u0111\u1ec3 ch\u1ea1y hi\u1ec7u qu\u1ea3 tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n. Th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y b\u1eb1ng c\u00e1ch b\u1eadt v\u00e0 c\u1ea5u h\u00ecnh m\u00f4-\u0111un \u0111a x\u1eed l\u00fd (MPM) v\u00e0 ch\u1ec9nh s\u1eeda&nbsp;<code>apache2.conf<\/code>.<\/p>\n<p>T\u1ea5t c\u1ea3 MPM \u0111\u1ec1u n\u1eb1m trong&nbsp;<code>mods_available<\/code>th\u01b0 m\u1ee5c c\u1ee7a Apache. Trong v\u00ed d\u1ee5 n\u00e0y,&nbsp;<code>prefork<\/code>MPM s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng, n\u1eb1m t\u1ea1i&nbsp;<code>\/etc\/apache2\/mods-available\/mpm_prefork.conf<\/code>. N\u1ebfu ch\u00fang ta \u0111ang c\u00f3 k\u1ebf ho\u1ea1ch tri\u1ec3n khai t\u1edbi c\u00e1c n\u00fat c\u00f3 k\u00edch th\u01b0\u1edbc kh\u00e1c nhau, ch\u00fang ta s\u1ebd t\u1ea1o m\u1ed9t t\u1ec7p m\u1eabu \u0111\u1ec3 thay th\u1ebf t\u1ec7p g\u1ed1c, cho ph\u00e9p t\u00f9y ch\u1ec9nh nhi\u1ec1u h\u01a1n c\u00e1c bi\u1ebfn c\u1ee5 th\u1ec3. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, t\u1ec7p&nbsp;<em>cookbook<\/em>&nbsp;s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ec9nh s\u1eeda t\u1ec7p.<\/p>\n<p>T\u1ec7p cookbook l\u00e0 c\u00e1c t\u00e0i li\u1ec7u t\u0129nh \u0111\u01b0\u1ee3c ch\u1ea1y tr\u00ean t\u00e0i li\u1ec7u \u1edf c\u00f9ng m\u1ed9t v\u1ecb tr\u00ed tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n. N\u1ebfu c\u00f3 b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n, t\u1ec7p cookbook s\u1ebd sao l\u01b0u t\u1ec7p g\u1ed1c v\u00e0 thay th\u1ebf b\u1eb1ng t\u1ec7p m\u1edbi.<\/p>\n<p>1.\u0110\u1ec3 t\u1ea1o t\u1ec7p s\u00e1ch d\u1ea1y n\u1ea5u \u0103n, h\u00e3y \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>files\/default<\/code>t\u1eeb th\u01b0 m\u1ee5c ch\u00ednh c\u1ee7a s\u00e1ch d\u1ea1y n\u1ea5u \u0103n. N\u1ebfu c\u00e1c th\u01b0 m\u1ee5c ch\u01b0a t\u1ed3n t\u1ea1i, h\u00e3y t\u1ea1o ch\u00fang:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/chef-repo\/cookbooks\/lamp_stack\/files\/default\/\ncd ~\/chef-repo\/cookbooks\/lamp_stack\/files\/default<\/code><\/pre>\n<p>2.T\u1ea1o m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>mpm_prefork.conf<\/code>v\u00e0 sao ch\u00e9p c\u1ea5u h\u00ecnh s\u1ef1 ki\u1ec7n MPM v\u00e0o \u0111\u00f3, thay \u0111\u1ed5i b\u1ea5t k\u1ef3 gi\u00e1 tr\u1ecb n\u00e0o c\u1ea7n thi\u1ebft:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;IfModule mpm_prefork_module&gt;\n        StartServers            4\n        MinSpareServers         3\n        MaxSpareServers         40\n        MaxRequestWorkers       200\n        MaxConnectionsPerChild  10000\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>3.Quay l\u1ea1i&nbsp;<code>apache.rb<\/code>, v\u00e0 s\u1eed d\u1ee5ng&nbsp;<code>cookbook_file<\/code>t\u00e0i nguy\u00ean \u0111\u1ec3 g\u1ecdi t\u1ec7p ch\u00fang ta v\u1eeba t\u1ea1o. V\u00ec MPM s\u1ebd c\u1ea7n \u0111\u01b0\u1ee3c b\u1eadt, ch\u00fang ta s\u1ebd s\u1eed d\u1ee5ng l\u1ec7nh&nbsp;<code>notifies<\/code>m\u1ed9t l\u1ea7n n\u1eefa, l\u1ea7n n\u00e0y \u0111\u1ec3 th\u1ef1c thi&nbsp;<code>a2enmod mpm_event<\/code>. Th\u00eam t\u00e0i nguy\u00ean&nbsp;<code>execute<\/code>v\u00e0&nbsp;<code>cookbook_file<\/code>v\u00e0o&nbsp;<code>apache.rb<\/code>t\u1ec7p tr\u01b0\u1edbc&nbsp;<code>end<\/code>th\u1ebb cu\u1ed1i c\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\nnode&#91;\"lamp_stack\"]&#91;\"sites\"].each do |sitename, data|\n  # &#91;...]\n\n  execute \"enable-prefork\" do\n    command \"a2enmod mpm_prefork\"\n    action :nothing\n  end\n\n  cookbook_file \"\/etc\/apache2\/mods-available\/mpm_prefork.conf\" do\n    source \"mpm_prefork.conf\"\n    mode \"0644\"\n    notifies :run, \"execute&#91;enable-prefork]\"\n  end\nend<\/code><\/pre>\n<p>4.Trong \u0111\u00f3&nbsp;<code>apache2.conf<\/code>gi\u00e1&nbsp;<code>KeepAlive<\/code>tr\u1ecb ph\u1ea3i \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<code>off<\/code>, \u0111\u00e2y l\u00e0 thay \u0111\u1ed5i duy nh\u1ea5t \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n trong t\u1ec7p. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c thay \u0111\u1ed5i th\u00f4ng qua c\u00e1c t\u1ec7p m\u1eabu ho\u1eb7c s\u1ed5 tay h\u01b0\u1edbng d\u1eabn, m\u1eb7c d\u00f9 trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, m\u1ed9t&nbsp;<code>sed<\/code>l\u1ec7nh \u0111\u01a1n gi\u1ea3n s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng, \u0111\u01b0\u1ee3c gh\u00e9p n\u1ed1i v\u1edbi&nbsp;<code>execute<\/code>t\u00e0i nguy\u00ean. C\u1eadp nh\u1eadt&nbsp;<code>apache.rb<\/code>v\u1edbi t\u00e0i nguy\u00ean m\u1edbi&nbsp;<code>execute<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\ndirectory \"\/var\/www\/html\/#{sitename}\/logs\" do\n  action :create\nend\n\nexecute \"keepalive\" do\n  command \"sed -i 's\/KeepAlive On\/KeepAlive Off\/g' \/etc\/apache2\/apache2.conf\"\n  action :run\nend\n\nexecute \"enable-prefork\" do\n\n# &#91;...]<\/code><\/pre>\n<p>B\u00e2y gi\u1edd b\u1ea1n&nbsp;<code>apache.rb<\/code>\u0111\u00e3 ho\u00e0n t\u1ea5t. M\u1ed9t&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/apache.rb\">v\u00ed d\u1ee5 v\u1ec1 t\u1ec7p cu\u1ed1i c\u00f9ng n\u1eb1m \u1edf \u0111\u00e2y<\/a>&nbsp;.<\/p>\n<h2 id=\"mysql\">MySQL<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#mysql\"><\/a><\/h2>\n<h3 id=\"download-the-mysql-library\">T\u1ea3i xu\u1ed1ng Th\u01b0 vi\u1ec7n MySQL<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#download-the-mysql-library\"><\/a><\/h3>\n<p>1.Chef Supermarket c\u00f3 m\u1ed9t&nbsp;<a href=\"https:\/\/supermarket.chef.io\/cookbooks\/mysql\" target=\"_blank\" rel=\"noreferrer noopener\">s\u00e1ch h\u01b0\u1edbng d\u1eabn MySQL<\/a>&nbsp;do OpsCode duy tr\u00ec , s\u00e1ch n\u00e0y thi\u1ebft l\u1eadp&nbsp;<em>c\u00e1c t\u00e0i nguy\u00ean\/nh\u00e0 cung c\u1ea5p MySQL nh\u1eb9<\/em>&nbsp;(LWRP) \u0111\u1ec3 s\u1eed d\u1ee5ng. T\u1eeb m\u00e1y tr\u1ea1m, h\u00e3y t\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t s\u00e1ch h\u01b0\u1edbng d\u1eabn:<\/p>\n<pre class=\"wp-block-code\"><code><code>knife cookbook site install mysql <\/code><\/code><\/pre>\n<p>\u0110i\u1ec1u n\u00e0y c\u0169ng s\u1ebd c\u00e0i \u0111\u1eb7t b\u1ea5t k\u1ef3 v\u00e0 t\u1ea5t c\u1ea3 c\u00e1c ph\u1ee5 thu\u1ed9c c\u1ea7n thi\u1ebft \u0111\u1ec3 s\u1eed d\u1ee5ng cookbook. C\u00e1c ph\u1ee5 thu\u1ed9c n\u00e0y bao g\u1ed3m cookbook&nbsp;<code>smf<\/code>v\u00e0&nbsp;<code>yum-mysql-community<\/code>cookbook, l\u1ea7n l\u01b0\u1ee3t ph\u1ee5 thu\u1ed9c v\u00e0o cookbook&nbsp;<code>rbac<\/code>v\u00e0&nbsp;<code>yum<\/code>cookbook.<\/p>\n<p>2.T\u1eeb th\u01b0 m\u1ee5c ch\u00ednh c\u1ee7a s\u1ed5 tay h\u01b0\u1edbng d\u1eabn LAMP, h\u00e3y m\u1edf t\u1ec7p&nbsp;<code>metadata.rb<\/code>v\u00e0 th\u00eam ph\u1ea7n ph\u1ee5 thu\u1ed9c v\u00e0o s\u1ed5 tay h\u01b0\u1edbng d\u1eabn MySQL:<\/p>\n<pre class=\"wp-block-code\"><code>depends          'mysql', '~&gt; 8.6.0'<\/code><\/pre>\n<p>Ghi ch\u00fa:Ki\u1ec3m tra&nbsp;<a href=\"https:\/\/supermarket.chef.io\/cookbooks\/mysql\" target=\"_blank\" rel=\"noreferrer noopener\">trang Supermarket c\u1ee7a MySQL Cookbook<\/a>&nbsp;\u0111\u1ec3 \u0111\u1ea3m b\u1ea3o \u0111\u00e2y l\u00e0 phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t c\u1ee7a s\u00e1ch h\u01b0\u1edbng d\u1eabn. MySQL Cookbook hi\u1ec7n ch\u01b0a h\u1ed7 tr\u1ee3 Ubuntu 18.04.<\/p>\n<p>3.T\u1ea3i nh\u1eefng cu\u1ed1n s\u00e1ch d\u1ea1y n\u1ea5u \u0103n n\u00e0y l\u00ean m\u00e1y ch\u1ee7:<\/p>\n<pre class=\"wp-block-code\"><code><code>knife cookbook upload mysql --include-dependencies<\/code><\/code><\/pre>\n<h3 id=\"create-and-encrypt-your-mysql-password\">T\u1ea1o v\u00e0 m\u00e3 h\u00f3a m\u1eadt kh\u1ea9u MySQL c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#create-and-encrypt-your-mysql-password\"><\/a><\/h3>\n<p>Chef c\u00f3 m\u1ed9t t\u00ednh n\u0103ng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>t\u00fai d\u1eef li\u1ec7u<\/em>&nbsp;. T\u00fai d\u1eef li\u1ec7u l\u01b0u tr\u1eef th\u00f4ng tin v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a \u0111\u1ec3 l\u01b0u tr\u1eef m\u1eadt kh\u1ea9u v\u00e0 d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m kh\u00e1c.<\/p>\n<p>1.Tr\u00ean m\u00e1y tr\u1ea1m, t\u1ea1o kh\u00f3a b\u00ed m\u1eadt:<\/p>\n<pre class=\"wp-block-code\"><code>openssl rand -base64 512 &gt; ~\/chef-repo\/.chef\/encrypted_data_bag_secret\n<\/code><\/pre>\n<p>2.T\u1ea3i kh\u00f3a n\u00e0y l\u00ean th\u01b0 m\u1ee5c n\u00fat c\u1ee7a b\u1ea1n&nbsp;<code>\/etc\/chef<\/code>, c\u00f3 th\u1ec3 t\u1ea3i th\u1ee7 c\u00f4ng&nbsp;<code>scp<\/code>t\u1eeb n\u00fat (c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y v\u00ed d\u1ee5 trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-chef-server-workstation-on-ubuntu-14-04\/#add-the-rsa-private-keys\">Thi\u1ebft l\u1eadp Chef<\/a>&nbsp;) ho\u1eb7c th\u00f4ng qua vi\u1ec7c s\u1eed d\u1ee5ng t\u1ec7p c\u00f4ng th\u1ee9c n\u1ea5u \u0103n.<\/p>\n<p>3.Tr\u00ean m\u00e1y tr\u1ea1m, t\u1ea1o m\u1ed9t&nbsp;<code>mysql<\/code>t\u00fai d\u1eef li\u1ec7u ch\u1ee9a t\u1ec7p&nbsp;<code>rtpass.json<\/code>m\u1eadt kh\u1ea9u g\u1ed1c:<\/p>\n<pre class=\"wp-block-code\"><code>knife data bag create mysql rtpass.json --secret-file ~\/chef-repo\/.chef\/encrypted_data_bag_secret\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u ch\u1ec9nh s\u1eeda&nbsp;<code>rtpass.json<\/code>t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code>{\n  \"id\": \"rtpass.json\",\n  \"password\": \"password123\"\n}<\/code><\/pre>\n<p>Thay th\u1ebf&nbsp;<code>password123<\/code>b\u1eb1ng m\u1eadt kh\u1ea9u an to\u00e0n.<\/p>\n<p>4.X\u00e1c nh\u1eadn r\u1eb1ng&nbsp;<code>rtpass.json<\/code>t\u1eadp tin \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>knife data bag show mysql\n<\/code><\/pre>\n<p>N\u00f3 s\u1ebd xu\u1ea5t ra&nbsp;<code>rtpass.json<\/code>. \u0110\u1ec3 \u0111\u1ea3m b\u1ea3o r\u1eb1ng n\u00f3 \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a, h\u00e3y ch\u1ea1y:<\/p>\n<pre class=\"wp-block-code\"><code>knife data bag show mysql rtpass.json\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra s\u1ebd kh\u00f4ng th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c do b\u1ecb m\u00e3 h\u00f3a v\u00e0 s\u1ebd tr\u00f4ng gi\u1ed1ng nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>WARNING: Encrypted data bag detected, but no secret provided for decoding.  Displaying encrypted data.\n    id:       rtpass.json\n    password:\n      cipher:         aes-256-cbc\n      encrypted_data: wpEAb7TGUqBmdB1TJA\/5vyiAo2qaRSIF1dRAc+vkBhQ=\n\n      iv:             E5TbF+9thH9amU3QmGxWmw==\n\n      version:        1\n    user:\n      cipher:         aes-256-cbc\n      encrypted_data: VLA00Wrnh9DrZqDcytvo0HQUG0oqI6+6BkQjHXp6c0c=\n\n      iv:             6V+3ROpW9RG+\/honbf\/RUw==\n\n      version:        1<\/code><\/pre>\n<h3 id=\"set-up-mysql\">Thi\u1ebft l\u1eadp MySQL<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#set-up-mysql\"><\/a><\/h3>\n<p>Sau khi t\u1ea3i xu\u1ed1ng th\u01b0 vi\u1ec7n MySQL v\u00e0 chu\u1ea9n b\u1ecb m\u1eadt kh\u1ea9u g\u1ed1c \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a, gi\u1edd \u0111\u00e2y b\u1ea1n c\u00f3 th\u1ec3 thi\u1ebft l\u1eadp c\u00f4ng th\u1ee9c \u0111\u1ec3 t\u1ea3i xu\u1ed1ng v\u00e0 c\u1ea5u h\u00ecnh MySQL.<\/p>\n<p>1.M\u1edf m\u1ed9t t\u1ec7p m\u1edbi c\u00f3 t\u00ean l\u00e0&nbsp;<code>recipes<\/code>called&nbsp;<code>mysql.rb<\/code>v\u00e0 x\u00e1c \u0111\u1ecbnh t\u00fai d\u1eef li\u1ec7u s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng:<\/p>\n<pre class=\"wp-block-code\"><code>mysqlpass = data_bag_item(\"mysql\", \"rtpass.json\")<\/code><\/pre>\n<p>2.Nh\u1edd c\u00f3 LWRP \u0111\u01b0\u1ee3c cung c\u1ea5p th\u00f4ng qua s\u00e1ch h\u01b0\u1edbng d\u1eabn MySQL, qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t ban \u0111\u1ea7u v\u00e0 t\u1ea1o c\u01a1 s\u1edf d\u1eef li\u1ec7u cho MySQL c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n trong m\u1ed9t t\u00e0i nguy\u00ean:<\/p>\n<pre class=\"wp-block-code\"><code>mysqlpass = data_bag_item(\"mysql\", \"rtpass.json\")\n\nmysql_service \"mysqldefault\" do\n  version '5.7'\n  initial_root_password mysqlpass&#91;\"password\"]\n  action &#91;:create, :start]\nend<\/code><\/pre>\n<p><code>mysqldefault<\/code>l\u00e0 t\u00ean c\u1ee7a d\u1ecbch v\u1ee5 MySQL cho v\u00f9ng ch\u1ee9a n\u00e0y. C\u00e1c&nbsp;<code>inital_root_password<\/code>l\u1ec7nh g\u1ecdi \u0111\u1ebfn gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong v\u0103n b\u1ea3n \u1edf tr\u00ean, trong khi h\u00e0nh \u0111\u1ed9ng t\u1ea1o c\u01a1 s\u1edf d\u1eef li\u1ec7u v\u00e0 kh\u1edfi \u0111\u1ed9ng d\u1ecbch v\u1ee5 MySQL.<\/p>\n<p>3.Phi\u00ean b\u1ea3n MySQL m\u00e0&nbsp;<code>mysql<\/code>c\u00e0i \u0111\u1eb7t cookbook t\u1ea1o ra s\u1eed d\u1ee5ng t\u1ec7p sock \u1edf v\u1ecb tr\u00ed kh\u00f4ng chu\u1ea9n, do \u0111\u00f3 b\u1ea1n ph\u1ea3i khai b\u00e1o v\u1ecb tr\u00ed n\u00e0y \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi MySQL t\u1eeb d\u00f2ng l\u1ec7nh. \u0110\u1ec3 th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y, h\u00e3y t\u1ea1o t\u1ec7p cookbook c\u00f3 t\u00ean l\u00e0&nbsp;<code>my.cnf<\/code>c\u1ea5u h\u00ecnh sau:<\/p>\n<pre class=\"wp-block-code\"><code>&#91;client]\nsocket=\/run\/mysql-mysqldefault\/mysqld.sock<\/code><\/pre>\n<p>4.M\u1edf&nbsp;<code>mysql.rb<\/code>l\u1ea1i v\u00e0 th\u00eam c\u00e1c d\u00f2ng sau v\u00e0o cu\u1ed1i t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code># &#91;...]\n\ncookbook_file \"\/etc\/my.cnf\" do\n  source \"my.cnf\"\n  mode \"0644\"\nend<\/code><\/pre>\n<h2 id=\"php\">PHP<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#php\"><\/a><\/h2>\n<p>1.Trong th\u01b0 m\u1ee5c recipes, t\u1ea1o m\u1ed9t&nbsp;<code>php.rb<\/code>t\u1ec7p m\u1edbi. C\u00e1c l\u1ec7nh b\u00ean d\u01b0\u1edbi c\u00e0i \u0111\u1eb7t PHP v\u00e0 t\u1ea5t c\u1ea3 c\u00e1c g\u00f3i c\u1ea7n thi\u1ebft \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi Apache v\u00e0 MySQL:<\/p>\n<pre class=\"wp-block-code\"><code>package \"php\" do\n  action :install\nend\n\npackage \"php-pear\" do\n  action :install\nend\n\npackage \"php-mysql\" do\n  action :install\nend\n\npackage \"libapache2-mod-php\" do\n  action :install\nend<\/code><\/pre>\n<p>2.\u0110\u1ec3 c\u1ea5u h\u00ecnh d\u1ec5 d\u00e0ng,&nbsp;<code>php.ini<\/code>t\u1ec7p s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 s\u1eed d\u1ee5ng nh\u01b0 m\u1ed9t t\u1ec7p s\u1ed5 tay h\u01b0\u1edbng d\u1eabn, kh\u00e1 gi\u1ed1ng v\u1edbi m\u00f4-\u0111un MPM \u1edf tr\u00ean. B\u1ea1n c\u00f3 th\u1ec3:<\/p>\n<p>Th\u00eam c\u00f4ng th\u1ee9c PHP, ch\u1ea1y&nbsp;<code>chef-client<\/code>v\u00e0 sao ch\u00e9p t\u1ec7p t\u1eeb m\u1ed9t n\u00fat (n\u1eb1m trong&nbsp;<code>\/etc\/php\/7.0\/cli\/php.ini<\/code>), ho\u1eb7c:<\/p>\n<p>Sao ch\u00e9p n\u00f3 t\u1eeb&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/chef-php.ini\">m\u1eabu chef-php.ini n\u00e0y<\/a>&nbsp;. T\u1ec7p n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ebfn th\u01b0&nbsp;<code>chef-repo\/cookbooks\/lamp_stack\/files\/default\/<\/code>m\u1ee5c. T\u1ec7p n\u00e0y c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c chuy\u1ec3n th\u00e0nh m\u1eabu, n\u1ebfu n\u00f3 ph\u00f9 h\u1ee3p h\u01a1n v\u1edbi c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n.<\/p>\n<p>3.<code>php.ini<\/code>l\u00e0 m\u1ed9t t\u1ec7p l\u1edbn. T\u00ecm ki\u1ebfm v\u00e0 ch\u1ec9nh s\u1eeda c\u00e1c gi\u00e1 tr\u1ecb sau \u0111\u1ec3 ph\u00f9 h\u1ee3p nh\u1ea5t v\u1edbi Linode c\u1ee7a b\u1ea1n. C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c \u0111\u1ec1 xu\u1ea5t b\u00ean d\u01b0\u1edbi d\u00e0nh cho Linode 2GB:<\/p>\n<pre class=\"wp-block-code\"><code>max_execution_time = 30\nmemory_limit = 128M\nerror_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR\ndisplay_errors = Off\nlog_errors = On\nerror_log = \/var\/log\/php\/error.log\nmax_input_time = 30<\/code><\/pre>\n<p>4.Quay l\u1ea1i&nbsp;<code>php.rb<\/code>v\u00e0 th\u00eam&nbsp;<code>cookbook_file<\/code>t\u00e0i nguy\u00ean v\u00e0o cu\u1ed1i c\u00f4ng th\u1ee9c:<\/p>\n<pre class=\"wp-block-code\"><code>cookbook_file \"\/etc\/php\/7.0\/cli\/php.ini\" do\n  source \"php.ini\"\n  mode \"0644\"\n  notifies :restart, \"service&#91;apache2]\"\nend<\/code><\/pre>\n<p>5.Do nh\u1eefng thay \u0111\u1ed5i \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n \u0111\u1ed1i v\u1edbi&nbsp;<code>php.ini<\/code>, m\u1ed9t&nbsp;<code>\/var\/log\/php<\/code>th\u01b0 m\u1ee5c c\u1ea7n \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 quy\u1ec1n s\u1edf h\u1eefu c\u1ee7a n\u00f3 \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh ng\u01b0\u1eddi d\u00f9ng Apache. \u0110i\u1ec1u n\u00e0y \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n th\u00f4ng qua&nbsp;<code>notifies<\/code>l\u1ec7nh v\u00e0&nbsp;<em>th\u1ef1c thi<\/em>&nbsp;t\u00e0i nguy\u00ean, nh\u01b0 \u0111\u00e3 th\u1ef1c hi\u1ec7n tr\u01b0\u1edbc \u0111\u00f3. Th\u00eam c\u00e1c t\u00e0i nguy\u00ean n\u00e0y v\u00e0o cu\u1ed1i&nbsp;<code>php.rb<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>execute \"chownlog\" do\n  command \"chown www-data \/var\/log\/php\"\n  action :nothing\nend\n\ndirectory \"\/var\/log\/php\" do\n  action :create\n  notifies :run, \"execute&#91;chownlog]\"\nend<\/code><\/pre>\n<p>C\u00f4ng th\u1ee9c PHP \u0111\u00e3 ho\u00e0n th\u00e0nh! Xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/php.rb\">v\u00ed d\u1ee5 v\u1ec1 t\u1ec7p php.rb t\u1ea1i \u0111\u00e2y<\/a>&nbsp;.<\/p>\n<p>6.\u0110\u1ea3m b\u1ea3o r\u1eb1ng m\u00e1y ch\u1ee7 Chef c\u1ee7a b\u1ea1n ch\u1ee9a s\u1ed5 tay n\u1ea5u \u0103n \u0111\u00e3 c\u1eadp nh\u1eadt v\u00e0 danh s\u00e1ch ch\u1ea1y c\u1ee7a n\u00fat c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt. Thay th\u1ebf&nbsp;<code>nodename<\/code>b\u1eb1ng t\u00ean n\u00fat Chef c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife cookbook upload lamp_stack\n knife node run_list add nodename \"recipe&#91;lamp_stack],recipe&#91;lamp_stack::apache],recipe&#91;lamp_stack::mysql],recipe&#91;lamp_stack::php]\"<\/code><\/pre>\n<h2 id=\"testing-your-installation\">Ki\u1ec3m tra c\u00e0i \u0111\u1eb7t c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#testing-your-installation\"><\/a><\/h2>\n<p>1.\u0110\u1ec3 \u0111\u1ea3m b\u1ea3o d\u1ecbch v\u1ee5 Apache \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y th\u00e0nh c\u00f4ng, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n l\u1ec7nh sau, thay th\u1ebf&nbsp;<code>node_name<\/code>t\u00ean n\u00fat c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife ssh 'name:node_name' 'systemctl status apache2' -x root\n<\/code><\/pre>\n<p>Ngo\u00e0i ra, b\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp t\u00ean mi\u1ec1n m\u00e1y ch\u1ee7 c\u1ee7a m\u00ecnh trong tr\u00ecnh duy\u1ec7t. N\u1ebfu ho\u1ea1t \u0111\u1ed9ng, b\u1ea1n s\u1ebd th\u1ea5y trang m\u00e1y ch\u1ee7 Chef h\u01b0\u1edbng d\u1eabn b\u1ea1n c\u00e1ch thi\u1ebft l\u1eadp B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n qu\u1ea3n l\u00fd (v\u00ec b\u1ea1n ch\u01b0a t\u1ea3i b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o l\u00ean m\u00e1y ch\u1ee7 c\u1ee7a m\u00ecnh.)<\/p>\n<p>2.\u0110\u1ec3 ki\u1ec3m tra tr\u1ea1ng th\u00e1i c\u1ee7a PHP, b\u1ea1n s\u1ebd c\u1ea7n t\u1ea3i m\u1ed9t t\u1ec7p l\u00ean m\u00e1y ch\u1ee7 c\u1ee7a m\u00ecnh \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u1ec7p \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb ch\u00ednh x\u00e1c. M\u1ed9t t\u1ec7p PHP \u0111\u01a1n gi\u1ea3n m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o l\u00e0 t\u1ec7p th\u00f4ng tin PHP. T\u1ea1o m\u1ed9t t\u1ec7p c\u00f3 t\u00ean&nbsp;<code>info.php<\/code>trong c\u00f9ng th\u01b0 m\u1ee5c v\u1edbi c\u00e1c t\u1ec7p s\u00e1ch h\u01b0\u1edbng d\u1eabn kh\u00e1c m\u00e0 b\u1ea1n \u0111\u00e3 t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;?php phpinfo(); ?&gt;\n<\/code><\/pre>\n<p>S\u1eeda \u0111\u1ed5i t\u1ec7p c\u1ee7a b\u1ea1n&nbsp;<code>php.rb<\/code>v\u00e0 th\u00eam n\u1ed9i dung sau v\u00e0o cu\u1ed1i t\u1ec7p, thay th\u1ebf&nbsp;<code>example.com<\/code>t\u00ean mi\u1ec1n c\u1ee7a trang web:<\/p>\n<pre class=\"wp-block-code\"><code>cookbook_file \"\/var\/www\/html\/example.com\/public_html\/info.php\" do\n  source \"info.php\"\nend<\/code><\/pre>\n<p>T\u1ea3i s\u00e1ch d\u1ea1y n\u1ea5u \u0103n c\u1ee7a b\u1ea1n l\u00ean m\u00e1y ch\u1ee7 Chef, sau \u0111\u00f3 ch\u1ea1y&nbsp;<code>chef-client<\/code>tr\u00ean n\u00fat c\u1ee7a b\u1ea1n, thay th\u1ebf&nbsp;<code>node_name<\/code>b\u1eb1ng t\u00ean n\u00fat c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>knife cookbook upload lamp_stack\nknife ssh 'name:node_name' 'sudo chef-client' -x root<\/code><\/pre>\n<p>Truy c\u1eadp&nbsp;<code>example.com\/info.php<\/code>v\u00e0o tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t trang ch\u1ee9a th\u00f4ng tin v\u1ec1 c\u00e0i \u0111\u1eb7t PHP c\u1ee7a b\u1ea1n.<\/p>\n<p>3.\u0110\u1ec3 ki\u1ec3m tra c\u00e0i \u0111\u1eb7t MySQL c\u1ee7a b\u1ea1n, b\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra tr\u1ea1ng th\u00e1i c\u1ee7a MySQL b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>systmectl<\/code>. Ph\u00e1t h\u00e0nh l\u1ec7nh sau \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o d\u1ecbch v\u1ee5 MySQL \u0111ang ch\u1ea1y \u0111\u00fang c\u00e1ch:<\/p>\n<pre class=\"wp-block-code\"><code>knife ssh 'name:node_name' 'systemctl status mysql-mysqldefault' -u root\n<\/code><\/pre>\n<p><code>chef-client<\/code>kh\u00f4ng \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 ch\u1ea5p nh\u1eadn \u0111\u1ea7u v\u00e0o c\u1ee7a ng\u01b0\u1eddi d\u00f9ng v\u00e0 do \u0111\u00f3, vi\u1ec7c s\u1eed d\u1ee5ng c\u00e1c l\u1ec7nh nh\u01b0&nbsp;<code>mysqladmin status<\/code>v\u1eady y\u00eau c\u1ea7u m\u1eadt kh\u1ea9u c\u00f3 th\u1ec3 khi\u1ebfn Chef b\u1ecb treo. N\u1ebfu b\u1ea1n c\u1ea7n c\u00f3 th\u1ec3 t\u01b0\u01a1ng t\u00e1c tr\u1ef1c ti\u1ebfp v\u1edbi m\u00e1y kh\u00e1ch MySQL, h\u00e3y c\u00e2n nh\u1eafc \u0111\u0103ng nh\u1eadp tr\u1ef1c ti\u1ebfp v\u00e0o m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n.<\/p>\n<p>B\u1ea1n v\u1eeba t\u1ea1o m\u1ed9t s\u00e1ch h\u01b0\u1edbng d\u1eabn n\u1ea5u \u0103n LAMP Stack. Qua h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c t\u00e0i nguy\u00ean&nbsp;<code>execute<\/code>,&nbsp;<code>package<\/code>,&nbsp;<code>service<\/code>,&nbsp;<code>node<\/code>,&nbsp;<code>directory<\/code>,&nbsp;<code>template<\/code>,&nbsp;<code>cookbook_file<\/code>, v\u00e0&nbsp;<code>mysql_service<\/code>trong m\u1ed9t c\u00f4ng th\u1ee9c n\u1ea5u \u0103n, c\u0169ng nh\u01b0 t\u1ea3i xu\u1ed1ng v\u00e0 s\u1eed d\u1ee5ng LWRP, t\u1ea1o c\u00e1c t\u00fai d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a, t\u1ea3i l\u00ean\/c\u1eadp nh\u1eadt s\u00e1ch h\u01b0\u1edbng d\u1eabn n\u1ea5u \u0103n c\u1ee7a b\u1ea1n l\u00ean m\u00e1y ch\u1ee7 v\u00e0 s\u1eed d\u1ee5ng c\u00e1c thu\u1ed9c t\u00ednh, m\u1eabu v\u00e0 t\u1ec7p s\u00e1ch h\u01b0\u1edbng d\u1eabn n\u1ea5u \u0103n. \u0110i\u1ec1u n\u00e0y cung c\u1ea5p cho b\u1ea1n m\u1ed9t c\u01a1 s\u1edf v\u1eefng ch\u1eafc trong vi\u1ec7c t\u1ea1o Chef v\u00e0 s\u00e1ch h\u01b0\u1edbng d\u1eabn n\u1ea5u \u0103n cho c\u00e1c d\u1ef1 \u00e1n trong t\u01b0\u01a1ng lai.<\/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=\"http:\/\/www.chef.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u0110\u1ea7u b\u1ebfp<\/a><\/li>\n<li><a href=\"https:\/\/docs.chef.io\/cookbooks.html\" target=\"_blank\" rel=\"noreferrer noopener\">V\u1ec1 s\u00e1ch d\u1ea1y n\u1ea5u \u0103n<\/a><\/li>\n<li><a href=\"https:\/\/docs.chef.io\/knife.html\" target=\"_blank\" rel=\"noreferrer noopener\">V\u1ec1 Knife<\/a><\/li>\n<li><a href=\"https:\/\/docs.chef.io\/nodes.html\" target=\"_blank\" rel=\"noreferrer noopener\">Gi\u1edbi thi\u1ec7u v\u1ec1 Nodes<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/creating-your-first-chef-cookbook\/#mysql<\/p>\n","protected":false},"excerpt":{"rendered":"<p>S\u00e1ch h\u01b0\u1edbng d\u1eabn c\u1ee7a Chef m\u00f4 t\u1ea3&nbsp;tr\u1ea1ng th\u00e1i mong mu\u1ed1n&nbsp;c\u1ee7a c\u00e1c n\u00fat c\u1ee7a b\u1ea1n v\u00e0 cho ph\u00e9p Chef \u0111\u01b0a ra c\u00e1c thay \u0111\u1ed5i c\u1ea7n thi\u1ebft \u0111\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c tr\u1ea1ng th\u00e1i n\u00e0y. Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch t\u1ea1o s\u00e1ch h\u01b0\u1edbng d\u1eabn c\u1ea5u h\u00ecnh ng\u0103n x\u1ebfp LAMP tr\u00ean Linode. Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<\/p>\n","protected":false},"author":1,"featured_media":35797,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131],"tags":[],"class_list":["post-34935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chef"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34935","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=34935"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34935\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35797"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}