150 lines
4.2 KiB
Bash
Executable file
150 lines
4.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Homepage Migration Script
|
|
# Target: replicant (.80)
|
|
# Run this on the control server (CT 127)
|
|
|
|
set -e
|
|
|
|
COMPOSE_DIR=~/clustered-fucks/compose-files/replicant/homepage
|
|
PLAYBOOK_DIR=~/clustered-fucks/playbooks
|
|
|
|
echo "=== Homepage Migration Script ==="
|
|
echo "Target: replicant (.80)"
|
|
echo ""
|
|
|
|
# Create directories
|
|
mkdir -p "$COMPOSE_DIR"
|
|
mkdir -p "$PLAYBOOK_DIR"
|
|
|
|
# Create docker-compose.yml
|
|
cat > "$COMPOSE_DIR/docker-compose.yml" << 'EOF'
|
|
services:
|
|
homepage:
|
|
image: ghcr.io/gethomepage/homepage:latest
|
|
container_name: homepage
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- HOMEPAGE_ALLOWED_HOSTS=192.168.1.80:3305,home.3ddbrewery.com,*
|
|
volumes:
|
|
- ./config:/app/config
|
|
ports:
|
|
- "3305:3000"
|
|
restart: unless-stopped
|
|
networks:
|
|
- proxy
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
cpus: '1.0'
|
|
labels:
|
|
- "autoheal=true"
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
EOF
|
|
|
|
echo "✅ Created $COMPOSE_DIR/docker-compose.yml"
|
|
|
|
# Create Ansible playbook
|
|
cat > "$PLAYBOOK_DIR/deploy-homepage.yml" << 'EOF'
|
|
---
|
|
- name: Deploy Homepage to replicant
|
|
hosts: replicant
|
|
vars:
|
|
service_name: homepage
|
|
service_dir: "{{ docker_appdata }}/{{ service_name }}"
|
|
compose_src: "{{ playbook_dir }}/../compose-files/replicant/{{ service_name }}"
|
|
|
|
tasks:
|
|
- name: Create service directory
|
|
ansible.builtin.file:
|
|
path: "{{ service_dir }}"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Copy docker-compose.yml
|
|
ansible.builtin.copy:
|
|
src: "{{ compose_src }}/docker-compose.yml"
|
|
dest: "{{ service_dir }}/docker-compose.yml"
|
|
mode: '0644'
|
|
|
|
- name: Create config directory
|
|
ansible.builtin.file:
|
|
path: "{{ service_dir }}/config"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Pull latest image
|
|
community.docker.docker_image:
|
|
name: ghcr.io/gethomepage/homepage:latest
|
|
source: pull
|
|
force_source: yes
|
|
|
|
- name: Deploy Homepage
|
|
community.docker.docker_compose_v2:
|
|
project_src: "{{ service_dir }}"
|
|
state: present
|
|
pull: missing
|
|
register: deploy_result
|
|
|
|
- name: Show deployment result
|
|
ansible.builtin.debug:
|
|
msg: "Homepage deployed: {{ deploy_result.changed }}"
|
|
|
|
- name: Wait for container to be healthy
|
|
ansible.builtin.shell: |
|
|
for i in {1..30}; do
|
|
status=$(docker inspect --format='{{ "{{" }}.State.Health.Status{{ "}}" }}' homepage 2>/dev/null || echo "starting")
|
|
if [ "$status" = "healthy" ]; then
|
|
echo "Container is healthy"
|
|
exit 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
echo "Warning: Container not healthy after 60s"
|
|
docker logs homepage 2>&1 | tail -20
|
|
register: health_check
|
|
changed_when: false
|
|
|
|
- name: Display health status
|
|
ansible.builtin.debug:
|
|
msg: "{{ health_check.stdout }}"
|
|
EOF
|
|
|
|
echo "✅ Created $PLAYBOOK_DIR/deploy-homepage.yml"
|
|
|
|
echo ""
|
|
echo "=== Files Created ==="
|
|
echo " $COMPOSE_DIR/docker-compose.yml"
|
|
echo " $PLAYBOOK_DIR/deploy-homepage.yml"
|
|
echo ""
|
|
echo "=== Next Steps ==="
|
|
echo ""
|
|
echo "1. RSYNC CONFIG FROM ALIEN (do this first!):"
|
|
echo " ssh alien 'docker stop homepage'"
|
|
echo " rsync -avP maddox@alien:/home/maddox/docker/appdata/homepage/config/ \\"
|
|
echo " maddox@replicant:/home/maddox/docker/appdata/homepage/config/"
|
|
echo ""
|
|
echo "2. DEPLOY TO REPLICANT:"
|
|
echo " cd ~/clustered-fucks"
|
|
echo " ansible-playbook playbooks/deploy-homepage.yml"
|
|
echo ""
|
|
echo "3. VERIFY:"
|
|
echo " curl -s http://192.168.1.80:3305/api/healthcheck"
|
|
echo " # or visit http://192.168.1.80:3305 in browser"
|
|
echo ""
|
|
echo "4. UPDATE TRAEFIK (on alien - update IP from .252 to .80):"
|
|
echo " # Edit /home/maddox/docker/appdata/traefik/config/config.yml"
|
|
echo " # Change homepage URL from 192.168.1.252:3305 to 192.168.1.80:3305"
|
|
echo ""
|
|
echo "5. CLEANUP ALIEN (after verification):"
|
|
echo " ssh alien 'docker rm homepage'"
|
|
echo ""
|
|
echo "6. COMMIT TO GIT:"
|
|
echo " cd ~/clustered-fucks"
|
|
echo " git add -A && git commit -m 'Deploy homepage to replicant' && git push"
|
|
echo ""
|