차례 · 자체 호스팅
문서

자체 호스팅

lodelai 서버를 우리 리눅스 서버에 설치하고, 갱신하고, 되돌립니다.

서버는 글을 중계만 합니다. 메시지는 기기끼리 암호화되어 서버에 읽을 수 있는 글이 남지 않습니다.

준비할 것

  • 서버: Ubuntu 22.04+ 또는 Debian 12+, systemd, x86_64 또는 arm64
  • 관리자 권한(sudo) — 필요한 도구는 설치가 깖, Ubuntu 는 universe 저장소를 켜 두기
  • 공개 도메인(예: relay.example.com) — 기본 설정이면 80·443 포트를 열어 두기
  • 메일: Resend API 키 또는 SMTP 서버 — 가입에 이메일 코드를 씀
  • 처리방침 주소(https) — 개인정보 처리는 서버 관리자 몫

설치

도메인만 바꿔 서버에서 실행합니다.

서버에서 실행
curl -fsSL https://lodelai.com/install | sudo bash -s -- --domain relay.example.com
  1. 처음 실행하면 /etc/lodelai/relay.env 를 만들고, 채울 값을 알려 주며 멈춤
  2. 그 값(「메일」·「처리방침」)을 채우고 같은 줄 다시 실행
  3. 끝나면 조직 만들기 코드 표시(「첫 관리자」)

서명이나 해시가 어긋나면 아무것도 바꾸지 않고 멈춥니다.

설치 옵션

옵션 뜻
--domain <이름> 필수 — 서버의 공개 주소이자 서버 이름(아래 「서버 이름 고르기」)
--tls caddy|cloudflare|none 바깥 연결을 받는 방법 — caddy(기본)는 인증서를 자동으로 받음, cloudflare 는 서버 관리자가 Cloudflare Tunnel 을 만들어 http://127.0.0.1:8787 로 보냄, none 은 직접 둔 프록시를 씀. lodelai 서버 자체는 이 서버 안(127.0.0.1:8787)에서만 받음
--data-dir <폴더> 데이터 폴더, 기본 /var/lib/lodelai
--require-mount 데이터 폴더가 따로 붙인 디스크에 있을 때만 설치
--operator <사용자> 그 사용자가 갱신·초기화·조직 만들기 코드를 비밀번호 없이 부를 수 있게 함, 빼면 root 만
--version <x.y.z> 그 판을 설치(기본은 최신)
--no-auto-update 자동 갱신을 켜지 않음
--binary <경로> 서명된 판 대신 직접 빌드한 판을 설치(아래 「직접 빌드한 판」), --version 과 같이 쓰지 않음

메일

/etc/lodelai/relay.env 에 둘 중 하나를 채웁니다.

