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

¿Algo que comentar?
Lo siento, debes estar conectado para publicar un comentario.