feat: Add Step 13 - Search System with Apache Solr and Data Persistence
- Implemented search service with Apache Solr instead of Elasticsearch - Added full-text search, faceted search, and autocomplete capabilities - Created data indexer for synchronizing data from MongoDB/Kafka to Solr - Configured external volume mounts for all data services: - MongoDB, Redis, Kafka, Zookeeper, MinIO, Solr - All data now persists in ./data/ directory - Added comprehensive search API endpoints - Created documentation for data persistence and backup strategies 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -76,7 +76,7 @@ services:
|
||||
- CONVERT_TO_WEBP=true
|
||||
volumes:
|
||||
- ./services/images/backend:/app
|
||||
- images_cache:/app/cache
|
||||
- ./data/images-cache:/app/cache
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -118,8 +118,8 @@ services:
|
||||
ports:
|
||||
- "${MONGODB_PORT}:27017"
|
||||
volumes:
|
||||
- mongodb_data:/data/db
|
||||
- mongodb_config:/data/configdb
|
||||
- ./data/mongodb:/data/db
|
||||
- ./data/mongodb/configdb:/data/configdb
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -135,7 +135,7 @@ services:
|
||||
ports:
|
||||
- "${REDIS_PORT}:6379"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
- ./data/redis:/data
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -154,8 +154,8 @@ services:
|
||||
ports:
|
||||
- "${KAFKA_ZOOKEEPER_PORT}:2181"
|
||||
volumes:
|
||||
- zookeeper_data:/var/lib/zookeeper/data
|
||||
- zookeeper_logs:/var/lib/zookeeper/log
|
||||
- ./data/zookeeper/data:/var/lib/zookeeper/data
|
||||
- ./data/zookeeper/logs:/var/lib/zookeeper/log
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -181,7 +181,7 @@ services:
|
||||
KAFKA_JMX_HOSTNAME: localhost
|
||||
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
|
||||
volumes:
|
||||
- kafka_data:/var/lib/kafka/data
|
||||
- ./data/kafka:/var/lib/kafka/data
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -234,7 +234,7 @@ services:
|
||||
- MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin}
|
||||
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin}
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
- ./data/minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
networks:
|
||||
- site11_network
|
||||
@ -264,7 +264,7 @@ services:
|
||||
- MINIO_SECURE=false
|
||||
volumes:
|
||||
- ./services/files/backend:/app
|
||||
- files_temp:/tmp
|
||||
- ./data/files-temp:/tmp
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
@ -277,6 +277,57 @@ services:
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Apache Solr Search Engine
|
||||
solr:
|
||||
image: solr:9.4
|
||||
container_name: ${COMPOSE_PROJECT_NAME}_solr
|
||||
ports:
|
||||
- "8983:8983"
|
||||
volumes:
|
||||
- ./data/solr:/var/solr
|
||||
- ./services/search/solr-config:/opt/solr/server/solr/configsets/site11_config
|
||||
command:
|
||||
- solr-precreate
|
||||
- site11
|
||||
- /opt/solr/server/solr/configsets/site11_config
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8983/solr/site11/admin/ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Search Service
|
||||
search-backend:
|
||||
build:
|
||||
context: ./services/search/backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: ${COMPOSE_PROJECT_NAME}_search_backend
|
||||
ports:
|
||||
- "8015:8000"
|
||||
environment:
|
||||
- ENV=${ENV}
|
||||
- PORT=8000
|
||||
- SOLR_URL=http://solr:8983/solr
|
||||
- MONGODB_URL=${MONGODB_URL}
|
||||
- KAFKA_BOOTSTRAP_SERVERS=${KAFKA_BOOTSTRAP_SERVERS}
|
||||
volumes:
|
||||
- ./services/search/backend:/app
|
||||
networks:
|
||||
- site11_network
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- solr
|
||||
- mongodb
|
||||
- kafka
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Statistics Service
|
||||
statistics-backend:
|
||||
build:
|
||||
@ -308,13 +359,15 @@ networks:
|
||||
driver: bridge
|
||||
name: site11_network
|
||||
|
||||
volumes:
|
||||
mongodb_data:
|
||||
mongodb_config:
|
||||
redis_data:
|
||||
images_cache:
|
||||
zookeeper_data:
|
||||
zookeeper_logs:
|
||||
kafka_data:
|
||||
minio_data:
|
||||
files_temp:
|
||||
# Named volumes are replaced with bind mounts in ./data/ directory
|
||||
# volumes:
|
||||
# mongodb_data:
|
||||
# mongodb_config:
|
||||
# redis_data:
|
||||
# images_cache:
|
||||
# zookeeper_data:
|
||||
# zookeeper_logs:
|
||||
# kafka_data:
|
||||
# minio_data:
|
||||
# files_temp:
|
||||
# solr_data:
|
||||
Reference in New Issue
Block a user