ansible 简单部署go application

github 地址, 下面部分部署有误,以 github 为准
之前都使用公司封装好的 ansible 命令。现在自己尝试用 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 }}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容