쓰는 것 채울 값
Resend LODELAI_MAIL=resend, RESEND_API_KEY, LODELAI_MAIL_FROM
SMTP LODELAI_MAIL=smtp, SMTP_URL(smtps://사용자:암호@호스트:465 또는 STARTTLS 인 smtp://…:587), LODELAI_MAIL_FROM
  • LODELAI_MAIL_FROM 은 어느 쪽이든 필요 — 예: "lodelai <[email protected]>"
  • 하루에 보내는 메일 상한은 LODELAI_MAIL_PER_DAY(기본 80)
  • 값을 바꾼 뒤에는 sudo systemctl restart lodelai-relay
  • 키는 채팅이나 이슈에 붙이지 않기

처리방침

LODELAI_PRIVACY_URL(https)과 LODELAI_PRIVACY_VERSION(시행일)을 채웁니다. 앱은 가입 화면과 설정 › 정보에서 이 주소를 엽니다.

첫 관리자

  1. 설치 끝에 보인 조직 만들기 코드를 첫 관리자에게 주기 — 1시간 동안 한 번 쓸 수 있음
  2. 첫 관리자는 서버 주소로 가입하고 코드 칸에 이 코드 넣기(조직 만들고 동료 초대)
  3. 동료는 관리자가 보낸 초대 링크로 들어옴

코드를 새로 낼 때:

서버에서 실행
sudo -u lodelai /opt/lodelai/bin/lodelai-relay bootstrap --data /var/lib/lodelai/data

서버 이름 고르기

--domain 은 밖에 알려져도 괜찮은 이름으로 고릅니다. 서버 이름은 동료와 에이전트의 주소에 실려 대화 기록에 남습니다.

백업

  • 매일 04:30(서버 시각)에 데이터를 <데이터 폴더>/backup/ 에 떠서 최근 7개를 남김
  • 바깥 저장소에도 두려면 /etc/lodelai/backup.env 에 S3 호환 저장소 값(R2_ACCOUNT_ID·R2_BUCKET·R2_ACCESS_KEY_ID·R2_SECRET_ACCESS_KEY)과 age 공개키(AGE_RECIPIENT=age1…) 넣기 — 암호화한 사본만 올리고, 공개키가 없으면 바깥으로 보내지 않음, 푸는 키(비밀키)는 서버에 두지 않기
  • 서버를 옮길 때는 relay.env 도 같이 옮기기 — 그 안의 LODELAI_EMAIL_HMAC_KEY 는 백업에 들어가지 않고, 이 키가 바뀌면 조직을 나갔다 같은 이메일로 돌아온 사람이 예전 아이디를 받지 못함
  • 감시를 두려면 backup.env 의 HC_RELAY_URL·HC_BACKUP_URL 에 healthchecks 꼴 주소 넣기 — 5분마다 서버 상태를, 백업마다 결과를 보냄

갱신

기본은 자동입니다. 하루 한 번(04:00 뒤) 게시 뒤 72시간 지난 판만 받습니다.

순서: 서명 확인 → 데이터 백업 → 교체 → 다시 시작 → 상태 확인. 실패하면 프로그램과 데이터를 함께 되돌립니다.

  • 손으로 받기: sudo /opt/lodelai/bin/lodelai-update (72시간을 기다리지 않음)
  • 끄기: 설치 때 --no-auto-update, 또는 sudo systemctl disable --now lodelai-autoupdate.timer
  • 결과 보기: journalctl -u lodelai-autoupdate
  • 서버 판이 낮으면 앱은 서버에 맞는 판에 머묾(설정 › 정보 「서버 판에 맞춰 이 판을 쓰고 있어요」), 서버보다 새 판인 앱은 서버 업데이트가 필요하다고 알림
  • 서명 키가 바뀌어도 서버가 알아서 넘어감

명령 한눈에

모두 /opt/lodelai/bin/ 안에 있고 sudo 로 경로째 부릅니다(예: sudo /opt/lodelai/bin/lodelai-reset). ○ 는 --operator 로 지정한 사용자도 비밀번호 없이 부를 수 있는 명령입니다.

명령 하는 일 operator
lodelai-update 새 판으로 갱신(직접 빌드한 판으로 설치했다면 그 판) ○
lodelai-update --version <x.y.z> 그 판으로 갱신, 낮은 판으로도 감 root 만
lodelai-update --binary <경로> 직접 빌드한 판으로 갱신 root 만
lodelai-reset 모든 계정·조직·메시지 삭제 — 지우기 전에 데이터 폴더 전체를 backup/reset-<시각>.tar.gz 로 뜸(최근 3개), 백업이 도는 중이면 아무것도 하지 않음 ○
sudo -u lodelai /opt/lodelai/bin/lodelai-relay bootstrap --data <데이터 폴더>/data 조직 만들기 코드 하나 더 내기 ○
systemctl restart lodelai-relay relay.env 를 바꾼 뒤 다시 시작 root
journalctl -u lodelai-relay · -u lodelai-autoupdate · -u lodelai-backup 기록 보기 root

직접 빌드한 판

소스에서 직접 빌드한 판을 설치합니다. 서명을 거치지 않아 자동 갱신은 꺼집니다.

서버에서 실행
sudo deploy/relay/install.sh --domain relay.example.com --binary /home/me/lodelai/target/release/lodelai-relay
  • 받은 소스 폴더 안의 deploy/relay/install.sh 로 실행
  • 다음부터는 새로 빌드한 뒤 sudo /opt/lodelai/bin/lodelai-update 만 하면 같은 경로의 판으로 갱신
  • 그 파일과 / 부터 거치는 모든 폴더는 다른 사용자가 고칠 수 없어야 함, 아니면 설치가 멈춤
  • 서명된 판으로 돌아가려면 위 「설치」의 한 줄을 --binary 없이 다시 실행

멈췄을 때

설치와 갱신은 문제를 보면 아무것도 바꾸지 않고 lodelai: <까닭> 한 줄을 남기고 멈춥니다.

이런 줄이 보이면 할 일
relay.env 에 … 를 채운 뒤 다시 실행한다 그 값을 채우고 같은 줄 다시 실행(「메일」·「처리방침」)
LODELAI_PRIVACY_URL 은 https:// 주소 처리방침 주소를 https 로 바꾸기
apt-get install … 실패 Ubuntu 면 sudo add-apt-repository universe 뒤 다시 실행
지원하지 않는 배포판 · systemd 가 아니다 · 지원하지 않는 CPU 준비할 것에 맞지 않는 서버 — 컨테이너 안이면 systemd 가 도는 가상 머신에서 하기
… 가 별도 디스크에 마운트돼 있지 않다 — 멈춘다(--require-mount) 디스크를 붙이고 --data-dir 를 그 위로 잡기
manifest 서명이 맞지 않다 · tar 해시가 manifest 와 다르다 받는 도중 내용이 바뀜 — 프록시·미러를 확인하고, 계속되면 lodelai 에 알리기
relay 서명 공개키가 비어 있다 정식 설치 스크립트가 아님 — 위 한 줄 설치 주소에서 다시 받기
relay 가 새 판으로 뜨지 않았다 이미 예전 판으로 되돌림 — 위 기록과 journalctl -u lodelai-relay 보기
새 판이 뜨지 않았다 — 최근 로그: 뒤 이전 판·DB 로 되돌렸다: <판> 갱신이 실패해 프로그램과 데이터를 함께 되돌림, 서버는 이전 판으로 떠 있음 — 로그를 lodelai 에 알리기
새 판이 뜨지 않았다 뒤 이전 판(<판>)도 뜨지 않는다 아래 「되돌리기」로 손으로 돌리기
apt-get update 실패 네트워크와 apt 저장소 설정을 확인하고 다시 실행
systemd 유닛을 켜지 못했다 · 백업·감시 타이머를 시작하지 못했다 systemctl status lodelai-backup.timer 처럼 그 유닛의 상태를 보고 까닭 찾기
남에게 쓰기 열려 있다: <경로> 그 경로를 chmod go-w 로 닫기
--admin 은 없어졌다 설치 끝에 보이는 조직 만들기 코드 쓰기(「첫 관리자」)

되돌리기

자동 되돌림이 실패했거나 새 판에서 문제를 찾았을 때 손으로 돌립니다(root).

  1. 남아 있는 판과 바꾸기 전 데이터 확인
    서버에서 실행
    ls -1t /opt/lodelai/bin | grep '^lodelai-relay-'      # 남아 있는 판(최근 5개)
    ls -1t /var/lib/lodelai/data | grep '^pre-update-'    # 판을 바꾸기 전 데이터(최근 3개, 이름의 판 = 그때 올리려던 새 판)
    
  2. 서버를 멈추고 데이터와 프로그램을 예전 것으로 바꾼 뒤 다시 켜기
    서버에서 실행
    sudo systemctl stop lodelai-relay
    sudo rm -f /var/lib/lodelai/data/relay.sqlite3-wal /var/lib/lodelai/data/relay.sqlite3-shm
    sudo install -o lodelai -g lodelai -m 0600 /var/lib/lodelai/data/pre-update-<판>.sqlite3 /var/lib/lodelai/data/relay.sqlite3
    sudo ln -sfn lodelai-relay-<이전 판> /opt/lodelai/bin/lodelai-relay
    sudo systemctl start lodelai-relay && curl -sS http://127.0.0.1:8787/v1/healthz
    
  • pre-update-<판> 의 판은 올리려던 새 판 — 그 판에서 문제가 났다면 그 파일로 돌리기
  • 데이터를 되돌리면 그 뒤의 가입과 전달 안 된 메시지는 사라짐
  • 프로그램만 되돌려도 되면 rm·install 줄은 빼기 — 새 판은 데이터 구조를 더하기만 함

파일 위치

자리 무엇
/opt/lodelai/bin/lodelai-relay 지금 판(→ lodelai-relay-<판>)
/opt/lodelai/bin/lodelai-update · lodelai-reset · lodelai-backup · lodelai-health 관리 명령
/etc/lodelai/relay.env · backup.env 설정과 비밀(root:lodelai 0640)
/etc/lodelai/update.env 갱신받는 곳
/var/lib/lodelai/data · backup 데이터와 백업