웹사이트 검색

Ubuntu 22.04에 Calibre Ebook Server를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Calibre 서버 다운로드 및 설치
  4. 3단계 - Calibre 라이브러리 생성 및 첫 번째 책 추가
  5. 4단계 - Calibre 서버 시작
  6. 5단계 - systemd 서비스 파일 생성
  7. 6단계 - 사용자 인증 활성화\n
  8. 7단계 - 도서를 라이브러리에 자동으로 추가
  9. 8단계 - Nginx 설치
  10. 9단계 - SSL 설치
  11. 10단계 - Nginx 구성
  12. 결론

Calibre는 무료 오픈 소스 전자책 관리자입니다. 서버 구성 요소와 함께 크로스 플랫폼 데스크톱 응용 프로그램으로 작동합니다. 데스크톱 구성 요소는 단일 장치에서 eBook 라이브러리를 관리할 수 있습니다. 그리고 서버 구성 요소를 사용하면 다음을 수행할 수 있습니다.

  • 전 세계 어디에서나 책에 액세스할 수 있습니다.\n
  • 책을 휴대기기로 쉽게 옮길 수 있습니다.\n
  • 친구 및 가족과 책을 공유하십시오.\n
  • 웹에서 직접 eBook을 읽으십시오.

이 자습서에서는 Ubuntu 22.04 시스템에 Calibre 서버를 설치하는 방법을 배웁니다.

전제 조건

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • The Uncomplicated Firewall(UFW) is enabled and running.

  • A Fully Qualified domain name pointed to the server. For our tutorial, we will be using the domain calibre.example.com.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    

1단계 - 방화벽 구성

패키지를 설치하기 전 첫 번째 단계는 HTTP 및 HTTPS 연결을 허용하도록 방화벽을 구성하는 것입니다.

방화벽의 상태를 확인하십시오.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

HTTP 및 HTTP 포트를 허용합니다.

$ sudo ufw allow http
$ sudo ufw allow https

상태를 다시 확인하여 확인하십시오.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

2단계 - Calibre 서버 다운로드 및 설치

Ubuntu 22.04는 Calibre와 함께 제공되지만 최신 버전을 가져오려면 직접 설치하는 것이 좋습니다.

첫 번째 단계는 일부 종속 항목을 설치하는 것입니다.

$ sudo apt install libopengl0 libxkbcommon-x11-0 libegl1 libfontconfig libgl1-mesa-glx

Calibre 서버 설치 프로그램을 다운로드합니다.

$ wget https://download.calibre-ebook.com/linux-installer.sh

설치 프로그램 스크립트를 실행 가능하게 만드십시오.

$ chmod +x ./linux-installer.sh

설치 프로그램을 실행합니다.

$ sudo ./linux-installer.sh

설치 프로그램은 서버가 아닌 데스크톱을 예상하기 때문에 몇 가지 경고가 표시됩니다. 경고를 무시하는 것이 안전합니다.

3단계 - Calibre 라이브러리 생성 및 첫 번째 책 추가

다음 단계는 Calibre 라이브러리를 설정하고 여기에 책을 추가하는 것입니다. 튜토리얼을 위해 Project Gutenberg에서 Arthur Conan Doyle의 책 The Adventures of Sherlock Holmes를 다운로드합니다.

$ wget http://www.gutenberg.org/ebooks/1661.kindle.noimages -O adventuresofsherlockholmes.mobi

항상 사이트에서 책의 Kindle 버전을 가져옵니다. 여기에서는 Kindle 버전의 이름을 filename.mobi로 변경합니다. Mobi 형식은 Kindle에서 기본적으로 지원되기 때문에 사이트에서 이름이 지정되는 이유입니다. 또한 Epub 버전보다 더 나은 서식 옵션을 제공합니다.

Calibre 라이브러리용 디렉터리를 만듭니다.

$ mkdir calibre-library

calibredb 명령을 사용하여 방금 다운로드한 책을 라이브러리에 추가합니다. 명령 자체에서 라이브러리의 위치를 지정했습니다.

$ calibredb add adventuresofsherlockholmes.mobi --with-library calibre-library/
Added book ids: 1

다음과 같은 방법으로 한 번에 여러 책을 추가할 수 있습니다.

$ calibredb add *.mobi --with-library calibre-library/

4단계 - Calibre 서버 시작

책이 준비되었으므로 이제 Calibre 서버를 시작할 차례입니다.

$ calibre-server calibre-library

calibre-server 명령은 라이브러리의 위치를 인수로 사용합니다. 비슷한 출력이 표시되어야 합니다.

calibre server listening on 0.0.0.0:8080
OPDS feeds advertised via BonJour at: your_server_ip port: 8080

이렇게 하면 포트 8080에서 Calibre 서버가 노출됩니다. 서버를 보려면 먼저 포트를 열어야 합니다. 다음 명령을 실행하여 포트 8080을 엽니다.

$ sudo ufw allow 8080

