Leantime: ADHD/자폐 친화적 오픈소스 프로젝트 관리 도구 Docker 설치 가이드




개요

Leantime은 스타트업과 혁신가를 위한 린(Lean) 오픈소스 프로젝트 관리 시스템입니다. AGPLv3 라이선스로 배포되며, Jira, Asana, Linear의 셀프호스팅 대안입니다. 특히 ADHD, 자폐, 난독증을 가진 사용자를 고려하여 설계된 것이 특징으로, 과도한 복잡성 없이 목표 중심의 프로젝트 관리를 제공합니다.

Leantime의 핵심 철학

Leantime은 “린(Lean)하고 직관적인 프로젝트 관리”를 추구합니다. Jira의 복잡한 설정이 필요 없고, 비개발자도 쉽게 사용할 수 있도록 설계되었습니다. 창업자인 Gloria Folaron은 ADHD를 가진 사용자로서, 신경다양성(Neurodiversity)을 고려한 워크플로우를 구현했습니다.

주요 특징

기능설명
목표 관리OKR/목표 설정 및 추적
마일스톤주요 이정표 관리
Kanban 보드태스크 시각화
타임시트시간 추적 및 기록
로드맵제품/프로젝트 로드맵
리서치 보드아이디어 정리
화이트보드브레인스토밍 (플러그인)
레트로스펙티브팀 회고
보고서진행 상황 리포트
위키/노트문서화 (플러그인)
포모도로집중 타이머 (플러그인)
다국어12+ 언어 지원

신경다양성 친화적 기능

Leantime은 ADHD, 자폐, 난독증을 가진 사용자를 위한 특별한 기능을 제공합니다:

기능설명
컨텍스트 리마인더적절한 타이밍에 알림
감정 기반 우선순위작업의 의미와 중요성 연결
산만함 관리집중을 돕는 인터페이스
지능형 어시스턴트작업 패턴 학습 및 추천
목표 연결작업이 왜 중요한지 이해

프로젝트 관리 도구 비교

기능LeantimeJiraAsanaMonday
오픈소스
셀프호스팅제한적
Kanban 보드
시간 추적플러그인유료
로드맵유료
목표/OKR플러그인유료유료
리서치 보드
레트로플러그인
설정 복잡도낮음매우 높음중간중간
ADHD 친화

시스템 요구 사항

항목최소 사양권장 사양
RAM1GB2GB 이상
CPU1 코어2 코어 이상
저장소5GB20GB 이상
PHP8.1+8.2+
MySQL/MariaDB8.0+ / 10.4+최신 버전
Docker20.10+최신 버전

Docker Compose 설치

기본 설치

mkdir -p ~/leantime && cd ~/leantime

.env 파일:

# MySQL 설정
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_DATABASE=leantime
MYSQL_USER=leantime
MYSQL_PASSWORD=your_secure_password

# Leantime 설정
LEAN_DB_HOST=leantime-db
LEAN_DB_USER=leantime
LEAN_DB_PASSWORD=your_secure_password
LEAN_DB_DATABASE=leantime

# 세션 보안 (필수 - 랜덤 문자열)
LEAN_SESSION_PASSWORD=your-super-secure-session-password-here

# 사이트 설정
LEAN_SITENAME=My Leantime
LEAN_LANGUAGE=ko-KR
LEAN_DEFAULT_TIMEZONE=Asia/Seoul

# 이메일 설정 (선택사항)
LEAN_EMAIL_SMTP_ENABLED=true
LEAN_EMAIL_SMTP_HOST=smtp.example.com
LEAN_EMAIL_SMTP_PORT=587
LEAN_EMAIL_SMTP_USERNAME=your-email@example.com
LEAN_EMAIL_SMTP_PASSWORD=your-email-password
LEAN_EMAIL_RETURN=noreply@example.com

docker-compose.yml:

version: "3.8"

