Ansible自动化运维实战(依赖docker部署各类型数据库)

通过docker容器屏蔽底层细节,实现各类型“龙头”数据库的自动化安装

  • name: Install and configure databases using Docker
    hosts: database
    become: yes
    vars:
    ansible_ssh_common_args: “-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null”
    docker_volumes_path: “/data/docker_volumes”
    docker_data_dir: “/data/docker”
    database_password: “9kls8@12”
    install_all_databases: true

    Database configurations

    databases:
    redis:
    install: false
    version: “:latest”
    ports: [“6380:6379”]
    container_name: “redis”
    image: “redis”
    volumes: [“{{ docker_volumes_path }}/redis:/data”]
    command: “redis-server --requirepass {{ database_password }}”
    env: {}
    mysql:
    install: false
    version: “:latest”
    ports: [“3307:3306”]
    container_name: “mysql”
    image: “mysql”
    volumes: [“{{ docker_volumes_path }}/mysql:/var/lib/mysql”]
    command: “”
    env:
    MYSQL_ROOT_PASSWORD: “{{ database_password }}”
    MYSQL_ROOT_HOST: “%”
    postgresql:
    install: false
    version: “:latest”
    ports: [“5432:5432”]
    container_name: “postgresql”
    image: “postgres”
    volumes: [“{{ docker_volumes_path }}/postgresql:/var/lib/postgresql”]
    command: “”
    env:
    POSTGRES_PASSWORD: “{{ database_password }}”
    mongo:
    install: false
    version: “:latest”
    ports: [“27017:27017”]
    container_name: “mongo”
    image: “mongo”
    volumes: [“{{ docker_volumes_path }}/mongo:/data/db”]
    command: “”
    env:
    MONGO_INITDB_ROOT_USERNAME: “root”
    MONGO_INITDB_ROOT_PASSWORD: “{{ database_password }}”
    neo4j:
    install: false
    version: “:latest”
    ports: [“7474:7474”, “7687:7687”]
    container_name: “neo4j”
    image: “neo4j”
    volumes: [“{{ docker_volumes_path }}/neo4j:/data”]
    command: “”
    env:
    NEO4J_AUTH: “neo4j/{{ database_password }}”
    influxdb:
    install: true
    version: “:latest”
    ports: [“8086:8086”]
    container_name: “influxdb”
    image: “influxdb”
    volumes: [“{{ docker_volumes_path }}/influxdb:/var/lib/influxdb”]
    command: “”
    env:
    INFLUXDB_ADMIN_USER: “root”
    INFLUXDB_ADMIN_PASSWORD: “{{ database_password }}”

    tasks:

    • name: Configure Docker daemon.json
      copy:
      content: |
      {
      “registry-mirrors”: [
      https://docker.1ms.run
      ],
      “insecure-registries”: ,
      “debug”: false,
      “experimental”: false,
      “data-root”: “{{ docker_data_dir }}”
      }
      dest: “/etc/docker/daemon.json”
      mode: “0644”
      register: docker_config_change

    • name: Restart Docker service to apply mirror configuration
      service:
      name: docker
      state: restarted
      when: docker_config_change.changed

    • name: Ensure Docker service is running
      service:
      name: docker
      state: started
      enabled: yes

    • name: Create database directories
      file:
      path: “{{ docker_volumes_path }}/{{ item }}”
      state: directory
      mode: “0755”
      loop: “{{ databases.keys() }}”

    • name: Run database containers
      docker_container:
      name: “{{ item.value.container_name }}”
      image: “{{ item.value.image }}{{ item.value.version }}”
      state: started
      restart_policy: always
      ports: “{{ item.value.ports }}”
      volumes: “{{ item.value.volumes }}”
      command: “{{ item.value.command }}”
      env: “{{ item.value.env }}”
      timeout: 600
      loop: “{{ databases | dict2items }}”
      when: install_all_databases or item.value.install

1 个赞

第一关 请大家用Trae整理他为yaml格式哦(绝对不是我没找到怎么上传附件)

1 个赞

帖子是支持md语法的,你可以使用代码块包裹yaml内容,比如:

server:
  http:
    addr: 0.0.0.0:8000
    timeout: 1s
1 个赞

好长:face_with_raised_eyebrow::face_with_raised_eyebrow::face_with_raised_eyebrow:

1 个赞

哦?我还真没发现 等下研究研究 这样也好跟大家多分享点摸鱼道具,看来我是一个不称职的Fellow :zany_face:

1 个赞