-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
122 lines (110 loc) · 4.06 KB
/
docker-compose.yml
File metadata and controls
122 lines (110 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
version: '3.8'
services:
mysql:
image: mysql:8.4
container_name: ${COMPOSE_PROJECT_NAME:-mygramdb}_mysql
restart: unless-stopped
environment:
# Passwords must be set via .env file or environment variables (no defaults for security)
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?MYSQL_ROOT_PASSWORD must be set}
MYSQL_DATABASE: ${MYSQL_DATABASE:-mydb}
MYSQL_USER: ${MYSQL_USER:-repl_user}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:?MYSQL_PASSWORD must be set}
command:
- --server-id=1
- --log-bin=mysql-bin
- --gtid-mode=ON
- --enforce-gtid-consistency=ON
- --binlog-row-image=FULL
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./support/docker/mysql/init:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- mygramdb_network
mygramdb:
image: mygramdb:${MYGRAMDB_VERSION:-latest}
container_name: ${COMPOSE_PROJECT_NAME:-mygramdb}_app
restart: unless-stopped
build:
context: .
dockerfile: Dockerfile
depends_on:
mysql:
condition: service_healthy
environment:
# MySQL Configuration
MYSQL_HOST: ${MYSQL_HOST:-mysql}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-repl_user}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:?MYSQL_PASSWORD must be set}
MYSQL_DATABASE: ${MYSQL_DATABASE:-mydb}
MYSQL_USE_GTID: ${MYSQL_USE_GTID:-true}
MYSQL_CONNECT_TIMEOUT_MS: ${MYSQL_CONNECT_TIMEOUT_MS:-3000}
# Table Configuration
TABLE_NAME: ${TABLE_NAME:-articles}
TABLE_PRIMARY_KEY: ${TABLE_PRIMARY_KEY:-id}
TABLE_TEXT_COLUMN: ${TABLE_TEXT_COLUMN:-content}
TABLE_NGRAM_SIZE: ${TABLE_NGRAM_SIZE:-2}
TABLE_KANJI_NGRAM_SIZE: ${TABLE_KANJI_NGRAM_SIZE:-1}
# Replication Configuration
REPLICATION_ENABLE: ${REPLICATION_ENABLE:-true}
REPLICATION_SERVER_ID: ${REPLICATION_SERVER_ID:-12345}
REPLICATION_START_FROM: ${REPLICATION_START_FROM:-snapshot}
# Build Configuration
BUILD_BATCH_SIZE: ${BUILD_BATCH_SIZE:-5000}
BUILD_PARALLELISM: ${BUILD_PARALLELISM:-2}
# Memory Management
MEMORY_HARD_LIMIT_MB: ${MEMORY_HARD_LIMIT_MB:-8192}
MEMORY_SOFT_TARGET_MB: ${MEMORY_SOFT_TARGET_MB:-4096}
MEMORY_NORMALIZE_NFKC: ${MEMORY_NORMALIZE_NFKC:-true}
MEMORY_NORMALIZE_WIDTH: ${MEMORY_NORMALIZE_WIDTH:-narrow}
MEMORY_NORMALIZE_LOWER: ${MEMORY_NORMALIZE_LOWER:-false}
MEMORY_VERIFY_TEXT: ${MEMORY_VERIFY_TEXT:-off}
# Snapshot Configuration
SNAPSHOT_DIR: ${SNAPSHOT_DIR:-/var/lib/mygramdb/snapshots}
SNAPSHOT_INTERVAL_SEC: ${SNAPSHOT_INTERVAL_SEC:-600}
SNAPSHOT_RETAIN: ${SNAPSHOT_RETAIN:-3}
# API Server Configuration
API_BIND: ${API_BIND:-0.0.0.0}
API_PORT: ${API_PORT:-11016}
API_HTTP_ENABLE: ${API_HTTP_ENABLE:-true}
API_HTTP_BIND: ${API_HTTP_BIND:-0.0.0.0}
API_HTTP_PORT: ${API_HTTP_PORT:-8080}
# Network Configuration
# IMPORTANT: For production, restrict to specific IP ranges (e.g., "10.0.0.0/8,172.16.0.0/12")
# For development/testing, use "0.0.0.0/0" to allow all connections
NETWORK_ALLOW_CIDRS: ${NETWORK_ALLOW_CIDRS:?NETWORK_ALLOW_CIDRS must be set in .env}
# Logging Configuration
LOG_LEVEL: ${LOG_LEVEL:-info}
LOG_FORMAT: ${LOG_FORMAT:-json}
ports:
- "${API_PORT:-11016}:${API_PORT:-11016}"
- "${API_HTTP_PORT:-8080}:${API_HTTP_PORT:-8080}"
volumes:
- mygramdb_data:/var/lib/mygramdb
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8080/health/live"]
interval: 30s
timeout: 3s
retries: 3
start_period: 10s
networks:
- mygramdb_network
volumes:
mysql_data:
driver: local
mygramdb_data:
driver: local
networks:
mygramdb_network:
driver: bridge