Phase 2 Batch 2: tinymediamanager, autoscan, channeltube, dispatcharr → replicant
This commit is contained in:
parent
45aee7ecce
commit
77b153a054
13 changed files with 607 additions and 0 deletions
35
compose-files/replicant/autoscan/docker-compose.yml
Normal file
35
compose-files/replicant/autoscan/docker-compose.yml
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
services:
|
||||||
|
autoscan:
|
||||||
|
image: cloudb0x/autoscan:latest
|
||||||
|
container_name: autoscan
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=America/Indiana/Indianapolis
|
||||||
|
volumes:
|
||||||
|
- ./config:/config
|
||||||
|
- /volume1/Media:/media:ro
|
||||||
|
- /volume1/Downloads:/downloads:ro
|
||||||
|
ports:
|
||||||
|
- "3030:3030"
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 512M
|
||||||
|
cpus: '1.0'
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:3030/health"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
start_period: 40s
|
||||||
|
retries: 3
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
- "com.centurylinklabs.watchtower.enable=true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
29
compose-files/replicant/channeltube/docker-compose.yml
Normal file
29
compose-files/replicant/channeltube/docker-compose.yml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
services:
|
||||||
|
channeltube:
|
||||||
|
image: thewicklowwolf/channeltube:latest
|
||||||
|
container_name: channeltube
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=America/Indiana/Indianapolis
|
||||||
|
volumes:
|
||||||
|
- ./config:/channeltube/config
|
||||||
|
- /volume1/Media/Youtube/movies:/channeltube/downloads
|
||||||
|
- /volume1/Media/Youtube/audio:/channeltube/audio_downloads
|
||||||
|
ports:
|
||||||
|
- "5444:5000"
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 1G
|
||||||
|
cpus: '2.0'
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
- "com.centurylinklabs.watchtower.enable=true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
42
compose-files/replicant/dispatcharr/docker-compose.yml
Normal file
42
compose-files/replicant/dispatcharr/docker-compose.yml
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
services:
|
||||||
|
dispatcharr:
|
||||||
|
image: ghcr.io/dispatcharr/dispatcharr:latest
|
||||||
|
container_name: dispatcharr
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=America/Indiana/Indianapolis
|
||||||
|
- PORT=9191
|
||||||
|
# Route traffic through gluetun's HTTP proxy on download-stack
|
||||||
|
- HTTP_PROXY=http://192.168.1.122:38888
|
||||||
|
- HTTPS_PROXY=http://192.168.1.122:38888
|
||||||
|
- http_proxy=http://192.168.1.122:38888
|
||||||
|
- https_proxy=http://192.168.1.122:38888
|
||||||
|
# GPU settings (for future pve-alien, or CPU fallback)
|
||||||
|
- NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
ports:
|
||||||
|
- "9191:9191"
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
# Intel QuickSync access (pve-z620 has limited decode capability)
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
group_add:
|
||||||
|
- video
|
||||||
|
- render
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 2G
|
||||||
|
cpus: '2.0'
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
- "com.centurylinklabs.watchtower.enable=true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
56
compose-files/replicant/matrix-ansible-controller/Dockerfile
Normal file
56
compose-files/replicant/matrix-ansible-controller/Dockerfile
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Matrix Ansible Controller
|
||||||
|
# Portable container for managing matrix-docker-ansible-deploy playbook
|
||||||
|
|
||||||
|
FROM python:3.12-alpine
|
||||||
|
|
||||||
|
LABEL maintainer="maddox"
|
||||||
|
LABEL description="Portable Ansible controller for matrix-docker-ansible-deploy"
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
git \
|
||||||
|
openssh-client \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
rsync \
|
||||||
|
gcc \
|
||||||
|
musl-dev \
|
||||||
|
libffi-dev \
|
||||||
|
openssl-dev \
|
||||||
|
python3-dev \
|
||||||
|
just \
|
||||||
|
nano \
|
||||||
|
vim \
|
||||||
|
tmux \
|
||||||
|
jq
|
||||||
|
|
||||||
|
# Install Ansible and required Python packages
|
||||||
|
RUN pip install --no-cache-dir \
|
||||||
|
ansible>=2.17.0 \
|
||||||
|
passlib \
|
||||||
|
dnspython \
|
||||||
|
netaddr \
|
||||||
|
jmespath \
|
||||||
|
docker \
|
||||||
|
requests
|
||||||
|
|
||||||
|
# Create working directories
|
||||||
|
RUN mkdir -p /playbook /inventory /ssh
|
||||||
|
|
||||||
|
# Set up SSH directory with proper permissions
|
||||||
|
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
|
||||||
|
|
||||||
|
# Copy entrypoint script
|
||||||
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
# Set working directory to playbook
|
||||||
|
WORKDIR /playbook
|
||||||
|
|
||||||
|
# Default environment
|
||||||
|
ENV ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
ENV ANSIBLE_FORCE_COLOR=True
|
||||||
|
ENV TERM=xterm-256color
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
CMD ["/bin/bash"]
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Matrix Ansible Controller
|
||||||
|
# Portable container for managing matrix-docker-ansible-deploy playbook
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# docker compose up -d
|
||||||
|
# docker exec -it matrix-ansible-controller bash
|
||||||
|
# just install-all
|
||||||
|
|
||||||
|
services:
|
||||||
|
controller:
|
||||||
|
build: .
|
||||||
|
image: matrix-ansible-controller:latest
|
||||||
|
container_name: matrix-ansible-controller
|
||||||
|
hostname: matrix-controller
|
||||||
|
|
||||||
|
# Keep container running for interactive use
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
# SSH keys (read-only) - for connecting to matrix server
|
||||||
|
- /root/.ssh:/ssh:ro
|
||||||
|
|
||||||
|
# Persistent playbook directory (survives container rebuilds)
|
||||||
|
- ./data/playbook:/playbook
|
||||||
|
|
||||||
|
# Your inventory configuration (vars.yml, hosts, etc.)
|
||||||
|
- ./data/inventory:/inventory
|
||||||
|
|
||||||
|
# Persist ansible cache/facts
|
||||||
|
- ./data/ansible-cache:/root/.ansible
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
- ANSIBLE_FORCE_COLOR=True
|
||||||
|
- UPDATE_ROLES=false
|
||||||
|
|
||||||
|
network_mode: bridge
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 1G
|
||||||
|
cpus: '2.0'
|
||||||
|
|
||||||
|
labels:
|
||||||
|
- "com.centurylinklabs.watchtower.enable=false"
|
||||||
|
|
||||||
|
restart: unless-stopped
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
echo -e "${BLUE}========================================${NC}"
|
||||||
|
echo -e "${BLUE} Matrix Ansible Controller${NC}"
|
||||||
|
echo -e "${BLUE}========================================${NC}"
|
||||||
|
|
||||||
|
# --- SSH Key Setup ---
|
||||||
|
if [ -d "/ssh" ] && [ "$(ls -A /ssh 2>/dev/null)" ]; then
|
||||||
|
echo -e "${GREEN}[SSH]${NC} Setting up SSH keys from /ssh mount..."
|
||||||
|
cp -r /ssh/* /root/.ssh/ 2>/dev/null || true
|
||||||
|
chmod 700 /root/.ssh
|
||||||
|
chmod 600 /root/.ssh/* 2>/dev/null || true
|
||||||
|
chmod 644 /root/.ssh/*.pub 2>/dev/null || true
|
||||||
|
chmod 644 /root/.ssh/known_hosts 2>/dev/null || true
|
||||||
|
chmod 644 /root/.ssh/config 2>/dev/null || true
|
||||||
|
echo -e "${GREEN}[SSH]${NC} Keys configured"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}[SSH]${NC} No SSH keys mounted at /ssh"
|
||||||
|
echo -e "${YELLOW}[SSH]${NC} Mount with: -v ~/.ssh:/ssh:ro"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Playbook Setup ---
|
||||||
|
if [ ! -f "/playbook/setup.yml" ]; then
|
||||||
|
echo -e "${GREEN}[PLAYBOOK]${NC} Cloning matrix-docker-ansible-deploy..."
|
||||||
|
git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git /tmp/playbook
|
||||||
|
mv /tmp/playbook/* /playbook/
|
||||||
|
mv /tmp/playbook/.* /playbook/ 2>/dev/null || true
|
||||||
|
rm -rf /tmp/playbook
|
||||||
|
echo -e "${GREEN}[PLAYBOOK]${NC} Playbook cloned successfully"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[PLAYBOOK]${NC} Playbook already present"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Inventory Setup ---
|
||||||
|
if [ -d "/inventory" ] && [ "$(ls -A /inventory 2>/dev/null)" ]; then
|
||||||
|
echo -e "${GREEN}[INVENTORY]${NC} Linking inventory from /inventory mount..."
|
||||||
|
rm -rf /playbook/inventory 2>/dev/null || true
|
||||||
|
ln -sf /inventory /playbook/inventory
|
||||||
|
echo -e "${GREEN}[INVENTORY]${NC} Inventory linked: /playbook/inventory -> /inventory"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}[INVENTORY]${NC} No inventory mounted at /inventory"
|
||||||
|
echo -e "${YELLOW}[INVENTORY]${NC} Mount with: -v /path/to/inventory:/inventory"
|
||||||
|
mkdir -p /playbook/inventory
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Install/Update Ansible Roles ---
|
||||||
|
if [ -f "/playbook/requirements.yml" ]; then
|
||||||
|
if [ ! -d "/playbook/roles/galaxy" ] || [ "${UPDATE_ROLES:-false}" = "true" ]; then
|
||||||
|
echo -e "${GREEN}[ROLES]${NC} Installing Ansible Galaxy roles..."
|
||||||
|
cd /playbook
|
||||||
|
rm -rf roles/galaxy
|
||||||
|
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force
|
||||||
|
echo -e "${GREEN}[ROLES]${NC} Roles installed successfully"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[ROLES]${NC} Roles already installed (set UPDATE_ROLES=true to refresh)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Display Status ---
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}----------------------------------------${NC}"
|
||||||
|
echo -e "${GREEN}Status:${NC}"
|
||||||
|
echo -e " Ansible: $(ansible --version | head -1)"
|
||||||
|
echo -e " Playbook: /playbook"
|
||||||
|
echo -e " Inventory: /playbook/inventory"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}Quick Commands:${NC}"
|
||||||
|
echo -e " just install-all # Full installation"
|
||||||
|
echo -e " just setup-all # Setup all components"
|
||||||
|
echo -e " just roles # Update roles"
|
||||||
|
echo -e " just update # git pull + update roles"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}----------------------------------------${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
exec "$@"
|
||||||
33
compose-files/replicant/tinymediamanager/docker-compose.yml
Normal file
33
compose-files/replicant/tinymediamanager/docker-compose.yml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
services:
|
||||||
|
tinymediamanager:
|
||||||
|
image: romancin/tinymediamanager:latest-v4
|
||||||
|
container_name: tinymediamanager
|
||||||
|
environment:
|
||||||
|
- USER_ID=1000
|
||||||
|
- GROUP_ID=1000
|
||||||
|
- TZ=America/Indiana/Indianapolis
|
||||||
|
- DISPLAY_WIDTH=1920
|
||||||
|
- DISPLAY_HEIGHT=1080
|
||||||
|
- KEEP_APP_RUNNING=1
|
||||||
|
- CLEAN_TMP_DIR=1
|
||||||
|
volumes:
|
||||||
|
- ./config:/config
|
||||||
|
- /volume1/Media:/media
|
||||||
|
ports:
|
||||||
|
- "45800:5800" # Web UI
|
||||||
|
- "45900:5900" # VNC
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 1G
|
||||||
|
cpus: '2.0'
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
- "com.centurylinklabs.watchtower.enable=true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
40
playbooks/deploy-autoscan.yml
Normal file
40
playbooks/deploy-autoscan.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
- name: Deploy Autoscan to replicant
|
||||||
|
hosts: replicant
|
||||||
|
vars:
|
||||||
|
service_name: autoscan
|
||||||
|
service_dir: /home/maddox/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
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create config subdirectory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ service_dir }}/config"
|
||||||
|
state: directory
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Copy docker-compose.yml
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/docker-compose.yml"
|
||||||
|
dest: "{{ service_dir }}/docker-compose.yml"
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Deploy container
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ service_dir }}"
|
||||||
|
state: present
|
||||||
|
pull: always
|
||||||
|
become: yes
|
||||||
|
become_user: maddox
|
||||||
40
playbooks/deploy-channeltube.yml
Normal file
40
playbooks/deploy-channeltube.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
- name: Deploy ChannelTube to replicant
|
||||||
|
hosts: replicant
|
||||||
|
vars:
|
||||||
|
service_name: channeltube
|
||||||
|
service_dir: /home/maddox/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
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create config subdirectory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ service_dir }}/config"
|
||||||
|
state: directory
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Copy docker-compose.yml
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/docker-compose.yml"
|
||||||
|
dest: "{{ service_dir }}/docker-compose.yml"
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Deploy container
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ service_dir }}"
|
||||||
|
state: present
|
||||||
|
pull: always
|
||||||
|
become: yes
|
||||||
|
become_user: maddox
|
||||||
40
playbooks/deploy-dispatcharr.yml
Normal file
40
playbooks/deploy-dispatcharr.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
- name: Deploy Dispatcharr to replicant
|
||||||
|
hosts: replicant
|
||||||
|
vars:
|
||||||
|
service_name: dispatcharr
|
||||||
|
service_dir: /home/maddox/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
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create data subdirectory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ service_dir }}/data"
|
||||||
|
state: directory
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Copy docker-compose.yml
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/docker-compose.yml"
|
||||||
|
dest: "{{ service_dir }}/docker-compose.yml"
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Deploy container
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ service_dir }}"
|
||||||
|
state: present
|
||||||
|
pull: always
|
||||||
|
become: yes
|
||||||
|
become_user: maddox
|
||||||
104
playbooks/deploy-matrix-ansible-controller.yml
Normal file
104
playbooks/deploy-matrix-ansible-controller.yml
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
---
|
||||||
|
# Deploy Matrix Ansible Controller
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook playbooks/deploy-matrix-ansible-controller.yml
|
||||||
|
#
|
||||||
|
# After deployment:
|
||||||
|
# ssh replicant
|
||||||
|
# docker exec -it matrix-ansible-controller bash
|
||||||
|
# # Copy your vars.yml to data/inventory/host_vars/matrix.yourdomain.com/
|
||||||
|
|
||||||
|
- name: Deploy Matrix Ansible Controller
|
||||||
|
hosts: replicant
|
||||||
|
vars:
|
||||||
|
service_name: matrix-ansible-controller
|
||||||
|
service_dir: /home/maddox/docker/appdata/{{ service_name }}
|
||||||
|
compose_src: "{{ playbook_dir }}/../compose-files/replicant/{{ service_name }}"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Create service directory structure
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
loop:
|
||||||
|
- "{{ service_dir }}"
|
||||||
|
- "{{ service_dir }}/data"
|
||||||
|
- "{{ service_dir }}/data/playbook"
|
||||||
|
- "{{ service_dir }}/data/inventory"
|
||||||
|
- "{{ service_dir }}/data/inventory/host_vars"
|
||||||
|
- "{{ service_dir }}/data/ansible-cache"
|
||||||
|
|
||||||
|
- name: Copy Dockerfile
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/Dockerfile"
|
||||||
|
dest: "{{ service_dir }}/Dockerfile"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Copy entrypoint script
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/entrypoint.sh"
|
||||||
|
dest: "{{ service_dir }}/entrypoint.sh"
|
||||||
|
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: Build Docker image
|
||||||
|
community.docker.docker_image:
|
||||||
|
name: matrix-ansible-controller
|
||||||
|
tag: latest
|
||||||
|
source: build
|
||||||
|
build:
|
||||||
|
path: "{{ service_dir }}"
|
||||||
|
pull: yes
|
||||||
|
state: present
|
||||||
|
force_source: yes
|
||||||
|
|
||||||
|
- name: Deploy container
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ service_dir }}"
|
||||||
|
state: present
|
||||||
|
pull: always
|
||||||
|
|
||||||
|
- name: Display next steps
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: |
|
||||||
|
|
||||||
|
✅ Matrix Ansible Controller deployed!
|
||||||
|
|
||||||
|
=== NEXT STEPS ===
|
||||||
|
|
||||||
|
1. Copy your Matrix inventory to the container:
|
||||||
|
|
||||||
|
ssh replicant
|
||||||
|
cd /home/maddox/docker/appdata/matrix-ansible-controller/data/inventory
|
||||||
|
|
||||||
|
# Create the structure:
|
||||||
|
mkdir -p host_vars/matrix.yourdomain.com
|
||||||
|
|
||||||
|
# Copy your vars.yml (from wherever it currently lives):
|
||||||
|
# Option A: From another machine via scp
|
||||||
|
# Option B: Create/paste manually
|
||||||
|
|
||||||
|
# Also create/copy the hosts file:
|
||||||
|
cat > hosts << 'HOSTS'
|
||||||
|
[matrix_servers]
|
||||||
|
matrix.yourdomain.com ansible_host=YOUR_MATRIX_IP ansible_ssh_user=root
|
||||||
|
HOSTS
|
||||||
|
|
||||||
|
2. Enter the container and test:
|
||||||
|
|
||||||
|
docker exec -it matrix-ansible-controller bash
|
||||||
|
ansible -i inventory/hosts all -m ping
|
||||||
|
|
||||||
|
3. Run Matrix updates:
|
||||||
|
|
||||||
|
just update # Update playbook + roles
|
||||||
|
just install-all # Deploy changes
|
||||||
|
|
||||||
|
===================================
|
||||||
15
playbooks/deploy-phase2-batch2.yml
Normal file
15
playbooks/deploy-phase2-batch2.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
# Combined playbook for Phase 2 Batch 2 migrations
|
||||||
|
# Run with: ansible-playbook playbooks/deploy-phase2-batch2.yml
|
||||||
|
|
||||||
|
- name: Deploy TinyMediaManager
|
||||||
|
import_playbook: deploy-tinymediamanager.yml
|
||||||
|
|
||||||
|
- name: Deploy Autoscan
|
||||||
|
import_playbook: deploy-autoscan.yml
|
||||||
|
|
||||||
|
- name: Deploy ChannelTube
|
||||||
|
import_playbook: deploy-channeltube.yml
|
||||||
|
|
||||||
|
- name: Deploy Dispatcharr
|
||||||
|
import_playbook: deploy-dispatcharr.yml
|
||||||
40
playbooks/deploy-tinymediamanager.yml
Normal file
40
playbooks/deploy-tinymediamanager.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
- name: Deploy TinyMediaManager to replicant
|
||||||
|
hosts: replicant
|
||||||
|
vars:
|
||||||
|
service_name: tinymediamanager
|
||||||
|
service_dir: /home/maddox/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
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create config subdirectory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ service_dir }}/config"
|
||||||
|
state: directory
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Copy docker-compose.yml
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ compose_src }}/docker-compose.yml"
|
||||||
|
dest: "{{ service_dir }}/docker-compose.yml"
|
||||||
|
owner: maddox
|
||||||
|
group: maddox
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Deploy container
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ service_dir }}"
|
||||||
|
state: present
|
||||||
|
pull: always
|
||||||
|
become: yes
|
||||||
|
become_user: maddox
|
||||||
Loading…
Reference in a new issue