97 lines
2.8 KiB
YAML
97 lines
2.8 KiB
YAML
version: "3.8"
|
||
|
||
services:
|
||
|
||
### MongoDB (single-node replica set + oplog)
|
||
mongo:
|
||
image: mongo:6
|
||
command: ["--replSet","rs0","--oplogSize","128"]
|
||
volumes:
|
||
- mongo_data:/data/db
|
||
networks:
|
||
- rocketchat-net
|
||
healthcheck:
|
||
test: ["CMD","mongosh","--quiet","--eval","db.adminCommand('ping').ok"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- node.labels.platform == prod # İstersen kaldırabilirsin
|
||
|
||
### ReplSet init (tek seferlik)
|
||
mongo-init-replica:
|
||
image: mongo:6
|
||
networks:
|
||
- rocketchat-net
|
||
# rs.init zaten yapılmışsa hata vermesin diye OR'lu komut
|
||
command: >
|
||
bash -lc "
|
||
mongosh --host mongo:27017 --quiet --eval
|
||
'try { rs.initiate({_id:\"rs0\", members:[{_id:0, host:\"mongo:27017\"}]}) } catch(e) { rs.status().ok }'
|
||
"
|
||
deploy:
|
||
restart_policy:
|
||
condition: none
|
||
placement:
|
||
constraints:
|
||
- node.labels.platform == prod
|
||
|
||
### Rocket.Chat
|
||
rocketchat:
|
||
image: registry.rocket.chat/rocketchat/rocket.chat:latest
|
||
environment:
|
||
- PORT=3000
|
||
- ROOT_URL=https://chat.emrekirman.xyz # <- kendi domainini yaz
|
||
- MONGO_URL=mongodb://mongo:27017/rocketchat?replicaSet=rs0
|
||
- MONGO_OPLOG_URL=mongodb://mongo:27017/local?replicaSet=rs0
|
||
- REDIS_URL=redis://:98836@redis:6379
|
||
# İsteğe bağlı: Türkçe varsayılan dil
|
||
- OVERWRITE_SETTING_Language=tr
|
||
volumes:
|
||
- uploads:/app/uploads
|
||
networks:
|
||
- mongodb_backend-net
|
||
- traefik-public
|
||
- redis_redis_net
|
||
- rocketchat-net
|
||
deploy:
|
||
replicas: 2 # Traefik sticky cookie ile çoklayabiliyoruz
|
||
update_config:
|
||
order: start-first
|
||
parallelism: 1
|
||
delay: 5s
|
||
restart_policy:
|
||
condition: on-failure
|
||
placement:
|
||
constraints:
|
||
- node.labels.platform == prod
|
||
labels:
|
||
- traefik.enable=true
|
||
# Router
|
||
- traefik.http.routers.rocketchat.rule=Host(`chat.emrekirman.xyz`)
|
||
- traefik.http.routers.rocketchat.entrypoints=websecure
|
||
- traefik.http.routers.rocketchat.tls.certresolver=myresolver
|
||
- traefik.http.routers.rocketchat.service=rocketchat
|
||
# Service (websocket uyumlu, sticky önerilir)
|
||
- traefik.http.services.rocketchat.loadbalancer.server.port=3000
|
||
- traefik.http.services.rocketchat.loadbalancer.sticky.cookie=true
|
||
- traefik.http.services.rocketchat.loadbalancer.sticky.cookie.name=rc_sticky
|
||
# (İsteğe bağlı) www → çıplak alan ya da tersi için ek router ekleyebilirsin
|
||
|
||
networks:
|
||
traefik-public:
|
||
external: true
|
||
mongodb_backend-net:
|
||
external: true
|
||
redis_redis_net:
|
||
external: true
|
||
rocketchat-net:
|
||
driver: overlay
|
||
|
||
volumes:
|
||
mongo_data:
|
||
redis_data:
|
||
uploads:
|