Volver al blog

Instalacion de Repositorio de Codigos (Gogs) usando Ansible

ansible-portada-03

Hola...

Continuamos con el despliegue de algunos servicio usando ansible.

Esta vez toca al servicio de Git usando una herramienta (muy parecida) de github/gitlab porque es mas liviana y se parece muchisimo a las anteriores, de hecho esta en un container de dockerhub por lo que aprovechamos ya esa situacion para un despliegue sin mucha demora.

Basicamente tendremos 1 host, que tendra instalado el docker engine para poder descargar la imagen de Gogs e iniciarla exponiendo los puertos de servicio en la red, creando un espacio disco persistente para evitar perdidas en los repositorios que se usaran en el caso de que actualicen la imagen a un nivel superior por actualizaciones sin tener que perder los datos.

Comenzando por agregar el host al inventario:

editamos el inventories/hosts agregando

[gogs]
ansideb4
creamos un playbook que usara 3 roles:

  • 1 Para descargar la imagen de docker de gogs con sus opciones por ejemplo la version etc.
  • 2 Un container para MySQ porque Gogs en este caso lo instalaremos usando MySQL
  • 3 Un rol que usara unos comandos para hacerle backup al database MySQL de Gogs segun la configuracion en las variables definidas por el playbook.

estos roles estaran en la raiz de la estructura ansible

En el playbook vemos las variables que seran pasada a cada rol para poder generar los contenedores que estaran linkeados dentro de Docker para poder servir entre la aplicacion de Gogs con la base datos y el servicio web hacia el exterior que es por donde lo usaremos.

---

- name: Despliegue de Gogs usando Docker

  hosts: gogs

  vars:

    user_net_name: gogsnet

    gogs_container_name: gogs

    gogs_git_host_port: 8080

    gogs_ssh_host_port: 2022

    mariadb_container_name: "{{ gogs_container_name }}_mariadb"

    mariadb_container_hostname: "{{ gogs_container_name }}_mariadb"

    mariadb_secrets_file: vault/gogs_mysql_secrets.yml

  pre_tasks:

    - name: Instalar paquetes necesarios para python

      apt:

        name:

          - aptitude 

          - python3-setuptools

          - python3-pip

          - python-backports.ssl-match-hostname

          - apt-transport-https 

          - ca-certificates 

          - curl 

          - virtualenv

          - gnupg2 

          - software-properties-common

        state: present

        update_cache: yes

        force_apt_get: yes

    - name: Agregamos la llave publica GPG del repo

      apt_key:

        url: https://download.docker.com/linux/debian/gpg

        state: present

    - name: Agregamos el repo de Docker

      apt_repository:

        repo: deb https://download.docker.com/linux/debian buster stable

        state: present

    - name: Actualizamos el sistema e instalamos el paquete docker-ce

      apt:

        name: docker-ce  

        state: latest

    - name: Instalacion de modulos de Python para manejar Docker con ansible

      pip:

        name: docker

    - name: Creamos una red virtual dentro de docker

      docker_network:

        name: "{{ user_net_name }}"

        state: present

        driver: bridge

        driver_options:

          com.docker.network.bridge.name: "{{ user_net_name }}_br"

  roles:

    - role: mariadb-container-simple

      mariadb_user_net: "{{ user_net_name }}"

      mariadb_data_vol_name: "{{ gogs_container_name }}_mariadb_data"

      mariadb_conf_vol_name: "{{ gogs_container_name }}_mariadb_conf"

      mariadb_env_vars:

        MYSQL_ROOT_PASSWORD="{{ mysql_root_pwd }}"

    - role: gogs-container

      gogs_image_name: gogs/gogs

      gogs_image_ver: 0.11.66

      gogs_user_net:

        - name: "{{ user_net_name }}"

      gogs_publish:

        - "{{ gogs_git_host_port }}:{{ gogs_git_container_port }}"

        - "{{ gogs_ssh_host_port }}:{{ gogs_ssh_container_port }}"

    - role: backup-incontainer-mysqldb   

      backup_dir: "/var/backup/{{ gogs_container_name }}/db"

      backup_db_name: "gogs"

      backup_filename_prefix: "{{ gogs_container_name }}"

      backup_mysql_container_name: "{{ mariadb_container_name }}"

      backup_mysql_user: root

      backup_mysql_pwd: "{{ mysql_root_pwd  }}" 

      backup_sched_minute: '00'

      backup_sched_hour: '20'

      backup_sched_day: '*'

      backup_sched_month: '*'

      backup_sched_weekday: '*'

      backup_retention_days: 10

Como es logico ya siendo un server de produccion tendremos que mantener las claves protegidas y mas si este tipo de configuraciones viene subida al repo de git, asi que protegemos sobre todo la password de mysql usando "ansible-vault"

ansible-vault encrypt vault/gogs_mysql_secrets.yml

ponemos la password, y listo obtendremos el fichero cifrado que puede subir al repo sin problemas

para lanzar el despliegue basta ejecutar.

ansible-playbook gogs-container.yml --vault-id @prompt

la password que use para este caso: "sysadmincuba"

teniendo como resultado lo siguiente.

y al entrar por la web de acuerdo a las variables que fijamos en el playbook apuntado al ip del server que usamos como referencia en el inventario: http://ip.de.la.vm:3000 viendo la pagina de instalacion de Gogs para poner las opciones finales del servicio.

Fichero adjunto: gogs.tar

Vale destacar que deberan ajustar primero para los de cuba los registros de havana container o usar vpn para llegar a dockerhub antes de tirar la imagen.

Suscríbete · Newsletter

Mantente al día, cada semana

Artículos prácticos sobre Linux, redes, seguridad, virtualización y la nube — escritos por sysadmins cubanos.

  • Guías y tutoriales de administración de sistemas
  • Nuevos artículos sobre servidores, redes y nube
  • Sin spam, cancela cuando quieras

Respetamos tu bandeja de entrada. Cancela con un clic.

Patrocinado por SYSCU

¿Tu infraestructura en la nube te cuesta de más?

SYSCU optimiza tu nube de punta a punta — FinOps, DevOps & CI/CD, migraciones a AWS, seguridad y observabilidad. Equipo 100 % senior que reduce tu factura hasta un 40 % y acelera tus despliegues en semanas.

Nuevo · BetaSYSCU Atlas Insight — la plataforma FinOps que convierte tu gasto AWS en decisiones: visibilidad multi-cuenta, recomendaciones automáticas y alertas de anomalías.

No comments yet