services:
  leantime-db:
    image: mysql:8.0
    container_name: leantime-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - leantime-db-data:/var/lib/mysql
    networks:
      - leantime-network
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 5

  leantime:
    image: leantime/leantime:latest
    container_name: leantime
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      LEAN_DB_HOST: ${LEAN_DB_HOST}
      LEAN_DB_USER: ${LEAN_DB_USER}
      LEAN_DB_PASSWORD: ${LEAN_DB_PASSWORD}
      LEAN_DB_DATABASE: ${LEAN_DB_DATABASE}
      LEAN_SESSION_PASSWORD: ${LEAN_SESSION_PASSWORD}
      LEAN_SITENAME: ${LEAN_SITENAME:-Leantime}
      LEAN_LANGUAGE: ${LEAN_LANGUAGE:-en-US}
      LEAN_DEFAULT_TIMEZONE: ${LEAN_DEFAULT_TIMEZONE:-UTC}
    volumes:
      - leantime-userfiles:/var/www/html/userfiles
      - leantime-public-userfiles:/var/www/html/public/userfiles
      - leantime-logs:/var/www/html/storage/logs
      - leantime-plugins:/var/www/html/app/Plugins
    depends_on:
      leantime-db:
        condition: service_healthy
    networks:
      - leantime-network

volumes:
  leantime-db-data:
  leantime-userfiles:
  leantime-public-userfiles:
  leantime-logs:
  leantime-plugins:

networks:
  leantime-network:
    driver: bridge

PUID/PGID 설정 (권한 문제 해결)

services:
  leantime:
    image: leantime/leantime:latest
    environment:
      PUID: 1000  # 호스트 사용자 ID
      PGID: 1000  # 호스트 그룹 ID
      # ... 기타 환경 변수

호스트 사용자 ID 확인:

id username
# uid=1000(username) gid=1000(username) ...

Traefik 리버스 프록시 설정

version: "3.8"

services:
  leantime:
    image: leantime/leantime:latest
    container_name: leantime
    restart: unless-stopped
    environment:
      LEAN_DB_HOST: leantime-db
      LEAN_DB_USER: leantime
      LEAN_DB_PASSWORD: your_secure_password
      LEAN_DB_DATABASE: leantime
      LEAN_SESSION_PASSWORD: your-session-password
    volumes:
      - leantime-userfiles:/var/www/html/userfiles
      - leantime-public-userfiles:/var/www/html/public/userfiles
    networks:
      - leantime-network
      - traefik-network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.leantime.rule=Host(`leantime.yourdomain.com`)"
      - "traefik.http.routers.leantime.entrypoints=websecure"
      - "traefik.http.routers.leantime.tls.certresolver=myresolver"
      - "traefik.http.services.leantime.loadbalancer.server.port=80"

실행

docker-compose up -d

# 로그 확인
docker-compose logs -f leantime

# 상태 확인
docker-compose ps

초기 설정

1) 설치 마법사 실행

브라우저에서 http://localhost:8080/install로 접속합니다.

2) 회사 정보 입력

  1. 회사/조직 이름 입력
  2. 관리자 이메일 입력
  3. 관리자 비밀번호 설정
  4. 이름 입력
  5. Install 클릭

3) 로그인

설치 완료 후 생성한 관리자 계정으로 로그인합니다.

주요 기능 활용

프로젝트 구조

Organization (조직)
├── Client (클라이언트/고객)
│   └── Project (프로젝트)
│       ├── Goals (목표)
│       ├── Milestones (마일스톤)
│       ├── To-Dos (태스크)
│       ├── Ideas (아이디어)
│       ├── Research (리서치)
│       └── Retrospectives (회고)

목표 설정 (OKR)

Goal (목표):
├── Objective: 분기 매출 20% 증가
├── Key Result 1: 신규 고객 100명 확보
├── Key Result 2: 이탈률 5% 감소
└── Key Result 3: 평균 객단가 15% 상승

Kanban 보드 활용

기본 컬럼:

  • Backlog: 대기 중인 작업
  • To Do: 이번 스프린트 작업
  • In Progress: 진행 중
  • In Review: 검토 중
  • Done: 완료

타임시트

  1. 태스크 상세 > Log Time 클릭
  2. 작업 시간 입력
  3. 설명 추가 (선택사항)
  4. 저장

리포트에서 프로젝트별/사용자별 시간 확인 가능

로드맵

  1. 프로젝트 > Roadmap 메뉴
  2. 마일스톤 추가
  3. 마일스톤에 태스크 연결
  4. 타임라인 시각화

리서치 보드

아이디어 수집 및 정리:

  1. 프로젝트 > Research 메뉴
  2. New Canvas 생성
  3. 아이디어 카드 추가
  4. 카테고리별 그룹화

레트로스펙티브

팀 회고 진행:

  1. 프로젝트 > Retrospectives 메뉴
  2. New Retro 생성
  3. 카테고리 설정 (Keep, Stop, Start 등)
  4. 팀원들이 의견 추가
  5. 논의 및 액션 아이템 도출

