הקדמה
לפני מספר ימים התפרסם כי החברה Humble Games עומדת בפניה סגירה, היו מספר פרסומים שונים, שחלק דיברו על פיטורים ורה-ארגון, ואחרים על סגירה מלאה של החברה. לא ידעתי איך זה ישפיע על Humble Bundle, אז החלטתי להוריד את כל הספרים שרכשתי מהם (מדובר במאות ספרים).
במהלך ההורדה נתקלתי בשאלה, “יש פה המון ספרים שאני רוצה לקרוא”, אבל אני קורא ממספר אמצעים שונים:
- eBook Reader (אמצעי עיקרי).
- Laptop.
- Tablet.
- ספרים פיזיים.
והבעיה העיקרית זה מעקב אחרי הספרים שאני קורא, הסמניות והערות שאני כותב. איך אני יכול לסנכרן את כל אלה. אני לא בטוח שהפתרון שבחרתי הוא הטוב ביותר, אבל מצאתי את עצמי משקיע את הסופ"ש בלסדר לי ספריה שמבוססת על המערכת אירוח עצמי בשם Kavita וחשבתי שזה יהיה פוסט נחמד לחלוק עם הקהילה.
התקנה
התקנה היום של אפליקציות הפכה להיות סופר פשוטה עם קונטיינרים, זה מאפשר לארוז את כל קבצי ההתקנה\הרצה והתלויות שלהם יחדיו, ופשוט להריץ אותם במכונת יעד. במקרה הזה עשיתי שימוש ב-Image מוכן של jvmilazz0, כמובן שאתם יכולים לבנות את הכל מאפס - אבל זו כבר בחירה שלכם - זה כנראה משהו שאעשה בעתיד.
כל מה שנדרש זה Container Engine (יכול להיות Docker, Podman ואחרים). אני משתמש ב-Rootless Docker בכדי להקשיח את הסביבה וב-docker-compose.yml
הבא בשביל להריץ את המערכת:
services:
kavita:
image: jvmilazz0/kavita:latest # Using the stable branch from the official dockerhub repo.
restart: unless-stopped
container_name: kavita
volumes:
- ./Data:/data:ro # Manga is just an example you can have the name you want. See the following
- ./Conf:/kavita/config:rw # Change './data if you want to have the config files in a different place.
# /kavita/config must not be changed
environment:
- TZ=Asia/Jerusalem
ports:
- "15080:5000" # Change the public port (the first 5000) if you have conflicts with other services
privileged: false
cap_drop:
- NET_ADMIN
- SYS_ADMIN
- CAP_MKNOD
- CAP_MAC_ADMIN
- CAP_NET_RAW
- CAP_SYS_CHROOT
- CAP_SYS_PTRACE
- CAP_SYS_RAWIO
deploy:
resources:
limits:
cpus: '1.25'
memory: 6G
reservations:
memory: 1G
מידע נוסף:
בגלל שיש לי Nginx, אני צריך גם להגדיר vhost בשביל reverse-proxy, להלן ההגדרות (השם של ההוסט ונתיב הוחלפו ב-[REDACTED]
):
server {
listen 80;
listen [::]:80;
server_name [REDACTED];
location /.well-known/acme-challenge {
allow all;
try_files $uri $uri/ =404;
root /home/[REDACTED]/Apps/Shared/acme-challenge;
}
location / {
return 301 https://[REDACTED]$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name [REDACTED];
ssl_certificate /etc/nginx/certs/[REDACTED]/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/[REDACTED]/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
add_header 'Strict-Transport-Security' 'max-age=63072000' always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /etc/nginx/certs/[REDACTED]/chain.pem;
location / {
proxy_pass http://127.0.0.1:15080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# deny access to dot files (.)
#
location ~ /\. {
deny all;
}
# replace with the IP address of your resolver
resolver 8.8.8.8;
}
מידע נוסף:
קינפוג
לאפליקציה יש “דעתנות” לגבי מבנה הספריות והקבצים, נראה שזה נבנה במטרה לקומיקס (סדרות), אפשר לתמודד עם זה, אבל זה אולי ידרוש ממכם לשנות את מבנה אחסון הקבצים.
רק הערה, הקבצים שנתמכים הינם pdf
ו-epub
.
לעוד מידע:
סיכום
ואני דיי מרוצה מהתוצאה, אני מקווה שזה יגרום לי לקרוא מעט יותר בעתיד.
מה איתכם, איך אתם קוראים ספרים, ואיך אתם דואגים לסנכרן את ההתקדמות שלכם?