LXC + docker

Publicado en 27 septiembre, 2024

En local se está usando la 950 como modelo base para montar LXC. A esta se le ha añadido un script de ansible para añadirle funcionalidades de Docker:

  • Instalación de Docker
  • Instala csfpre/csfpost
  • CSF personalizado para docker
  • Clonamos Starter
    • Configuramos IP de salida 0.0.0.0 para portainer (editar en el servicio que sobreescribe)

Se puede ejecutar con ansible-playbook /root/install_docker.yaml o ejecutando el comando install_docker.sh, que es un script que contiene el comando

PASOS NECESARIOS ANTES (STARTER DOCKER):

  • Crear clave ssh mediante ssh-keygen
  • Añadir la pública a authorized_keys:
    • cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    • (puede variar el nombre del archivo)
  • Dar de alta la clave en gitlab, preferiblemente con el usuario Alsur Host, que tiene todas las claves de sistemas y está configurado ya para descargar el Starter de Docker. Para ello entraremos en su perfil y clicaremos en Impersonate para luego añadir la clave en Preferences/SSH keys.

SCRIPT

---
- name: Playbook para instalar Docker, custom CSF y Starter
hosts: localhost
become: yes # Esto es necesario para ejecutar los comandos como superusuario
tasks:
- name: Obtener la IP local
ansible.builtin.shell: hostname -I | awk '{print $1}'
register: local_ip
- name: Actualizar el caché de APT
apt:
update_cache: yes

- name: Instalar dependencias necesarias
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
state: present

- name: Añadir la clave GPG oficial de Docker
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present

- name: Añadir el repositorio oficial de Docker (Bullseye)
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable"
state: present

- name: Actualizar el caché de APT después de añadir el repositorio Docker
apt:
update_cache: yes

- name: Instalar Docker
apt:
name: docker-ce
state: present

- name: Iniciar y habilitar Docker
systemd:
name: docker
enabled: yes
state: started

#- name: Añadir usuario al grupo Docker
# user:
# name: "{{ ansible_user }}"
# groups: docker
# append: yes

- name: Crear el directorio /usr/local/src si no existe
file:
path: /usr/local/src
state: directory
mode: '0755'

- name: Clonar el repositorio csf-pre_post_sh
git:
repo: https://github.com/juliengk/csf-pre_post_sh.git
dest: /usr/local/src/csf-pre_post_sh

# Cambiar /bin/sh a /bin/bash temporalmente
- name: Cambiar el enlace simbólico de /bin/sh a /bin/bash
shell: ln -sf /bin/bash /bin/sh

- name: Ejecutar el script install.sh
shell: bash /usr/local/src/csf-pre_post_sh/install.sh
args:
chdir: /usr/local/src/csf-pre_post_sh

# Revertir el cambio para que /bin/sh vuelva a apuntar a dash
- name: Revertir el enlace simbólico de /bin/sh a dash
shell: ln -sf /bin/dash /bin/sh

- name: Clonar el repositorio Aetherinox/csf
git:
repo: https://github.com/Aetherinox/csf-firewall
dest: /usr/local/src/docker-firewall

- name: Cambiar la línea shebang de !/bin/sh a !/bin/bash en el csfpost
ansible.builtin.lineinfile:
path: /usr/local/csf/bin/csfpost.sh
regexp: '^#!/bin/sh'
line: '#!/bin/bash'
state: present
become: yes # Usar sudo si es necesario

- name: Symlink en /usr/local/include/csf/post.d
shell: ln -sf /usr/local/src/docker-firewall/patch/docker.sh /usr/local/include/csf/post.d/docker.sh

# Reiniciar CSF

- name: Reiniciar CSF con csf -r
shell: csf -r

- name: Clonar Starter Docker
git:
repo: ssh://git@gitl.alsur.es:2102/alsur/alsur-starter-docker.git
dest: /usr/local/src/alsur-starter-docker

- name: Crear symlink para starter-docker.sh en /usr/local/bin
ansible.builtin.file:
src: /usr/local/src/alsur-starter-docker/scripts/starter-docker.sh
dest: /usr/local/bin/starter-docker.sh
state: link
mode: '0755' # Opcional, para asegurarse de que el symlink sea ejecutable

- name: Crear symlink para starter-docker.service en /etc/systemd/system
ansible.builtin.file:
src: /usr/local/src/alsur-starter-docker/services/starter-docker.service
dest: /etc/systemd/system/starter-docker.service
state: link

- name: Crear el directorio para el override si no existe
ansible.builtin.file:
path: /etc/systemd/system/starter-docker.service.d
state: directory
mode: '0755'

- name: Crear el archivo de override para el servicio starter-docker
ansible.builtin.copy:
dest: /etc/systemd/system/starter-docker.service.d/override.conf
content: |
[Service]
Environment="STARTER_CD=/usr/local/src/alsur-starter-docker"
Environment="OUT_IP=0.0.0.0"
Environment="LOCAL_IP={{ local_ip.stdout }}"
notify: Recargar systemd

- name: Habilitar el servicio starter-docker
ansible.builtin.systemd:
name: starter-docker
enabled: yes

- name: Iniciar el servicio starter-docker
ansible.builtin.systemd:
name: starter-docker
state: started
handlers:
- name: Recargar systemd
ansible.builtin.command: systemctl daemon-reload

Sin respuestas to "LXC + docker"


    ¿Algo que comentar?