基于宝塔面板搭建Radicale实现iOS/安卓通讯录互通
因华为、苹果手机经常切换混用,手机通讯录在双端的同步,就有了需求,搜索后,无非就几类解决方案:
- 双端均安装通讯录同步软件。
- 通过iCloud的CardDAV在华为端同步iCloud通讯录。
- 自建CardDAV服务器,在双端同步同一通讯录。
方案1,首先就被我pass掉了,每一个软件都有一颗往大了、往强了做的心,如果仅仅只是专注做一个功能,仿佛不能体现他的水平一样,非要集成一堆堆功能一堆堆广告。
方案2,看起来,这应该是最合适的一个方案,无需做过多配置即可实现,且与原某一生态下的账号信息可以保持同步,很是完美。但是在我进行配置时,通过DavX5无法获取到iCloud的通讯录信息,创建也总是出现无法链接Apple的xxx-contacts.icloud.com
服务器,因此该方案作罢。
方案3,实现起来门槛相对较高,需要有服务器,而且iOS必须要支持ssl,就很恶心。起始时我是部署在通过TP-Link的DDNS出来的家庭电脑上,结果因无法ssl,更换为本博服务器。

来自MoeLove
提供CardDAV能力的挺多,援引MoeLove整理图片,Nextcloud、Owncloud什么的都可以,最终网络上介绍较多、上手参考较多的Radicale,成为了我的选择。
以下,为部署过程的记录,如果谁有需求,可以参照处理。所有的部署过程,都基于宝塔面板,因为作为一个小白,其他方式也不会处理了。
一、使用宝塔网站-Python项目管理进行Radicale配置
宝塔提供相对完善的网站管理能力,只需要点点点,基本上就可以完成配置,以下内容主要以图片为主,关重内容做文字说明。

图1 宝塔网站管理

图2 Python-版本管理

图3 添加Python项目

图4 进入Radicale设置

图5 Radicale日志查询
二、排错

图6 报错缺少encodings
排错调试这个地方是让人很心烦的,第一个问题就让我很是费解,部署上运行,总是出现No module named 'encodings'
,但是通过直接进虚拟环境起Python后import encodings
又可以识别,查了老半天网络上的说法,也没解。后边想到之前部署过一次网站,是通过单独安装的Python项目管理器2.5弄的,会不会是环境冲突。于是,卸载里边的虚拟环境、卸载管理器、重启,算是解决了这个问题。

图7 报错缺少vobject
但是随后,又出现了其他报错提示,这次又是No module named 'vobject'
,依赖各种缺。好在这次通过进虚拟环境重新pip install vobject
直接解决。不知道是宝塔的不完善还是怎么地,迁移前边老管理器的项目时,也出现了类似问题,命名选了安装依赖,仍然需要重新pip install -r requirements.txt
,这个可以注意以下。

图8 报错No package metadata

图9 报错unable to find "application"

图10 错误修改
随后的几个错误,应该都是通过同一个地方引起的,在选择项目所在位置后,Python项目管理器会自动完善uwsgi的信息,其中应用名称处默认为app
,但是这个app
应该有问题。我通过修改项目目录内创建的uwsgi.ini文件内callable=app
为callable=application
,解决了以上问题。

图11 成功运行
见到WSGI app 0 (mountpoint='') ready
字样,服务成功跑起来。
于是,你可以通过http://IP:port
或者http://domain:port
访问Radicale的WEB管理页面。
三、配置反向代理
以上的完成后,你就可以进行最基本的访问了,但是使用IP带端口或者域名带端口的形式访问,多少还是存在不方便。
下一步,就是通过配置实现不带端口的访问。

图12 PHP项目管理

图13 添加PHP项目

图14 PHP项目配置

图15 PHP项目列表

图16 配置反向代理
四、配置SSl实现HTTPS

图17 进入ssl配置

图18 完善ssl