{"id":42587,"date":"2023-10-21T13:34:03","date_gmt":"2022-12-13T12:58:11","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/"},"modified":"2024-01-15T11:27:50","modified_gmt":"2024-01-15T03:27:50","slug":"%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","title":{"rendered":"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>Docker\u771f\u4e0d\u9519\u554a\u54c8\u54c8<\/p>\n<p>\u5c3d\u7ba1\u5927\u5bb6\u666e\u904d\u90fd\u77e5\u9053\u5bb9\u5668\u865a\u62df\u5316\u8f6f\u4ef6\u5177\u6709\u8f7b\u91cf\u7ea7\u7684\u4f18\u70b9\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u8fd8\u662f\u4f1a\u9009\u62e9\u4e3b\u673a\u865a\u62df\u5316\u3002<\/p>\n<p>\u6211\u60f3\u6df1\u5165\u63a2\u8ba8\u4e00\u4e0b\u4f7f\u7528VirtualBox + Vagrant\u914d\u7f6e\u5e76\u6267\u884cvagrant up\u7684\u8fc7\u7a0b\u3002<\/p>\n<h1>\u8fd0\u884c\u73af\u5883<\/h1>\n<h2>\u4e3b\u673a<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">macOS: 10.15.7<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Virtualbox: 6.0.22<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Vagrant: 2.2.9<\/ul>\n<\/li>\n<\/ul>\n<p>vagrant-s3auth: 1.3.2<\/p>\n<p>Packer: 1.4.5<\/p>\n<p>packer-post-processor-vagrant-s3: 1.4.0<\/p>\n<p>Ansible: 2.9.2<\/p>\n<h2>\u8bf7\u7528\u4e2d\u6587\u539f\u751f\u8bed\u8a00\u8f6c\u8ff0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u53ea\u9700\u63d0\u4f9b\u4e00\u4e2a\u9009\u9879\uff1a<\/h2>\n<p>\u8bbf\u5ba2\u673a<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CentOS: 7.8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Nginx: 1.18.0<\/ul>\n<h1>\u6700\u7ec8\u7684\u76ee\u5f55\u7ed3\u6784<\/h1>\n<pre class=\"post-pre\"><code>operation\r\n\u251c\u2500\u2500 ansible\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 development\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 group_vars\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 all.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 host_vars\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 all.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 hosts.yml\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 production\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 roles\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 nginx\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 defaults\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 files\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 development\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 production\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 staging\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 handlers\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 tasks\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 templates\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 development\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 production\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 staging\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 tests\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 inventory\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 test.yml\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 vars\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 main.yml\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 site.yml\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 staging\r\n\u2502\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u251c\u2500\u2500 packer\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 development\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 http\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 kickstart.ks\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 template.json\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 production\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 staging\r\n\u2502\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 .gitkeep\r\n\u2514\u2500\u2500 vagrant\r\n\u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 Vagrantfile\r\n\r\n<\/code><\/pre>\n<h1>\u5e73\u5e38\u7684<\/h1>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/vagrant <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">cd <\/span>operation\/vagrant\r\n<span class=\"gp\">$<\/span> vagrant init\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'Vagrant.configure(\"2\") do |config|\r\n<\/span><span class=\"go\">  config.vm.box = \"bento\/centos-7.8\"\r\n  config.vm.network \"forwarded_port\", guest: 80, host: 8080, auto_correct: true\r\n  config.vm.network \"private_network\", ip: \"192.168.33.10\"\r\n  config.vm.synced_folder \".\", \"\/vagrant\", disabled: true\r\nend\r\n<\/span><span class=\"gp\">' &gt;<\/span> Vagrantfile\r\n<span class=\"gp\">$<\/span> vagrant up\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u5438\u6536VirtualBox\u590d\u6742\u7684\u542f\u52a8\u9009\u9879\uff0c\u5e76\u4e14\u53ef\u4ee5\u6839\u636e\u6a21\u677f\u5728\u4e00\u6761\u547d\u4ee4\u4e0b\u542f\u52a8\u3002<\/p>\n<h1>\u624b\u52a8\u914d\u7f6e<\/h1>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> vagrant ssh\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">touch<\/span> \/etc\/yum.repos.d\/nginx.repo <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'[nginx-stable]\r\n<\/span><span class=\"go\">name=nginx stable repo\r\n<\/span><span class=\"gp\">baseurl=http:\/\/nginx.org\/packages\/centos\/$<\/span>releasever\/<span class=\"nv\">$basearch<\/span>\/\r\n<span class=\"go\">gpgcheck=1\r\nenabled=1\r\ngpgkey=https:\/\/nginx.org\/keys\/nginx_signing.key\r\nmodule_hotfixes=true\r\n<\/span><span class=\"gp\">' &gt;<\/span> \/etc\/yum.repos.d\/nginx.repo\r\n<span class=\"gp\">$<\/span> yum <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> nginx\r\n<span class=\"gp\">$<\/span> systemctl <span class=\"nb\">enable <\/span>nginx <span class=\"o\">&amp;&amp;<\/span> systemctl start nginx\r\n<\/code><\/pre>\n<p>\u8fde\u63a5\u5230\u865a\u62df\u673a\uff0c\u901a\u8fc7SSH\u624b\u52a8\u6267\u884c\u547d\u4ee4<br \/>\n\u867d\u7136\u7b80\u5355\u4e14\u5b66\u4e60\u6210\u672c\u4f4e\uff0c\u4f46\u53ef\u80fd\u4f1a\u4ea7\u751f\u4eba\u4e3a\u9519\u8bef\u7684\u7a7a\u95f4\u4f59\u5730\u3002<\/p>\n<h1>\u81ea\u52a8\u914d\u7f6e(Ansible)<\/h1>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/ansible <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/development\/hosts_va <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/development\/hosts_all\/all.yml <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/development\/group_all <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/development\/group_all\/all.yml <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/development\/hosts.yml <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/staging\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\r\n<span class=\"gp\">$<\/span> ansible-galaxy init <span class=\"nt\">--init-path<\/span><span class=\"o\">=<\/span>operation\/ansible\/roles nginx\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/files\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/files\/development\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/files\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/files\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/files\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/files\/staging\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/templates\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/templates\/development\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/templates\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/templates\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/nginx\/templates\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/nginx\/templates\/staging\/.gitkeep\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'all:\r\n<\/span><span class=\"go\">  hosts:\r\n    localhost:\r\n        ansible_connection: local\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/development\/hosts.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'- hosts: all\r\n<\/span><span class=\"go\">  become: yes\r\n  roles:\r\n    - nginx\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/site.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'- name: add nginx repository\r\n<\/span><span class=\"go\">  yum_repository:\r\n    file: nginx\r\n    name: nginx-stable\r\n    description: nginx stable repo\r\n<\/span><span class=\"gp\">    baseurl: http:\/\/nginx.org\/packages\/centos\/$<\/span>releasever\/<span class=\"nv\">$basearch<\/span>\r\n<span class=\"go\">    gpgcheck: yes\r\n    gpgkey: https:\/\/nginx.org\/keys\/nginx_signing.key\r\n    enabled: yes\r\n- name: install nginx\r\n  yum:\r\n    name: nginx\r\n- name: service enable and start\r\n  service:\r\n    name: nginx\r\n    state: started\r\n    enabled: yes\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/roles\/nginx\/tasks\/main.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'Vagrant.configure(\"2\") do |config|\r\n<\/span><span class=\"go\">  config.vm.box = \"bento\/centos-7.8\"\r\n  config.vm.network \"forwarded_port\", guest: 80, host: 8080, auto_correct: true\r\n  config.vm.network \"private_network\", ip: \"192.168.33.10\"\r\n  config.vm.synced_folder \"..\/ansible\", \"\/home\/vagrant\/ansible\"\r\n  config.vm.provision :ansible_local do |ansible|\r\n    ansible.install_mode = \"pip\"\r\n    ansible.playbook = \"\/home\/vagrant\/ansible\/site.yml\"\r\n    ansible.inventory_path = \"\/home\/vagrant\/ansible\/development\"\r\n    ansible.limit = \"all\"\r\n  end\r\nend\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/vagrant\/Vagrantfile\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">cd <\/span>operation\/vagrant <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\nvagrant halt <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\nvagrant destroy <span class=\"nt\">-f<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> .vagrant <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\nvagrant up\r\n<\/code><\/pre>\n<p>\u5b89\u88c5\u914d\u7f6e\u7ba1\u7406\u5de5\u5177\u5230\u865a\u62df\u673a\uff0c\u5e76\u6267\u884c\u81ea\u5df1\u7684\u914d\u7f6e\u7ba1\u7406\u3002\u8fd9\u662f\u4e00\u4e2a\u5e38\u89c1\u7684\u914d\u7f6e\uff0c\u4f46\u5728\u914d\u7f6e\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u51fa\u73b0\u6545\u969c\u6392\u9664\u7684\u95ee\u9898\u3002<\/p>\n<h1>\u53ef\u4f9b\u5206\u53d1\u7684\u5f00\u53d1\u73af\u5883\u5b58\u5728\u7684\u95ee\u9898<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u7531\u4e8e\u6bcf\u4e2a\u5f00\u53d1\u8005\u7684\u73af\u5883\u90fd\u8981\u6267\u884c\u4f9b\u5e94\uff0c\u5bfc\u81f4\u610f\u5916\u6545\u969c\u7684\u53ef\u80fd\u6027\u589e\u52a0\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u5f88\u96be\u5c06\u6545\u969c\u6392\u9664\u7684\u7ed3\u679c\u5e94\u7528\u5230\u6574\u4e2a\u7cfb\u7edf\u4e2d\u3002<\/ol>\n<h1>\u4ece\u5206\u53d1\u53ef\u80fd\u5230\u53d1\u5e03\u53ef\u80fd<\/h1>\n<p>\u5c1d\u8bd5\u5c06\u6a21\u677f\u5206\u53d1\u7ed9\u4e2a\u4eba\u8fdb\u884c\u6784\u5efa\u7684\u6d41\u7a0b\uff0c\u66f4\u6539\u4e3a\u5206\u53d1\u9884\u5148\u6784\u5efa\u597d\u7684\u5f00\u53d1\u73af\u5883\u5e76\u542f\u52a8\u7684\u6d41\u7a0b\u3002<\/p>\n<h1>\u521b\u5efa\u548c\u7248\u672c\u63a7\u5236\u9ec4\u91d1\u955c\u50cf<\/h1>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/packer <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/packer\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/packer\/development\/http <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/packer\/development\/http\/kickstart.ks <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/packer\/development\/template.json <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/packer\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/packer\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/packer\/staging\r\n<span class=\"go\">touch operation\/packer\/staging\/.gitkeep\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'{\r\n<\/span><span class=\"go\">  \"variables\": {\r\n    \"environment\": \"development\",\r\n    \"vmName\": \"golden-image\",\r\n    \"vmVersion\": \"1.0.0\",\r\n    \"isoUrl\": \"http:\/\/ftp.riken.jp\/Linux\/centos\/7.8.2003\/isos\/x86_64\/CentOS-7-x86_64-Minimal-2003.iso\",\r\n    \"isoChecksum\": \"659691c28a0e672558b003d223f83938f254b39875ee7559d1a4a14c79173193\",\r\n    \"isoChecksumType\": \"sha256\",\r\n    \"guestAdditionsIsoFileName\": \"VBoxGuestAdditions.iso\",\r\n    \"diskSize\": \"10240\",\r\n    \"homeDirectory\": \"\/home\/vagrant\",\r\n    \"userName\": \"vagrant\",\r\n    \"passWord\": \"vagrant\"\r\n  },\r\n  \"builders\": [\r\n    {\r\n      \"type\": \"virtualbox-iso\",\r\n      \"vm_name\": \"{{user `vmName`}}\",\r\n      \"guest_os_type\": \"RedHat_64\",\r\n      \"iso_url\": \"{{user `isoUrl`}}\",\r\n      \"iso_checksum\": \"{{user `isoChecksum`}}\",\r\n      \"iso_checksum_type\": \"{{user `isoChecksumType`}}\",\r\n      \"http_directory\": \"http\",\r\n      \"guest_additions_path\": \"{{user `homeDirectory`}}\/{{user `guestAdditionsIsoFileName`}}\",\r\n<\/span><span class=\"gp\">      \"boot_command\": \"&lt;tab&gt;<\/span> text <span class=\"nv\">ks<\/span><span class=\"o\">=<\/span>http:\/\/<span class=\"o\">{{<\/span>.HTTPIP<span class=\"o\">}}<\/span>:<span class=\"o\">{{<\/span>.HTTPPort<span class=\"o\">}}<\/span>\/kickstart.ks &lt;enter&gt;<span class=\"s2\">\",\r\n<\/span><span class=\"go\">      \"shutdown_command\": \"echo 'vagrant' | sudo -S shutdown -h now\",\r\n      \"disk_size\": \"{{user `diskSize`}}\",\r\n      \"vboxmanage\": [\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--cpus\", \"2\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--memory\", \"2048\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--chipset\", \"ich9\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--ioapic\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--rtcuseutc\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--pae\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--hwvirtex\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--nestedpaging\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--largepages\", \"on\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--paravirtprovider\", \"kvm\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--vram\", \"9\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--vrde\", \"off\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--graphicscontroller\", \"vboxsvga\"],\r\n        [\"modifyvm\", \"{{ .Name }}\", \"--audio\", \"none\"],\r\n        [\"storagectl\", \"{{ .Name }}\", \"--name\", \"IDE Controller\", \"--controller\", \"ICH6\"]\r\n      ],\r\n      \"headless\": true,\r\n      \"ssh_wait_timeout\": \"10000s\",\r\n      \"ssh_username\": \"{{user `userName`}}\",\r\n      \"ssh_password\": \"{{user `passWord`}}\"\r\n    }\r\n  ],\r\n  \"provisioners\": [\r\n    {\r\n      \"type\": \"ansible\",\r\n      \"playbook_file\": \"..\/..\/ansible\/site.yml\",\r\n      \"inventory_directory\": \"..\/..\/ansible\/{{user `environment`}}\"\r\n    }\r\n  ],\r\n  \"post-processors\": [\r\n    [\r\n      {\r\n        \"type\": \"vagrant\",\r\n        \"compression_level\": 9,\r\n        \"output\": \"{{user `vmName`}}.box\"\r\n      },\r\n      {\r\n        \"type\": \"vagrant-s3\",\r\n        \"region\": \"ap-northeast-1\",\r\n        \"bucket\": \"{{user `environment`}}-virtual-machine-image\",\r\n        \"acl\": \"private\",\r\n        \"profile\": \"default\",\r\n        \"manifest\": \"{{user `vmName`}}\/manifest.json\",\r\n        \"box_dir\": \"{{user `vmName`}}\",\r\n        \"box_name\": \"{{user `vmName`}}.box\",\r\n        \"version\": \"{{user `vmVersion`}}\"\r\n      }\r\n    ]\r\n  ]\r\n}\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/packer\/development\/template.json\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'# Install OS instead of upgrade\r\n<\/span><span class=\"go\">install\r\n\r\n<\/span><span class=\"gp\">#<\/span> Use CDROM installation media\r\n<span class=\"go\">cdrom\r\n\r\n<\/span><span class=\"gp\">#<\/span> System language\r\n<span class=\"go\">lang ja_JP.UTF-8\r\n\r\n<\/span><span class=\"gp\">#<\/span> Keyboard layouts\r\n<span class=\"go\">keyboard jp106\r\n\r\n<\/span><span class=\"gp\">#<\/span> network setting\r\n<span class=\"go\">network --bootproto=dhcp --onboot=on --device=eth0\r\n\r\n<\/span><span class=\"gp\">#<\/span> Firewall configuration\r\n<span class=\"go\">firewall --disabled\r\n\r\n<\/span><span class=\"gp\">#<\/span> SELinux configuration\r\n<span class=\"go\">selinux --disabled\r\n\r\n<\/span><span class=\"gp\">#<\/span> System Timezone\r\n<span class=\"go\">timezone Asia\/Tokyo --utc\r\n\r\n<\/span><span class=\"gp\">#<\/span> System bootloader configuration\r\n<span class=\"go\">bootloader --location=mbr\r\n\r\n<\/span><span class=\"gp\">#<\/span> Use graphical <span class=\"nb\">install<\/span>\r\n<span class=\"go\">text\r\n\r\n<\/span><span class=\"gp\">#<\/span> Do not configure the X Window System\r\n<span class=\"go\">skipx\r\n\r\n<\/span><span class=\"gp\">#<\/span> Clear the Master Boot Record\r\n<span class=\"go\">zerombr\r\n\r\n<\/span><span class=\"gp\">#<\/span> Partition clearing infomation\r\n<span class=\"go\">clearpart --all --initlabel\r\n\r\n<\/span><span class=\"gp\">#<\/span> Diskpartitioning information\r\n<span class=\"go\">autopart\r\n\r\n<\/span><span class=\"gp\">#<\/span> System authorization infomation\r\n<span class=\"go\">auth --useshadow --passalgo=sha512 --kickstart\r\n\r\n<\/span><span class=\"gp\">#<\/span> Root password\r\n<span class=\"gp\">rootpw --iscrypted $<\/span>1<span class=\"nv\">$we3<\/span>.LxeP<span class=\"nv\">$ko6NFF4j8D02bbqgCS80r<\/span><span class=\"nb\">.<\/span>\r\n\r\n<span class=\"gp\">#<\/span> Create user\r\n<span class=\"go\">user --name=vagrant --plaintext --password vagrant\r\n\r\n<\/span><span class=\"gp\">#<\/span> First boot\r\n<span class=\"go\">firstboot --disabled\r\n\r\n<\/span><span class=\"gp\">#<\/span> Machine reboot\r\n<span class=\"go\">reboot --eject\r\n\r\n%post\r\n<\/span><span class=\"gp\">echo \"%vagrant ALL=(ALL) NOPASSWD: ALL\" &gt;<\/span><span class=\"o\">&gt;<\/span> \/etc\/sudoers.d\/vagrant\r\n<span class=\"go\">chmod 0440 \/etc\/sudoers.d\/vagrant\r\nyum update -y --exclude=centos*\r\n%end\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/packer\/development\/http\/kickstart.ks\r\n<span class=\"gp\">$<\/span> : <span class=\"o\">&gt;<\/span> operation\/ansible\/development\/hosts.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'- hosts: all\r\n<\/span><span class=\"go\">  become: yes\r\n  roles:\r\n    - common\r\n    - {\r\n        role: guest_additions,\r\n        when: targetEnvironment == \"development\"\r\n    }\r\n    - nginx\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/site.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'targetEnvironment: development\r\n<\/span><span class=\"go\">userName: vagrant\r\nuserGroup: vagrant\r\nhomeDirectory: \/home\/vagrant\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/development\/group_vars\/all.yml\r\n<span class=\"gp\">$<\/span> ansible-galaxy init <span class=\"nt\">--init-path<\/span><span class=\"o\">=<\/span>operation\/ansible\/roles common\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/files\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/files\/development\/sshd_config <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/files\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/files\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/files\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/files\/staging\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/templates\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/templates\/development\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/templates\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/templates\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/common\/templates\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/common\/templates\/staging\/.gitkeep\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'- name: create .ssh\r\n<\/span><span class=\"go\">  file:\r\n    path: \"{{ homeDirectory }}\/.ssh\"\r\n    state: directory\r\n    owner: \"{{ userName }}\"\r\n    group: \"{{ userGroup }}\"\r\n    mode: 0700\r\n\r\n- name: set authorized_keys\r\n  copy:\r\n    src: \"{{ targetEnvironment }}\/authorized_keys\"\r\n    dest: \"{{ homeDirectory }}\/.ssh\"\r\n    owner: \"{{ userName }}\"\r\n    group: \"{{ userGroup }}\"\r\n    mode: 0600\r\n\r\n- name: set sshd_config\r\n  copy:\r\n    src: \"{{ targetEnvironment }}\/sshd_config\"\r\n    dest: \/etc\/ssh\r\n    owner: root\r\n    group: root\r\n    mode: 0600\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/roles\/common\/tasks\/main.yml\r\n<span class=\"gp\">$<\/span> wget https:\/\/raw.githubusercontent.com\/hashicorp\/vagrant\/master\/keys\/vagrant.pub <span class=\"nt\">-O<\/span> operation\/ansible\/roles\/common\/files\/development\/authorized_keys\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'#    $OpenBSD: sshd_config,v 1.100 2016\/08\/15 12:32:04 naddy Exp $\r\n<\/span>\r\n<span class=\"gp\">#<\/span> This is the sshd server system-wide configuration file.  See\r\n<span class=\"gp\">#<\/span> sshd_config<span class=\"o\">(<\/span>5<span class=\"o\">)<\/span> <span class=\"k\">for <\/span>more information.\r\n\r\n<span class=\"gp\">#<\/span> This sshd was compiled with <span class=\"nv\">PATH<\/span><span class=\"o\">=<\/span>\/usr\/local\/bin:\/usr\/bin\r\n\r\n<span class=\"gp\">#<\/span> The strategy used <span class=\"k\">for <\/span>options <span class=\"k\">in <\/span>the default sshd_config shipped with\r\n<span class=\"gp\">#<\/span> OpenSSH is to specify options with their default value where\r\n<span class=\"gp\">#<\/span> possible, but leave them commented.  Uncommented options override the\r\n<span class=\"gp\">#<\/span> default value.\r\n\r\n<span class=\"gp\">#<\/span> If you want to change the port on a SELinux system, you have to tell\r\n<span class=\"gp\">#<\/span> SELinux about this change.\r\n<span class=\"gp\">#<\/span> semanage port <span class=\"nt\">-a<\/span> <span class=\"nt\">-t<\/span> ssh_port_t <span class=\"nt\">-p<\/span> tcp <span class=\"c\">#PORTNUMBER<\/span>\r\n<span class=\"gp\">#<\/span>\r\n<span class=\"gp\">#<\/span>Port 22\r\n<span class=\"gp\">#<\/span>AddressFamily any\r\n<span class=\"gp\">#<\/span>ListenAddress 0.0.0.0\r\n<span class=\"gp\">#<\/span>ListenAddress ::\r\n<span class=\"go\">\r\nHostKey \/etc\/ssh\/ssh_host_rsa_key\r\n<\/span><span class=\"gp\">#<\/span>HostKey \/etc\/ssh\/ssh_host_dsa_key\r\n<span class=\"go\">HostKey \/etc\/ssh\/ssh_host_ecdsa_key\r\nHostKey \/etc\/ssh\/ssh_host_ed25519_key\r\n\r\n<\/span><span class=\"gp\">#<\/span> Ciphers and keying\r\n<span class=\"gp\">#<\/span>RekeyLimit default none\r\n\r\n<span class=\"gp\">#<\/span> Logging\r\n<span class=\"gp\">#<\/span>SyslogFacility AUTH\r\n<span class=\"go\">SyslogFacility AUTHPRIV\r\n<\/span><span class=\"gp\">#<\/span>LogLevel INFO\r\n\r\n<span class=\"gp\">#<\/span> Authentication:\r\n\r\n<span class=\"gp\">#<\/span>LoginGraceTime 2m\r\n<span class=\"gp\">#<\/span>PermitRootLogin <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>StrictModes <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>MaxAuthTries 6\r\n<span class=\"gp\">#<\/span>MaxSessions 10\r\n<span class=\"go\">\r\nPubkeyAuthentication yes\r\n\r\n<\/span><span class=\"gp\">#<\/span> The default is to check both .ssh\/authorized_keys and .ssh\/authorized_keys2\r\n<span class=\"gp\">#<\/span> but this is overridden so installations will only check .ssh\/authorized_keys\r\n<span class=\"go\">AuthorizedKeysFile  .ssh\/authorized_keys\r\n\r\n<\/span><span class=\"gp\">#<\/span>AuthorizedPrincipalsFile none\r\n\r\n<span class=\"gp\">#<\/span>AuthorizedKeysCommand none\r\n<span class=\"gp\">#<\/span>AuthorizedKeysCommandUser nobody\r\n\r\n<span class=\"gp\">#<\/span> For this to work you will also need host keys <span class=\"k\">in<\/span> \/etc\/ssh\/ssh_known_hosts\r\n<span class=\"gp\">#<\/span>HostbasedAuthentication no\r\n<span class=\"gp\">#<\/span> Change to <span class=\"nb\">yes <\/span><span class=\"k\">if <\/span>you don<span class=\"s2\">\"t trust ~\/.ssh\/known_hosts for\r\n<\/span><span class=\"gp\">#<\/span> <span class=\"s2\">HostbasedAuthentication\r\n<\/span><span class=\"gp\">#<\/span><span class=\"s2\">IgnoreUserKnownHosts no\r\n<\/span><span class=\"gp\">#<\/span> <span class=\"s2\">Don\"<\/span>t <span class=\"nb\">read <\/span>the user<span class=\"s2\">\"s ~\/.rhosts and ~\/.shosts files\r\n<\/span><span class=\"gp\">#<\/span><span class=\"s2\">IgnoreRhosts yes\r\n<\/span>\r\n<span class=\"gp\">#<\/span> To disable tunneled clear text passwords, change to no here!\r\n<span class=\"gp\">#<\/span>PasswordAuthentication <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>PermitEmptyPasswords no\r\n<span class=\"go\">PasswordAuthentication yes\r\n\r\n<\/span><span class=\"gp\">#<\/span> Change to no to disable s\/key passwords\r\n<span class=\"gp\">#<\/span>ChallengeResponseAuthentication <span class=\"nb\">yes<\/span>\r\n<span class=\"go\">ChallengeResponseAuthentication no\r\n\r\n<\/span><span class=\"gp\">#<\/span> Kerberos options\r\n<span class=\"gp\">#<\/span>KerberosAuthentication no\r\n<span class=\"gp\">#<\/span>KerberosOrLocalPasswd <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>KerberosTicketCleanup <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>KerberosGetAFSToken no\r\n<span class=\"gp\">#<\/span>KerberosUseKuserok <span class=\"nb\">yes<\/span>\r\n\r\n<span class=\"gp\">#<\/span> GSSAPI options\r\n<span class=\"go\">GSSAPIAuthentication no\r\nGSSAPICleanupCredentials no\r\n<\/span><span class=\"gp\">#<\/span>GSSAPIStrictAcceptorCheck <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>GSSAPIKeyExchange no\r\n<span class=\"gp\">#<\/span>GSSAPIEnablek5users no\r\n\r\n<span class=\"gp\">#<\/span> Set this to <span class=\"s2\">\"yes\"<\/span> to <span class=\"nb\">enable <\/span>PAM authentication, account processing,\r\n<span class=\"gp\">#<\/span> and session processing. If this is enabled, PAM authentication will\r\n<span class=\"gp\">#<\/span> be allowed through the ChallengeResponseAuthentication and\r\n<span class=\"gp\">#<\/span> PasswordAuthentication.  Depending on your PAM configuration,\r\n<span class=\"gp\">#<\/span> PAM authentication via ChallengeResponseAuthentication may bypass\r\n<span class=\"gp\">#<\/span> the setting of <span class=\"s2\">\"PermitRootLogin without-password\"<\/span><span class=\"nb\">.<\/span>\r\n<span class=\"gp\">#<\/span> If you just want the PAM account and session checks to run without\r\n<span class=\"gp\">#<\/span> PAM authentication, <span class=\"k\">then <\/span><span class=\"nb\">enable <\/span>this but <span class=\"nb\">set <\/span>PasswordAuthentication\r\n<span class=\"gp\">#<\/span> and ChallengeResponseAuthentication to <span class=\"s2\">\"no\"<\/span><span class=\"nb\">.<\/span>\r\n<span class=\"gp\">#<\/span> WARNING: <span class=\"s2\">\"UsePAM no\"<\/span> is not supported <span class=\"k\">in <\/span>Red Hat Enterprise Linux and may cause several\r\n<span class=\"gp\">#<\/span> problems.\r\n<span class=\"go\">UsePAM yes\r\n\r\n<\/span><span class=\"gp\">#<\/span>AllowAgentForwarding <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>AllowTcpForwarding <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>GatewayPorts no\r\n<span class=\"go\">X11Forwarding yes\r\n<\/span><span class=\"gp\">#<\/span>X11DisplayOffset 10\r\n<span class=\"gp\">#<\/span>X11UseLocalhost <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>PermitTTY <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>PrintMotd <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>PrintLastLog <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>TCPKeepAlive <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>UseLogin no\r\n<span class=\"gp\">#<\/span>UsePrivilegeSeparation sandbox\r\n<span class=\"gp\">#<\/span>PermitUserEnvironment no\r\n<span class=\"gp\">#<\/span>Compression delayed\r\n<span class=\"gp\">#<\/span>ClientAliveInterval 0\r\n<span class=\"gp\">#<\/span>ClientAliveCountMax 3\r\n<span class=\"gp\">#<\/span>ShowPatchLevel no\r\n<span class=\"gp\">#<\/span>UseDNS <span class=\"nb\">yes<\/span>\r\n<span class=\"gp\">#<\/span>PidFile \/var\/run\/sshd.pid\r\n<span class=\"gp\">#<\/span>MaxStartups 10:30:100\r\n<span class=\"gp\">#<\/span>PermitTunnel no\r\n<span class=\"gp\">#<\/span>ChrootDirectory none\r\n<span class=\"gp\">#<\/span>VersionAddendum none\r\n\r\n<span class=\"gp\">#<\/span> no default banner path\r\n<span class=\"gp\">#<\/span>Banner none\r\n\r\n<span class=\"gp\">#<\/span> Accept locale-related environment variables\r\n<span class=\"go\">AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES\r\nAcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT\r\nAcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE\r\nAcceptEnv XMODIFIERS\r\n\r\n<\/span><span class=\"gp\">#<\/span> override default of no subsystems\r\n<span class=\"go\">Subsystem   sftp    \/usr\/libexec\/openssh\/sftp-server\r\n\r\n<\/span><span class=\"gp\">#<\/span> Example of overriding settings on a per-user basis\r\n<span class=\"gp\">#<\/span>Match User anoncvs\r\n<span class=\"gp\">#<\/span>   X11Forwarding no\r\n<span class=\"gp\">#<\/span>   AllowTcpForwarding no\r\n<span class=\"gp\">#<\/span>   PermitTTY no\r\n<span class=\"gp\">#<\/span>   ForceCommand cvs server\r\n<span class=\"go\">UseDNS no\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/roles\/common\/files\/development\/sshd_config\r\n<span class=\"gp\">$<\/span> ansible-galaxy init <span class=\"nt\">--init-path<\/span><span class=\"o\">=<\/span>operation\/ansible\/roles guest_additions\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/files\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/files\/development\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/files\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/files\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/files\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/files\/staging\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/templates\/development <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/templates\/development\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/templates\/production <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/templates\/production\/.gitkeep <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">mkdir <\/span>operation\/ansible\/roles\/guest_additions\/templates\/staging <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">touch <\/span>operation\/ansible\/roles\/guest_additions\/templates\/staging\/.gitkeep\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'- name: get kernel version\r\n<\/span><span class=\"go\">  shell: uname -r\r\n  register: kernelVersion\r\n\r\n- name: install guest additions requirement\r\n  yum:\r\n    name: \"{{ packages }}\"\r\n  vars:\r\n    packages: \"{{ guestAdditionsRequirementPackageList }}\"\r\n\r\n- name: create mount directory\r\n  file:\r\n    path: \"{{ guestAdditionsPath }}\"\r\n    state: directory\r\n    owner: root\r\n    group: root\r\n    mode: 0700\r\n\r\n- name: mount guest additions\r\n  mount:\r\n    path: \"{{ guestAdditionsPath }}\"\r\n    src: \"{{ homeDirectory }}\/{{ guestAdditionsIsoFileName }}\"\r\n    state: mounted\r\n    opts: ro,loop\r\n    fstype: iso9660\r\n\r\n- name: install guest additions\r\n  shell: \"sh {{ guestAdditionsInstallerFileName }}\"\r\n  args:\r\n    chdir: \"{{ guestAdditionsPath }}\"\r\n\r\n- name: unmount guest additions\r\n  mount:\r\n    path: \"{{ guestAdditionsPath }}\"\r\n    src: \"{{ homeDirectory }}\/{{ guestAdditionsIsoFileName }}\"\r\n    state: absent\r\n\r\n- name: service start and enable vboxadd\r\n  service:\r\n    name: \"{{ item }}\"\r\n    state: started\r\n    enabled: yes\r\n  with_items: \"{{ guestAdditionsService }}\"\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/roles\/guest_additions\/tasks\/main.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'guestAdditionsRequirementPackageList:\r\n<\/span><span class=\"go\">  - gcc\r\n  - make\r\n  - perl\r\n  - bzip2\r\n  - \"kernel-devel-{{ kernelVersion.stdout }}\"\r\nguestAdditionsPath: \/tmp\/guest_additions\r\nguestAdditionsIsoFileName: VBoxGuestAdditions.iso\r\nguestAdditionsInstallerFileName: VBoxLinuxAdditions.run\r\nguestAdditionsService:\r\n  - vboxadd\r\n  - vboxadd-service\r\n<\/span><span class=\"gp\">' &gt;<\/span> operation\/ansible\/roles\/guest_additions\/vars\/main.yml\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">cd <\/span>operation\/packer\/development <span class=\"o\">&amp;&amp;<\/span> packer build template.json\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u6839\u636e\u81ea\u52a8\u914d\u7f6e\uff08Ansible\uff09\u8fdb\u884c\u8c03\u6574\uff0c<br \/>\n\u4f7f\u7528ansible-local\u53ef\u80fd\u66f4\u597d&#8230;orz<\/p>\n<p>\u57fa\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6620\u50cf\u6587\u4ef6\uff0c\u4f7f\u7528Kickstart\u81ea\u52a8\u8bbe\u7f6e\u865a\u62df\u673a\u3002<br \/>\n\u542f\u52a8\u540e\uff0c\u4f7f\u7528\u914d\u7f6e\u7ba1\u7406\u5de5\u5177\u8fdb\u884c\u914d\u7f6e\uff0c\u5e76\u5c06\u5176\u4f5c\u4e3avagrant\u7684box\u6587\u4ef6\u8f93\u51fa\uff0c\u7136\u540e\u4e0a\u4f20\u81f3S3\u3002<\/p>\n<h1>\u542f\u52a8\u5df2\u4f20\u9001\u7684\u5f00\u53d1\u73af\u5883\u3002<\/h1>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">cd <\/span>operation\/vagrant\r\n<span class=\"gp\">$<\/span> vagrant halt <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\nvagrant destroy <span class=\"nt\">-f<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> .vagrant\r\n<span class=\"gp\">$<\/span> <span class=\"nb\">echo<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'ENV.delete_if { |name| name.start_with?(\"AWS_\") }\r\n<\/span><span class=\"go\">ENV[\"AWS_PROFILE\"] = \"default\"\r\n\r\nVagrant.configure(\"2\") do |config|\r\n  config.vm.box = \"golden-image.box\"\r\n  config.vm.box_url = \"https:\/\/s3-ap-northeast-1.amazonaws.com\/development-virtual-machine-image\/golden-image\/manifest.json\"\r\n  config.vm.network \"forwarded_port\", guest: 80, host: 8080, auto_correct: true\r\n  config.vm.network \"private_network\", ip: \"192.168.33.10\"\r\n  config.vm.synced_folder \".\", \"\/vagrant\", disabled: true\r\n  config.vm.provider :virtualbox do |vbox|\r\n    vbox.name = \"golden-image\"\r\n  end\r\nend\r\n<\/span><span class=\"gp\">' &gt;<\/span> Vagrantfile\r\n<span class=\"gp\">$<\/span> vagrant up\r\n<\/code><\/pre>\n<p>\u6839\u636e S3 \u4e0a\u7684\u6e05\u5355\uff0c\u6b63\u5728\u4e0b\u8f7d\u5e76\u542f\u52a8\u6307\u5b9a\u7684\u76d2\u5b50\u6587\u4ef6\u3002\u5982\u679c\u672a\u6307\u5b9a\u7248\u672c\uff0c\u5219\u4f1a\u4e0b\u8f7d\u6700\u65b0\u7248\u672c\u7684\u76d2\u5b50\u6587\u4ef6\uff1b\u5982\u679c\u6307\u5b9a\u4e86\u7248\u672c\uff0c\u5219\u4f1a\u4e0b\u8f7d\u76f8\u5e94\u7248\u672c\u7684\u76d2\u5b50\u6587\u4ef6\u3002<\/p>\n<h1>\u597d\u5904<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u53ea\u9700\u8981\u542f\u52a8\u5df2\u7ecf\u8fdb\u884c\u4e86\u914d\u7f6e\u7ba1\u7406\u7684box\u6587\u4ef6\uff0c\u56e0\u6b64\u51fa\u73b0\u9519\u8bef\u7684\u53ef\u80fd\u6027\u5f88\u5c0f\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5bb9\u6613\u53cd\u6620\u6545\u969c\u6392\u9664\u7684\u7ed3\u679c\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u80fd\u591f\u660e\u786e\u5b9a\u4e49Dev\u548cOps\u7684\u89d2\u8272\uff0c\u4f7f\u4ed6\u4eec\u53ef\u4ee5\u5728\u5404\u81ea\u64c5\u957f\u7684\u9886\u57df\u4e2d\u6218\u6597\u3002<\/ol>\n<h1>\u574f\u7684\u5730\u65b9 de<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u7531\u4e8e\u9700\u8981\u4f7f\u7528AWS-S3\uff0c\u4f1a\u4ea7\u751f\u5c11\u91cf\u7684\u8d39\u7528\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u7531\u4e8e\u4f9d\u8d56\u7b2c\u4e09\u65b9\u63d2\u4ef6\uff0c\u56e0\u6b64\u53d6\u51b3\u4e8e\u63d0\u4f9b\u65b9\u7684\u5f00\u53d1\u72b6\u51b5\u3002<\/ol>\n<h1>\u9644\u8a00<\/h1>\n<p>\u69cb\u5efa\u6b64\u914d\u7f6e\u6642\uff0c\u6211\u4e0d\u77e5\u9053\u53ef\u4ee5\u5728\u8bbe\u7f6e\u6587\u4ef6\u4e2d\u81ea\u52a8\u542f\u52a8\u64cd\u4f5c\u7cfb\u7edf\uff0c\u6240\u4ee5\u6211\u9047\u5230\u4e86\u5f88\u5927\u7684\u56f0\u96be&#8230; \u54c8\u54c8<br \/>\n\u9806\u4fbf\u63d0\u4e00\u4e0b\uff0c\u5728Ubuntu\u7684\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u5c06preseed\u4e0a\u4f20\u5230\u865a\u62df\u673a\u5e76\u8fdb\u884c\u8bbe\u7f6e\u3002<\/p>\n<p>\u65e2\u7136\u4f7f\u7528 Docker \u4e5f\u80fd\u505a\u7c7b\u4f3c\u7684\u4e8b\u60c5\uff0c\u6240\u4ee5\u65e0\u8bba\u9009\u62e9\u54ea\u4e2a\u90fd\u53ef\u4ee5\u5c1d\u8bd5\u5e76\u4eab\u53d7\u4e50\u8da3\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 Docker\u771f\u4e0d\u9519\u554a\u54c8\u54c8 \u5c3d\u7ba1\u5927\u5bb6\u666e\u904d\u90fd\u77e5\u9053\u5bb9\u5668\u865a\u62df\u5316\u8f6f\u4ef6\u5177\u6709\u8f7b\u91cf\u7ea7\u7684\u4f18\u70b9\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u8fd8\u662f\u4f1a\u9009 [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-42587","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-aws-s3-packer-ansible-vagrant-\u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 Docker\u771f\u4e0d\u9519\u554a\u54c8\u54c8 \u5c3d\u7ba1\u5927\u5bb6\u666e\u904d\u90fd\u77e5\u9053\u5bb9\u5668\u865a\u62df\u5316\u8f6f\u4ef6\u5177\u6709\u8f7b\u91cf\u7ea7\u7684\u4f18\u70b9\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u8fd8\u662f\u4f1a\u9009 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-aws-s3-packer-ansible-vagrant-\u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-13T12:58:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-15T03:27:50+00:00\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\",\"name\":\"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-13T12:58:11+00:00\",\"dateModified\":\"2024-01-15T03:27:50+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-aws-s3-packer-ansible-vagrant-\u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883","og_description":"\u9996\u5148 Docker\u771f\u4e0d\u9519\u554a\u54c8\u54c8 \u5c3d\u7ba1\u5927\u5bb6\u666e\u904d\u90fd\u77e5\u9053\u5bb9\u5668\u865a\u62df\u5316\u8f6f\u4ef6\u5177\u6709\u8f7b\u91cf\u7ea7\u7684\u4f18\u70b9\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u8fd8\u662f\u4f1a\u9009 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-aws-s3-packer-ansible-vagrant-\u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-13T12:58:11+00:00","article_modified_time":"2024-01-15T03:27:50+00:00","author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"11 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/","name":"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-13T12:58:11+00:00","dateModified":"2024-01-15T03:27:50+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528 AWS-S3 + Packer + Ansible + Vagrant \u6765\u6784\u5efa\u53ef\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u7684\u5f00\u53d1\u73af\u5883"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-aws-s3-packer-ansible-vagrant-%e6%9d%a5%e6%9e%84%e5%bb%ba%e5%8f%af%e8%bf%9b%e8%a1%8c%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86%e7%9a%84%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42587","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=42587"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42587\/revisions"}],"predecessor-version":[{"id":59048,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42587\/revisions\/59048"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=42587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=42587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=42587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}