- Introduction
- Crédits
- Prérequis
- Installation
- Configuration
- Utilisation
- Sauvegarde de la base de données
- Restauration
- Mise à jour de Baïkal
- Sécurité
- Questions et contributions
Ce guide permet l'installation et la configuration de votre propre serveur de calendrier (CalDAV) et de contacts (CardDAV) avec Baïkal.
Baïkal permet d'accéder de manière transparente à vos contacts et calendriers depuis n'importe quel appareil. Il est compatible avec iOS, Mac OS X, DAVx5 sur Android, Mozilla Thunderbird et toute autre application compatible CalDAV et CardDAV.
Protégez votre vie privée en hébergeant vous-même vos calendriers et vos contacts.
Ce guide a été écrit à partir des sources suivantes :
- sabre.io/baikal, merci à Jérôme Schneider et fruux
- Guide en allemand pour une installation sur Raspberry Pi, merci à @JsBergbau
- Kinamo pour la sauvegarde de la base de données
- ChrisTitus
Pour suivre ce guide vous aurez besoin
- D'un serveur basé sur Debian avec accès root
- D'un nom de domaine avec un enregistrement DNS A configuré vers l'IP de votre serveur.
Dans la suite du guide, il est considéré que le nom de domaine est
domaine.fr
et le sous-domaine avec l'enregistrement pointant vers votre machine estcal.domaine.fr
Devenir root
sudo -i
Mise à jour du cache d'APT et du système
apt update && apt upgrade -y
Installation de MariaDB
apt install mariadb-server -y
Installation d'Apache2
apt install apache2 -y
Rendons nous sur http://cal.domaine.fr/
, vous devriez voir la page par défault d'apache.
Pour activer HTTPS sur votre site Web, vous devez obtenir un certificat SSL/TLS auprès d'une autorité de certification (CA). Nous utiliserons dans ce guide Let's Encrypt comme autorité de certification car cela est gratuit et simple d'utilisation. Afin d'obtenir un certificat pour votre domaine auprès de Let's Encrypt, vous devez démontrer que vous possèdez le domaine.
Certbot est un outil permettant la gestion de certificats Let's Encrypt, automatisant la génération d'un certificat et réalisant la preuve de votre possession du serveur web.
apt install certbot -y
certbot certonly --standalone
certbot renew --dry-run
Le certificat devra être renouvellé tous les 3 mois, pour cela saississez la commande
certbot renew
Rendons nous sur https://cal.domaine.fr/
, vous devriez voir une icone de cadenas dans la barre URL.
Aide : Certbot ou Let's Encrypt
Installer PHP et les modules PHP
apt install php php-mysql php-dom -y
Nous installerons le serveur dans le dossier /srv
Source : The Linux Documentation Project
cd /srv
Aller à github.com/sabre-io/Baikal/releases/latest et télécharger la dernière version de l'archive ZIP.
wget https://github.com/sabre-io/Baikal/releases/download/0.10.1/baikal-0.10.1.zip
Installer unzip pour décompresser l'archive
apt install unzip -y
unzip baikal-0.10.1.zip
rm baikal-0.10.1.zip
chown -R www-data:www-data /srv/baikal
Point d'attention sécurité
Lancer le script de configuration initiale
mysql_secure_installation
Point d'attention sécurité
ATTENTION : Choisissez un bon mot de passe
Aide : mysql_secure_installation
Connection au serveur mysql
mysql -u root -p
Créer une base de donnée baikal
et un utilisateur baikal
CREATE DATABASE baikal;
CREATE USER 'baikal'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON baikal.* TO 'baikal'@'localhost';
FLUSH PRIVILEGES;
ATTENTION : Choisissez un bon mot de passe
CTRL+D pour quitter
nano /etc/apache2/sites-available/baikal.conf
Exemple de configuration :
<VirtualHost *:80>
ServerName cal.domaine.fr
Redirect permanent / https://cal.domaine.fr/
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /srv/baikal/html
ServerName cal.domaine.fr
RewriteEngine on
# Generally already set by global Apache configuration
# RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule /.well-known/carddav /dav.php [R=308,L]
RewriteRule /.well-known/caldav /dav.php [R=308,L]
<Directory "/srv/baikal/html">
Options None
# If you install cloning git repository, you may need the following
# Options +FollowSymlinks
AllowOverride None
# Configuration for apache-2.4:
Require all granted
# Configuration for apache-2.2:
# Order allow,deny
# Allow from all
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cal.domaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cal.domaine.fr/privkey.pem
</VirtualHost>
Vous trouverez ce fichier de configuration ici => conf/baikal.conf
Il ne vous reste plus qu'a remplacer (CTRL+H) les 4 occurences de cal.domaine.fr
par votre sous-domaine.
a2enmod alias
a2enmod expires
a2enmod rewrite
a2enmod ssl
a2dissite *
a2ensite baikal.conf
systemctl restart apache2
Si vous n'avez pas correctement installé de certificat SSL, une erreur peut survenir, référez vous à cette partie du guide.
Il est maintenant temps de se connecter à votre domaine, ici https://cal.domaine.fr/
, avec un navigateur web pour réaliser la configuration initiale.
Saisie d'un mot de passe d'administration
ATTENTION : Choisissez un bon mot de passe
Connection à la base de donnée avec l'utilisateur baikal
On utilise ici l'identifiant et le mot de passe de l'utilisateur mysql
baikal
saisis dans cette partie.
On peut maintenant se connecter avec le compte admin
sur la page d'administration https://cal.domaine.fr/admin
ou en cliquant sur le bouton Login
On utilise ici l'identifiant et le mot de passe d'administration saisis dans cette partie.
Panneau de contôle
Accès à la liste des utilisateurs
Création d'un utilisateur
ATTENTION : Choisissez un bon mot de passe
Point de vigilance sécurité, attention à la méthode de hashage utilisée par Baïkal
Liste des utilisateurs
Paramètres des carnets d'adresses (Nom affiché du carnet et description)
Paramètres des calendriers (Nom affiché du calendrier, couleur, description et options)
On utilise ici l'identifiant et le mot de passe d'un utilisateur créé dans cette partie.
Passage en root
sudo -i
Arrêt du serveur web
systemctl stop apache2.service
Sauvegarde de la base baikal
dans le dossier courant
mysqldump baikal | gzip > baikal.sql.gz
Compression avec gzip
Démarrage du serveur web
systemctl start apache2.service
Passage en root
sudo -i
Décompression du fichier de backup
gunzip baikal.sql.gz
Supposé dans le dossier courant
Création de la base de données baikal
, puis restauration des données dans la base
mysql -e "CREATE DATABASE baikal";
mysql baikal < baikal.sql
Se référer à sabre.io/baikal/upgrade
ATTENTION : Faire une sauvegarde de la base de données
Passage en root
sudo -i
Arrêt du serveur web
systemctl stop apache2.service
Déplacement dans le dossier /srv
cd /srv
Déplacement (sauvegarde) du dossier baikal
initial
rm -r /backup
mkdir -p /backup
mv baikal /backup/baikal.bak
Téléchargement de la nouvelle version
wget https://github.com/sabre-io/Baikal/releases/download/0.10.1/baikal-0.10.1.zip
Décompression de l'archive
unzip baikal-0.10.1.zip
Suppression des dossiers config
et Specific
de la nouvelle version
rm -rf baikal/config baikal/Specific
Restauration des dossiers config
et Specific
à partir de la sauvegarde
cp -r /backup/baikal.bak/config baikal/
cp -r /backup/baikal.bak/Specific baikal/
Modification des droits
chown -R www-data:www-data baikal/
Redémarrage du serveur web
systemctl start apache2.service
Il ne reste plus qu'à retourner sur la page d'administration https://cal.domaine.fr/admin
Comme nous avons déjà fait une sauvegarde, il suffit de cliquer sur Start Upgrade
.
On supprime l'archive
rm -r /srv/baikal-0.10.1.zip
Après avoir vérifié que la synchronisation est toujours en cours et que les entrées sont toujours là, on peut supprimer la sauvegarde du dossier
rm -r /backup/baikal.bak/
La mise à jour est terminé !
La sécurité informatique est de votre responsabilité, les quelques notes ci-dessous vous donnent des outils pour améliorer la sécurité de votre serveur, il vous appartient cependant de vous renseigner si vous souhaitez aller plus loin.
Installation de ufw et fail2ban
apt install ufw fail2ban -y
Politique UFW
ufw allow 80/tcp
ufw allow 443/tcp
ufw default deny incoming
ufw default allow outgoing
ufw enable
Attention à SSH, ne coupez pas la branche sur laquelle vous êtes 🍃
Exemple pour le port 22 :
ufw limit 22/tcp
Activer fail2ban
systemctl enable fail2ban
systemctl start fail2ban
Edition de /etc/sysctl.conf
Prévenir l'usurpation d'adresse IP
cat <<EOF > /etc/host.conf
order bind,hosts
multi on
EOF
Afficher la liste des ports en écoute
netstat -tunlp
N'hésitez pas à poser vos questions en soumettant une issue !
Toute contribution est également la bienvenue en réalisant une pull request.
Enjoy !