我想要搞一個類似Nextcloud Calendar的開源行事曆,但又不想安裝繁重的整套服務,故挑了一個輕量的替代方案。
在同步行事曆方面,行之有年的方案就是CalDAV協定了,這是各大作業系統都支援的東西。只要架設一個託管CalDAV的伺服器,就能用各個裝置的行事曆客戶端同步。
在這裡,負責同步的這套軟體叫做Baïkal(意思為),使用PHP寫成,它提供同步CalDAV與CardDAV的功能,可以同步行事曆、聯絡人。
1. 撰寫docker-compose#
Baïkal的原始碼位於Github。作者沒有做Docker映像,要用第三方打包的。
安裝Docker
新增一個目錄存放資料
mkdir ~/baikal
cd ~/baikal
- 新增
docker-compose.yml
:
services:
baikal:
image: ckulka/baikal:nginx
restart: always
ports:
- "8080:80"
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific
- 啟動容器
docker compose up -d
開啟
http://Linux伺服器IP:8080
進入網頁界面,設定admin的密碼。將authentication type設定為Basic,允許以帳號密碼登入。資料庫選用SQLite
新增一個使用者,這個使用者的行事曆就是之後要用來同步的。使用者的公開月曆網址是為
https://Linux伺服器IP:8080/dav.php/calendars/帳號名稱
2. 連接CalDAV#
電腦端#
以Thunderbird為例,點選行事曆側邊欄 → 開新行事曆 → 存放於網際網路網路,輸入Baikal伺服器的網址(https://Linux伺服器IP:8080/dav.php
),以及帳號密碼。隨後Baïkal的行事曆就會顯示在Thunderbird上。
Android手機#
我使用DAVx⁵負責登入CalDAV內容。
再用Fossify Calendar讀取裝置上的CalDAV。
3. 網頁版CalDav客戶端#
我希望能有一個網頁的行事曆介面能查看Baïkal的月曆,不依賴任何客戶端,所以額外部署了AgenDAV。
但不知道為什麼,這個無法登入。
docker-compose如下
services:
agendav:
image: ghcr.io/nagimov/agendav-docker:latest
container_name: agendav
environment:
- AGENDAV_SERVER_NAME=127.0.0.1
- AGENDAV_TITLE=Welcome to Agendav Server
- AGENDAV_FOOTER=Hosted on Agendav Server
- AGENDAV_CALDAV_SERVER=http://Baiakl伺服器的IP/cal.php
- AGENDAV_CALDAV_PUBLIC_URL=http://Baiakl伺服器的IP:8075
- AGENDAV_TIMEZONE=Asia/Taipei
- AGENDAV_LANG=en
- AGENDAV_LOG_DIR=/tmp/
- AGENDAV_WEEKSTART=1
ports:
- "80:8080"