Instalace přes Docker Compose
Provoz přes Docker Compose je doporučený, nejrychlejší a nejstabilnější způsob nasazení LockMyCal na vlastním virtuálním nebo dedikovaném serveru (VPS).
Important
LockMyCal zatím nemá veřejně publikovaný Docker image – image si sestavíte sami ze zdrojového kódu. Docker Compose to udělá automaticky přímo z repozitáře (github.com/lockmycal/lockmycal, veřejný repozitář se připravuje).
Systémové požadavky
- OS: Linux (Ubuntu 22.04+, Debian 12+, Rocky Linux nebo macOS)
- Docker: Engine 24.0+ a Docker Compose v2+
- Hardware: Minimálně 1 GB RAM (doporučeno 2 GB) a 1 vCPU
- Doména / DNS: Nastavený A/AAAA záznam směřující na vaši veřejnou IP adresu (např.
calendar.vasedomena.cz)
1. Příprava adresáře a konfigurace .env
Vytvořte adresář pro LockMyCal a připravte konfigurační soubor .env:
mkdir -p /opt/lockmycal && cd /opt/lockmycal
Vygenerujte bezpečné klíče:
# Vygenerování klíče pro webové sessions (64 znaků)
openssl rand -base64 64 | tr -d '\n'
# Vygenerování klíče pro šifrování OAuth tokenů ke kalendářům (48 znaků)
openssl rand -base64 48 | tr -d '\n'
Vytvořte soubor .env:
# ==========================================
# POVINNÉ BEZPEČNOSTNÍ NASTAVENÍ
# ==========================================
SECRET_KEY_BASE=vlozte_vygenerovany_64_znakovy_klic
DATA_ENCRYPTION_KEY=vlozte_vygenerovany_48_znakovy_klic
PHX_HOST=calendar.vasedomena.cz
# ==========================================
# DATABÁZOVÉ NASTAVENÍ (PostgreSQL)
# ==========================================
POSTGRES_USER=lockmycal
POSTGRES_PASSWORD=zvolte_silne_databazove_heslo # povinné
POSTGRES_DB=lockmycal_prod
DATABASE_URL=postgres://lockmycal:zvolte_silne_databazove_heslo@db:5432/lockmycal_prod
# ==========================================
# APLIKAČNÍ NASTAVENÍ
# ==========================================
APP_NAME="LockMyCal"
PORT=4000
LISTEN_IP=0.0.0.0
REGISTRATION_ENABLED=true
# ==========================================
# E-MAILOVÉ NOTIFIKACE (SMTP)
# ==========================================
EMAIL_ADAPTER=smtp
EMAIL_FROM_ADDRESS="rezervace@vasedomena.cz"
EMAIL_FROM_NAME="LockMyCal Rezervace"
SMTP_HOST=smtp.vasedomena.cz
SMTP_PORT=587
SMTP_USERNAME=rezervace@vasedomena.cz
SMTP_PASSWORD=smtp_heslo
2. Vytvoření souboru docker-compose.yml
Vytvořte ve stejné složce soubor docker-compose.yml:
services:
app:
build:
# Docker si repozitář stáhne sám; za # je větev nebo tag verze
context: https://github.com/lockmycal/lockmycal.git#${LOCKMYCAL_VERSION:-main}
dockerfile: Dockerfile.docker
image: lockmycal:${LOCKMYCAL_VERSION:-main}
container_name: lockmycal-app
restart: unless-stopped
env_file:
- .env
ports:
- "127.0.0.1:4000:4000"
depends_on:
db:
condition: service_healthy
volumes:
- app_data:/app/data
db:
image: postgres:17-alpine
container_name: lockmycal-db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-lockmycal}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB:-lockmycal_prod}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-lockmycal} -d ${POSTGRES_DB:-lockmycal_prod}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
pgdata:
app_data:
3. Spuštění a inicializace
Spusťte kontejnery:
docker compose up -d --build
Note
Hodnoty v .env se čtou doslova – ${VAR} ani $(příkaz) se nerozbalí. Proměnné lze uložit i do souboru /app/data/.env ve svazku aplikace, který aplikace načte při startu (databázové klíče POSTGRES_USER, POSTGRES_DB, DATABASE_URL, DATABASE_HOST a DATABASE_PORT se z něj nečtou).
Sledujte start a proběhnutí migrací:
docker compose logs -f app
Important
První registrace Administrátora: První uživatel, který se po startu zaregistruje v prázdné databázi přes webové rozhraní, se automaticky stává hlavním administrátorem. Jakmile je vytvořen alespoň jeden účet, tato automatická brána se trvale uzavře.
4. Správa administrátora přes CLI / RPC
Pokud potřebujete povýšit existujícího uživatele na administrátora dodatečně, spusťte:
docker compose exec app bin/tymeslot rpc 'Tymeslot.Release.promote_admin("uzivatel@vasedomena.cz")'
Pro odebrání administrátorských práv:
docker compose exec app bin/tymeslot rpc 'Tymeslot.Release.demote_admin("uzivatel@vasedomena.cz")'
5. Konfigurace reverzní proxy (Nginx)
Pro zajištění HTTPS a SSL certifikátů (např. přes Let's Encrypt / Certbot) přidejte konfiguraci do Nginxu:
server {
listen 80;
server_name calendar.vasedomena.cz;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name calendar.vasedomena.cz;
ssl_certificate /etc/letsencrypt/live/calendar.vasedomena.cz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/calendar.vasedomena.cz/privkey.pem;
location / {
proxy_pass http://127.0.0.1:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}