브라우저에서 URL http://:8080/을 열면 다음 화면이 나타납니다. 선택한 운영 체제 테마에 따라 화면이 어둡거나 밝게 표시됩니다.

이전 단계에서 추가한 책을 보려면 calibre-library 링크를 클릭하십시오.

터미널에서 Ctrl + C 키를 눌러 서버를 닫습니다.

다른 포트를 사용하여 Calibre 서버를 노출할 수 있습니다. 그렇게 하려면 다음 명령을 사용하십시오. 방화벽에서 포트가 열려 있는지 확인해야 합니다.

$ calibre-server calibre-library --port 7654

5단계 - systemd 서비스 파일 생성

Calibre 서버 프로세스를 영구적으로 만들고 재부팅 후에도 살아남으려면 동일한 시스템 서비스 파일을 생성해야 합니다.

/etc/sytemd/system/ 디렉토리에 calibre-server.service라는 파일을 만들고 편집을 위해 엽니다.

$ sudo nano /etc/systemd/system/calibre-server.service

다음 코드를 붙여넣습니다.

[Unit]
Description=Calibre Server
After=network.target

[Service]
Type=simple
User=<username>
Group=<username>
ExecStart=/opt/calibre/calibre-server /home/<username>/calibre-library --enable-local-write

[Install]
WantedBy=multi-user.target

--enable-local-write 플래그는 라이브러리에 새 책을 추가할 수 있는 쓰기 권한을 서버에 부여합니다. 서버 실행 중에는 calibredb 명령을 사용하여 책을 추가할 수 없기 때문입니다.

위 코드에서 를 Linux 시스템 사용자 이름으로 바꿉니다. Ctrl+W를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장하고 닫습니다.

서비스 데몬을 다시 로드하여 서비스 파일을 활성화합니다.

$ sudo systemctl daemon-reload

Calibre 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable calibre-server
$ sudo systemctl start calibre-server

서비스 상태를 확인합니다.

$ sudo systemctl status calibre-server
? calibre-server.service - Calibre Server
     Loaded: loaded (/etc/systemd/system/calibre-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-25 07:23:42 UTC; 15s ago
   Main PID: 1877 (BonJour)
      Tasks: 13 (limit: 2241)
     Memory: 53.3M
        CPU: 762ms
     CGroup: /system.slice/calibre-server.service
             ??1877 /opt/calibre/bin/calibre-server /home/<username>/calibre-library --enable-local-write

Jul 25 07:23:42 calibre systemd[1]: Started Calibre Server.
Jul 25 07:23:42 calibre calibre-server[1877]: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-<username>'
Jul 25 07:23:42 calibre calibre-server[1877]: calibre server listening on 0.0.0.0:8080
Jul 25 07:23:43 calibre calibre-server[1877]: OPDS feeds advertised via BonJour at: 69.28.84.201 port: 8080

6단계 - 사용자 인증 활성화

Calibre에 사용자 인증을 추가하여 다른 사람이 라이브러리를 사용할 수 없도록 보호할 수 있습니다. 먼저 Calibre 서버를 중지합니다.

$ sudo systemctl stop calibre-server

Calibre는 SQLite 데이터베이스를 사용하여 사용자 자격 증명을 저장합니다. Calibres 사용자 관리 스크립트를 시작하여 사용자를 추가합니다.

$ sudo calibre-server --manage-users

네 가지 옵션이 제공되며 선택을 요청합니다. 1을 눌러 새 사용자를 추가하고 사용자 이름과 암호를 제공하여 새 사용자 추가를 완료합니다.

1) Add a new user
2) Edit an existing user
3) Remove a user
4) Cancel

What do you want to do? [1-4]: (Press 1)
Enter the username: howtoforge
Enter the new password for howtoforge:
Re-enter the new password for howtoforge, to verify:
User howtoforge added successfully!

다음으로 서비스 파일을 편집하여 인증을 확인해야 합니다. 편집할 파일을 엽니다.

$ sudo nano /etc/systemd/system/calibre-server.service

ExecStart로 시작하는 줄의 끝에 --enable-auth 플래그를 추가하여 사용자 인증을 활성화합니다.

...
ExecStart=/opt/calibre/calibre-server "/home/<username>/calibre-library" --userdb "/home/<username>/.config/calibre/server-users.sqlite" --enable-local-write --enable-auth
...

Ctrl+W를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장하고 닫습니다.

서비스 데몬을 다시 로드하고 서비스를 시작합니다.

$ sudo systemctl daemon-reload
$ sudo systemctl start calibre-server

라이브러리 URL을 열면 액세스를 허용하기 전에 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다. 자격 증명을 입력하고 로그인 버튼을 눌러 라이브러리에 액세스합니다.

7단계 - 라이브러리에 도서 자동 추가

Calibre를 사용하면 Cron 작업을 사용하여 라이브러리에 책을 자동으로 추가할 수 있습니다. 정기적으로 디렉토리에서 새 책을 찾아 도서관에 추가함으로써 그렇게 합니다. 이것은 책을 디렉토리에 업로드할 수 있는 책을 추가하는 가장 빠른 방법이며 수동 개입 없이 라이브러리에 곧 표시됩니다.

