Files
easystream/docker-compose.yml
Krystie 29c3c6fc8a feat: Add Meilisearch full-text search with autocomplete and filters
- Add Meilisearch v1.6 service to docker-compose.yml
- Create search indexer with batch and incremental indexing
- Build search API with filters (category, duration, date, content type)
- Add autocomplete API with trending query suggestions
- Implement modern search UI with real-time autocomplete
- Add db_search_queries table for tracking trending searches
- Document setup and usage in docs/MEILISEARCH.md

Features:
- Blazing fast search (5-15ms typical)
- Advanced filters and faceted search
- Real-time autocomplete suggestions
- Trending queries tracking
- Responsive pagination
- Production-ready with proper error handling
2026-03-30 17:07:04 -07:00

191 lines
4.6 KiB
YAML

version: "3.8"
services:
db:
image: mariadb:10.6
container_name: vs-db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: easystream
MYSQL_USER: easystream
MYSQL_PASSWORD: easystream
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
- ./__install/easystream.sql:/docker-entrypoint-initdb.d/1-main_schema.sql:ro
- ./__install/add_advanced_features.sql:/docker-entrypoint-initdb.d/2-advanced_features.sql:ro
- ./deploy/init_settings.sql:/docker-entrypoint-initdb.d/3-init_settings.sql:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -proot --silent || exit 1"]
start_period: 120s
interval: 10s
timeout: 5s
retries: 30
php:
build:
context: .
dockerfile: Dockerfile.php
container_name: vs-php
working_dir: /srv/easystream
environment:
TZ: UTC
DB_HOST: db
DB_NAME: easystream
DB_USER: easystream
DB_PASS: easystream
PREFLIGHT_ENABLE: "1"
MAIN_URL: http://localhost:8083
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_DB: 0
volumes:
- ./:/srv/easystream
- rtmp_hls:/var/www/hls:ro
- rtmp_rec:/mnt/rec:ro
caddy:
image: caddy:2-alpine
container_name: vs-caddy
depends_on:
db:
condition: service_healthy
php:
condition: service_started
srs:
condition: service_started
ports:
- "8083:80"
- "8443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./:/srv/easystream:ro
- rtmp_hls:/var/www/hls:ro
- caddy_data:/data
- caddy_config:/config
srs:
image: ossrs/srs:5
container_name: vs-srs
ports:
- "1935:1935" # RTMP ingest
volumes:
- ./deploy/srs.conf:/usr/local/srs/conf/srs.conf:ro
- rtmp_hls:/srs/hls
- rtmp_rec:/srs/rec
command: ["/usr/local/srs/objs/srs", "-c", "/usr/local/srs/conf/srs.conf"]
restart: unless-stopped
cron:
build:
context: .
dockerfile: Dockerfile.cron
container_name: vs-cron
depends_on:
php:
condition: service_started
environment:
TZ: UTC
DB_HOST: db
DB_NAME: easystream
DB_USER: easystream
DB_PASS: easystream
CRON_BASE_URL: http://localhost:8083
CRON_SSK: IOpeCV5jyJ6SIbg2ySIB5os5RX3a1a9LIjyJmGfShcPovdx43GmBHgsJTXbo71CD4df4oFKikCZxJS4f
VOD_REC_PATH: /mnt/rec
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_DB: 0
volumes:
- ./:/srv/easystream
- rtmp_rec:/mnt/rec:ro
redis:
image: redis:7-alpine
container_name: vs-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
queue-worker:
build:
context: .
dockerfile: Dockerfile.php
container_name: vs-queue-worker
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
environment:
TZ: UTC
DB_HOST: db
DB_NAME: easystream
DB_USER: easystream
DB_PASS: easystream
REDIS_HOST: redis
REDIS_PORT: 6379
WORKER_QUEUES: "default,video,email,notifications"
WORKER_SLEEP: 3
WORKER_TIMEOUT: 300
volumes:
- ./:/srv/easystream
- rtmp_hls:/var/www/hls:ro
- rtmp_rec:/mnt/rec:ro
command: php f_scripts/queue_worker.php
restart: unless-stopped
abr:
image: jrottenberg/ffmpeg:5.1-ubuntu
container_name: vs-abr
entrypoint: ["/bin/bash"]
command: ["/abr.sh"]
depends_on:
srs:
condition: service_started
environment:
ABR_STREAM_KEY: testkey
volumes:
- rtmp_hls:/var/www/hls
- ./deploy/abr.sh:/abr.sh:ro
restart: unless-stopped
meilisearch:
image: getmeili/meilisearch:v1.6
container_name: vs-meilisearch
ports:
- "7700:7700"
environment:
MEILI_ENV: production
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-changeme_meilisearch_master_key}
MEILI_NO_ANALYTICS: "true"
MEILI_HTTP_PAYLOAD_SIZE_LIMIT: 104857600
volumes:
- meilisearch_data:/meili_data
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--spider", "http://localhost:7700/health"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db_data:
redis_data:
rtmp_hls:
rtmp_rec:
caddy_data:
caddy_config:
meilisearch_data: