github 地址, 下面部分部署有误,以 github 为准
之前都使用公司封装好的 ansible 命令。现在自己尝试用 ansible 部署
官方推荐使用 role 。组织的目录如下
.
├── deploy.sh
├── group_vars
│ ├── all
│ └── wiki
├── hosts
├── roles
│ └── wiki
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── supervisor.conf.j2
│ └── vars
│ └── main.yml
└── wiki.yml
1 deploy.sh
里面只有一条 ansible-playbook 的命令
#!/usr/bin/env bash
ansible-playbook -i hosts --ask-vault-pass --become --become-method sudo --user ubuntu --key-file=//Users/yang.yu/.ssh/yuyangaws.pem wiki.yml
-i 指的是 iinventory, 大概意思是部署到哪些主机上
--ask-vault-pass 输入密码,这个是用来解密加密的文件。有些需要加密的比如数据库用户名和密码。 可以使用ansible-vault encrypt SECRET_FILE
将SECRET_FILE 加密。可以将变量文件加密
--become 权限提升
--become-method sudo 权限提升
--user 登录远程机器的用户名
--key-file ssh 用的私钥
2. hosts
[yuyang-aws]
www.yuyang1992.de
yuyang-aws 是以系列主机的标签,
www.yuyang1992.de 是域名或者 IP地址。可以有多个
2.wiki.yml
---
- hosts: yuyang-aws
vars:
staging: no
roles:
- wiki
roles
wiki
表示一个角色
task 表示执行的任务
templates 其实类似新建 或者 copy 文件
vars 是一些变量
vars 下面的 main.yml
git_repo: 'https://github.com/yuyang199226/gowiki.git'
app_repo: gowiki
workdir: /home/ubuntu/work/src/{{ app_repo }}
cmd: "/home/ubuntu/work/src/{{ app_repo }}/wiki"
user: ubuntu
group: ubuntu
log_file: /tmp/log/wiki.log
tasks 下面的 main.yml
- name: create work dir
file:
path: "{{ workdir }}"
state: directory
mode: 0755
owner: "{{ user }}"
group: "{{ group }}"
- name: create log file
file:
path: "{{ log_file }}"
state: touch
mode: 0755
owner: "{{ user }}"
group: "{{ group }}"
- name: git pull from github
git:
repo: "{{ git_repo }}"
dest: "{{ workdir }}"
force: yes
- name: create binary excuted file
environment:
- PATH: $PATH:/usr/local/go/bin
shell: go build "{{ workdir }}/wiki.go"
args:
chdir: "{{ workdir }}"
- name: play template module
template:
src: supervisor.conf.j2
dest: /etc/supervisor/conf.d/wiki.conf
mode: 0644
owner: "{{ user }}"
group: "{{ group }}"
- name: start supervisor
supervisorctl:
name: wiki
state: restarted
templates 下的 supervisor.conf.j2 (Note: 必须以.j2 结尾 )
[program: wiki]
command={{ cmd }}
user={{ user}}
autostart=True
directory={{ workdir }}
stdout_logfile={{ log_file }}
stderr_logfile={{ log_file }}
网友评论