Despliegue de Archery utilizando Docker y Docker Compose

Configuración del entorno previo

Archery es una plataforma de gestión de SQL que requiere Python 3.7 o superior para su backend. Si tu sistema no incluye una versión adecuada, puedes compilarla desde el código fuente.

# 1. Instalar dependencias necesarias
sudo yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel \
                    readline-devel sqlite-devel zlib-devel libffi-devel

# 2. Descargar código fuente de Python
wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz

# 3. Extraer y cambiar al directorio
tar -xvf Python-3.7.12.tar.xz
cd Python-3.7.12

# 4. Compilar e instalar en ruta personalizada
./configure --enable-optimizations --prefix=/opt/python37
make -j $(nproc)
sudo make altinstall

# 5. Crear enlaces simbólicos (opcional)
sudo ln -sf /opt/python37/bin/python3.7 /usr/local/bin/python3
sudo ln -sf /opt/python37/bin/pip3.7 /usr/local/bin/pip3

Configuración de Docker y Docker Compose

Eliminación de versiones anteriores

# Desinstalar paquetes obsoletos de Docker
sudo yum remove -y docker docker-client docker-client-latest \
    docker-common docker-latest docker-latest-logrotate \
    docker-logrotate docker-engine docker-selinux docker-engine-selinux

Configuración del repositorio y la instalación

# Añadir repositorio oficial de Docker CE
sudo yum-config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# Opcional: configurar mirror para descargas más rápidas
sudo sed -i 's|download.docker.com|mirrors.aliyun.com/docker-ce|g' \
    /etc/yum.repos.d/docker-ce.repo

# Instalar Docker CE y componentes
sudo yum install -y docker-ce docker-ce-cli containerd.io

Optimización del daemon de Docker

# Crear directorio de configuración
sudo mkdir -p /etc/docker

# Configurar mirrors para acelerar descargas de imágenes
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": ["https://your-mirror-address.mirror.aliyuncs.com"]
}
EOF

# Reiniciar el servicio Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

Instalaicón de Docker Compose

# Descargar binario de Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/local/bin/docker-compose

# Aplicar permisos de ejecución
sudo chmod +x /usr/local/bin/docker-compose

# Verificar instalación
docker-compose --version

Despliegue de Archery

Preparación del proyecto

# Descargar el código fuente de Archery desde GitHub
wget https://github.com/hhyo/Archery/archive/refs/tags/v1.8.2.tar.gz
tar -xzf v1.8.2.tar.gz
cd Archery-1.8.2/src/docker-compose/

Inicio de los contenedores

# Iniciar servicios con Docker Compose en segundo plano
sudo docker-compose -f docker-compose.yml up -d

# Verificar el estado de los contenedores
sudo docker-compose ps

Inicialización de la base de datos

# Acceder al contenedor principal de Archery
sudo docker exec -it archery /bin/bash

# Dentro del contenedor: activar entorno virtual
cd /opt/archery
source /opt/venv4archery/bin/activate

# Crear y aplicar migraciones
python3 manage.py makemigrations sql
python3 manage.py migrate

# Cargar datos iniciales
python3 manage.py dbshell < sql/fixtures/auth_group.sql
python3 manage.py dbshell < src/init_sql/mysql_slow_query_review.sql

Creación de usuario administrador

# Crear superusuario para el panel de administración
python3 manage.py createsuperuser

# Salir del contenedor
exit

Verificación del despliegue

# Reiniciar el servicio para aplicar cambios
sudo docker restart archery

# Comprobar logs para detectar errores
sudo docker logs archery --tail 20

# Acceder a la interfaz web (por defecto en puerto 9123)
# URL: http://<tu-servidor>:9123/

Comandos de admiinstración comunes

Gestión de servicios

# Detener todos los contenedores
sudo docker-compose -f docker-compose.yml down

# Iniciar contenedores nuevamente
sudo docker-compose -f docker-compose.yml up -d

# Ver logs de un servicio específico
sudo docker-compose logs -f archery

# Acceso a la base de datos MySQL
sudo docker exec -it archery_db mysql -u root -p

Configuración de base de datos externa

Si prefieres usar un servidor MySQL existente en lugar del conteneder incluido:

# Ejecutar contenedor MySQL independiente
sudo docker run -d --name external_mysql -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=SecurePass123! \
    -e MYSQL_DATABASE=archery_db \
    -v /data/mysql:/var/lib/mysql \
    mysql:5.7

# Modificar configuración de conexión en Archery
sudo docker exec -it archery bash
vi /opt/archery/src/docker-compose/archery/settings.py
# Actualizar HOST a la IP del servidor MySQL
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.1.100',  # IP del servidor externo
        ...
    }
}

Etiquetas: Docker docker-compose MySQL Python archery

Publicado el 8-12 16:54