Files
hotelsync/docker-compose.yml
HotelSync c233590c4b Major UX improvements across multiple pages
Шахматка:
- Date/period picker dropdown on navigation button (choose start date + days window)
- Cancelled bookings fade out with animation after 1 second

Бронирования:
- Clickable column headers with sort asc/desc (Гость, Заезд, Выезд, Статус, Источник, Сумма)

Страница входа:
- Removed role-based account selector — just email + password
- System auto-detects role/hotel from credentials

Настройки:
- New "Бронирование" section with room assignment strategy (spread/together/sequential/manual)
- Notifications: SMTP email config + SMS provider config (SMSC, SMS.ru, МТС, etc.)

Модули:
- Added Housekeeping and Channel Manager as proper modules
- Channel Manager lists: Booking.com, Airbnb, Яндекс Путешествия, Островок, Суточно.ру, OneTwoTrip
- Housekeeping visible to all roles (including housekeeper) via module status
- Sidebar now uses module status to show/hide Уборка and Каналы

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:20:05 +03:00

110 lines
3.6 KiB
YAML

version: '3.9'
services:
# ── Frontend (React) ───────────────────────────────────────────────────────
frontend:
build:
context: .
dockerfile: Dockerfile
container_name: hotelsync-frontend
restart: unless-stopped
networks:
- hotelsync-net
# ── API (Node.js + Fastify + PostgreSQL) ──────────────────────────────────
api:
build:
context: ./backend
dockerfile: Dockerfile
container_name: hotelsync-api
restart: unless-stopped
env_file: .env
environment:
NODE_ENV: production
PORT: "3000"
DATABASE_URL: postgresql://${POSTGRES_USER:-hotelsync}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-hotelsync}
REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
JWT_SECRET: ${JWT_SECRET}
CORS_ORIGINS: "https://app.hotelsync.ru,http://localhost:5173"
depends_on:
- postgres
- redis
networks:
- hotelsync-net
# ── PostgreSQL ─────────────────────────────────────────────────────────────
postgres:
image: postgres:16-alpine
container_name: hotelsync-postgres
restart: unless-stopped
env_file: .env
environment:
POSTGRES_DB: ${POSTGRES_DB:-hotelsync}
POSTGRES_USER: ${POSTGRES_USER:-hotelsync}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- hotelsync-net
# ── Redis ──────────────────────────────────────────────────────────────────
redis:
image: redis:7-alpine
container_name: hotelsync-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
networks:
- hotelsync-net
# ── Nginx (reverse proxy + SSL) ────────────────────────────────────────────
nginx:
image: nginx:alpine
container_name: hotelsync-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- ./deploy/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./deploy/nginx/conf.d:/etc/nginx/conf.d:ro
- certbot_www:/var/www/certbot:ro
- certbot_certs:/etc/letsencrypt:ro
depends_on:
- frontend
- api
networks:
- hotelsync-net
# ── Adminer (DB Web UI) ────────────────────────────────────────────────────
adminer:
image: adminer:latest
container_name: hotelsync-adminer
restart: unless-stopped
environment:
ADMINER_DEFAULT_SERVER: postgres
networks:
- hotelsync-net
# ── Certbot (SSL Let's Encrypt) ────────────────────────────────────────────
certbot:
image: certbot/certbot
container_name: hotelsync-certbot
volumes:
- certbot_www:/var/www/certbot
- certbot_certs:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
volumes:
postgres_data:
redis_data:
certbot_www:
certbot_certs:
networks:
hotelsync-net:
driver: bridge