2026-01-02 06:18:48 +07:00
|
|
|
version: '3.8'
|
|
|
|
|
|
|
|
|
|
services:
|
2026-08-08 11:57:08 +07:00
|
|
|
postgres:
|
|
|
|
|
image: postgres:18-alpine
|
|
|
|
|
network_mode: service:elemes-ts
|
|
|
|
|
environment:
|
|
|
|
|
- POSTGRES_DB=${POSTGRES_DB:-elemes}
|
|
|
|
|
- POSTGRES_USER=${POSTGRES_USER:-elemes}
|
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
|
|
|
volumes:
|
|
|
|
|
- postgres-data:/var/lib/postgresql
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-elemes} -d ${POSTGRES_DB:-elemes}"]
|
|
|
|
|
interval: 5s
|
|
|
|
|
timeout: 3s
|
|
|
|
|
retries: 20
|
|
|
|
|
start_period: 10s
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- elemes-ts
|
|
|
|
|
|
2026-08-01 19:56:51 +07:00
|
|
|
elemes-ts:
|
|
|
|
|
image: docker.io/tailscale/tailscale:latest
|
|
|
|
|
hostname: ${ELEMES_HOST}
|
|
|
|
|
environment:
|
|
|
|
|
- TS_AUTHKEY=${TS_AUTHKEY}
|
|
|
|
|
- TS_SERVE_CONFIG=/config/lms-tail.json
|
|
|
|
|
- TS_STATE_DIR=/var/lib/tailscale
|
|
|
|
|
- TS_USERSPACE=true
|
|
|
|
|
volumes:
|
|
|
|
|
- ../state:/var/lib/tailscale
|
|
|
|
|
- ./config:/config
|
|
|
|
|
- /dev/net/tun:/dev/net/tun
|
|
|
|
|
cap_add:
|
|
|
|
|
- net_admin
|
|
|
|
|
- sys_module
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
env_file:
|
|
|
|
|
- ../.env
|
|
|
|
|
|
2026-01-06 21:38:54 +07:00
|
|
|
elemes:
|
2026-04-13 17:32:44 +07:00
|
|
|
build: .
|
2026-05-01 09:09:45 +07:00
|
|
|
image: lms-backend:latest
|
2026-08-01 19:56:51 +07:00
|
|
|
network_mode: service:elemes-ts
|
2026-01-02 06:18:48 +07:00
|
|
|
volumes:
|
2026-04-21 15:13:16 +07:00
|
|
|
- ../content:/app/content:ro
|
|
|
|
|
- ../assets:/app/assets:ro
|
2026-01-06 21:38:54 +07:00
|
|
|
env_file:
|
|
|
|
|
- ../.env
|
2026-04-21 15:13:16 +07:00
|
|
|
environment:
|
2026-08-01 19:56:51 +07:00
|
|
|
- COMPILER_WORKER_URL=http://127.0.0.1:8080/execute
|
2026-08-02 21:14:45 +07:00
|
|
|
- COMPILER_WORKER_BASE_URL=http://127.0.0.1:8080
|
2026-08-01 19:56:51 +07:00
|
|
|
- VELXIO_COMPILER_URL=http://127.0.0.1:80/api/compile/
|
2026-08-08 11:57:08 +07:00
|
|
|
- DATABASE_URL=${DATABASE_URL}
|
|
|
|
|
- TOKEN_PEPPER=${TOKEN_PEPPER}
|
|
|
|
|
- STORAGE_BACKEND=${STORAGE_BACKEND:-postgresql}
|
2026-08-01 19:56:51 +07:00
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- elemes-ts
|
2026-08-08 11:57:08 +07:00
|
|
|
- postgres
|
2026-01-12 12:03:23 +07:00
|
|
|
# production
|
2026-03-26 13:52:59 +07:00
|
|
|
command: gunicorn --config gunicorn.conf.py "app:create_app()"
|
2026-01-12 12:03:23 +07:00
|
|
|
# debug
|
2026-03-26 13:52:59 +07:00
|
|
|
# command: python app.py
|
2026-01-12 12:03:23 +07:00
|
|
|
|
2026-04-21 15:13:16 +07:00
|
|
|
compiler-worker:
|
|
|
|
|
build: ./compiler_worker
|
2026-05-01 09:09:45 +07:00
|
|
|
image: lms-compiler-worker:latest
|
2026-04-21 15:13:16 +07:00
|
|
|
runtime: runsc # Enable gVisor
|
2026-08-01 19:56:51 +07:00
|
|
|
network_mode: service:elemes-ts
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- elemes-ts
|
2026-04-21 15:13:16 +07:00
|
|
|
|
2026-03-25 09:39:51 +07:00
|
|
|
elemes-frontend:
|
2026-04-13 17:32:44 +07:00
|
|
|
build: ./frontend
|
2026-05-01 09:09:45 +07:00
|
|
|
image: lms-frontend:latest
|
2026-04-20 13:43:45 +07:00
|
|
|
# ports:
|
|
|
|
|
# - 3000:3000
|
2026-08-01 19:56:51 +07:00
|
|
|
network_mode: service:elemes-ts
|
2026-03-25 09:39:51 +07:00
|
|
|
environment:
|
feat(student-management): kelola siswa round-trip CSV + bulk delete (PG)
- Export siswa terpilih/seluruh + progress ke CSV round-trip (token tidak
pernah diekspor; teacher tidak ikut; urutan deterministik)
- Import preview all-or-nothing: siswa existing di-restore (nama+progress,
token lama dipertahankan), siswa baru dibuat dari student_id kosong +
token; conflict tidak menyebut raw token/digest
- Bulk delete multi-seleksi dengan validasi ketat (teacher terlindungi,
zero-delete bila ada ID bermasalah)
- fix(import): deteksi delimiter berbasis schema — menerima titik koma
(;) maupun koma (,), ekspor tetap ';' + BOM; header tab/campuran ditolak
dengan pesan jelas (regresi: file Excel/Sheets kini bisa diimpor)
- refactor: progress_status.py — kontrak status legacy tunggal dipakai
storage PG, export, dan import; report siswa hanya role student
- UI /progress: dialog import/export + bulk delete, selection store,
respon import tanpa raw token; APP_VERSION 22 -> 26
- ops: ORIGIN env var di podman-compose.yml
- docs: README section 9 (workflow round-trip + delimiter) dan
docs/11-database-migration (kelola siswa via round-trip CSV)
- test: parser round-trip (45), repositories, route management (24,
PostgreSQL), frontend 91, fixtures CSV valid/invalid
2026-08-09 07:29:19 +07:00
|
|
|
- ORIGIN=${ORIGIN:-http://localhost:3000}
|
2026-08-01 19:56:51 +07:00
|
|
|
- API_BACKEND=http://127.0.0.1:5000
|
2026-03-27 16:41:57 +07:00
|
|
|
- PUBLIC_APP_BAR_TITLE=${APP_BAR_TITLE}
|
|
|
|
|
- PUBLIC_COPYRIGHT_TEXT=${COPYRIGHT_TEXT}
|
|
|
|
|
- PUBLIC_PAGE_TITLE_SUFFIX=${PAGE_TITLE_SUFFIX}
|
2026-03-31 12:08:42 +07:00
|
|
|
- PUBLIC_CURSOR_OFFSET_Y=${CURSOR_OFFSET_Y:-50}
|
2026-08-01 19:56:51 +07:00
|
|
|
restart: unless-stopped
|
2026-03-25 09:39:51 +07:00
|
|
|
depends_on:
|
2026-08-01 19:56:51 +07:00
|
|
|
- elemes-ts
|
2026-03-25 09:39:51 +07:00
|
|
|
- elemes
|
|
|
|
|
|
2026-04-09 10:51:36 +07:00
|
|
|
velxio:
|
2026-05-01 09:09:45 +07:00
|
|
|
image: lms-velxio:latest
|
2026-04-13 17:32:44 +07:00
|
|
|
build:
|
|
|
|
|
context: ./velxio
|
|
|
|
|
dockerfile: Dockerfile.standalone
|
|
|
|
|
args:
|
|
|
|
|
VITE_BASE_PATH: /velxio/
|
|
|
|
|
VITE_API_BASE: /velxio/api
|
2026-08-01 19:56:51 +07:00
|
|
|
network_mode: service:elemes-ts
|
2026-04-09 10:51:36 +07:00
|
|
|
environment:
|
|
|
|
|
- SECRET_KEY=embed-only-no-auth-needed
|
|
|
|
|
- DATABASE_URL=sqlite+aiosqlite:////app/data/velxio.db
|
|
|
|
|
- DATA_DIR=/app/data
|
2026-08-01 19:56:51 +07:00
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- elemes-ts
|
2026-04-09 10:51:36 +07:00
|
|
|
volumes:
|
|
|
|
|
- velxio-data:/app/data
|
|
|
|
|
- velxio-arduino-libs:/root/.arduino15
|
|
|
|
|
|
2026-05-01 09:09:45 +07:00
|
|
|
flowchart:
|
|
|
|
|
build: ./flowchart
|
|
|
|
|
image: lms-flowchart:latest
|
2026-08-01 19:56:51 +07:00
|
|
|
network_mode: service:elemes-ts
|
2026-01-06 21:38:54 +07:00
|
|
|
restart: unless-stopped
|
2026-03-25 09:39:51 +07:00
|
|
|
depends_on:
|
2026-08-01 19:56:51 +07:00
|
|
|
- elemes-ts
|
2026-01-06 21:38:54 +07:00
|
|
|
|
2026-04-09 10:51:36 +07:00
|
|
|
volumes:
|
2026-08-08 11:57:08 +07:00
|
|
|
postgres-data:
|
2026-04-09 10:51:36 +07:00
|
|
|
velxio-data:
|
|
|
|
|
velxio-arduino-libs:
|