첫 번째 단계는 감시 디렉터리를 만드는 것입니다.

$ mkdir ~/calibre-watch
$ cd ~/calibre-watch

Leo Tolstoy의 책 전쟁과 평화를 Project Gutenberg에서 이 디렉토리로 다운로드하십시오.

$ wget https://www.gutenberg.org/ebooks/2600.kindle.images -O warandpeace.mobi

아시다시피 이번에는 이미지가 있는 버전을 다운로드하고 있습니다. 프로젝트 구텐베르크에 대한 책마다 다릅니다. 일부는 이미지 버전을 사용할 수 있지만 일부는 사용할 수 없습니다. Calibre는 두 형식 모두 잘 작동합니다.

Crontab 편집기를 엽니다.

$ crontab -e

Crontab을 처음 사용하는 경우 편집기를 선택하라는 메시지가 표시됩니다.

no crontab for <username> - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]:

작동하기 가장 쉬운 Nano 편집기를 선택하려면 1을 입력합니다.

파일 맨 아래에 다음 명령을 추가하십시오.

*/5 * * * * calibredb add /home/<username>/calibre-watch/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/<username>/calibre-watch/*

이 스크립트는 /home//calibre-watch 디렉토리의 모든 파일을 calibre 라이브러리에 추가하고 더 이상 필요하지 않은 모든 원본 파일을 삭제합니다. 위 작업은 5분마다 실행됩니다. 를 Linux 시스템 사용자 이름으로 바꾸고 적절한 위치에 Calibre 자격 증명을 추가합니다.

Ctrl+W를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장하고 닫습니다. 몇 분 정도 기다렸다가 Calibre 서버 사이트를 다시 로드하여 방금 추가한 책이 라이브러리에 나타나는지 확인하십시오.

8단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginxs 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxs 안정 버전용 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

시스템 리포지토리를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.0

9단계 - SSL 설치

현재 Calibre는 IP 주소를 통해 HTTP 포트에 노출되어 있습니다. 보안을 강화하기 위해 SSL 인증서를 사용하여 전용 도메인을 통한 액세스를 활성화합니다.

Calibre용 SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령을 실행하여 SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d calibre.example.com

위의 명령은 서버의 /etc/letsencrypt/live/calibre.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

편집을 위해 /etc/letsencrypt/renewal/calibre.example.com.conf 파일을 엽니다.

$ sudo nano /etc/letsencrypt/renewal/calibre.example.com.conf

하단에 다음 코드를 붙여넣습니다.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Certbot의 독립 실행형 옵션을 사용하여 SSL 인증서를 생성했습니다. 갱신 중에 Nginx를 종료해야 함을 의미하는 인증서를 생성하기 위해 웹 서버를 실행합니다. pre_hook 및 post_hook 명령은 갱신 전후에 실행되어 Nginx 서버를 자동으로 종료하고 다시 시작하므로 수동 개입이 필요하지 않습니다.

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 시험 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

10단계 - Nginx 구성

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

편집을 위해 /etc/nginx/conf.d/calibre.conf 파일을 만들고 엽니다.

$ sudo nano /etc/nginx/conf.d/calibre.conf

다음 코드를 붙여넣습니다. calibre.example.com을 도메인 이름으로 바꿉니다. client_max_body_size 변수의 값을 50MB로 설정했습니다. 요구 사항에 따라 변경할 수 있습니다.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    http2_push_preload on; # Enable HTTP/2 Server Push
    
    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
    # prevent replay attacks.
    #
    # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
    ssl_early_data on;

    server_name calibre.example.com;

    client_max_body_size 50M;

    access_log  /var/log/nginx/calibre.access.log;
    error_log   /var/log/nginx/calibre.error.log;

    ssl_certificate      /etc/letsencrypt/live/calibre.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/calibre.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/calibre.example.com/chain.pem;
    
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_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;        
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  calibre.example.com;
    return 301   https://$host$request_uri;
}

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t

구성 파일을 활성화하려면 Nginx 서버를 다시 시작하십시오.

$ sudo systemctl restart nginx

Calibre에 액세스하려면 브라우저에서 https://calibre.example.com을 방문하세요. Cron을 통해 추가된 책이 라이브러리에서도 사용 가능한 것을 확인할 수 있습니다.

결론

이것으로 Nginx를 사용하여 Ubuntu 22.04 시스템에 Calibre Server를 설치하는 방법에 대한 자습서를 마칩니다. 또한 기본 인증을 활성화하고 새 책을 자동으로 추가하기 위한 지원을 추가하도록 Calibre를 구성했습니다. Calibre Server는 많은 명령줄 도구와 함께 제공됩니다. 이에 대해 자세히 알아보려면 Calibre 설명서를 방문하십시오. 질문이 있으시면 아래 의견에 게시하십시오.