Bookorbit으로 이북 셀프 관리하기

최근에는 AI를 이용해서 각각의 서비스를 셀프호스팅하는데요.

abooko01

오늘은 이북 관리를 하는 Bookorbit을 설정해봤습니다.

BookOrbit – Your reading space

1. 폴더 만들기

cd ~/docker
mkdir -p bookorbit/{books,data/app,data/postgres}
cd bookorbit
id

id 결과의 uid/gid 숫자를 확인하세요(OCI 우분투는 보통 1001). 아래는 1001로 가정했어요. 다르면 이 명령과 compose의 PUID/PGID를 같이 바꾸세요.

sudo chown -R 1001:1001 books data/app

2. 비밀값 생성

echo "DB: $(openssl rand -hex 24)"
echo "JWT: $(openssl rand -hex 32)"
echo "TOKEN: $(openssl rand -hex 16)"

3. .env

nano .env

env

POSTGRES_USER=bookorbit
POSTGRES_PASSWORD=위의_DB값
POSTGRES_DB=bookorbit
JWT_SECRET=위의_JWT값
SETUP_BOOTSTRAP_TOKEN=위의_TOKEN값
YES24_API_KEY=발급받은_키

그리고 권한 설정합니다.

chmod 600 .env

4. docker-compose.yml

nano docker-compose.yml

도커 설정

services:
  bookorbit:
    image: ghcr.io/bookorbit/bookorbit:latest
    container_name: bookorbit
    restart: unless-stopped
    depends_on:
      bookorbit-db:
        condition: service_healthy
    ports:
      - 127.0.0.1:3123:3000
    networks:
      - bookorbit
    environment:
      - NODE_ENV=production
      - PORT=3000
      - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@bookorbit-db:5432/${POSTGRES_DB}
      - JWT_SECRET=${JWT_SECRET}
      - SETUP_BOOTSTRAP_TOKEN=${SETUP_BOOTSTRAP_TOKEN}
      - APP_URL=https://bo.dorulog.com
      - TZ=Asia/Seoul
      - PUID=1001
      - PGID=1001
      - NODE_MAX_OLD_SPACE_SIZE=2048
      - LIBRARY_BROWSE_ROOT=/books
    volumes:
      - ./books:/books
      - ./data/app:/data
    init: true
    read_only: true
    tmpfs:
      - /tmp
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - FOWNER
      - SETGID
      - SETUID
    security_opt:
      - no-new-privileges:true
    stop_grace_period: 30s

  bookorbit-db:
    image: pgvector/pgvector:pg18
    container_name: bookorbit-db
    restart: unless-stopped
    networks:
      - bookorbit
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 20s

  yes24-provider:
    image: onevl/bookorbit-yes24-provider:latest
    container_name: bookorbit-yes24-provider
    restart: unless-stopped
    networks:
      - bookorbit
    environment:
      YES24_API_KEY: ${YES24_API_KEY}

networks:
  bookorbit: {}

5. 실행 확인

설치가 끝나면 실행을 확인해봅니다

docker compose up -d
docker compose ps
curl -I http://127.0.0.1:3123
abooko02

6. nginx 설정

예를 들어

sudo nano /etc/nginx/sites-available/text.dorulog.com

nginx

server {
    listen 80;
    server_name text.dorulog.com;

    client_max_body_size 400M;

    location / {
        proxy_pass http://127.0.0.1:3123;
        proxy_http_version 1.1;

        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;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
    }
}

이후 nginx 설정을 마무리 합니다.

sudo ln -s /etc/nginx/sites-available/text.dorulog.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

7. HTTPS

인증서 발급해주구요.

sudo certbot --nginx -d text.dorulog.com

8. 관리자 계정

사이트에 최초 접속후 마지막 토큰을 넣고 계정을 생성합니다.

9. 라이브러리

책 파일을 ~/docker/bookorbit/books에 넣고, 웹에서 Settings → Libraries에서 /books 폴더로 라이브러리를 만드세요.

항목값
Addresshttp://yes24-provider:8080
Authorization header비워두기
Allow private address켜기
Timeout10 정도 (기본값 그대로도 괜찮아요)

  이 사이트는 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Leave a Comment