Feuille de route d'installation de mon Serveur

 

 

 

Cette feuille de route (en cours d'écriture) a pour objectif l'installation d'un serveur avec le plus de fonctionnalités possibles, étape par étape.

 


 

 

1. Pré-requis

   Avoir un ordinateur qui fasse office de serveur (dans mon cas le nettop minix hd ici ).

   Téléchargez ubuntu serveur ici (j'ai choisi la version 64 bit) et installez le (dans mon cas j'ai installé Lubuntu puis désactivé le lancement automatique de l'interface graphique cf Astuces). Si vous souhaitez accéder à votre serveur depuis un autre poste, lors de l'installation indiquez  que vous souhaitez installer openssh.

  Si vous êtes derrière un routeur, paramétrez le DHCP pour donner une adresse IP locale fixe à votre serveur en attribuant cette adresse IP à l'adresse MAC de votre serveur (de forme 00:00:00:00:00:00 que vous pouver connaitre en lançant la commande ifconfig).
Cela permet d'accèder à votre serveur en sachant son adresse IP locale et cela permettra les redirections de port plus tard.
Pour plus de sécurité placer votre serveur dans la DMZ (de cette manière s'il est compromis celà ne devrait pas mettre en danger le reste de votre réseau).

  Préparez l'accès depuis internet en créant un nom de domaine (gratuit sur venez.fr) : rediriger le nom de domaine vers votre adresse IP publique (elle doit être fixe comme c'est le cas chez free (il me semble qu'il y a des solutions si ce n'est pas le cas)).

 Vous pouvez également Installez Fail2ban (pour empêcher les attanques "brute force") et phpmyadmin (pour accèder à la base de donnée mysql) avec la ligne de commande :

sudo apt-get install fail2ban phpmyadmin 
  Montez au démarrage la freebox (ou en local)
Avoir installé :
 sudo apt-get install cifs-utils

Ouvrir le fichier /etc/fstab pour y ajouter à la fin la ligne suivante :

//mafreebox.freebox.fr/Disque\040dur /media/freebox cifs nofail,x-systemd.automount,x-systemd.device-timeout=10,guest,username="",password="",cache=none,uid=1000,iocharset=utf8,file_mode=0777,dir_mode=0777,vers=1.0 0 0
# ou
//192.168.0.254/maxtor /media/maxtor cifs _netdev,rw,users,credentials=/home/[user]/.smbcredentials,iocharset=utf8,uid=1000,sec=ntlmv2,file_mode=0777,dir_mode=0777,vers=1.0 0 0
# ou en local
UUID=xxxxxxxxx /media/maxtor ntfs-3g defaults 0 2
Avant ça il faudra créer le dossier cible, et installer le paquet cifs-utils
Pour un accès avec mot de passe voir (https://doc.ubuntu-fr.org/freeboxv6)
Pour connaitre la liste des disques et leur UUID faire
lsblk -f
Si vous avez des problèmes voir ici

   Pour pouvoir accéder au serveur avec une adresse local (ex : serveur.local), avec zeroconf
sudo apt-get install avahi-daemon

   Pour pouvoir accéder au serveur https, suivez la procédure ici
 
Il faudra également penser à lancer les commandes
sudo a2enmod ssl
sudo systemctl reload apache2
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
sudo /etc/init.d/apache2 restart
 
 
  Au moment de votre choix vous pourrez créer l'accès à votre serveur depuis internet en routant le port 443 vers votre serveur (sur le même port) et configurer le parefeu, avant celà il faudra créer le certificat dans Zentyal dans la rubrique correspondante.
 
 

  Pour accéder à une interface web d'administration du serveur, vous pouvez installer Webmin

Se rendre dans le répertoire de son choix

curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sudo sh setup-repos.sh
sudo apt-get install webmin --install-recommends
L'interface se situe à https://<Votre-IP-Serveur>:10000
Les identifiants mots de passe, sont ceux du système
 

2. Zentyal

2.1 Installation

Installez Zentyal avec au minimum les modules suivants : webserver network firewall backup Userandgroup (LDAP) + Usercorner monitor et certification autority

Lancez les commandes :

sudo add-apt-repository ppa:zentyal/3.0
sudo add-apt-repository "deb http://archive.zentyal.org/zentyal 3.0 main extra"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 10E239FF 
sudo apt-get update 
sudo apt-get install zentyal language-pack-zentyal-fr

Puis avec votre navigateur web rendez-vous sur la page http://ip-de-votre-serveur et finissez l'installation en indiquant les modules cités précédemment.

 

2.1 Configuration de la sauvegarde

Vous pouvez dans Zentyal configurer votre sauvegarde Si vous souhaitez lancer une sauvegarde immédiatement vous pouvez le faire en lançant les commandes

sudo /usr/share/zentyal-ebackup/backup-tool --full         ## sauvegarde compléte
sudo /usr/share/zentyal-ebackup/backup-tool --incremental  ## sauvegarde incrémentale
Pour des restaurations partielles vous pouvez opérer depuis l'interface de gestion. Vous ne verrez que les fichier présent lors de la dernière sauvegarde et aurez le choix de les restaurer à la date de sauvegarde de votre choix. Si vous voulez restaurer un fichier qui n'est plus présent sur la dernière sauvegarde il faudra passer par les lignes de commandes.

Il est également possible de lister les fichiers de la sauvegarde

sudo duplicity list-current-files [emplacement de la sauvegarde]

Il est également possible de lister les fichiers de la sauvegarde à un instant précis (ici il y a 20 jours)

sudo duplicity -t 20D list-current-files [emplacement de la sauvegarde]

Il est maintenant possible de restaurer le fichier désiré

sudo duplicity --file-to-restore folder1/folder1.1/file.txt [emplacement de la sauvegarde] /tmp/toRestore/file.txt

Pour une restauration compléte suite à un "désastre" je pense qu'il faut passer par un CD d'installation et faire la restauration soit via dejà dup soit en ligne de commande.

3. Hôte virtuel

Les hôtes virtuels servent à créer une adresse url pour votre site du type https://[virtual host].monsite.fr

Il peuvent être associé à la fonction reverse proxy qui permet d'associer cette adresse à un autre serveur (comme si vous faisiez apparaître le site d'un autre serveur sur ce serveur).

  Pour celà allez dans Zentyal à la rubrique webserver et créer l'hote virtuel

La première fois lancer

sudo a2enmod proxy
sudo a2enmod proxy_http
Puis aller dans /etc/apache/sites-availables/user-ebox-[virtual host]/ebox-[virtual host]
ProxyRequests Off # si reverse proxy
ProxyPreservehost on # si reverse proxy
ServerName  [virtual host].monsite.fr
ServerAlias [virtual host].monsite.fr
ProxyPass / http://serveur-vers-lequel-on-redirige.fr # si reverse proxy
ProxyPassReverse / http://serveur-vers-lequel-on-redirige.fr # si reverse proxy

Source : http://blog.olivierdelort.net/?p=270

4. Cloud

Installez Owncloud  (on préfèrera maintenant nextcould):

Commencez par créer un Virtual host sur votre serveur web en lui donnant le nom voulu

Déposer owncloud dans le dossier correspondant à votre hôte virtuel après l'avoir télécharger ici . Donner les droits :

sudo chown -R www-data:www-data /srv/www/[hôte virtuel]

Puis accédez à l'adresse du site

Lors de l'installation d'owncloud indiquer le dossier contenant les données du cloud de manière à ce que le dossier ne soit pas dans le dossier correspondant à votre hôte virtuel.
Par exemple si le dossier de l'hôte virtuel est /srv/www/[hôte virtuel] vous pouvez indiquer que le dossier contenant les données du cloud soit /srv/www/[données cloud] et non pas /srv/www/[hôte virtuel]/[données cloud].
Vous pouvez si vous le souhaitez insérer dans votre cloud un lien symbolique vers le disque de votre freebox.

Par défaut le serveur web vous empêche d'uploader des fichiers supérieur à 2 mo.
Vous pouvez agrandir le téléchargement maximum en modifiant le fichier /etc/php5/apache2/php.ini et changer les valeurs de ""upload_max_filesize"" et éventuellement ""post_max_size"" en remplaçant ""2M"" par la valeur de votre choix


  Il est possible d'ajouter la visio-conférence en activant le l'app "Talk"


  Il est possible d'ajouter l'édition collaborative des documents en installant collabora, en suivant la procédure ici

5. Serveur mail

Installez le serveur mail et outils collaboratif Zarafa
Il suffit pour celà d'installer les modules zentyal correspondant.

Il semble que pour limiter le spam les fournisseurs d'accès bloquent le port 25 (sauf pour leur propre serveur de manière à ce que vous puissiez envoyer des mails) Pour pouvoir envoyer des mails depuis son propre serveur (et éviter les erreurs réponse time out) il suffit donc d'ouvrir le port 25 autoriser en sorti (ce que free permet sur leur portail de gestion) ou (si votre fournisseur d'accès ne vous le permet pas vous pouvez utiliser un relayhost dans /etc/postfix/main.cf  puis relancer postfix  avec la commande /sbin/service postfix restart)

Pour recevoir les mails en provenances de l'extérieur vous devez rediriger le port 25 vers votre serveur et configurer le parefeu.

Vous pouvez vérifier si votre serveur smtp est blacklisté, ou s'il permet l'envoi de spam, ce forum propose des liens pour faire ces vérifications : http://forum.kimsufi.com/showthread.php?t=7186

Vous pouvez activer les modules Zentya relatifs au SPAM et à l'Antivirus (mais je n'ai pas encore réussi à les faire fonctionner, ils bloquent les mails entrant donc je les ai désactivé)

Zarafa propose par défaut deux interfaces web, vous pouvez, si vous le voulez les associer à des virtual host.

Ces deux interfaces se trouvent par défaut à http://ip_address/webaccess et http://ip_address/webapp

Afin d'éviter d'ouvrir les ports relatifs au pop et à l'imap cf davmail pour client mail ou groupdav
 

6. Réseau Social

Créez votre réseau social décentralisé Friendica

Grâce à Friendica vous pourrez garder de contrôle de vos données (c'est le coté décentralisé) tout en intégrant le réseau Friendica et diaspora. Mais vous pourrez centraliser vos autres réseaux sociaux (twitter, facebook et bientôt G+) à votre interface friendica.

Pour plus de détail je vous laisse découvrir mon article ici.

Lancez les commandes suivantes :

sudo apt-get install php5-curl
sudo a2enmod rewrite

Copier Friendica (y compris les fichiers cachés) après l'avoir télécharger ici et lancer le dans le navigateur web.

Je n'ai pas installé Friendica dans un hôte virtuel de manière à pouvoir garder l'adresse friendica des utilisateurs de la forme utilisateur@monsite.fr.

 

7. Virtualisation d'un systéme : LXC

Afin de virtualiser des serveurs j'ai choisi Linux-Contener (LXC) qui est tout à la fois simple et efficace, puisque c'est le noyau du système qui sera utilisé ce qui évite de réduire les ressources (du coup on ne peut que virtualiser que des systèmes linux, donc ni Windows, ni Mac, ni UNIX). De ce fait je fais ma virtualisation en dehors de Zentyal qui semble intégrer d'autres solutions.

  Lancez les commandes

sudo apt-get install lxc
sudo lxc-create -t ubuntu -n [nom du contenaire]
sudo lxc-start -n [nom du contenaire] -d

 

sudo lxc-console -n [nom du contenaire] 

permet de prendre la main sur le contenaire (vous pouvez éteindre le contenaire depuis là comme n'importe quel serveur ou simplement fermer la console et le contenaire restera allumé)

sudo lxc-ls 

permet de savoir quels sont les contenaires disponibles

sudo lxc-info -n [nom du contenaire] 

permet de connaitre l'état du contenaire

Votre contenaire se trouve dans /var/lib/lxc/[nom du contenaire]

Vous pouvez facilement créer des contenaires avec des systémes différents du serveur qui les héberge grâce aux templates avec par exemple un contenaire sous ubuntu 10.04 (lucid)

sudo lxc-create -t ubuntu -n [nom du contenaire sous lucid] -- -r lucid
Ou par exemple avec fedora
sudo lxc-create -t fedora -n [nom du contenaire sous fedora 12] -- -R 12

  Il ne reste plus qu'à établie la connection à internet  en faisant en sorte que le contenaire aille s'identifier sur le même DHCP que le serveur :

Attention cette méthode ne nécessite pas, et semble pas compatible avec la création du fichier /etc/default/lxc-net

Tout d'abord vérifier que le paquet bridge-utils est bien installé

Ensuite éditer le fichier /etc/network/interfaces et y mettre :

auto lxcbr0
iface lxcbr0 inet dhcp
        bridge_ports eth1 #le port pour lequel vous êtes connecté
Puis éditer /var/lib/lxc/[nom du contenaire]/config en y mettant (ajoutant ou modifiant) :
lxc.network.flags = up

lxc.network.link = lxcbr0

lxc.network.name = lxcnet0 

lxc.network.hwaddr = 00:FF:AA:00:00:01
## adresse mac du contenaire qui vous servira à lui attribuer une ip fixe
Puis éditer /var/lib/lxc/[nom du contenaire]/rootfs/etc/network/interfaces en y mettant (ajoutant ou modifiant) :
auto lxcnet0
iface lxcnet0 inet dhcp
Pour plus de détail sur la connection à internet voir http://wiki.debian.org/LXC/SimpleBridge
Autre article intéressant : http://framboisepi.fr/installation-de-lxc-sur-raspberry-3/

  Attention Zentyal va réécrire votre fichier /etc/network/interfaces

Pour éviter celà faites une copie du fichier internfaces et l'appeler interfaces.copy

Créez le fichier /etc/zentyal/hooks/network.postsetconf et le rendre exécutable et y mettre :

#!/bin/sh

if grep "/sbin/ifenslave" /etc/network/interfaces >/dev/null; then
        exit 0
fi
cp /etc/network/interfaces.copy /etc/network/interfaces

exit 0

  Pour faire en sorte que le contenaire s'allume au démarrage de votre serveur lancer la commande suivante qui va créer un lien symbolique :
ln -s /var/lib/lxc/nom_du_conteneur/config /etc/lxc/auto/nom_du_conteneur

 

7.1 Virtualisation d'une application via Docker

  Il est possible d'installer facilement une application via Docker

(après avoir ajouté les sources correspondantes)

sudo apt-get install docker.io 

Il est ensuite possible de trouver les docker ici : https://hub.docker.com/search?image_filter=official&q=&type=image

Pour créer et lancer un conteneur, qui se redémarre automatiquement et dont le port 80 du contenaire est atteignable par le port 8080 de l''hôte :
sudo docker run -d --restart=always -p 8080:80 [docker Image]

Pour utiliser docker compose, se mettre dans le répertoire où se trouve le fichier docker-compose.yml

sudo docker compose up -d

 

Pour faire une mise à jour

sudo docker compose pull # mettre à jour
sudo docker compose up -d --remove-orphans # relancer
sudo docker image prune # supprimer les images obsolètes

 

Exemple pour un serveur apache léger (docker)

sudo docker run -p 8082:80 --volume /home/[user]/apache:/usr/local/apache2/htdocs httpd:alpine

  Si vous souhaitez sécuriser les échanges (https), et retrouver toutes vos applications sous un même nom de domaine (applications.mondomaine.fr), Nginx Proxy Manager.

(une alternative peut être swag et le docker-mods de linuxserver.io swag-dashboard)

sudo docker run -d \
-v data-nginx-proxy-manager:/data \
-v letsencrypt-nginx-proxy-manager:/etc/letsencrypt \
-p 80:80 \
-p 81:81 \
-p 443:443 \
--restart=always \
jc21/nginx-proxy-manager:latest

L'interface d'administration est derrière le port 81

Par défaut  l'identifiant est admin@example.com, et le mot de passe : changeme

Il suffit d'aller dans host>proxy host, pour ajouter une url, et il est possible d'ajouter un certificat dans SSL.

Il faudra rediriger les ports 80 et 443 depuis l'extérieur vers le serveur


  Si vous ne souhaitez pas ouvrir vos applications sur internet, mais que vous souhaitez y accéder à distance, et de manière sécurisée, et que votre opérateur ne vous fourni pas de VPN, vous pourrez installer WireGuard Easy qui vient avec une interface d'administration.

sudo docker run -d \
--name wireguard-easy \
-e WG_HOST=[IP publique du serveur ou domaine] \
-e PASSWORD=[*****] \
-e WG_ALLOWED_IPS=192.168.0.0/24 \ # mettre la structure du réseau local pour n'autoriser que le trafic avec le réseau local ou "0.0.0.0/0, ::/0" pour autoriser tout le trafic internet
-v wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart always \
weejewel/wg-easy

Pour de l'ipv6 remplacer : ?

  - net.ipv6.conf.all.forwarding=1
  - net.ipv6.conf.all.disable_ipv6=0

L'interface d'administration est derrière le port 51821
Il faudra rediriger le port 51820 depuis l'extérieur vers le serveur, en faisant attention à sélectionner le protocol udp

Pour pour paramétrer un client ubuntu

sudo apt-get install wireguard

Télécharger le fichier de configuration fourni par le serveur dans /etc/wireguard/[tunel].conf

Pour lancer le tunel :

sudo systemctl start wg-quick@[tunel]

(pour l'arrêter remplacer "start" par "stop")

Si après utilisation de la commande wg-quick up./[tunel].conf un message d'erreur apparait relatif resolvconf faire :

sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf
"#voire même
sudo apt-get install resolvconf

Si dans les logs il est indiqué Failed to resolve interface "tun": No such device, il s'agira de commenter le DNS du fichier de conf

Pour le lancer au démarrage du serveur

sudo systemctl enable wg-quick@[tunel]

(pour le désactiver remplacer "enable" par "disable")

Pour permettre à deux machines/serveurs, de se parler entre elles dans cette configuration il sur chaque serveurs mettre en place le VPN en croisé (chacun est à la fois clients et serveur), et configurer le AllowedIPs = 192.168.X.0/24 avec le réseau distant.

Pour faire en sorte que les instances docker démarrent après que la connextion distante soit opérante, faire tourner le script suivant dans le cron (@reboot), en adaptant l'ip local du serveur distant

#!/bin/bash

# Attendre jusqu'à 300 secondes que la connexion réseau soit établie
for i in {1..300}; do
    if ping -c1 [ip local serveur distant] &> /dev/null; then
        sudo mount -a
        sudo docker restart $(sudo docker inspect --format '{{.Id}}' $(sudo docker container ls -qa | xargs sudo docker inspect --format '{{ if eq .HostConfig.RestartPolicy.Name "alwa>
        sudo docker restart $(sudo docker inspect --format '{{.Id}}' $(sudo docker container ls -qa | xargs sudo docker inspect --format '{{ if eq .HostConfig.RestartPolicy.Name "unle>
        sudo docker restart $(sudo docker inspect --format '{{.Id}}' $(sudo docker container ls -qa | xargs sudo docker inspect --format '{{ if eq .HostConfig.RestartPolicy.Name "on-f>
        exit 0
    fi
    sleep 1
done

echo "Impossible de se connecter à la machine sur le VPN distant. Échec de l'exécution de la commande."
exit 1


  Pour vos applications, il sera souvent nécessaire de créer une base de donnée (mysql) :

sudo docker run -d \
--restart=always \
--name [nom contenaire] \
-p 3306:3306 \
-e "MYSQL_ROOT_PASSWORD=[******]" \
-e "MYSQL_DATABASE=[nom base de donnée]" \
-v [nom du volume]:/var/lib/mysql \
mysql

  Pour l'administrer il sera plus facile d'avoir PHPMYADMIN :
sudo docker run -d --name phpmyadmin -e PMA_ARBITRARY=1 -p 8083:80 phpmyadmin

Au moment de la connexion indiquer l'adresse ip privée du serveur


  Nextcloud :

Pour créer son propre cloud

sudo docker run -d \
--restart=always \
--name nextcloud-mysql \
-p 3306:3306 \
-e "MYSQL_ROOT_PASSWORD=[******]" \
-e "MYSQL_DATABASE=nextcloud" \
-v nextcloud-mysql:/var/lib/mysql mysql \
--transaction-isolation=READ-COMMITTED \
--binlog-format=ROW

mkdir /home/[user]/nextcloud

Ajouter le fichier /home/[user]/nextcloud/php.ini

Avec le contenu :

upload_max_filesize=6G
post_max_size=6G
memory_limit=6G

sudo docker run -d \
-v /home/[user]/nextcloud:/var/www/html \
-v /home/[user]/nextcloud/php.ini:/usr/local/etc/php/conf.d/zzz-custom.ini \
-v /media/maxtor:/maxtor \
-p 8080:80 \
--label=com.centurylinklabs.watchtower.enable=false \
--restart=always \
nextcloud:latest

sudo adduser [user] www-data
sudo chown www-data:www-data /home/[user]/nextcloud/data/
sudo chmod -R 770 /home/[user]/nextcloud/data
sudo chmod -R g+s /home/[user]/nextcloud/data

S'il y a des modifications directement dans le répertoire il faudra forcer l'indexation :

sudo docker exec --user www-data [contenaire] php occ files:scan --all

De la même manière il peut être parfois nécessaire de lancer le scan des musiques, si vous avez activé l'app.

sudo docker exec --user www-data [contenaire] php occ music:scan --all

Pour profiter de la modification collaborative de document en ligne

sudo docker run -t -d -p 9980:9980 -e "extra_params=--o:ssl.enable=false" --restart always --add-host [url nextcloud]:[IP du docker nexcloud commençant dans mon cas par 172] collabora/code

Puis aller sur http://[url nextcloud]/index.php/settings/admin/richdocuments

Et renseigner le serveur http://[IP serveur]:9980

Il sera intéressant d'ajouter l'application music, qui permettra d'écouter la musique notamment sur son téléphone au travers de l'application subsonic

Il existe une application deck, pour gérer des projets en kaban, et task pour faire des listes

Il existe également une application qui permet de faire un tableau blanc et des shémas, il suffit d'activer l'app draw.io

Puis il est possible de faire des configurations : http://[ip-serveur]:8080/index.php/settings/admin/drawio

Il est possible de pointer vers son propre serveur draw.io, mais dans ce cas, la fonctionnalité de collaboration en temps réel ne sera pas supportée.

Il est possible d'ajouter le module "External sites" pour ajouter des liens externes dans le menus (avec habilitation par groupe)

Il est également possible d'installer phonetrack, pour suivre des localisations, en le couplant avec Owntrack sur le téléphone. Il est possible de paramétrer des notifications sur son (autre) téléphone, en cas de sorti/entrée d'une zone, en utilisant ntfy (que l'on peut héberger soi-même également); en indiquant dans la méthode POST, une url de la forme :

https://ntfy.sh/sujet_abonnement/publish?title=mettre+titre&message=mettre+message&priority=high&click=http://monsite.com

Pour faire une mise à jour, après avoir poussé l'image docker récente il faudra

sudo docker exec --user www-data [contenaire] php occ upgrade


  Friendica :

Pour créer son propre réseau social

Créer un contenaire Mysql dédié

sudo docker run -d \
--name friendica-mysql \
-p 3306:3306 \
-e "MYSQL_ROOT_PASSWORD=[*******"] \
-e "MYSQL_DATABASE=friendica \
-v friendica-mysql:/var/lib/mysql \
mysql

ou créer une base de donnée dans un contenaire mysql existant

sudo docker run -d \
-p 8081:80 \
-v friendica-data:/var/www/html \
--restart=always \
friendica

(puis action manuelle ne tâche planifiée pour le 'worker'.Référez-vous au fichier "doc/INSTALL.md")

Il est possible de se rendre sur https://mon-nom-de-domaine-friendica/help


  Jellyfin :

Pour créer son serveur multimédia (son netflix perso ^^)

sudo docker run -d \
--name jellyfin \
--user 1000:1000 \ # pour trouver les bonnes références faire la commande : id
-p 8096:8096 \
--volume /home/[user]/jellyfin/config:/config \
--volume /home/[user]/jellyfin/cache:/cache \
--mount type=bind,source=/home/[user]/jellyfin/media,target=/media1 \
--mount type=bind,source=/media/maxtor/,target=/media2,readonly \ # après avoir monté automatiquement le disque sur ce répertoire
--mount type=bind,source=/home/[user]/[user-distant]/,target=/media-vincent,readonly \ # après avoir monté automatiquement le disque sur ce répertoire
--restart=always \
jellyfin/jellyfin

Il est possible de configurer la TV en direct en paramétrant des sources comme ici ou ici


  Odoo :

Pour créer son progiciel d'entreprise

sudo docker run -d \
-v odoo-db:/var/lib/postgresql/data \
-e POSTGRES_USER=odoo \
-e POSTGRES_PASSWORD=odoo \
-e POSTGRES_DB=postgres \
--name db \
postgres:13
sudo docker run -v odoo-data:/var/lib/odoo -d -p 8069:8069 --name odoo --link db:db -t odoo
sudo docker stop odoo
sudo docker start -a odoo

  Adguardhome

Pour créer son bloquer de publicité, pour toute la maison, et faire du contrôle parentage dans le même temps

sudo docker run -d \
    --name adguardhome \
    --restart=always \
    -v /home/[user]/adguardhome/work:/opt/adguardhome/work \
    -v /home/[user]/adguardhome/conf:/opt/adguardhome/conf \
    -p 53:53/tcp -p 53:53/udp \ # port DNS
#   -p 67:67/udp -p 68:68/udp -p 68:68/tcp \ # port DHCP serveur BOOTP
    -p 8085:80/tcp -p 444:443/tcp -p 444:443/udp \ # port HTTP&HTTPS
    -p 3000:3000/tcp \ # port HTTP temporaire pour la première configuration d'AdGuard
#   -p 853:853/tcp \ # port DNS over TLS
#   -p 784:784/udp -p 853:853/udp -p 8853:8853/udp \ # DNS-over-QUIC server
#   -p 5443:5443/tcp -p 5443:5443/udp \ #DNSCrypt server
    adguard/adguardhome

Si vous rencontrez l'erreur "listen tcp4 0.0.0.0:53: bind: address already in use", il faudra faire :

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Il vous faudra vous rendre sur le port 3000 pour finaliser l'installation, puis sur le port, dans notre exemple 8085, pour administrer les régles.

Enfin il faudra remplacer les adresse IP DNS de la box de votre opérateur, par les adresses IP de votre serveur, sur les 2 premiers DNS, sinon des requêtes risquent d'échapper à Adguard. Ca a suffi pour marcher sur windows, mais sur Ubuntu et Android, il a aussi fallu faire la même chose sur les DNS IPV6 (là aussi sur les 2 premiers). Puis un rédémarage de la box (et éventuellement du reste), pour une prise en compte plus rapide

Il est possible d'ajouter des filtrages proposée par défaut

Par ailleurs voici quelques DNS proposés qu'il est possible de mettre dans les paramétres DNS

  • Malware : https://security.cloudflare-dns.com/dns-query
  • Contrôle parental : https://family.cloudflare-dns.com/dns-query
  • https://dns.quad9.net/dns-query

Si c'est votre routeur (box) qui fait DHCP, et que vous souhaitez voir apparaitre toutes les requêtes de vos différents appareils (et que vos règles particulières s'appliquent bien) il faut ajouter dans Paramètre DNS > Serveurs DNS upstream

[/local/]192.168.0.254
[/0.168.192.in-addr.arpa/]192.168.0.254

 

(où 192.168.0.254 est l'adresse du routeur)

Pour vérifier la protection, vous pouvez tester : https://d3ward.github.io/toolz/adblock.html

 

Il est possible de créer des noms de domaines en local (ou pour qui s'adresse à ce DNS), en allant dans le menu filtre et réécritures DNS et en associant un nom de domaine à une adresse IP


  Pour gérer une bibliothèque de livre

Calibre-web s'étant montré contraignant (utiliser un base de donnée calibre existante, donc installer calibre sur un poste, qui ne supporte pas les dossiers réseaux, et doit partir d'un dossier vide. De plus l'admin d'accède pas par défaut à la visionneuse, il faut lui donner accès)...

Kavita, n'a pas permis d'obtenir le résultat attendu non plus

... on préférera Komga

sudo docker run -d \
  --name=komga \
  --user 1000:1000 \
  -p 8086:25600 \
  -v /media/maxtor/Livres:/Livres \
  -v /home/[user]/komga/config:/config \
  --restart always \
  -e TZ=Europe/Paris \
  gotson/komga:latest

... ou directement Jellyfin

Si vous avez des livres au format image dans des dossiers, vous pouvez les convertir avec le script :

#!/bin/bash
for dir in */; do
    folder_name="${dir%/}"
    cd "$folder_name"
    echo "$folder_name"
    zip -r -0 "$folder_name.cbz" *
    mv "$folder_name.cbz" ../"$folder_name.cbz"
    cd ..
done

Pour créer des vignettes pour vos différents livres vous pouvez installer :

sudo apt-get install poppler-utils calibre imagemagick

et utiliser le script :

#!/bin/bash

for file in *.cbz #boucle pour fichier CBZ
do
    mkdir tmp     # Extraire le fichier CBZ dans un sous-répertoire temporaire
    cp "$file" tmp
    cd tmp
    unzip "$file"
    first_image="$(ls *.jpg | head -n 1)" # Renommer le fichier image correspondant à la première page
    mv "$first_image" "$(basename "$file" .cbz).jpg"
    convert "$(basename "$file" .cbz).jpg" -resize 500x500 "$(basename "$file" .cbz).png"
    mv "$(basename "$file" .cbz).png" ../"$(basename "$file" .cbz).png"
    cd .. # Supprimer le sous-répertoire temporaire
    rm -r tmp
done

for file in *.epub #boucle pour fichier epub
do
  echo "Extraction première page $file"
  ebook-convert "$file" "$(basename "$file" .epub).pdf" --output-profile tablet # Convertir le fichier ePub en PDF
  pdftoppm -png -f 1 -l 1 -scale-to 300 "$(basename "$file" .epub).pdf" "$(basename "$file" .epub)" # Convertir la première page du PDF en PNG
  mv "$(basename "$file" .epub)-01.png" "$(basename "$file" .epub).png" # renommer le fichier png
  mv "$(basename "$file" .epub)-001.png" "$(basename "$file" .epub).png" # renommer le fichier png
  rm "$(basename "$file" .epub).pdf" #supprimer le fichier pdf
done

for file in *.pdf #boucle pour fichier pdf
do
  echo "Extraction première page $file"
  pdftoppm -png -f 1 -l 1 -scale-to 500 "$(basename "$file" .pdf).pdf" "$(basename "$file" .pdf)" # Convertir la première page du PDF en PNG
  mv "$(basename "$file" .pdf)-01.png" "$(basename "$file" .pdf).png" # renommer le fichier png
  mv "$(basename "$file" .pdf)-001.png" "$(basename "$file" .pdf).png" # renommer le fichier png
done

 

  Peertube :

Si vous souhaitez installer un équivalent de Youtube, il sera sans doute préférable d'utiliser docker compose.

Je vous renvoie vers le mode opératoire très bien fait ici : https://normandie-libre.fr/deployer-un-serveur-peertube-grace-a-docker/

Seul défaut, la commande que j'ai dû rentrer pour changer le mot de passe, à la fin était

sudo docker exec -it peertube_peertube_1 /bin/sh
npm run reset-password -- -u root

Pour la migration vers la V5 j'ai du suivre https://jadin.me/upgrading-peertube-to-v5/


  Netdata pour avoir un état détaillé du serveur

sudo docker run -d --name=netdata \
  -p 8087:19999 \
  -v netdataconfig:/etc/netdata \
  -v netdatalib:/var/lib/netdata \
  -v netdatacache:/var/cache/netdata \
  -v /etc/passwd:/host/etc/passwd:ro \
  -v /etc/group:/host/etc/group:ro \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  --restart always \
  --cap-add SYS_PTRACE \
  --security-opt apparmor=unconfined \
  netdata/netdata


  Portainer-ce pour gérer les contenaires depuis une interface web

sudo docker run -d \
-p 8088:8000 \
-p 8089:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce

Il semble qu'il ne supporte pas d'être accèdé par le port non chiffré, il faudra donc passé par le port chiffré, dans notre cas https://[serveur]:8089.


  Flame pour faire une page d'acceuil du serveur regroupant tous les services.

sudo docker run -d \
--name flame \
--restart=always \
-p 8090:5005 \
-v flame_data:/app/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-e PASSWORD=[******] \
pawelmalak/flame

Il existe également Organizr, qui permet même d'ouvrir les services directement dans la page d'acceuil, et de gérer les accès à différents utilisateurs

Egalement le menu External sites de nextcloud.


Photoprism pour gérer vos photos.

Faute de n'avoir pas pu faire cohabiter mysql et mariadb sur des ports différents, j'ai fais un docker compose :

wget https://dl.photoprism.app/docker/docker-compose.yml

Puis

sudo docker compose up -d
N'a pas fonctionné :

 

 sudo docker run -d \
 --name mariadb-photoprim \
  --restart=always \
 --env MARIADB_USER=[user] \
 --env MARIADB_PASSWORD=[*******"] \
 --env MARIADB_ROOT_PASSWORD=[*******"] \
 -v mariadb-photoprim:/var/lib/mysql \
 mariadb:latest --port 3808

[après être entré dans le conteneur : CREATE DATABASE photoprism]

sudo docker run -d \
  --name photoprism \
  --restart=always \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=unconfined \
  -p 8091:2342 \ #et 8094
  -e PHOTOPRISM_UPLOAD_NSFW="true" \
  -e PHOTOPRISM_ADMIN_PASSWORD="[*****]" \
  -e PHOTOPRISM_SITE_URL="[http://localhost:8091/]" \
  -e PHOTOPRISM_ORIGINALS_LIMIT=5000 \
  -e PHOTOPRISM_HTTP_COMPRESSION="gzip" \
  -e PHOTOPRISM_JPEG_QUALITY=85 \
  -e PHOTOPRISM_DATABASE_DRIVER="mysql" \
  -e PHOTOPRISM_DATABASE_SERVER="[serveur]:3808" \
  -e PHOTOPRISM_DATABASE_NAME="photoprism" \
  -e PHOTOPRISM_DATABASE_USER="root" \
  -e PHOTOPRISM_DATABASE_PASSWORD="[*****]" \
  -e PHOTOPRISM_SITE_CAPTION="AI-Powered Photos App" \
# -v /home/[user]/photoprism:/photoprism/storage \
  -v /media/freebox/photoprism:/photoprism/storage \
  -v /media/maxtor/photo:/photoprism/originals \
  photoprism/photoprism

 

Se connecter avec l'identifiant indiqué dans le fichier yml, puis lancer le scan des photos dans la librairie.

Pour faire plusieurs instances de Photoprism, ne pas les mettre son un dossier portant le même nom.

Piwigo pourrait être une alternative mais ne semble pas disposer de la même intelligence artificielle

 

  Domoticz pour la gestion des appareils domestiques (lumières, chauffage, sécurité...)

Déterminer quel est l'identifiant de la ou des clés usb que vous utilisez pour connecter votre réseau domestique.

Brancher la clés puis :

sudo dmesg | tail
ou 
ls -l /dev/serial/by-id/

Il s'agira de repérer l'identifiant de type ttyACM0"

Puis :

sudo docker run -d \
    --device /dev/[ttyACM0]:/dev/[ttyACM0]\
#  pour ajouter le son
#  --device=/dev/snd:/dev/snd
#   ou
#   -e PULSE_SERVER=unix:/run/user/1000/pulse/native
    --name domoticz \
    --restart always \
    -p 8092:8080 \
    -v /home/[user]/domoticz/userdata:/opt/domoticz/userdata \
    -v /home/[user]/domoticz/templates:/opt/domoticz/www/templates \
    -e TZ=Europe/Paris \
    domoticz/domoticz

Et mettre un fichier [fichier].html dans le dossier templates, pour ajouter une page personnalisée

Watchtower pour mettre à jour automatiquement les contenaires, dès qu'une mise à jour est publiée

sudo docker run -d \
--name watchtower \
--cleanup \
--schedule "0 0 4 1 * *" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/timezone:/etc/timezone:ro \
containrrr/watchtower

 PSITransfert pour envoyer de gros fichiers

sudo docker run -d \
--name psitransfer \
-p 8093:3000 \
-e PSITRANSFER_ADMIN_PASS=[*****] \
-e PSITRANSFER_UPLOAD_PASS=[*****] \
-v /home/[user]/psitransfer:/data \
psitrax/psitransfer:latest

Le chemin d'administration est simplement http://[serveur]/admin

 

  Quelques applications de gestion de projet :

Taiga, ne possède pas de workflow des status, , il y a bien un tableau kanban, mais uniquement pour les US. Toutes les données n'apparaissent pas sur les tickets (ex sprint), et les champs personnalisé n'apparaissent pas dans la page d'administration du ticket. Il n'y a pas de lien entre les US et les bug, et il n'est pas très configurable.
Pour l'installer, aller dans votre dossier contenant les dossiers docker compose

git clone https://github.com/kaleidos-ventures/taiga-docker
cd taiga-docker/
git checkout stable

 

Compléter le fichier .env (en partant de l'exemple fourni)

  POSTGRES_PASSWORD=[*******]
  TAIGA_DOMAIN=[Ip du serveur]:8100
  SECRET_KEY="[*******]"

Compléter le fichier docker-compose.yml en changeant 9000 en 8100

sudo docker compose up -d
#Pour réer l'utilisateur admin
sudo docker compose -f docker-compose.yml -f docker-compose-inits.yml run --rm taiga-manage createsuperuser

(cette étape peu échouer, je suppose en cas de conflit avec d'autres contenaires)
https://[Ip du serveur]:8100/admin (Accessible uniquement en https ?)

Openproject a de nombreuses fonctionnalités malheureusement en version premium uniquement notamment tableau Kanban, mais il est possible d'utiliser le task board, et de changer le statut après avoir déplacer le ticket, mais il faut ajouter les tickets un à un (pas de filtre à ce niveau donc). Néanmoins il est également possible de le faire par des lots de travaux et grouper par status, le tableau kanban passe donc en ligne plutôt qu'en colonne, mais ça marche, et il est possible de mettre les tickets dans l'ordre de son choix. L'attribution de tickets aux sprints en glissé déposé est possible, dans le backlog. Il a une bonne gestion du workflow des status. C'est cette application qui a finalement retenu mon choix.
Pour l'installer, aller dans votre dossier contenant les dossiers docker compose

git clone https://github.com/opf/openproject-deploy --depth=1
cd openproject-deploy/compose

Compléter le fichier .env (en partant de l'exemple fourni)

  PORT=8099
  PGDATA="/home/[user]/openproject-deploy/compose/database" #volume base de donnée
  OPDATA="/home/[user]/openproject-deploy/compose/dataapp" #volume application
  OPENPROJECT_HOST__NAME=[Ip du serveur]:8099
sudo mkdir database
sudo mkdir dataapp
sudo docker compose up -d

Identifiant : admin, et mot de passe : admin

Il est possible de l'intégrer avec Nextcloud (expérimentation en cours, étapes à venir)

Redmine ne semble pas posséder de tableau de kanban, et l'interface est peu attirante, je n'ai donc pas beaucoup approfondi.

sudo docker run -d -p 8084:3000 -v /home/[user]/redmine/data:/usr/src/redmine/files --restart=unless-stopped redmine

Ensuite il est possible de se connecter avec l'identifiant/mot de passe : admin/admin

 

Focalboard est facile d'installation, rapide à mettre en oeuvre et sans administration (avantage et inconvénient). Du coup il est trop permissif, il n'y a pas de blocage pour les éditeurs qui peuvent ajouter des valeurs (par exemple de nouveaux type de tickets, de status...). Il n'y a pas de workflow, pas de liens entre les ticket et il n'est pas complétement traduit.

sudo docker run -d -p 8098:8000 -v /home/[user]/focalboard/data:/opt/focalboard/data mattermost/focalboard

 

Il existe également Deck pour nextcloud. Il s'agit d'une tableau kanban simplifié, mais il n'y a pas de changement de status en changeant de liste. Il est possible de "gérer" des status et des type de ticket avec des étiquettes. Il peut avoir l'intérêt d'avoir tout au même endroit (dans nextcloud), mais c'est très léger.

Il existe un module Project Management dans Odoo, qui semble très bien, mais l'utilisation d'un progiciel comme Odoo, pour faire uniquement de la gestion de projet n'est-elle pas un peu trop lourde ?

Enfin Tuleap est sans doute la meilleure option, mais je n'ai malheuresement pas été en mesure de l'installer.
(Sur le serveur "CPU does not support x86-64-v2", sur le PC, "Could not create a PDO connection")

 Application de prise de note (collaborative) : Joplin

Se mettre dans le dossier où l'on stock les répertoire docker-compose

mkdir joplin
cd joplin
wget https://raw.githubusercontent.com/laurent22/joplin/dev/docker-compose.server.yml
wget https://raw.githubusercontent.com/laurent22/joplin/dev/.env-sample
mv .env-sample .env
mv docker-compose.server.yml docker-compose.yml
nano .env

retirer # et faire les modifications souhaitées

sudo docker compose up -d

 

L'identifiant est admin@localhost et le mot de passe : admin
Il est ensuite demandé de les changer, l-email de confirmation ne sera pas envoyé, avant de se déconnecter, aller dans le menu admin et e-mail, pour confirmer son adresse mail.

  Vous aurez peut-être besoin d'avoir un robot qui verifie que vos services sont bien opérationnel, et prévenir si ce n'est pas le cas

sudo docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1

(je ne l'ai pas encore fait)


  Par ailleurs d'autres applications peuvent être intéressantes, mais pas encore essayées :

Meetjitsi pour les vidéos conférence

Duplicati pour les sauvegardes

Sonarr et Radarr, pour respectivement récupérer des séries et des films depuis les Newsgroups

Paperless-ngx pour gérer les documents. Nextcloud devrait pouvoir le faire également (à voir la différence), il s'agirait notamment d'ajouter de l'OCR (cf plugin existant)

Vaultwarden pour gérer les mots de passe, il semble que Keeweb soit une extention nextcloud qui le permette aussi


  Pour lister le conteneurs installés

sudo docker container ps -a


  Il est possible de changer la politique de redémarrage  avec

sudo docker update --restart=[option] [nom du contenaire]

Les options sont no always on-failure unless-stopped


  Pour ouvrir un terminal sur un contenaire :

sudo docker exec -it [container] bash
ou
sudo docker exec -it [container] /bin/sh

Une fois dans le contenaire, pour exécuter mysql :

mysql --user=root --password=****


  Pour avoir des informations et notamment retrouvé où sont stockés les répertoires dockers (ex : les volumes)

sudo docker info

8. ERP

Installez OpenERP :

Créez un serveur virutalisé, et associé le à un hôte virtuel de votre serveur web
Téléchargez le all-in-one version debian/ubuntu (.deb) ici

Puis installez le en faisant la commande suivante :

sudo dpkg -i [paquet].deb
sudo apt-get -f install
Vous n'avez plus qu'à vous rendre avec votre navigateur web sur le site (depuis le serveur http://localhost:8069).
Il faut tout d'abord créer une base de données (vous pouvez donc gérer plusieurs entreprises depuis le même openerp voire créer une base de test et même y introduire les données de démonstration) 
 
http://www.easyopenerp.com/installation-open-erp-server-et-web-6-1/

9. Astuces

  Vous pouvez créer un utilisateur administrateur :

sudo adduser [identifiant]
sudo adduser [identifiant] sudo
Changez de mot de passe
sudo passwd [identifiant]

 

 Désactiver le lancement automatique de l'interface graphique (astuce reprise d'ici) : éditer le fichier /etc/default/grub (avec les droits administrateurs),
  • commentez la ligne GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”, en ajoutant # au début de la ligne, celà désactivra l'écran violet d'ubuntu au démarrage.
  • changez GRUB_CMDLINE_LINUX=”" par GRUB_CMDLINE_LINUX=”text”, ce qui fera démarrer ubuntu en mode texte.
  • décommenter la ligne #GRUB_TERMINAL=console, en retirant le # du début de la ligne, ce qui fera aller le menu Grub en mode texte noir et blanc.

Lancer la commande

sudo update-grub

Il n'y a plus qu'à redémarrer. Pour lancer l'interface graphique lancer la commande startx devrait fonctionner, ça n'a pas été le cas pour moi, mais sudo service lightdm start a bien marché

  Pour paramétrer un partage samba
sudo apt-get install samba libpam-winbind

 

Dans le fichier /etc/samba/smb.conf, dans le paragraphe global (de l'ensemble global setting) mettre
security = user (sous workgroup par exemple)

Puis dans l'ensemble Share Definitions mettre

[Nom_du_dossier]
  path=/chemin/du/dossier/
  browsable = yes
  guest ok = no
  writable = yes
  create mask = 0750
  directory mask = 0750

(Au dessus de [printers] par exemple)

Pour un utilisateur du système, définir un mot de passe

sudo pdbedit -a [user]

puis relancer le service

sudo systemctl restart smbd.service nmbd.service
Pour accéder au partage samba en ligne de commande
smbclient -U [User] //192.168.X.X/dossier

  Vous pouvez désinstaller complètement zentyal :
sudo apt-get --auto-remove --purge purge zentyal

  Vous pouvez réduire le cache dans la RAM : 

Créer un fichier PurgeRAM.sh et mettez y :

#!/bin/bash
#!/bin/sh # La première ligne sert à spécifier quel shell tu veux excéuter. ici sh 

# Notice : pour executer un script il faut
# 1) changer c'est droit pour devenir executable:  chmod 777 NomDuScrip.sh
# 2) puis l'executer : ./NomDuScrip.sh

##################################################
### Script de purge du cache de la mémoire RAM ###
##################################################

echo "sync : Ecrit la cache disque en cours"
sync
echo "ok"
echo "Vidage du cache de la memoire RAM niveau 3"
echo "3" > /proc/sys/vm/drop_caches
echo "Pause de 1 seconde"
sleep 1
echo "sync : re-ecrit la cache disque en cours (+ par sécurité, pas indispensable)"
sync
echo "action cache remis par defaut"
echo "0" > /proc/sys/vm/drop_caches
echo "Vidage du cache terminée."
echo "redemarre les services mysql pour recréer la cache c'est conseillé"
service mysql restart
echo "redemarre les services apache2 pour recréer la cache c'est conseillé"
service apache2 --full-restart
echo "******* Terminée ********"
Vous pouvez soit l'exécuter quand vous voulez soit programmer son lancerment (cf point suivant).

Pour plus d'information ici

 Vous pouvez lancer des tâches programmés http://doc.ubuntu-fr.org/cron (ne pas mettre de point devant le chemin)

Pour celà faite la commande :

sudo crontab -e
Puis ajouter une ligne de ce type pour lancer le script tous les matins à 3h20
20 3 * * * ./chemin/Script.sh
Pour plus d'information sur http://doc.ubuntu-fr.org/cron

  Vous aurez sans doute remarquer que lorsque vous accéder à votre serveur en https, il vous demande une confirmation de sécurité. Pour éviter celà il faut un Certificat SSL reconnu, startSSL.com en propose gratuitement, mais il ne sont malheureusement pas compatible avec les noms de domaine fourni par venez.fr. Un solution peut être d'acheter un nom de domaine compatible ou éventuellement de chercher des noms de domaines founis avec certificats reconnu.

 Voici une solution alternative au portail igoogle http://sourceforge.net/projects/posh/
Netvibes fourni un catalogue de widget compatible : http://fr.eco.netvibes.com/   
"Les hommes se trompent quand ils se croient libres ; cette opinion consiste en cela seul qu'ils sont conscients de leurs actions et ignorants des causes par lesquelles ils sont déterminés." Spinoza

Créé avec l'aide de Drupal, un système de gestion de contenu "opensource"
xmlns:fb="http://www.facebook.com/2008/fbml