Google शिवाय VPS वर CalDAV calendar कसा चालवायचा
Radicale वापरून VPS वर CalDAV server उभारा आणि phone व laptop sync करा. TLS, discovery, प्रत्येक user साठी collections आणि client setup यांची अचूक पद्धत जाणून घ्या.
तुम्ही काय तयार करणार आहात
Self-hosted calendar म्हणजे तुम्ही नियंत्रित करत असलेल्या VPS वर TLS मागे चालणारा एक CalDAV server आणि प्रत्येक व्यक्तीसाठी एक login. तुमच्या हातातील phone आणि तुमच्या desk वरील laptop मध्ये समान events दिसतात. तुमच्या partner च्या laptop मध्येही तेच events दिसतात. मध्ये कोणतेही Google account नसते.
हे self-hosted booking page तयार करण्यापेक्षा वेगळे काम आहे. Booking page अनोळखी लोकांसाठी असते: ते तुमचे मोकळे वेळापत्रक प्रकाशित करते आणि कोणालाही एक वेळ निवडण्याची अनुमती देते. Calendar server तुमच्या स्वतःच्या devices साठी असतो: तो events साठवतो आणि प्रत्येक client मधील माहिती समान ठेवतो. अनेक जण दोन्ही वापरतात. त्यानंतर booking tool त्याची availability तुम्ही येथे तयार केलेल्या CalDAV server कडून वाचते.
ही installation लहान आहे. Radicale हे एक Python package आहे आणि configuration सुमारे दहा ओळींची आहे. ही setup पहिला महिना सुरळीत चालेल की नाही हे TLS, discovery, प्रत्येक user साठी collections आणि backups यावर ठरते. खालील मजकुरात यांनाच सर्वाधिक जागा दिली आहे.
CalDAV म्हणजे काय आणि ते महत्त्वाचे का आहे?
CalDAV म्हणजे HTTP वर आधारित calendar sync. RFC 4791 मध्ये WebDAV साठीच्या extensions म्हणून त्याची व्याख्या केली आहे. WebDAV म्हणजे web distributed authoring and versioning; RFC 4918 मध्ये परिभाषित केलेल्या अतिरिक्त HTTP methods चा हा संच आहे. Calendar हा एका directory प्रमाणे कार्य करणारा collection असतो. त्यातील प्रत्येक event ही एक file असते. ती iCalendar text format (RFC 5545) मध्ये लिहिलेली असते. तुमच्या mail मधील .ics attachments साठीही हेच format वापरले जाते.
Clients काही अतिरिक्त methods सह सामान्य HTTP वापरतात. PROPFIND येथे काय उपलब्ध आहे आणि त्याचे कोणते properties आहेत हे विचारते. REPORT filtered slice मागते, जसे एखाद्या date range मधील प्रत्येक event. PUT एक event लिहिते आणि DELETE तो काढून टाकते. प्रत्येक event मध्ये UID line असते. दोन devices एकाच event कडे पाहत आहेत, त्याची copy नाही, हे ठरवण्यासाठी हा identifier वापरला जातो.
याचा मुख्य लाभ portability हा आहे आणि CalDAV वापरण्याचे तेच संपूर्ण कारण आहे. iOS, macOS, Thunderbird, Evolution आणि DAVx⁵ द्वारे Android हे सर्व CalDAV ला support करतात. तुमचा data तुम्ही आज निवडलेल्या server शी बांधलेला राहत नाही. Files वेगळ्या CalDAV server वर हलवा, clients मध्ये नवीन hostname द्या आणि इतर कोणताही बदल करावा लागत नाही.
CardDAV देखील याच्यासोबत उपलब्ध असते. Contacts साठी हीच संकल्पना वापरली जाते. ती RFC 6352 मध्ये परिभाषित केली आहे आणि events ऐवजी vCard files साठवते. खालील प्रत्येक server त्याच account मधून दोन्ही protocols उपलब्ध करून देतो. त्यामुळे calendar कार्यरत झाल्यावर address book साठी फक्त checkbox निवडावे लागते.
कोणता CalDAV server चालवावा?
Radicale हा काम करणारा सर्वात लहान पर्याय आहे. तो Python वर चालतो, त्याला database लागत नाही आणि data store साध्या files असलेल्या एका folder मध्ये असतो. या मार्गदर्शकात तो वापरला आहे, कारण घरगुती calendar साठी यापेक्षा अधिक काही आवश्यक नाही. तसेच पहाटे तीन वाजता बिघाड होण्याची शक्यता कमी असते.
Baikal हा web admin panel असलेला पर्याय आहे. तो PHP आणि sabre/dav library वर चालतो. तो users आणि calendars SQLite किंवा MySQL मध्ये ठेवतो. त्यामुळे command line ऐवजी browser मधून person जोडता येतो. Accounts वारंवार जोडले किंवा काढले जात असतील, तर हा पर्याय निवडा.
Nextcloud योग्य आहे, जेव्हा calendar हा अनेक features पैकी एक feature असतो. तुम्हाला calendar, contacts, files आणि mobile app मिळतात. मात्र त्यासाठी PHP-FPM, database आणि background job runner आवश्यक असतात. तुमच्या प्रत्यक्ष गरजेसाठी हे जड वाटत असेल, तर हलके Nextcloud पर्याय हा तडजोडीचा भाग स्पष्ट करतात. तसेच self-hosted file sync मध्ये लोक Nextcloud install करण्यामागील दुसऱ्या प्रमुख गरजेचा पर्याय दिला आहे.
DAViCal हा दीर्घकाळापासून उपलब्ध असलेला PostgreSQL पर्याय आहे. तुम्ही आधीच PostgreSQL चालवत असाल आणि calendar data त्यात ठेवायचा असेल, तरच त्याचा विचार करा.
Ubuntu 24.04 वर Radicale स्थापित करा
August 2026 पर्यंत Radicale 3.5.10 हे उपलब्ध असलेले वर्तमान release होते. ते स्वतंत्र virtual environment मध्ये स्थापित करा.
sudo apt update
sudo apt install -y python3-venv apache2-utils nginx
sudo useradd --system --user-group --home-dir / --shell /usr/sbin/nologin radicale
sudo install -d -o radicale -g radicale -m 750 /var/lib/radicale/collections
sudo install -d -m 750 -o root -g radicale /etc/radicale
sudo python3 -m venv /opt/radicale/venv
sudo /opt/radicale/venv/bin/pip install --upgrade radicaleVirtual environment हा केवळ शैलीचा पर्याय नाही. sudo pip install radicale ला system Python मध्ये स्थापित केल्यास error: externally-managed-environment येते, कारण Ubuntu त्याच्या Python ची मालकी apt कडे ठेवते, जेणेकरून pip packaged files overwrite करू शकणार नाही.
/etc/radicale/config लिहा:
[server]
hosts = 127.0.0.1:5232
[auth]
type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = autodetect
[storage]
filesystem_folder = /var/lib/radicale/collectionshosts जाणीवपूर्वक loopback वर bind होते. nginx TLS termination करते आणि त्या port कडे forwarding करते. त्यामुळे Radicale थेट internet समोर येत नाही. 0.0.0.0:5232 चे upstream उदाहरण unencrypted service प्रकाशित करते आणि त्या service मध्ये passwords स्वीकारले जातात. या ठिकाणी महत्त्वाची चूक हीच आहे.
आता accounts तयार करा. -5 SHA-512 crypt निवडते. Radicale ते htpasswd_encryption = autodetect द्वारे वाचते आणि कोणत्याही अतिरिक्त module ची गरज नसते:
sudo htpasswd -5 -c /etc/radicale/users you
sudo htpasswd -5 /etc/radicale/users partner
sudo chown root:radicale /etc/radicale/users
sudo chmod 640 /etc/radicale/users-c file तयार करते आणि त्यातील आधीची संपूर्ण सामग्री truncate करते. ती फक्त पहिल्या user साठी वापरा. काही महिन्यांनी htpasswd -5 -c पुन्हा चालवल्यास पहिल्या user नंतर जोडलेली प्रत्येक account हटते. त्याचे लक्षण म्हणजे एका व्यक्तीचे syncing व्यवस्थित चालते, पण इतर प्रत्येकाला password prompt पुन्हा पुन्हा दिसत राहतो. Bcrypt देखील चालते. त्यासाठी अतिरिक्त installation radicale[bcrypt] आवश्यक आहे.
/etc/systemd/system/radicale.service तयार करा. Radicale documentation मधील unit नुसार त्यात बदल करा:
[Unit]
Description=CalDAV and CardDAV server
After=network.target
Requires=network.target
[Service]
ExecStart=/opt/radicale/venv/bin/python -m radicale
Restart=on-failure
User=radicale
UMask=0027
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
NoNewPrivileges=true
ReadWritePaths=/var/lib/radicale/
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now radicale
curl -i http://127.0.0.1:5232/निरोगी परिणामात 401 Unauthorized आणि WWW-Authenticate header दिसतो. याचा अर्थ service listening करत आहे आणि authentication सुरू आहे. Connection refused याचा अर्थ service सुरूच झाली नाही. journalctl -u radicale -n 50 ने तिने नाकारलेला option दाखवतो. ProtectSystem=strict या service साठी filesystem read only mount करते. त्यामुळे ReadWritePaths=/var/lib/radicale/ हीच अशी line आहे जी event save करण्यास परवानगी देते. ती line काढल्यास reads सुरू राहतात, पण प्रत्येक write अपयशी ठरते.
TLS ऐच्छिक नाही, कारण clients plaintext नाकारतात
CalDAV HTTP Basic वापरून authentication करते. प्रत्येक request सोबत ते user:password base64 encoded स्वरूपात पाठवते. Base64 हे encoding आहे, encryption नाही. Plain HTTP वापरल्यास फोन आणि server यांच्या दरम्यानच्या प्रत्येक network ला password दिसतो. प्रत्येक sync वेळी, दिवसभर तोच धोका राहतो.
Clients हे तुमच्यासाठी लागू करतात. Radicale documentation नुसार macOS Calendar.app unsecured HTTP वर credentials पाठवण्यास शांतपणे नकार देऊ शकते. iOS मध्येही असेच होते. Account configured दिसतो, पण तो कधीही sync होत नाही. वाचता येईल असा कोणताही error मिळत नाही.
प्रथम cal.example.com साठी A record VPS कडे निर्देशित करा, कारण certificate authority त्याची तपासणी करते. त्यानंतर /etc/nginx/sites-available/cal.example.com तयार करा:
server {
listen 80;
server_name cal.example.com;
location / {
proxy_pass http://localhost:5232/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass_header Authorization;
}
location = /.well-known/caldav { return 301 https://$host/; }
location = /.well-known/carddav { return 301 https://$host/; }
}चार proxy header lines Radicale documentation मधून घेतलेल्या आहेत. त्या जशा आहेत तशाच ठेवा.
sudo ln -s /etc/nginx/sites-available/cal.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d cal.example.com
curl -i -u you https://cal.example.com/nginx -t syntax is ok आणि test is successful दाखवते. ते पूर्ण झाल्यानंतरच reload करा. चुकीच्या file सह केलेल्या reload मुळे जुना config चालू राहतो आणि पुढील restart पर्यंत चूक लपून राहते. Certbot site file थेट संपादित करते: ते certificate install करते, block ला port 443 वर बदलते आणि port 80 वरून redirect जोडते. शेवटचा curl password विचारतो आणि 200 परत करायला हवा. हा Radicale चा स्वतःचा web interface आहे. 502 Bad Gateway याचा अर्थ nginx चालू आहे, पण Radicale port 5232 वर listening करत नाही.
फोनवर खाते जोडताना अपयश का येते?
कारण discovery प्रक्रियेत आहे. RFC 6764 मध्ये client hostname चे calendar URL मध्ये रूपांतर कसे करतो हे स्पष्ट केले आहे. तो _caldavs._tcp SRV record शोधतो. त्यानंतर https://cal.example.com/.well-known/caldav साठी विनंती करतो आणि DAV root कडे redirect अपेक्षित करतो. तेथून तो current-user-principal साठी आणि नंतर त्या principal च्या calendar-home-set साठी विनंती करतो. त्यानंतरच त्याला तुमची calendars दिसतात. फोनवर server साठी एकच field असतो. त्यामुळे प्रत्येक पायरी unattended पद्धतीने यशस्वी झाली पाहिजे.
curl -sI https://cal.example.com/.well-known/caldavयोग्य उत्तर म्हणजे HTTP/2 301 आणि त्यासोबत location: https://cal.example.com/ header. तेथे 404 असल्यामुळे iOS खाते माहिती पडताळता येत नसल्याचे सांगते, तर त्याच network वरील Thunderbird यशस्वीपणे कार्य करते. Thunderbird तुम्ही टाइप केलेला पूर्ण URL वापरतो. त्यामुळे त्याला redirect ची आवश्यकता नसते.
Redirect चे target server वर अवलंबून असते. Site च्या root वर Radicale चालू असल्यास ते / कडे redirect करते. Baikal सोबत दिलेले sample rules status 308 सह /dav.php कडे redirect करतात. Nextcloud /remote.php/dav/ कडे redirect करते.
कॅलेंडर तयार करा आणि त्यापैकी एक तुमच्या जोडीदारासोबत शेअर करा
अनेक क्लायंटमध्ये कॅलेंडर तयार करता येत नाही; ते फक्त कॅलेंडरला subscribe करू शकतात. ब्राउझरमध्ये https://cal.example.com/ उघडा, you म्हणून log in करा आणि तेथे कॅलेंडर तयार करा. डिस्कवर ते /var/lib/radicale/collections/collection-root/you/ अंतर्गत साठवले जाते. फोल्डरच्या नावासाठी तयार केलेला identifier वापरला जातो.
Radicale चा default rights backend owner_only आहे: authenticated account /USERNAME/ अंतर्गत स्वतःच्या collections वाचू आणि लिहू शकतो, इतर काहीही नाही. बहुतेक घरांसाठी हीच योग्य setting आहे. कॅलेंडर शेअर करण्याचा सर्वात सोपा मार्ग म्हणजे तिसरे account वापरणे. htpasswd वापरून household तयार करा. त्या login ने shared calendar तयार करा आणि प्रत्येक device वर ते दुसरे CalDAV account म्हणून जोडा. हे iOS सहित प्रत्येक क्लायंटवर कार्य करते, कारण कॅलेंडर त्या account च्या स्वतःच्या home मध्ये असते.
तुम्हाला अधिक सूक्ष्म नियंत्रण हवे असल्यास rule based rights वापरा. हे /etc/radicale/config मध्ये जोडा:
[rights]
type = from_file
file = /etc/radicale/rightsत्यानंतर Radicale documentation मधील उदाहरणावर आधारित /etc/radicale/rights जोडा:
[root]
user: .+
collection:
permissions: R
[principal]
user: .+
collection: {user}
permissions: RW
[own-calendars]
user: .+
collection: {user}/[^/]+
permissions: rw
[shared-household]
user: you|partner
collection: you/2f0a9c1e-1f4c-4c2b-9a1b-0d2f7a5c9e11
permissions: rwमोठ्या आणि लहान अक्षरांचा अर्थ वेगवेगळा असतो. R आणि W calendars किंवा address books नसलेल्या collections वाचतात आणि लिहितात. Principal folder साठी हेच आवश्यक असते. r आणि w स्वतः calendars वाचतात आणि लिहितात. त्या identifier ऐवजी वरील storage path मधून तुमच्या calendar चे खरे folder name वापरा.
एक महत्त्वाची मर्यादा लक्षात ठेवा: फक्त calendar home set वाचणारा क्लायंट दुसऱ्या user च्या path अंतर्गत असलेले कॅलेंडर दाखवणार नाही, कारण discovery तेथे जाऊन शोध घेत नाही. Thunderbird आणि DAVx⁵ ते full URL वापरून जोडू शकतात. iOS मध्ये हे शक्य नाही. म्हणून shared account pattern हा नेहमी कार्य करणारा पर्याय आहे.
क्लायंट सेट करा, कारण self-hosted calendars बहुतेक वेळा इथेच अपयशी ठरतात
iPhone आणि iPad. Settings उघडा. त्यानंतर Calendar निवडा. अलीकडील iOS आवृत्त्यांमध्ये ते Apps अंतर्गत असते. पुढे Calendar Accounts, Add Account, Other, Add CalDAV Account निवडा. Server म्हणून cal.example.com द्या. त्यानंतर user name आणि password द्या. Description हे फक्त label आहे. जतन करताना त्रुटी येत असल्यास खाते पुन्हा उघडा. Advanced view मध्ये Use SSL, port आणि पूर्ण account URL दिसतो. URL paste केल्यास discovery पूर्णपणे वगळली जाते.
Android. Android मध्ये built-in CalDAV client नाही. F-Droid किंवा Google Play मधून DAVx⁵ install करा. https://cal.example.com/ हा base URL वापरून user name सह account जोडा. त्यानंतर आवश्यक calendars निवडा. DAVx⁵ Android calendar provider मध्ये नोंदी करते. त्यामुळे events तुम्ही आधीपासून वापरत असलेल्या कोणत्याही calendar app मध्ये दिसतात.
Thunderbird. New Calendar, On the Network निवडा. त्यानंतर user name आणि https://cal.example.com/ हे location द्या. Thunderbird ला सापडलेली calendars ची यादी दाखवतो आणि कोणती calendars जोडायची ते विचारतो.
macOS. System Settings, Internet Accounts, Add Other Account, CalDAV निवडा. Account Type म्हणून Manual निवडा. त्यानंतर तोच user name, password आणि server address द्या.
CalDAV हा polling protocol आहे. Specification मध्ये push नाही. त्यामुळे laptop वर जोडलेला event त्याच क्षणी phone वर येत नाही. तो पुढील sync वेळी येतो. प्रत्येक client मध्ये तुम्हाला योग्य वाटेल असा interval सेट करा. Phone वर कमी interval ठेवल्यास battery अधिक खर्च होते हे लक्षात ठेवा.
फक्त फाइल्स असलेल्या store चा बॅकअप घ्या
Radicale अंतर्गत तुमचे calendar हे .ics फाइल्सची एक directory असते. प्रत्येक event साठी एक फाइल असते. प्रत्येक collection साठी एक लहान properties फाइल असते. एखादी directory कॉपी करणारे कोणतेही साधन तिचा बॅकअप घेते. बॅकअपमध्ये प्रत्यक्ष events आहेत याची खात्री करण्यासाठी तो less ने उघडू शकता. वाचता न येणाऱ्या database dump पेक्षा हा खरा फायदा आहे.
sudo systemctl stop radicale
sudo tar czf /root/radicale-$(date +%F).tar.gz -C /var/lib/radicale collections
sudo systemctl start radicalearchive तयार होण्यासाठी लागणाऱ्या काही सेकंदांसाठी service थांबवा. त्यामुळे फाइल्स वाचल्या जात असताना कोणताही client लेखनक्रियेत अर्धवट राहणार नाही. त्यानंतर archive त्या box बाहेर कॉपी करा. कारण त्याच VPS वरील बॅकअप ज्या बिघाडासाठी तुम्ही तयारी करत आहात तो बिघाड झाल्यास टिकणार नाही. restore करण्याची प्रक्रिया उलट आहे: extract करा, sudo chown -R radicale:radicale /var/lib/radicale/collections चालवा आणि service सुरू करा. प्रत्येक client कडे त्याच्या calendars ची स्थानिक प्रतही असते. त्यामुळे failure झाल्यापासून sync न केलेला laptop तुमच्या डेटाची दुसरी प्रत ठरतो.
Baikal किंवा Nextcloud यापैकी योग्य पर्याय कोणता
Baikal 0.12.1 हे 5 August 2026 रोजी release झाले आणि त्यासाठी PHP 8.2 किंवा त्यानंतरची आवृत्ती आवश्यक आहे. ते web root च्या बाहेर unpack करा आणि फक्त त्याची html directory उपलब्ध करून द्या:
sudo apt install -y php-fpm php-sqlite3 php-xml php-mbstring php-curl unzip
cd /tmp
curl -LO https://github.com/sabre-io/Baikal/releases/download/0.12.1/baikal-0.12.1.zip
sudo unzip -q baikal-0.12.1.zip -d /srv
sudo chown -R www-data:www-data /srv/baikal/Specific /srv/baikal/configया दोन directories मध्येच web server लिहितो. त्यामुळे इतर कोणतीही directory writable ठेवण्याची गरज नाही. तुमच्या nginx server block मध्ये Baikal साठीचे विशिष्ट भाग असे आहेत:
root /srv/baikal/html;
index index.php;
location ~ /(\.ht|Core|Specific|config) { deny all; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location = /.well-known/caldav { return 308 /dav.php; }
location = /.well-known/carddav { return 308 /dav.php; }nginx reload करा आणि browser मध्ये site उघडा. Setup wizard admin account आणि SQLite database तयार करेल. Client setup Radicale प्रमाणेच आहे. Server address म्हणून https://cal.example.com/ वापरा, कारण well-known rule discovery विनंत्या /dav.php कडे पाठवतो.
तुम्हाला त्याच login मध्ये files आणि phone app देखील हवे असतील, तेव्हाच Nextcloud अतिरिक्त जटिलतेचे समर्थन करते. त्याचा DAV root /remote.php/dav/ आहे आणि त्याच discovery rules लागू होतात. यापैकी कोणतीही service container मध्ये चालवल्यास PHP versions तुमच्या host पासून वेगळ्या ठेवता येतात: VPS वर Docker Compose मध्ये compose file आणि त्याच्या समोरील reverse proxy यांचे वर्णन आहे, तर 2026 मध्ये self-hosting करणे कोणत्या गोष्टींसाठी योग्य आहे या मार्गावर किती पुढे जायचे हे ठरवण्यासाठी योग्य संदर्भ आहे.
अपयशाच्या स्थिती आणि दिसणारे संदेश
प्रत्येक sync 401 परत करते. एकतर password file मधील accounts दुसऱ्या htpasswd -c मुळे नष्ट झाले आहेत किंवा radicale user ला ती वाचता येत नाही. sudo -u radicale cat /etc/radicale/users वापरून तपासा; तेथे permission denied मिळणे हेच कारण स्पष्ट करते. दुरुस्ती म्हणजे group radicale आणि mode 640 ठेवणे. Radicale प्रत्येक अयशस्वी login नंतर default ने एक सेकंद थांबते. त्यामुळे stale password असलेला client नाकारला गेल्यासारखा न दिसता संथ वाटतो.
nginx PROPFIND वर 405 उत्तर देते. URL static file म्हणून serve होत आहे. त्यामुळे WebDAV method Radicale पर्यंत पोहोचत नाही. Endpoint थेट तपासा:
curl -u you -X PROPFIND -H "Depth: 0" -i https://cal.example.com/you/कार्यरत DAV collection 207 Multi-Status उत्तर देते. इतर कोणतेही उत्तर मिळाल्यास request web server मध्येच थांबली आहे.
फोन account पडताळू शकत नाही, पण browser मध्ये सर्व काही व्यवस्थित चालते. याची दोन सामान्य कारणे आहेत. curl ने वर तपासलेला well-known redirect नसू शकतो. किंवा certificate chain अपूर्ण असू शकते. Browser गहाळ intermediate मिळवण्यासाठी तो स्वतः fetch करून ही त्रुटी भरून काढतो; iOS तसे करत नाही. Shell मधून तपासा:
openssl s_client -connect cal.example.com:443 -servername cal.example.com </dev/nullVerify return code: 0 (ok) शोधा. ते अयशस्वी झाल्यास nginx config मध्ये cert.pem ऐवजी fullchain.pem कडे निर्देश असणे आवश्यक आहे.
Import केल्यानंतर duplicate events दिसतात. प्रत्येक event मध्ये UID असतो आणि clients त्याला identity मानतात. identifiers पुन्हा निर्माण करणाऱ्या tool द्वारे तीच file दोनदा import केल्यास दोन events तयार होतात. ते कधीही merge होणार नाहीत. एका device वरील अतिरिक्त copies delete करा आणि deletion sync होऊ द्या.
Reboot नंतर सर्व काही बंद पडते. Service manually सुरू केली होती. sudo systemctl is-enabled radicale disabled दाखवते आणि sudo systemctl enable --now radicale ही समस्या कायमची दूर करते.
FAQ
CalDAV सर्व्हरसाठी मला खरोखर TLS आवश्यक आहे का?
होय. CalDAV HTTP Basic वापरून प्रमाणीकरण करते. त्यामुळे प्रत्येक विनंतीसोबत पासवर्ड base64 encoded स्वरूपात पाठवला जातो आणि base64 सहजपणे मूळ स्वरूपात परत मिळवता येतो. क्लायंट्सही TLS आवश्यक करतात. macOS Calendar.app असुरक्षित HTTP वर credentials पाठवण्यास कदाचित शांतपणे नकार देतो. iOS मध्येही असेच होते. त्यामुळे account save झाल्यासारखे दिसते, पण तो कधीही sync होत नाही. sudo certbot --nginx -d cal.example.com हे संपूर्ण काम करते.
Thunderbird मध्ये account जोडता येतो, पण माझ्या फोनवर का अपयश येते?
Thunderbird तुम्ही दिलेला पूर्ण URL वापरतो. फोनमध्ये एकच server field असतो. त्यामुळे तो RFC 6764 discovery वापरतो: तो https://cal.example.com/.well-known/caldav ची विनंती करतो आणि DAV root कडे redirect अपेक्षित ठेवतो. तो redirect नसल्यास फोनला 404 मिळतो आणि account पडताळता येत नसल्याचा संदेश दाखवतो. nginx मध्ये location = /.well-known/caldav { return 301 https://$host/; } जोडा. त्यानंतर curl -sI https://cal.example.com/.well-known/caldav वापरून तुम्हाला 301 आणि location header मिळतो याची खात्री करा.
दोन व्यक्ती एक calendar share करू शकतात का?
होय. यासाठी shared login वापरणे सर्वात विश्वसनीय पद्धत आहे. htpasswd वापरून तिसरे account तयार करा. Shared calendar त्या account अंतर्गत ठेवा. त्यानंतर प्रत्येक device वर ते दुसरे CalDAV account म्हणून जोडा. Radicale च्या rights file मधून दुसऱ्या user च्या path अंतर्गत असलेल्या एका collection वर named user ला read आणि write अधिकार देता येतात. मात्र, स्वतःच्या calendar home set मधील calendars वाचणारा client ते calendar कधीही दाखवणार नाही. त्यामुळे ही पद्धत iOS पेक्षा Thunderbird आणि DAVx⁵ साठी अधिक योग्य आहे.
VPS बंद पडल्यास माझ्या events चे काय होते?
Radicale मध्ये store plain text स्वरूपात असतो. /var/lib/radicale/collections/collection-root/ अंतर्गत प्रत्येक event साठी एक .ics file असते. त्याचा backup tar ने घेता येतो आणि less ने वाचता येतो. Restore करण्यासाठी extract करा, chown -R radicale:radicale चालवा आणि service सुरू करा. प्रत्येक synced client स्थानिक प्रतही ठेवतो. त्यामुळे failure होण्यापूर्वी अद्ययावत असलेल्या laptop वर calendar ची पूर्ण दुसरी प्रत उपलब्ध असते.
CalDAV server माझे contacts देखील sync करतो का?
Contacts साठी CardDAV वापरले जाते. हा RFC 6352 मध्ये परिभाषित केलेला sibling protocol आहे. यात events ऐवजी vCard files साठवल्या जातात. Radicale, Baikal आणि Nextcloud हे सर्व समान account आणि समान hostname वरून ते serve करतात. Android वर DAVx⁵ एका account मधून calendars आणि contacts sync करतो. iOS वर त्याच credentials सह CardDAV प्रकारचे दुसरे account जोडावे लागते. म्हणून /.well-known/carddav redirect तुमच्या nginx config मध्ये CalDAV redirect च्या शेजारी असणे आवश्यक आहे.