{"id":35020,"date":"2024-10-01T14:58:24","date_gmt":"2024-10-01T07:58:24","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/10\/01\/using-vagrant-to-manage-linode-environments\/"},"modified":"2024-10-01T14:58:24","modified_gmt":"2024-10-01T07:58:24","slug":"using-vagrant-to-manage-linode-environments","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/10\/01\/using-vagrant-to-manage-linode-environments\/","title":{"rendered":"S\u1eed d\u1ee5ng Vagrant \u0111\u1ec3 qu\u1ea3n l\u00fd m\u00f4i tr\u01b0\u1eddng Linode"},"content":{"rendered":"<p><a href=\"http:\/\/www.vagrantup.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Vagrant<\/a>&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng t\u1ea1o ra c\u00e1c m\u00f4i tr\u01b0\u1eddng l\u00e0m vi\u1ec7c di \u0111\u1ed9ng v\u00e0 c\u00f3 th\u1ec3 t\u00e1i t\u1ea1o. Vagrant n\u1ed5i tr\u1ed9i trong vi\u1ec7c cung c\u1ea5p c\u00e1c m\u00e1y ch\u1ee7 nh\u1ea5t qu\u00e1n, d\u1ec5 c\u1ea5u h\u00ecnh c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 duy tr\u00ec m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n nh\u1ea5t qu\u00e1n tr\u00ean t\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng. N\u00f3 d\u1ec5 d\u00e0ng kh\u1edfi ch\u1ea1y v\u00e0 g\u1ee1 b\u1ecf, v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c cung c\u1ea5p cho b\u1ea5t k\u1ef3 b\u1ed9 ph\u1eadn n\u00e0o c\u1ee7a nh\u00f3m ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 c\u1ea7n m\u1ed9t m\u00f4i tr\u01b0\u1eddng nh\u01b0ng kh\u00f4ng c\u00f3 ph\u01b0\u01a1ng ti\u1ec7n \u0111\u1ec3 t\u1ef1 c\u1ea5u h\u00ecnh. Th\u01b0\u1eddng \u0111\u01b0\u1ee3c k\u1ebft h\u1ee3p v\u1edbi c\u00e1c nh\u00e0 cung c\u1ea5p nh\u01b0 Puppet, Salt v\u00e0 Chef, n\u00f3 cung c\u1ea5p m\u1ed9t gi\u1ea3i ph\u00e1p d\u1ec5 d\u00e0ng \u0111\u1ec3 duy tr\u00ec quy tr\u00ecnh l\u00e0m vi\u1ec7c nh\u1ea5t qu\u00e1n.<\/p>\n<p>Vagrant c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c gh\u00e9p n\u1ed1i v\u1edbi Linode th\u00f4ng qua vi\u1ec7c s\u1eed d\u1ee5ng plugin&nbsp;<em>vagrant-linode<\/em>&nbsp;\u0111\u1ec3 t\u1ea1o v\u00e0 h\u1ee7y c\u00e1c m\u00e1y ch\u1ee7 Linode khi c\u1ea7n. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd cung c\u1ea5p h\u01b0\u1edbng d\u1eabn v\u1ec1 c\u00e1ch c\u00e0i \u0111\u1eb7t Vagrant, c\u1ea5u h\u00ecnh plugin vagrant-linode v\u00e0 thi\u1ebft l\u1eadp m\u00e1y ch\u1ee7 Apache c\u01a1 b\u1ea3n \u0111\u1ec3 th\u1eed nghi\u1ec7m.<\/p>\n<h2 id=\"prerequisites\">\u0110i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#prerequisites\"><\/a><\/h2>\n<ol>\n<li><a href=\"https:\/\/www.vagrantup.com\/downloads.html\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00e0i \u0111\u1eb7t Vagrant<\/a>&nbsp;tr\u00ean m\u00e1y t\u00ednh c\u1ee5c b\u1ed9 ho\u1eb7c kh\u00f4ng gian l\u00e0m vi\u1ec7c kh\u00e1c.<\/li>\n<li>T\u1ea1o Kh\u00f3a API. Kh\u00f3a n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o Linode d\u1ef1a tr\u00ean h\u1ed3 s\u01a1 Vagrant c\u1ee7a b\u1ea1n:\n<ul>\n<li>\u0110\u0103ng nh\u1eadp v\u00e0o Linode Manager v\u00e0 ch\u1ecdn&nbsp;<strong>h\u1ed3 s\u01a1 c\u1ee7a t\u00f4i<\/strong>&nbsp;\u1edf g\u00f3c tr\u00ean b\u00ean ph\u1ea3i.<\/li>\n<li>Ch\u1ecdn tab Kh\u00f3a API:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/linode-api-vagrant1_huf80a15b43b63b197c46a8eb806496cd4_41675_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Giao di\u1ec7n l\u1eadp tr\u00ecnh \u1ee9ng d\u1ee5ng Linode\"><\/li>\n<li>Nh\u1eadp nh\u00e3n cho Kh\u00f3a API c\u1ee7a b\u1ea1n v\u00e0 \u0111\u1eb7t th\u1eddi gian h\u1ebft h\u1ea1n. Sau \u0111\u00f3 nh\u1ea5p v\u00e0o&nbsp;<strong>T\u1ea1o Kh\u00f3a API<\/strong>&nbsp;.<\/li>\n<li>Kh\u00f3a API c\u1ee7a b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c xu\u1ea5t ra trong m\u1ed9t h\u1ed9p m\u00e0u xanh l\u00e1 c\u00e2y.&nbsp;<strong>Kh\u00f3a n\u00e0y s\u1ebd ch\u1ec9 \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb m\u1ed9t l\u1ea7n<\/strong>&nbsp;n\u00ean h\u00e3y ch\u1eafc ch\u1eafn ghi l\u1ea1i \u0111\u1ec3 s\u1eed d\u1ee5ng sau:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/linode-api-vagrant2_hu17b4d02cfcfd576c961ce7fe121ff738_61048_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Kh\u00f3a API Linode \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o\"><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2 id=\"install-the-vagrant-linode-plugin\">C\u00e0i \u0111\u1eb7t Plugin vagrant-linode<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#install-the-vagrant-linode-plugin\"><\/a><\/h2>\n<p>1.T\u1eeb kh\u00f4ng gian l\u00e0m vi\u1ec7c c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c cho d\u1ef1 \u00e1n v\u00e0 di chuy\u1ec3n v\u00e0o th\u01b0 m\u1ee5c \u0111\u00f3:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir ~\/vagrant-linode\ncd vagrant-linode<\/code><\/pre>\n<p>2.C\u00e0i \u0111\u1eb7t plugin:<\/p>\n<pre class=\"wp-block-code\"><code>vagrant plugin install vagrant-linode\n<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu s\u1eed d\u1ee5ng m\u00e1y Mac, c\u00f3 th\u1ec3 y\u00eau c\u1ea7u c\u00e0i \u0111\u1eb7t c\u00f4ng c\u1ee5 ph\u00e1t tri\u1ec3n. Ch\u1ecdn c\u00f3, sau \u0111\u00f3 ch\u1ea1y l\u1ea1i l\u1ec7nh.<\/p>\n<p>3.T\u1eeb&nbsp;<code>vagrant-linode<\/code>th\u01b0 m\u1ee5c, t\u1ea1o Vagrantfile:<\/p>\n<pre class=\"wp-block-code\"><code>touch Vagrantfile\n<\/code><\/pre>\n<p>Vagrantfile&nbsp;\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 m\u00f4 t\u1ea3, trong m\u00e3, lo\u1ea1i m\u00e1y m\u00e0 Vagrant s\u1ebd t\u1ea1o ra. N\u00f3 \u0111\u1ecbnh ngh\u0129a m\u1ecdi th\u1ee9 t\u1eeb h\u1ec7 \u0111i\u1ec1u h\u00e0nh \u0111\u1ebfn ng\u01b0\u1eddi d\u00f9ng, \u0111\u1ebfn b\u1ea5t k\u1ef3 \u1ee9ng d\u1ee5ng n\u00e0o c\u1ea7n \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t ban \u0111\u1ea7u \u0111\u1ec3 t\u1ea1o ra m\u1ed9t m\u00f4i tr\u01b0\u1eddng l\u00e0m vi\u1ec7c nh\u1ea5t qu\u00e1n&nbsp;<em>.<\/em><\/p>\n<h2 id=\"configure-the-vagrantfile\">C\u1ea5u h\u00ecnh Vagrantfile<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#configure-the-vagrantfile\"><\/a><\/h2>\n<p>1.M\u1edf Vagrantfile trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n b\u1ea1n ch\u1ecdn. Trong Ruby, h\u00e3y x\u00e1c \u0111\u1ecbnh phi\u00ean b\u1ea3n Vagrant b\u1ea1n \u0111ang s\u1eed d\u1ee5ng. \u0110\u1ecbnh&nbsp;<code>2<\/code>ngh\u0129a r\u1eb1ng \u0111\u00f3 l\u00e0 Vagrant 1.1.0 d\u1eabn \u0111\u1ebfn Vagrant 2.0.&nbsp;<code>1<\/code>l\u00e0 b\u1ea5t k\u1ef3 phi\u00ean b\u1ea3n n\u00e0o c\u1ee7a Vagrant th\u1ea5p h\u01a1n:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\nend<\/code><\/pre>\n<p>T\u1ea5t c\u1ea3 m\u00e3 s\u1ebd n\u1eb1m gi\u1eefa c\u00e1c d\u00f2ng&nbsp;<code>Vagrant.configure<\/code>v\u00e0&nbsp;<code>end<\/code>.<\/p>\n<p>2.Khi t\u1ea1o&nbsp;<em>m\u00e1y kh\u00e1ch<\/em>&nbsp;\u2013 m\u00e1y ch\u1ee7 s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o \u2013 Vagrant s\u1ebd t\u1ea1o t\u00ean ng\u01b0\u1eddi d\u00f9ng, m\u1eadt kh\u1ea9u v\u00e0 kh\u00f3a ri\u00eang \u0111\u1ec3 truy c\u1eadp m\u00e1y. T\u00ean ng\u01b0\u1eddi d\u00f9ng v\u00e0 m\u1eadt kh\u1ea9u m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<code>vagrant<\/code>. X\u00e1c \u0111\u1ecbnh c\u00e1c tham s\u1ed1 c\u1ee7a ri\u00eang b\u1ea1n cho&nbsp;<code>username<\/code>, v\u00e0 \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn kh\u00f3a ri\u00eang c\u1ee7a b\u1ea1n. N\u1ebfu b\u1ea1n ch\u01b0a t\u1ea1o kh\u00f3a ri\u00eang v\u00e0 kh\u00f3a c\u00f4ng khai, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n b\u1eb1ng c\u00e1ch l\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/#upload-ssh-key\">B\u1ea3o m\u1eadt m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n<\/a>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n  ## SSH Configuration\n  config.ssh.username = 'user'\n  config.ssh.private_key_path = '~\/.ssh\/id_rsa'\n\nend<\/code><\/pre>\n<p>N\u1ebfu b\u1ea1n ch\u1ecdn l\u00e0m nh\u01b0 v\u1eady, b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 x\u00e1c \u0111\u1ecbnh m\u1eadt kh\u1ea9u c\u1ee7a ri\u00eang m\u00ecnh b\u1eb1ng&nbsp;<code>config.ssh.password<\/code>ph\u1ea7n c\u00e0i \u0111\u1eb7t.<\/p>\n<p>3.\u0110\u1ecbnh ngh\u0129a nh\u00e0 cung c\u1ea5p Linode:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n  ...\n\n  # Global Configuration\n  config.vm.provider :linode do |provider, override|\n    override.vm.box = 'linode'\n    override.vm.box_url = \"https:\/\/github.com\/displague\/vagrant-linode\/raw\/master\/box\/linode.box\"\n    provider.token = 'API-KEY'\n  end\n\nend<\/code><\/pre>\n<p>D\u00f2ng 6 \u0111\u1ecbnh ngh\u0129a nh\u00e0 cung c\u1ea5p, v\u00e0 d\u00f2ng 7 v\u00e0 8 \u0111\u1ecbnh ngh\u0129a&nbsp;<em>h\u1ed9p<\/em>&nbsp;. H\u1ed9p l\u00e0 c\u00e1c g\u00f3i bao g\u1ed3m c\u00e1c y\u00eau c\u1ea7u c\u01a1 b\u1ea3n \u0111\u1ec3 m\u00f4i tr\u01b0\u1eddng Vagrant ho\u1ea1t \u0111\u1ed9ng. H\u1ed9p \u0111\u01b0\u1ee3c cung c\u1ea5p l\u00e0 h\u1ed9p&nbsp;<code>linode<\/code>, \u0111\u01b0\u1ee3c t\u1ea1o nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a plugin. Thay th\u1ebf&nbsp;<code>API-KEY<\/code>b\u1eb1ng kh\u00f3a \u0111\u01b0\u1ee3c t\u1ea1o&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#prerequisites\">\u1edf tr\u00ean<\/a>&nbsp;.<\/p>\n<p>4.Ch\u1ecdn c\u00e0i \u0111\u1eb7t Linode c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n  ...\n\n  # Global Configuration\n  config.vm.provider :linode do |provider, override|\n\n    ...\n\n    #Linode Settings\n    provider.distribution = 'Ubuntu 14.04 LTS'\n    provider.datacenter = 'newark'\n    provider.plan = '2048'\n    provider.label = 'vagrant-ubuntu-lts'\n\n  end\n\nend<\/code><\/pre>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, m\u1ed9t Linode Ubuntu 14.04 LTS 2GB \u0111ang \u0111\u01b0\u1ee3c t\u1ea1o t\u1ea1i trung t\u00e2m d\u1eef li\u1ec7u Newark. \u0110\u00e2y&nbsp;<code>provider.label<\/code>l\u00e0 t\u00ean m\u00e0 Linode s\u1ebd hi\u1ec3n th\u1ecb trong Linode Manager.<\/p>\n<p>\u0110\u1ec3 xem th\u00eam c\u00e1c t\u00f9y ch\u1ecdn li\u00ean quan \u0111\u1ebfn plugin vagrant-linode, h\u00e3y xem t\u00e0i li\u1ec7u tr\u00ean&nbsp;<a href=\"https:\/\/github.com\/displague\/vagrant-linode\" target=\"_blank\" rel=\"noreferrer noopener\">kho l\u01b0u tr\u1eef GitHub<\/a>&nbsp;c\u1ee7a plugin .<\/p>\n<h2 id=\"set-up-the-vagrant-box\">Thi\u1ebft l\u1eadp h\u1ed9p Vagrant<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#set-up-the-vagrant-box\"><\/a><\/h2>\n<p>M\u1eb7c d\u00f9 m\u00e1y ch\u1ee7 hi\u1ec7n c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng, nh\u01b0ng v\u1eabn c\u1ea7n ph\u1ea3i c\u1ea5u h\u00ecnh nhi\u1ec1u kh\u00eda c\u1ea1nh c\u1ee7a n\u00f3. C\u00e1c t\u1eadp l\u1ec7nh Shell s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ho\u00e0n t\u1ea5t c\u00e1c b\u01b0\u1edbc t\u1eeb h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">Thi\u1ebft l\u1eadp v\u00e0 B\u1ea3o m\u1eadt Phi\u00ean b\u1ea3n M\u00e1y t\u00ednh<\/a>&nbsp;, c\u0169ng nh\u01b0 \u0111\u1ec3 c\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh Apache. C\u00e1c t\u1ec7p c\u0169ng s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ed3ng b\u1ed9 h\u00f3a gi\u1eefa m\u00e1y tr\u1ea1m v\u00e0 Linode.<\/p>\n<h3 id=\"configure-the-server\">C\u1ea5u h\u00ecnh m\u00e1y ch\u1ee7<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#configure-the-server\"><\/a><\/h3>\n<p>1.T\u1ea1o m\u1ed9t t\u1eadp l\u1ec7nh shell \u0111\u01b0\u1ee3c g\u1ecdi&nbsp;<code>setup.sh<\/code>\u0111\u1ec3 c\u1ea5u h\u00ecnh t\u00ean m\u00e1y ch\u1ee7 c\u1ee7a Linode, \u0111\u1eb7t m\u00fai gi\u1edd th\u00edch h\u1ee3p v\u00e0 c\u1eadp nh\u1eadt m\u00e1y ch\u1ee7. Thay th\u1ebf&nbsp;<code>vagranttest<\/code>b\u1eb1ng t\u00ean m\u00e1y ch\u1ee7 b\u1ea1n \u0111\u00e3 ch\u1ecdn v\u00e0&nbsp;<code>EST<\/code>m\u00fai gi\u1edd c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\necho \"vagranttest\" &gt; \/etc\/hostname\nhostname -F \/etc\/hostname\nip=$(ip addr show eth0 | grep -Po 'inet \\K&#91;\\d.]+')\necho \"$ip   $ip hostname\" &gt;&gt; \/etc\/hosts\nln -sf \/usr\/share\/zoneinfo\/EST \/etc\/localtime\napt-get update &amp;&amp; apt-get upgrade -y<\/code><\/pre>\n<ul>\n<li>D\u00f2ng 2 v\u00e0 3 x\u00e1c \u0111\u1ecbnh t\u00ean m\u00e1y ch\u1ee7.<\/li>\n<li>D\u00f2ng 4 thi\u1ebft l\u1eadp bi\u1ebfn&nbsp;<code>ip<\/code>th\u00e0nh \u0111\u1ecba ch\u1ec9 IP c\u1ee7a Linode \u2013 v\u00ec ch\u00fang ta s\u1ebd kh\u00f4ng bi\u1ebft \u0111\u1ecba ch\u1ec9 IP cho \u0111\u1ebfn khi Vagrant kh\u1edfi ch\u1ea1y Linode.<\/li>\n<li>D\u00f2ng 5 ch\u00e8n \u0111\u1ecba ch\u1ec9 IP v\u00e0o&nbsp;<code>\/etc\/hosts<\/code>t\u1ec7p \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh t\u00ean mi\u1ec1n \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n.<\/li>\n<li>D\u00f2ng 6 thi\u1ebft l\u1eadp m\u00fai gi\u1edd v\u00e0 d\u00f2ng cu\u1ed1i c\u00f9ng c\u1eadp nh\u1eadt m\u00e1y ch\u1ee7 v\u00e0 c\u00e1c g\u00f3i m\u00e1y ch\u1ee7.<\/li>\n<\/ul>\n<p>2.Trong Vagrantfile, h\u00e3y g\u1ecdi \u0111\u1ebfn t\u1eadp l\u1ec7nh shell m\u00e0 b\u1ea1n v\u1eeba t\u1ea1o b\u1eb1ng c\u00e1ch th\u00eam&nbsp;<code>config.vm.provision<\/code>ph\u01b0\u01a1ng th\u1ee9c:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n...\n\n  # Shell Scripts\n  config.vm.provision :shell, path: \"setup.sh\"\n\nend<\/code><\/pre>\n<h3 id=\"install-apache-and-sync-files\">C\u00e0i \u0111\u1eb7t Apache v\u00e0 Sync Files<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#install-apache-and-sync-files\"><\/a><\/h3>\n<p>1.T\u1ea1o m\u1ed9t t\u1eadp l\u1ec7nh c\u00e0i \u0111\u1eb7t cho Apache c\u00f3 t\u00ean l\u00e0&nbsp;<code>apache.sh<\/code>, v\u00e0 th\u00eam n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\napt-get install apache2 -y\nmv \/etc\/apache2\/ports.conf \/etc\/apache2\/ports.conf.backup\nmv \/etc\/apache2\/ports1.conf \/etc\/apache2\/ports.conf\na2dissite 000-default.conf\na2ensite vhost.conf\nservice apache2 reload<\/code><\/pre>\n<ul>\n<li>D\u00f2ng 2 c\u00e0i \u0111\u1eb7t Apache.<\/li>\n<li>D\u00f2ng 3 v\u00e0 4 t\u1ea1o b\u1ea3n sao l\u01b0u c\u1ee7a&nbsp;<code>ports.conf<\/code>t\u1ec7p v\u00e0 thay th\u1ebf b\u1eb1ng t\u1ec7p \u0111\u01b0\u1ee3c t\u1ea1o b\u00ean d\u01b0\u1edbi.<\/li>\n<li>D\u00f2ng 5 v\u00e0 6 v\u00f4 hi\u1ec7u h\u00f3a t\u1ec7p m\u00e1y ch\u1ee7 m\u1eb7c \u0111\u1ecbnh v\u00e0 k\u00edch ho\u1ea1t t\u1ec7p ch\u00fang ta s\u1ebd t\u1ea1o b\u00ean d\u01b0\u1edbi. Sau \u0111\u00f3, Apache \u0111\u01b0\u1ee3c t\u1ea3i l\u1ea1i \u0111\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c thay \u0111\u1ed5i c\u1ea5u h\u00ecnh.<\/li>\n<\/ul>\n<p>2.Th\u00eam ph\u01b0\u01a1ng th\u1ee9c cung c\u1ea5p t\u1eadp l\u1ec7nh shell v\u00e0o Vagrantfile c\u1ee7a b\u1ea1n, b\u00ean d\u01b0\u1edbi d\u00f2ng tham chi\u1ebfu&nbsp;<code>setup.sh<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n...\n\n  # Shell Scripts\n  config.vm.provision :shell, path: \"setup.sh\"\n  config.vm.provision :shell, path: \"apache.sh\"\n\nend<\/code><\/pre>\n<p>3.T\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c m\u1edbi cho c\u00e1c t\u1eadp tin c\u1ea5u h\u00ecnh Apache:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir apache2\n<\/code><\/pre>\n<p>4.V\u00ec Vagrant th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n, ch\u00fang t\u00f4i mu\u1ed1n l\u01b0u tr\u1eef Apache tr\u00ean m\u1ed9t c\u1ed5ng kh\u00e1c ngo\u00e0i 80. T\u1ea1o&nbsp;<code>ports1.conf<\/code>, nh\u01b0 \u0111\u01b0\u1ee3c tham chi\u1ebfu trong t\u1eadp l\u1ec7nh shell \u1edf tr\u00ean. C\u1ed5ng s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh&nbsp;<strong>6789<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>Listen 6789\n\n&lt;IfModule ssl_module&gt;\n        Listen 443\n&lt;\/IfModule&gt;\n\n&lt;IfModule mod_gnutls.c&gt;\n        Listen 443\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>5.T\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c m\u1edbi c\u00f3&nbsp;<code>apache2<\/code>t\u00ean l\u00e0&nbsp;<code>sites-available<\/code>. Th\u00eam t\u1ec7p VirtualHosts,&nbsp;<code>vhost.conf<\/code>, v\u00e0o th\u01b0 m\u1ee5c m\u1edbi n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir sites-available\n<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:6789&gt;\n        ServerAdmin webmaster@localhost\n        DocumentRoot \/var\/www\/html\n        ErrorLog ${APACHE_LOG_DIR}\/error.log\n        CustomLog ${APACHE_LOG_DIR}\/access.log combined\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<p>6.Quay l\u1ea1i Vagrantfile v\u00e0 s\u1eed d\u1ee5ng&nbsp;<code>config.vm.synced_folder<\/code>ph\u01b0\u01a1ng ph\u00e1p \u0111\u1ec3 \u0111\u1ed3ng b\u1ed9 c\u00e1c th\u01b0 m\u1ee5c c\u1ee5c b\u1ed9 v\u1edbi c\u00e1c th\u01b0 m\u1ee5c tr\u00ean m\u00e1y ch\u1ee7:<\/p>\n<pre class=\"wp-block-code\"><code>Vagrant.configure('2') do |config|\n\n  ...\n\n  # Synced Folders\n  config.vm.synced_folder '.', '\/vagrant', disabled: true\n  config.vm.synced_folder '.\/apache2', '\/etc\/apache2', disabled: false\n  config.vm.synced_folder '.\/webfiles', '\/var\/www\/html'\n\nend<\/code><\/pre>\n<ul>\n<li>D\u00f2ng 5 v\u00f4 hi\u1ec7u h\u00f3a \u0111\u1ed3ng b\u1ed9 h\u00f3a cho c\u00e1c th\u01b0 m\u1ee5c g\u1ed1c.<\/li>\n<li>D\u00f2ng 6 \u0111\u1ecbnh ngh\u0129a&nbsp;<code>apache2<\/code>th\u01b0 m\u1ee5c \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef c\u1ee5c b\u1ed9 (&nbsp;<code>'.\/apache2'<\/code>) v\u00e0 li\u00ean k\u1ebft n\u00f3 v\u1edbi&nbsp;<code>\/etc\/apache2<\/code>th\u01b0 m\u1ee5c tr\u00ean Linode.&nbsp;<code>disabled: false<\/code>\u0111\u1ea3m b\u1ea3o r\u1eb1ng n\u00f3 s\u1ebd \u0111\u1ed3ng b\u1ed9.<\/li>\n<li>D\u00f2ng 7 th\u1ef1c hi\u1ec7n t\u01b0\u01a1ng t\u1ef1 v\u1edbi th\u01b0 m\u1ee5c ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o&nbsp;<code>.\/webfiles<\/code>c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 th\u00eam b\u1ea5t k\u1ef3 t\u1ec7p trang web n\u00e0o tr\u01b0\u1edbc khi kh\u1edfi \u0111\u1ed9ng phi\u00ean b\u1ea3n.<\/li>\n<\/ul>\n<p>7.T\u1ea1o&nbsp;<code>webfiles<\/code>th\u01b0 m\u1ee5c trong&nbsp;<code>vagrant-linode<\/code>th\u01b0 m\u1ee5c c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir ~\/vagrant-linode\/webfiles\n<\/code><\/pre>\n<p>Th\u00eam v\u00e0o th\u01b0 m\u1ee5c n\u00e0y b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o b\u1ea1n mu\u1ed1n Linode ph\u1ee5c v\u1ee5 qua HTTP.<\/p>\n<h2 id=\"boot-an-instance\">Kh\u1edfi \u0111\u1ed9ng m\u1ed9t phi\u00ean b\u1ea3n<a href=\"https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/#boot-an-instance\"><\/a><\/h2>\n<p>Sau khi c\u1ea5u h\u00ecnh Vagrantfile v\u00e0 t\u1ea1o c\u00e1c t\u1eadp l\u1ec7nh v\u00e0 t\u1ec7p, gi\u1edd l\u00e0 l\u00fac t\u1ea1o m\u00e1y kh\u00e1ch v\u00e0 ki\u1ec3m tra xem n\u00f3 c\u00f3 ch\u1ea1y b\u00ecnh th\u01b0\u1eddng kh\u00f4ng.<\/p>\n<p>1.T\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, h\u00e3y kh\u1edfi \u0111\u1ed9ng phi\u00ean b\u1ea3n:<\/p>\n<pre class=\"wp-block-code\"><code>vagrant up\n<\/code><\/pre>\n<p>N\u00f3 s\u1ebd ch\u1ea1y qua qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t, \u0111\u1ed3ng b\u1ed9 h\u00f3a c\u00e1c th\u01b0 m\u1ee5c v\u00e0 ch\u1ea1y c\u00e1c t\u1eadp l\u1ec7nh shell.<\/p>\n<p>2.\u0110\u0103ng nh\u1eadp v\u00e0o Linode m\u1edbi t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>vagrant ssh\n<\/code><\/pre>\n<p>3.\u0110\u1ec3 \u0111\u1ea3m b\u1ea3o Apache \u0111ang ch\u1ea1y \u0111\u00fang c\u00e1ch, h\u00e3y ki\u1ec3m tra tr\u1ea1ng th\u00e1i:<\/p>\n<pre class=\"wp-block-code\"><code>service apache2 status\n<\/code><\/pre>\n<p>N\u00f3 s\u1ebd cho ra k\u1ebft qu\u1ea3:<\/p>\n<pre class=\"wp-block-code\"><code> * apache2 is running\n<\/code><\/pre>\n<p>4.\u0110\u1ec3 bi\u1ebft m\u00f4i tr\u01b0\u1eddng c\u00f3 th\u1ec3 truy c\u1eadp tr\u1ef1c tuy\u1ebfn hay kh\u00f4ng, h\u00e3y ki\u1ec3m tra \u0111\u1ecba ch\u1ec9 IP:<\/p>\n<pre class=\"wp-block-code\"><code>hostname -i\n<\/code><\/pre>\n<p>Sau \u0111\u00f3, h\u00e3y v\u00e0o tr\u00ecnh duy\u1ec7t web b\u1ea1n ch\u1ecdn v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP c\u1ee7a b\u1ea1n v\u1edbi&nbsp;<code>:6789<\/code>ph\u1ea7n th\u00eam v\u00e0o cu\u1ed1i. B\u1ea1n s\u1ebd th\u1ea5y Trang m\u1eb7c \u0111\u1ecbnh c\u1ee7a Apache2 Ubuntu.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa:<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">N\u1ebfu b\u1ea1n mu\u1ed1n t\u1eaft ho\u1eb7c x\u00f3a Linode kh\u1ecfi kh\u00f4ng gian l\u00e0m vi\u1ec7c c\u1ee7a m\u00ecnh, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n th\u00f4ng qua m\u1ed9t trong c\u00e1c l\u1ec7nh sau:<\/p>\n<ul>\n<li><code>vagrant halt<\/code>s\u1ebd t\u1eaft ngu\u1ed3n Linode th\u00f4ng qua c\u01a1 ch\u1ebf t\u1eaft m\u00e1y. Sau \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y&nbsp;<code>vagrant up<\/code>l\u1ea1i \u0111\u1ec3 b\u1eadt ngu\u1ed3n Linode.<\/li>\n<li><code>vagrant destroy<\/code>s\u1ebd x\u00f3a ho\u00e0n to\u00e0n Linode kh\u1ecfi t\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n, x\u00f3a m\u1ecdi th\u1ee9 \u0111\u01b0\u1ee3c t\u1ea1o trong qu\u00e1 tr\u00ecnh Vagrant up ho\u1eb7c \u0111\u01b0\u1ee3c th\u00eam v\u00e0o m\u00e1y ch\u1ee7 sau n\u00e0y.<\/li>\n<\/ul>\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.vagrantup.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">k\u1ebb lang thang<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/displague\/vagrant-linode\" target=\"_blank\" rel=\"noreferrer noopener\">Plugin vagrant-linode<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/vagrant-linode-environments\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vagrant&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng t\u1ea1o ra c\u00e1c m\u00f4i tr\u01b0\u1eddng l\u00e0m vi\u1ec7c di \u0111\u1ed9ng v\u00e0 c\u00f3 th\u1ec3 t\u00e1i t\u1ea1o. Vagrant n\u1ed5i tr\u1ed9i trong vi\u1ec7c cung c\u1ea5p c\u00e1c m\u00e1y ch\u1ee7 nh\u1ea5t qu\u00e1n, d\u1ec5 c\u1ea5u h\u00ecnh c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 duy tr\u00ec m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n nh\u1ea5t qu\u00e1n<\/p>\n","protected":false},"author":1,"featured_media":36207,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[127],"tags":[],"class_list":["post-35020","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vagrant"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35020","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=35020"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35020\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36207"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}