플러그인 설치

Leantime은 플러그인으로 기능을 확장할 수 있습니다:

# 플러그인 디렉토리 확인
docker exec leantime ls /var/www/html/app/Plugins

# GitHub에서 플러그인 다운로드 후 복사
docker cp ./my-plugin leantime:/var/www/html/app/Plugins/

사용 가능한 플러그인:

  • Whiteboards: 화이트보드 기능
  • Notes: 노트/문서 기능
  • Pomodoro: 포모도로 타이머
  • Custom Fields: 사용자 정의 필드

트러블슈팅

데이터베이스 연결 실패

# MySQL 상태 확인
docker-compose exec leantime-db mysql -u root -p -e "SHOW DATABASES;"

# 연결 테스트
docker-compose exec leantime-db mysql -u leantime -p leantime -e "SELECT 1"

권한 오류 (파일 업로드 등)

# 컨테이너 내부 권한 확인
docker exec leantime ls -la /var/www/html/userfiles

# 권한 수정
docker exec leantime chown -R www-data:www-data /var/www/html/userfiles
docker exec leantime chown -R www-data:www-data /var/www/html/public/userfiles
docker exec leantime chown -R www-data:www-data /var/www/html/storage/logs
docker exec leantime chmod -R 775 /var/www/html/userfiles
docker exec leantime chmod -R 775 /var/www/html/public/userfiles
docker exec leantime chmod -R 775 /var/www/html/storage/logs

설치 페이지가 계속 나타남

# 설치 완료 확인
docker exec leantime-db mysql -u leantime -p leantime -e "SELECT * FROM zp_settings WHERE key='installed';"

# 수동으로 설치 완료 표시
docker exec leantime-db mysql -u leantime -p leantime -e "INSERT INTO zp_settings (key, value) VALUES ('installed', 'true') ON DUPLICATE KEY UPDATE value='true';"

느린 성능

# PHP 설정 최적화
services:
  leantime:
    environment:
      PHP_MEMORY_LIMIT: 256M
      PHP_MAX_EXECUTION_TIME: 300

백업 및 복원

데이터베이스 백업

# MySQL 덤프
docker-compose exec leantime-db mysqldump -u root -p leantime > leantime_backup_$(date +%Y%m%d).sql

# 복원
cat leantime_backup.sql | docker-compose exec -T leantime-db mysql -u root -p leantime

파일 백업

# 사용자 파일 백업
docker run --rm \
  -v leantime_leantime-userfiles:/userfiles \
  -v leantime_leantime-public-userfiles:/public-userfiles \
  -v $(pwd):/backup \
  alpine tar czf /backup/leantime_files_$(date +%Y%m%d).tar.gz /userfiles /public-userfiles

전체 백업 스크립트

#!/bin/bash
BACKUP_DIR="/backups/leantime/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# 데이터베이스
docker-compose exec -T leantime-db mysqldump -u root -p${MYSQL_ROOT_PASSWORD} leantime > $BACKUP_DIR/database.sql

# 사용자 파일
docker run --rm \
  -v leantime_leantime-userfiles:/userfiles \
  -v leantime_leantime-public-userfiles:/public-userfiles \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/files.tar.gz /userfiles /public-userfiles

# 플러그인
docker run --rm \
  -v leantime_leantime-plugins:/plugins \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/plugins.tar.gz /plugins

echo "Backup completed: $BACKUP_DIR"

업그레이드

# 백업 먼저 수행
./backup.sh

# 최신 이미지 가져오기
docker-compose pull

# 서비스 재시작
docker-compose down
docker-compose up -d

# 업데이트 확인
docker-compose logs leantime | grep -i "update\|migration"

환경 변수 전체 목록

변수설명기본값
LEAN_DB_HOSTDB 호스트localhost
LEAN_DB_USERDB 사용자
LEAN_DB_PASSWORDDB 비밀번호
LEAN_DB_DATABASEDB 이름leantime
LEAN_SESSION_PASSWORD세션 암호화 키 (필수)
LEAN_SITENAME사이트 이름Leantime
LEAN_LANGUAGE기본 언어en-US
LEAN_DEFAULT_TIMEZONE기본 시간대UTC
LEAN_EMAIL_SMTP_ENABLEDSMTP 활성화false
LEAN_EMAIL_SMTP_HOSTSMTP 서버
LEAN_EMAIL_SMTP_PORTSMTP 포트587



댓글 남기기