--- - name: Check if Flibusta repository exists stat: path: "{{ flibusta_base_dir }}/docker-compose.yml" register: flibusta_repo - name: Clone Flibusta repository if not exists git: repo: "https://github.com/gibgibik/flibusta.git" dest: "{{ flibusta_base_dir }}" version: main force: no when: not flibusta_repo.stat.exists - name: Ensure application directories exist file: path: "{{ flibusta_base_dir }}/{{ item }}" state: directory mode: 0755 loop: - "cache" - "db" - "Flibusta.Net" - "FlibustaSQL" - "blob" - "application/tools" - name: Set correct ownership for db directory file: path: "{{ flibusta_base_dir }}/db" owner: "999" # PostgreSQL внутри контейнера обычно работает от postgres (UID 999) group: "999" mode: 0755 recurse: yes - name: Copy SQL files from source directory copy: src: "{{ flibusta_source_archives_dir }}/" dest: "{{ flibusta_base_dir }}/FlibustaSQL/" remote_src: true mode: 0644 when: - flibusta_source_archives_dir is defined - flibusta_source_archives_dir != "" - lookup('fileglob', flibusta_source_archives_dir + '/*.sql', wantlist=True) | length > 0 - name: Copy ZIP archives to Flibusta.Net directory copy: src: "{{ flibusta_source_archives_dir }}/" dest: "{{ flibusta_base_dir }}/Flibusta.Net/" remote_src: true mode: 0644 when: - flibusta_source_archives_dir is defined - flibusta_source_archives_dir != "" - lookup('fileglob', flibusta_source_archives_dir + '/*.zip', wantlist=True) | length > 0 - name: Set write permissions for required directories file: path: "{{ flibusta_base_dir }}/{{ item }}" mode: 0777 recurse: yes loop: - "cache" - "FlibustaSQL" - "blob" - name: Set execute permissions for scripts (if exist) block: - name: Check which scripts exist find: paths: "{{ flibusta_base_dir }}" patterns: "*.sh" file_type: file register: found_scripts - name: Set permissions for found scripts file: path: "{{ item.path }}" mode: 0755 loop: "{{ found_scripts.files }}" loop_control: label: "{{ item.path | basename }}" when: flibusta_base_dir is defined - name: Deploy Flibusta docker-compose.yml template: src: docker-compose.yml.j2 dest: "{{ flibusta_base_dir }}/docker-compose.yml" mode: 0644 # Используем прямую сборку и запуск через shell для лучшего контроля - name: Build Flibusta containers shell: | cd {{ flibusta_base_dir }} docker compose build --no-cache args: executable: /bin/bash register: build_result - name: Start Flibusta services community.docker.docker_compose_v2: project_src: "{{ flibusta_base_dir }}" state: present - name: Wait for services to stabilize pause: seconds: 45 - name: Check container statuses shell: | echo "=== Flibusta Containers Status ===" docker ps --filter name=flibusta --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" echo "=== PostgreSQL Logs (last 20 lines) ===" docker logs flibusta_postgres --tail 20 2>/dev/null || echo "PostgreSQL logs not available" echo "" echo "=== PHP-FPM Logs (last 20 lines) ===" docker logs flibusta_php --tail 20 2>/dev/null || echo "PHP-FPM logs not available" echo "" echo "=== Nginx Logs (last 20 lines) ===" docker logs flibusta_nginx --tail 20 2>/dev/null || echo "Nginx logs not available" args: executable: /bin/bash register: container_info changed_when: false - name: Display container information debug: var: container_info.stdout - name: Check if web interface is accessible wait_for: host: "127.0.0.1" port: "{{ flibusta_web_port }}" timeout: 30 delay: 5 ignore_errors: yes register: web_check - name: Display web interface status debug: msg: "Web interface is {{ 'accessible' if web_check.success else 'not accessible yet' }}" - name: Display access information debug: msg: | Flibusta развернута! Доступ: - Web-интерфейс: http://{{ ansible_host }}:{{ flibusta_web_port }} - OPDS каталог: http://{{ ansible_host }}:{{ flibusta_web_port }}/opds/ - PostgreSQL БД: порт {{ flibusta_db_port }} Для завершения установки: 1. Дождитесь полной инициализации контейнеров (может занять несколько минут) 2. Откройте веб-интерфейс 3. Перейдите в меню "Сервис" → "Обновление базы" Если PostgreSQL не запускается, проверьте: - Права на каталог {{ flibusta_base_dir }}/db - Достаточно ли места на диске - Логи контейнера: docker logs flibusta_postgres