本次博文带来的是在Linux环境下自建CalDAV+CardDAV 服务器的教程,此次博文中采用的操作系统是Ubuntu Server,版本为20.4;Web服务器采用Nginx;Baïkal是一款基于于PHP开发的开源产品,可以在GitHub上查看;由于依赖于PHP运行环境,版本要求7,此次部署使用为7.4;数据库采用MySQL或者SQLite。
关于Baikal的介绍,直接复制官网的话语并且简单翻译一下:
配置服务器
首先通过SSH登录服务器,新装服务器建议登录服务器以后更新一下所有的包
#更新 sudo apt-get update sudo apt-get upgrade -y
在更新完所有的包以后建议重启一下服务器,重启命令root,如果为生产环境请勿随意重启
#重启命令 生产环境请勿随意重启 reboot
Ubuntu默认安装没有中文语言支持,如果要安装中文语言支持可以安装语言包,命令如下
#安装中文语言包 sudo apt-get install language-pack-zh-hans -y
安装完中文语言包支持以后,默认还是使用的英文环境,可以使用echo $LANG查看当前的语言
可以使用export命令更改为中文export LANG=zh_CN.UTF-8
当然,export命令仅针对当前会话有效,如果需要将该命令固化下来有多种方式,
例如更改系统环境变量,或者用户变量,可以将命令添加在在以下几个文件中的
一个或者多个:/etc/profile、/etc/enviroment、~/.profile、~/.env、~/.bashrc
更改时区后,使用date命令可以查看当前时间信息,建议将时区更改成上海
#删除默认 rm -rf /etc/localtime #链接 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #查看时间日期 date
安装所需的各项依赖和组件
#安装nginx sudo apt-get install nginx -y #安装php-fpm sudo apt-get install php-fpm -y #由于当前使用php版本为7.4,如果使用其他版本,请注意组件包的版本更改 #安装php组件的sqlite和mysql支持,二者选其一或者两者皆安装,具体看使用哪一种数据库 sudo apt-get install php7.4-sqlite3 php7.4-mysql -y #安装php-xml组件 必要 sudo apt-get install php7.4-xml -y
获取Baikal安装包,从GitHub上选择最新的release版本,当前版本0.9.2
#下载部署包 wget https://github.com/sabre-io/Baikal/releases/download/0.9.2/baikal-0.9.2.zip #将下载的包移动到www目录,放在什么目录看自己需求,只需要权限以及nginx的配置好就行 mv baikal-0.9.2.zip /var/www/html/ #进到www目录 cd /var/www/html/ #由于文件是zip格式,下载一个解压软件用于解压 sudo apt-get install unzip -y #解压zip文件 unzip baikal-0.9.2.zip #变更该文件的所属用户和组,该项查看/etc/nginx/nginx.conf文件中配置的user #或者使用ps -aux|grep nginx查看当前nginx是以什么用户运行的 chown -R www-data:www-data baikal
配置Nginx
在配置nginx之前,如果要使用ssl,需要证书;如果是公网有域名,可以考虑采用Let’s Encrypt,
如果是本地部署,可以采用自生成证书;
请注意,IOS同步功能必须要求ssl加密,所以建议配置。本篇的证书为自生成证书
#进入到nginx目录 cd /etc/nginx #新建一个目录 这里准备用来存放证书 实际存放位置自选 nginx的相关配置关联即可 mkdir private_key #进入到存放证书的目录 cd private_key #首先新建私钥 这里我选择了rsa 秘钥长度2048 openssl genrsa -out private.key 2048 #根据私钥生成公钥 公钥有效期我这里设置了3650天 openssl req -x509 -new -nodes -key private.key -days 36500 -out server.crt
生成公钥的时候会提示输入信息,看实际需求是否要填入,这些信息都会在公钥上显示
配置nginx,修改nginx的默认配置
vi /etc/nginx/nginx.conf
在配置文件中,有两行配置引入,这里建议更改这两行,不要使用*通配符,手动引入配置
在/etc/nginx/sites-enabled目录下有一个默认的default配置,将第二行改成
include /etc/nginx/sites-enabled/default;
第一行改成include /etc/nginx/conf.d/baikal.conf;
修改/etc/nginx/sites-enabled/default对的内容,建议全部删除并放入以下内容
由于这一条include放置于引入的最后一条,并且是默认server,即表示如果前面的访问不匹配则返回403
403是无权访问的意思,建议这样配置,给服务器的访问做一条垫底的策略
server { #监听80端口 ipv4和v6的 返回403 listen 80 default_server; listen [::]:80 default_server; return 403; } server { #监听443端口 ipv4和v6的 返回403 listen 443 ssl default_server; listen [::]:443 ssl default_server; #配置证书 这里是前面自生成的,如果使用其他证书配置实际地址 ssl_certificate /etc/nginx/private_key/server.crt; ssl_certificate_key /etc/nginx/private_key/private.key; return 403; }
新建vi /etc/nginx/conf.d/baikal.conf文件并写入以下内容
server { #监听ipv4的80端口 listen 80; #服务器的名称 即表示使用该域名访问的时候才会匹配 server_name baikal.acme-me.cc; #重定向 将http流量引到https rewrite ^/(.*) https://baikal.acme-me.cc/$1 permanent; } server { #监听443 并启用ssl listen 443 ssl; #配置服务器名称 表示响应请求这个域名 server_name baikal.acme-me.cc; #配置证书 根据实际的证书配置 ssl_certificate /etc/nginx/private_key/server.crt; ssl_certificate_key /etc/nginx/private_key/private.key; #根路径 这里配置baikal实际存放的路径 root /var/www/html/baikal/html; #配置网站的首页 后续配置为官方内容 index index.php; rewrite ^/.well-known/caldav /dav.php redirect; rewrite ^/.well-known/carddav /dav.php redirect; charset utf-8; location ~ /(\.ht|Core|Specific|config) { deny all; return 404; } location ~ ^(.+\.php)(.*)$ { try_files $fastcgi_script_name =404; include /etc/nginx/fastcgi_params; fastcgi_split_path_info ^(.+\.php)(.*)$; #这条官方的手册中是unix:/var/run/php-fpm/php-fpm.sock;实际有问题的 #应该是unix:/var/run/php/php-fpm.sock,由于用的是php7.4的组件 #所以我这里用的7.4 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
配置完成以后采用nginx -t命令检测一下nginx的配置是否存在问题
#nginx配置检测命令 nginx -t
当前表示nginx的相关配置不存在问题,
则可以使用nginx -s reload重启,该命令称为nginx优雅的重启
#nginx重启命令 nginx -s reload
此时就可以通过浏览器访问网站看是否进入初始化了初始化界面,如果没有报错,
使用MySQL则向下进入安装MySQL的教程,使用SQLite直接调过MySQL安装章节
配置MySQL
数据库采用MySQL则需要去官网下载,由于是Ubuntu系统,下载MySQL APT Repository
#从官网下载apt仓库,具体版本以官方实际版本为主 wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
#安装mysql仓库 sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
安装过程中选择默认的即可
安装完成后更新源并且安装mysql
#更新源 sudo apt-get update #安装mysql server,会一并安装默认组件 sudo apt-get install mysql-community-server -y
在安装向导中中输入root的密码然后确定
确认root密码并确定
对于弹出的提示选择继续
选择密码的加密方式,建议选择上面的这行,行的加密方式并且加密更安全;
如果数据库有和旧系统对接的可能这种方式会导致数据库连接失败,
这时候可以选择第二种老版本的加密方式,然后等待数据库安装完成
如果使用mysql作为数据库,要建立一个库,首先登录数据库
#mysql客户端参数 -u 用户名 -p密码 密码不建议直接输入放空会提示输入 #还有-u 数据库地址,默认localhost可以不输 -P 数据库端,默认3306可以不输 mysql -uroot -p
创建数据库,这里数据库名称db_baikal
#创建一个数据库 数据库名称自定义 create database db_baikal; #创建用户并配置密码 建议新建用户 不要使用root账户,权限过高 create user baikaluser identified by 'password'; #将用于baikal的数据给新建的用户授权 grant all on db_baikal.* to baikaluser; #使用刚刚新建的数据库 #如果首次使用在网页上选择的MySQL则不需要后续步骤 #只有当baikal初始化使用的SQLite,后续更换数据库,这种时候才需要手动初始化数据库 use db_baikal; #初始化数据库 source /var/www/html/baikal/Core/Resources/Db/MySQL/db.sql
配置Baikal
进入设置向导,时区根据实际情况配置,email可以留空,设置管理员的密码进入下一步
如果使用SQLite,这里点击Save Changes即可;
如果使用MySQL,则勾上下面的使用MySQL的钩子并填入相关参数
host表示服务器地址,如果是本地填入localhost即可,如果是其他的填入ip地址;
默认端口3306可以省略,如果改了端口,例如3307,则写localhost:3307;
数据库名称是前面新建的填入;
用户名和密码也建议采用建立的,不建议使用root账户连接数据库
初始化完成点击开始使用
输入设置向导中设置的密码进入系统后台
下图则是默认管理视图的Dashboard。
由于现在系统中没有账户,如果需要使用,则要新建一个用户,选择用户和资源设置
添加一个用户
填入相关信息:用户名、显示名称、邮箱、密码以及确认密码
用户添加完成后,可以看到新建的用户信息
有了用户,使用该用户在网页上访问dav.php进入用户页面
可以看到这就是用户默认路径
如果要进行同步,客户端就可以使用相对应的地址进行同步了
通讯录的同步地址是https://域名/dav.php/addressbooks/用户名
https://baikal.acme-me.cc/dav.php/addressbooks/admin
日历同步地址是https://域名/dav.php/calendars/用户名
https://baikal.acme-me.cc/dav.php/calendars/admin
--------------------------------------------------------------------------------------------------------------------------------
更新于2022-05-03。
B站发了视频教程,可以参考一下视频教程