- configs/mixarr.yml: Traefik routing for mixarr web + API - migration/phase3-mixarr.sh: Migration script for mixarr stack - migration/phase3-db-admin-tools.sh: Migration script for db admin tools Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
275 lines
8.4 KiB
Bash
Executable file
275 lines
8.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# =============================================================================
|
|
# Phase 3 Migration: Database Admin Tools
|
|
# Target: databases (.81)
|
|
# Services: phpmyadmin, phppgadmin
|
|
# Run this on the control server (CT 127)
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
COMPOSE_DIR_PMA=~/clustered-fucks/compose-files/databases/phpmyadmin
|
|
COMPOSE_DIR_PGA=~/clustered-fucks/compose-files/databases/phppgadmin
|
|
PLAYBOOK_DIR=~/clustered-fucks/playbooks
|
|
|
|
echo "========================================"
|
|
echo "Phase 3: Database Admin Tools Migration"
|
|
echo "Target: databases (192.168.1.81)"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# Create directories
|
|
mkdir -p "$COMPOSE_DIR_PMA"
|
|
mkdir -p "$COMPOSE_DIR_PGA"
|
|
mkdir -p "$PLAYBOOK_DIR"
|
|
|
|
# =============================================================================
|
|
# PHPMYADMIN
|
|
# =============================================================================
|
|
|
|
echo "Creating phpMyAdmin compose file..."
|
|
|
|
cat > "$COMPOSE_DIR_PMA/docker-compose.yml" << 'EOF'
|
|
services:
|
|
phpmyadmin:
|
|
image: phpmyadmin:latest
|
|
container_name: phpmyadmin
|
|
hostname: phpmyadmin
|
|
environment:
|
|
# Multiple MySQL hosts: Hetzner (im), NAS (different ports)
|
|
- PMA_HOSTS=192.168.12.3,192.168.1.251,192.168.1.251
|
|
- PMA_PORTS=3306,33306,3306
|
|
- MAX_EXECUTION_TIME=300
|
|
- MEMORY_LIMIT=512M
|
|
- UPLOAD_LIMIT=2048K
|
|
- TZ=America/Indiana/Indianapolis
|
|
ports:
|
|
- "2500:80"
|
|
restart: unless-stopped
|
|
networks:
|
|
- proxy
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
cpus: '1.0'
|
|
labels:
|
|
- "autoheal=true"
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
- "homepage.group=Infrastructure"
|
|
- "homepage.name=Phpmyadmin"
|
|
- "homepage.icon=phpmyadmin.png"
|
|
- "homepage.href=https://php.3ddbrewery.com"
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
EOF
|
|
|
|
echo "✅ Created $COMPOSE_DIR_PMA/docker-compose.yml"
|
|
|
|
# =============================================================================
|
|
# PHPPGADMIN
|
|
# =============================================================================
|
|
|
|
echo "Creating phpPgAdmin compose file..."
|
|
|
|
cat > "$COMPOSE_DIR_PGA/docker-compose.yml" << 'EOF'
|
|
services:
|
|
phppgadmin:
|
|
image: dockage/phppgadmin:latest
|
|
container_name: phppgadmin
|
|
hostname: phppgadmin
|
|
environment:
|
|
# PostgreSQL on Hetzner (im)
|
|
- PHP_PG_ADMIN_SERVER_HOST=192.168.12.2
|
|
- PHP_PG_ADMIN_SERVER_PORT=55432
|
|
- PHP_PG_ADMIN_SERVER_SSL_MODE=allow
|
|
ports:
|
|
- "5183:80"
|
|
- "4433:443"
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data:/data
|
|
- ./logs:/var/log
|
|
networks:
|
|
- proxy
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 256M
|
|
cpus: '0.5'
|
|
labels:
|
|
- "autoheal=true"
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
- "homepage.group=Infrastructure"
|
|
- "homepage.name=PhpPGadmin"
|
|
- "homepage.icon=postgres.png"
|
|
- "homepage.href=https://phppgadmin.3ddbrewery.com"
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
EOF
|
|
|
|
echo "✅ Created $COMPOSE_DIR_PGA/docker-compose.yml"
|
|
|
|
# =============================================================================
|
|
# ANSIBLE PLAYBOOK - Combined Deployment
|
|
# =============================================================================
|
|
|
|
echo "Creating combined Ansible playbook..."
|
|
|
|
cat > "$PLAYBOOK_DIR/deploy-db-admin-tools.yml" << 'EOF'
|
|
---
|
|
# Deploy Database Admin Tools to databases VM
|
|
# Deploys: phpmyadmin, phppgadmin
|
|
# Target: databases (192.168.1.81)
|
|
|
|
- name: Deploy Database Admin Tools
|
|
hosts: databases
|
|
vars:
|
|
appdata_path: /home/docker/appdata
|
|
compose_src: "{{ playbook_dir }}/../compose-files/databases"
|
|
|
|
tasks:
|
|
# =========================================================================
|
|
# PHPMYADMIN
|
|
# =========================================================================
|
|
- name: Create phpmyadmin directory
|
|
ansible.builtin.file:
|
|
path: "{{ appdata_path }}/phpmyadmin"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Copy phpmyadmin docker-compose.yml
|
|
ansible.builtin.copy:
|
|
src: "{{ compose_src }}/phpmyadmin/docker-compose.yml"
|
|
dest: "{{ appdata_path }}/phpmyadmin/docker-compose.yml"
|
|
mode: '0644'
|
|
|
|
- name: Deploy phpmyadmin container
|
|
community.docker.docker_compose_v2:
|
|
project_src: "{{ appdata_path }}/phpmyadmin"
|
|
state: present
|
|
pull: always
|
|
register: phpmyadmin_result
|
|
|
|
- name: Show phpmyadmin status
|
|
ansible.builtin.debug:
|
|
msg: "phpMyAdmin deployed: {{ phpmyadmin_result.changed }}"
|
|
|
|
# =========================================================================
|
|
# PHPPGADMIN
|
|
# =========================================================================
|
|
- name: Create phppgadmin directory
|
|
ansible.builtin.file:
|
|
path: "{{ appdata_path }}/phppgadmin"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Create phppgadmin data directory
|
|
ansible.builtin.file:
|
|
path: "{{ appdata_path }}/phppgadmin/data"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Create phppgadmin logs directory
|
|
ansible.builtin.file:
|
|
path: "{{ appdata_path }}/phppgadmin/logs"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Copy phppgadmin docker-compose.yml
|
|
ansible.builtin.copy:
|
|
src: "{{ compose_src }}/phppgadmin/docker-compose.yml"
|
|
dest: "{{ appdata_path }}/phppgadmin/docker-compose.yml"
|
|
mode: '0644'
|
|
|
|
- name: Deploy phppgadmin container
|
|
community.docker.docker_compose_v2:
|
|
project_src: "{{ appdata_path }}/phppgadmin"
|
|
state: present
|
|
pull: always
|
|
register: phppgadmin_result
|
|
|
|
- name: Show phppgadmin status
|
|
ansible.builtin.debug:
|
|
msg: "phpPgAdmin deployed: {{ phppgadmin_result.changed }}"
|
|
|
|
# =========================================================================
|
|
# VERIFICATION
|
|
# =========================================================================
|
|
- name: Wait for phpmyadmin to be ready
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:2500"
|
|
status_code: 200
|
|
timeout: 5
|
|
register: pma_health
|
|
retries: 10
|
|
delay: 5
|
|
until: pma_health.status == 200
|
|
|
|
- name: Wait for phppgadmin to be ready
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:5183"
|
|
status_code: [200, 302]
|
|
timeout: 5
|
|
register: pga_health
|
|
retries: 10
|
|
delay: 5
|
|
until: pga_health.status in [200, 302]
|
|
|
|
- name: Summary
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "✅ phpMyAdmin: http://192.168.1.81:2500"
|
|
- "✅ phpPgAdmin: http://192.168.1.81:5183"
|
|
EOF
|
|
|
|
echo "✅ Created $PLAYBOOK_DIR/deploy-db-admin-tools.yml"
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "FILES CREATED"
|
|
echo "========================================"
|
|
echo " $COMPOSE_DIR_PMA/docker-compose.yml"
|
|
echo " $COMPOSE_DIR_PGA/docker-compose.yml"
|
|
echo " $PLAYBOOK_DIR/deploy-db-admin-tools.yml"
|
|
echo ""
|
|
echo "========================================"
|
|
echo "NEXT STEPS"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "1. STOP OLD CONTAINERS on alien:"
|
|
echo " ssh alien 'docker stop phpmyadmin phppgadmin-phppgadmin-1'"
|
|
echo ""
|
|
echo "2. DEPLOY to databases:"
|
|
echo " ansible-playbook playbooks/deploy-db-admin-tools.yml"
|
|
echo ""
|
|
echo "3. VERIFY services:"
|
|
echo " curl -I http://192.168.1.81:2500 # phpMyAdmin"
|
|
echo " curl -I http://192.168.1.81:5183 # phpPgAdmin"
|
|
echo ""
|
|
echo "4. UPDATE TRAEFIK config on Hetzner:"
|
|
echo " Change backend IPs from alien (192.168.1.252) to databases (192.168.1.81)"
|
|
echo " - phpmyadmin: port 2500"
|
|
echo " - phppgadmin: port 5183"
|
|
echo ""
|
|
echo "5. CLEANUP alien:"
|
|
echo " ssh alien 'docker rm phpmyadmin phppgadmin-phppgadmin-1'"
|
|
echo ""
|
|
echo "6. COMMIT changes:"
|
|
echo " cd ~/clustered-fucks"
|
|
echo " git add -A"
|
|
echo " git commit -m 'Phase 3: Deploy phpmyadmin + phppgadmin to databases'"
|
|
echo " git push"
|
|
echo ""
|
|
echo "========================================"
|
|
echo "NOTES"
|
|
echo "========================================"
|
|
echo "- Both services are STATELESS (phpmyadmin has no mounts)"
|
|
echo "- phppgadmin had anonymous Docker volumes on alien (not important)"
|
|
echo "- phpMyAdmin connects to MySQL on: Hetzner (192.168.12.3:3306), NAS (192.168.1.251:33306 & :3306)"
|
|
echo "- phpPgAdmin connects to PostgreSQL on: Hetzner (192.168.12.2:55432)"
|
|
echo ""
|