這兩天不小心熬夜玩了的東西是這個:Reddit 書板介紹Bookwyrm
Bookwyrm 是去中心化的書庫網,可以想成Goodread版的長毛象。可惜目前公開伺服器似乎都沒什麼正體中文使用者。
所以當然玩的不是去註冊帳號,而是試著安裝一個個人用單機版。(有發夢如果有空架家庭內雲的話也可以來個一家人版。就不用擔心心得發到書評網之後像 Anobii 那種忽然改授權條款的恐怖事件啦~~
這東西的本體是github上面的開源專案,對一般人的支援其實不是那麼完整。安裝的時候拜 chatGPT 幫了不少忙……但也被它誤導搞出了很多蟲。除蟲又花了不少時間。(狀態顯示為睡眠不足。)所以雖然或許很多人的軟體能力比我好其實用不到,但我想還是來寫一下怎麼安裝的記錄,給需要的人,以及將來如果發夢真的有時間精力處理要再裝一次的話給自己參考~~
我透過 Docker desktop 的虛擬環境安裝在 Windows 系統上面。所以首先要去安裝 Docker desktop 和 Git。
安裝完這兩個之後,先啟動 Docker 放著。(似乎不需要註冊用最陽春的無登入版本就行了,註冊和登入的部分 skip 即可。)然後在準備放 Bookwyrm 的資料夾執行 git bash。
用這個指令去 github 下載 Bookwyrm。
git clone https://github.com/bookwyrm-social/bookwyrm.git
下載完之後母資料夾會多出一個 bookwyrm 資料夾。
cd bookwyrm
進入該資料夾。
git checkout production
這個指令指定要運行的版本是穩定版而不是開發中版本。
cp .env.example .env
拷貝一個設定檔,這樣改爆了還有範本可以存回來。然後修改設定檔(.env)。設定檔的範本裡應該有很多預設,並且還有友善的註解。這邊我就條列一下有需要改的地方。(希望不會太快過時,開發中的東西有可能變得很快。)
#SECRET_KEY="ooxx…"
這一行把前面的#取消,把它從註解變代碼。然後把等號後面的雙引號拿掉。(不知道為什麼我下載到的預設版本有引號,但引號看樣子會影響運作。引號中間的亂碼字串,請替換成自己的亂碼字串超過五十個字元,它是用來加密所使用的所有密碼的。有一個指令 create_secrets 可以讓 git 隨機長一個新的 secret key,但官方文件的寫法不是 bash 的用法,我不知道怎麼改成 bash 版就就隨手自己生成亂壓了一串。
DOMAIN=localhost
NGINX_SETUP=reverse_proxy
USE_HTTPS=False
DOMAIN 請填網域名稱,但我要架本地單機版所以寫 localhost。除此之外,要上網的話請設定 SSL 並且寫入 USE_HTTPS=True,但單機版就寫 False,不使用 SSL。另外單機版 NGINX_SETUP 按照說明註解改成 reverse_proxy。
EMAIL=admin@mail.com
單機版其實不太需要,但chatGPT騙我「因此在這欄填False」……不行,會爆炸。可以換成自己的郵件信箱,也可以保持原始的假 mail 形式,但一定要填 mail 格式。
POSTGRES_PASSWORD=password
REDIS_BROKER_PASSWORD=password
REDIS_ACTIVITY_PASSWORD=password
FLOWER_PASSWORD=password
找到分散的這四組密碼,如果有註解就取消註解讓它們變代碼。密碼的值單機可以隨便填,當然如果要對外就要填長又複雜一點的,之後自己日常使用不會用到。我要再抱怨一下是 GPT 信誓旦旦跟我說單機不需要密碼所以其中三個可以用空值,然後程式就無法正常執行啦哈哈哈。(然後它在除蟲的時候各種歪掉亂出主意就是不提可能是這裡的問題。)
LANGUAGE_CODE="zh-hant"
原本是英文,但是它有繁中語言包我就改了。雖然語言包超不完整。我不知道為什麼有這個又還有一欄 DEFAULT_LANGUAGE,但我不確定「繁體中文」要怎麼填才正確(縮寫?中文括號繁體?英文的「traditional chinese」?),乾脆就不改了。
ALLOWED_HOSTS="localhost,127.0.0.1,[::1]"
不動的話就大家都能(透過瀏覽器)來連,單機版就取消#把能連的人限制在本機。當然也可以只允許特定區段ip造訪吧?.env 的修改大致到這邊,電子郵件伺服器的部分好像也有一些可以改改讓它有正常的電子郵件功能,但我沒改目前好像也沒有用到寄信功能。然後GPT建議我想要更嚴格的限制本地端的話,可以再修改 docker-compose.yml 檔案。
services:
nginx:
….
ports:
- "127.0.0.1:80:80"
- "127.0.0.1:443:443"
yml 檔的這個修改據 GPT 的說法是讓兩個 port 都只能本地端存取。這條改下去之後,原本按照 .env 檔中註解的使用本地端用途建議指定 port 1333 的部分會覆蓋掉的樣子,我就沒再去動那行了。
兩個檔案都改好存好之後,回到 bash,依照順序執行下面幾個指令,希望我沒記錯或打錯。
docker compose up --build
docker compose exec web python manage.py migrate
docker compose exec web python manage.py initdb
docker compose exec web python manage.py createsuperuser
最後一個 createsuperuser 做一做會問你要使用的管理員 username, email, 和密碼。其中 username 我剛開始輸入都是無效的使用者名稱,gpt 還跟我說小寫英數三碼以上……錯了至少在我安裝的當下它只吃 email 形式的使用者名稱,所以等於信箱要輸入兩次。
docker compose exec web ./manage.py collectstatic --noinput
然後用這個指令生成靜態檔案,做完它應該會告訴你複製了多少檔案到靜態檔案匣裡。做到這一步結束,就可以去瀏覽器打 localhost:80 來試試看能不能運作了。如果不能正常運作,debut 時 bash 下有一些指令很有用。
docker compose ps
docker logs xxxxx
docker down -v
docker down --remove-orphans
docker up -d
docker build --no-cache
能列出 up 後背景運作的容器有哪些,如果它們有哪一個(或是哪些)狀態顯示不是 up 而是重啟的話,就表示有問題。就用第二個指令把它的服務名稱填進 xxxx 的部分,然後看看有什麼錯誤訊息來尋找蛛絲馬跡。如果有修改方向,可以先用 down -v 停止運轉並刪掉很多東西,然後修改後再用 build –no-catche重建,再用 up -d 打開試試,這組代碼是除蟲好朋友……希望不會用到(太多次)。(如果小修改不需要 build或單純只是要關機的話,down 的時候不要加 -v。)如果 down 完之後還有容器在 docker 裡面,就用移除孤兒那一個再關一次移除它們。
以上是這次大概的筆記,給自己留個印象並且希望能幫到需要的人囉。