차례 · 자체 호스팅
자체 호스팅
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
- 처음 실행하면
/etc/lodelai/relay.env를 만들고, 채울 값을 알려 주며 멈춤 - 그 값(「메일」·「처리방침」)을 채우고 같은 줄 다시 실행
- 끝나면 조직 만들기 코드 표시(「첫 관리자」)
서명이나 해시가 어긋나면 아무것도 바꾸지 않고 멈춥니다.
설치 옵션
| 옵션 | 뜻 |
|---|---|
--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시간 동안 한 번 쓸 수 있음
- 첫 관리자는 서버 주소로 가입하고 코드 칸에 이 코드 넣기(조직 만들고 동료 초대)
- 동료는 관리자가 보낸 초대 링크로 들어옴
코드를 새로 낼 때:
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).
- 남아 있는 판과 바꾸기 전 데이터 확인
ls -1t /opt/lodelai/bin | grep '^lodelai-relay-' # 남아 있는 판(최근 5개) ls -1t /var/lib/lodelai/data | grep '^pre-update-' # 판을 바꾸기 전 데이터(최근 3개, 이름의 판 = 그때 올리려던 새 판) - 서버를 멈추고 데이터와 프로그램을 예전 것으로 바꾼 뒤 다시 켜기
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 |
데이터와 백업 |