« Installer un serveur linux » : différence entre les versions
| Ligne 126 : | Ligne 126 : | ||
Sous [PHP], ajouter | Sous [PHP], ajouter | ||
extension=yaz.so | extension=yaz.so | ||
Enregistrer, puis : | |||
# service apache2 reload | # service apache2 reload | ||
Version du 21 août 2021 à 13:43
Notes pour l'installation d'un serveur linux dédié à pmb
Installation du serveur
Notes obsolètes
* La version de pmb compatible avec php7 est annoncée début 2018. * Une version "niglybuild" est disponible sur leur forge. En attendant une version officielle, j'ai installé pmb5 sur un serveur Ubuntu17 avec apache2, MariaDB10 et php5.6 /Fail2ban et UrBackup. Pour permettre aux élèves d'accéder à l'opac, j'ai importé leurs identifiants et mdp par csv.
https://linuxhint.com/install-php5-ubuntu/
Télécharger ubuntu serveur i386 http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso
On reprend ici
Préparer une clé d'installation : https://sourceforge.net/projects/win32diskimager/
Démarrer sur la clé usb
Ne pas indiquer de proxy, le faire à la main par la suite si nécessaire
(pour apt, éditer ou créer le fichier /etc/apt/apt.conf -> Acquire::http::proxy "http://adresse:port/";)
Notes ligne de commande
Pour passer en root :
# sudo -i
Vérifier la présence d'un paquet :
# dpkg -l |grep nomDuPaquet (ii si installé)
Suite de l'installation du serveur
Installations supplémentaires
Configuration du clavier (si nécessaire)
# loadkeys fr # dpkg-reconfigure keyboard-configuration
vim
# apt-get install vim
Fichier de config : /etc/vim/vimrc
Outils réseau
(si absents lors de l'instal du serveur :)
# apt-get install net-tools
Configurer la carte réseau
(ou laisser en dhcp et fixer l'adresse à partir du routeur)
# vim /etc/network/interfaces
terminer par les serveurs de dns (si nécessaire) : dns-nameserver 8.8.8.8 8.8.4.4
# service networking restart
Serveur ssh
# apt-install openssh-server
Configuration : /etc/ssh/sshd_config
Renseigner le port d'écoute
Configurer le routeur (NAT)
Se connecter à une machine distante et tester l'accès par ssh :
# ssh (utilisateur)@(adresse_ip) -p (numport)
Serveur ftp
# apt-get install vsftpd
Configuration : /etc/vsftpd.conf
anonymous_enable=NO write_enable=YES
# /etc/init.d/vsftp restart
Installation de LAMP
apache - Php - MariaDB
installation mariadb
# apt-get install mariadb-server mariadb-client
Pour les versions obsolètes de php
Ajout du dépôt
# apt install software-properties-common # add-apt-repository ppa:ondrej/php # apt-get update
support php5.6 (mbstring pour phpmyadmin, xsl pour pmb) :
# apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-xsl
Définir le mot de passe root
# service mysql start
A ce stade, on peut entrer en tapant #mysql
# mysql_secure_installation
permet aussi de redéfinir le mot de passe root en cas d'oubli
# service apache2 start
A ce stade, la page d'info Apache est visible dans le navigateur
Paramétrer mysqldump
# vim /etc/mysql/conf.d/mysqldump.cnf
Modifier la ligne :
max_allowed_packet = 256M
Installation de phpMyAdmin
# apt-get install phpmyadmin
Rendre phpmyadmin accessible
Dans /etc/apache2/apache2.conf, ajouter à la fin : Include /etc/phpmyadmin/apache.conf
# echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf # service apache2 restart
Ajout d'un utilisateur mysql
(remplacer login_util et pass_util par des valeurs au choix) # mysql
CREATE USER 'login_util'@'%' IDENTIFIED BY 'pass_util'; GRANT ALL PRIVILEGES ON *.* TO 'login_util'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
(Ctrl-d pour sortir)
A ce stade, il doit être possible de se connecter à phpmyadmin
Installation de pmb
Voir : https://doc.ubuntu-fr.org/pmb
Installation de yaz (recherche externe des notices)
# apt-get install yaz # apt-get install libyaz5-dev php5.6-dev # pecl install yaz
Activer l'extension yaz
# vim /etc/php/5.6/apache2/php.ini
Sous [PHP], ajouter
extension=yaz.so
Enregistrer, puis :
# service apache2 reload
Créer un fichier php pour l'affichage des infos
- vim /var/www/html/pmb/php-info.php
<?php
phpinfo();
?>
ou
# echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php
Vérifier l'activation des extensions dans un navigateur : http://(adresse serveur)/pmb/phpinfo.php
Installer et les extensions nécessaires au fonctionnement de pmb
- apt-get install zip (pour décompresser les fichiers)
Copie de la dernière version de pmb dans le dossier /tmp/ Décompression de l'archive dans /var/www/html :
- unzip /tmp/pmb5.0.3.zip -d /var/www/html/
Modifier le propriétaire et le groupe, changer les droits :
- chown -R www-data:www-data /var/www/html/pmb
- chmod -R 770 /var/www/html/pmb
Supprimer le fichier zip :
- rm /tmp/pmb5.0.3.zip
Configurer le routeur pour l'accès extérieur (NAT port 80)
Suivre la procédure d'installation de pmb (http://adresse_serveur/pmb/tables/install.php)
- facultatif : pour migrer à partir de l'amonecole
importer les données :
Sur l'amonecole : (si necessaire, redéfinir le mdp root : # mysql_pwd.py)
- ssh bdd
- mysqldump -u root -p -single-transaction pmb > /tmp/dump_pmb.sql
- Ctrl-d (sortie du conteneur)
- mv /opt/lxc/bdd/rootfs/tmp/dump_pmb.sql /tmp/
Sur le serveur pmb :
- scp root@adresse_amonecole:/tmp/dump_pmb.sql /tmp/
- mysql -u (utilisateurRootMysql) -p pmb < /tmp/dump_pmb.sql
On peut effacer le fichier :
- rm /tmp/dump_pmb.sql
Si nouvelle instal, renseigner les fichiers /includes/db_param.inc.php et /opac_css/opac_db_param.inc.php (voir readme_first.txt et readme.txt)
Pas d'affichage des vignettes : vérifier la présence de la biliothèque gd (php(version)-gd)
- fin migration
première connection : admin/admin Faire les différentes mises à jour successives (ne met que la base à jour)
Si l'affichage dans l'onglet "Circulation" reste vierge : Administration Outils > paramètres > ldap > accessible : non (0)
Changer le mot de passe admin Tester le fonctionnement en lançant une recherche...
- fin pmb
Solution réseau retenue : Serveur pmb parallèle au serveur amonecole, ip par dhcp fixée par le routeur NAT ports classiques vers le serveur pmb, 500xx vers l'amonecole
- Importation des lecteurs
Accès LDAP : aucune des solutions testées n'a abouti -> import des lecteurs par csv :
Création d'une feuille OOCalc : num/nom/pnom/sexe/anaiss/classe/login Copie des données à partir des fichiers d'importation annuelle de l'amonecole
Formules utiles :
- Pour les mots de passe :
1. Trier la feuille qui contient les mdp 2. première cellule : =RECHERCHEV(G2;Sheet1.D$2:E$171;2;0) où G2 contient le login à rechercher Sheet1 : feuille contenant login et mdp D$2:E$71 : matrice login/mdp de la feuille dans laquelle s'effectue la recherche 2 : nḞ de la colonne qui contient la valeur de retour (1Ḟ colonne de la matrice=1) 0 : la matrice est déjà triée 3. Recopier vers le bas
- Extraction de l'année à partir de la date :
= ANNEE()
- Remplacer sexe : M->1, F ->2
Si(...)
Export de la feuille au format csv (Editer les paramètres du filtre) : SANS EN-TÊTE DE COLONNE - UTF-8 - Séparateur = ; - Séparateur de texte : aucun (effacer ")
Dans l'interface d'administration de pmb : administration > lecteurs > import Renseigner les numéros de colonnes pour avoir un affichage correct Terminer la procédure d'importation
A ce stade, les mots de passe ne fonctionnent pas (!) ils apparaissent en clair dans phpmyadmin : Vérifier url_base dans : administration > paramètres > paramètres généraux > url_base
Encoder les mots de passe : administration > outils > nettoyage de base : Encoder les mots de passe lecteurs... (celle-là, il fallait la trouver !)
Tester l'accès à l'OPAC pour un utilisateur enregistré.
- fin importation des lecteurs
Sécurisation du serveur : Ne pas autoriser l'accès en ssh ou ftp à root ou admin
Installation fail2ban (exclusion d'adresses)
doc à : https://wiki.debian-fr.xyz/Fail2ban#fail2ban.conf
- apt-get install fail2ban
Configurer pour filtrer ftp (ssh configuré par défaut) : voir doc Dans /etc/fail2ban/jail.conf > bantime = 604800 (1 semaine)
- fin fail2ban
installation de certbot pour les certificats let's encrypt (accès HTTPS)
Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
- fin certbot
Automatiser la sauvegardes des bases de données
en root Créer le dossier /root/scripts
- mkdir /root/scripts
copier le script dans /root/scripts/sav_bdd.sh (sauvegarde toutes les bdd hors celles listées dans databases_exclude list) :
- !/bin/bash
- Script de sauvegarde des bases de données mysql/mariadb
- Les valeurs à paramétrer sont en fin de script dans la fonction main()
get_databases_to_backup() {
mysql_command=$(command -v mysql) databases_list=$($mysql_command --defaults-file=/etc/mysql/debian.cnf -Bse 'show databases')
for exclude in $databases_exclude_list
do
databases_list=${databases_list//$exclude/}
done
- databases_list="pmb_bosquets"
} dump_databases() {
ext=".sql.gz"
mysqldump_command=$(command -v mysqldump)
compress_command=$(command -v gzip)
current_date=$(date +%F_%Hh%M)
cd "${backup_folder}" || exit
for database in $databases_list
do
$mysqldump_command --defaults-file=/etc/mysql/debian.cnf "$database" | ${compress_command} > ${database}"_"${current_date}${ext}
echo "Sauvegarde de la base (ou des bases) : ${database}…"
done
echo "$(date +%c): Sauvegarde complete effectuée !"
} delete_old_backups() {
find_command=$(command -v find)
cd "${backup_folder}" || exit
$find_command ./ -mtime +"${delete_backups_older_than_days}" -type f -exec rm -v {} \;
}
main() {
# toujours exclure information_schema performance_schema de la sauvegarde sinon le script générera des erreurs databases_exclude_list="mysql phpmyadmin information_schema performance_schema"
# choix du dossier de destination des sauvegardes à ajuster à vos besoins
backup_folder="/media/sf_PartageVM/sav_pmb"
if [ ! -d "$backup_folder" ] ; then
mkdir -p "$backup_folder"
fi
get_databases_to_backup dump_databases
# nombre de jours pendant lesquels il faut conserver les sauvegardes, -1 si illimité
delete_backups_older_than_days=30
if [ $delete_backups_older_than_days != "-1" ] ; then
delete_old_backups
fi
}
main
Rendre le fichier lisible/modifiable/executable pour root uniquement :
- chmod 700 /root/scripts/sav_bdd.sh
Automatiser l'execution tous les mercredis et dimanches à 3h00 du matin : Ecditer crontab :
- crontab -e
ajouter la ligne : (lance le script et envoie la sortie dans sav.log : créer le ficier et adapter le chemin) 0 3 * * wed,sun /root/scripts/sav_bdd.sh >> /media/sf_PartageVM/sav_pmb/log/sav.log
enregistrer et relancer le service :
- systemctl restart cron
Pour lister les tâches :
- crontab -l
Pour tester le fonctionnement, on pet ajouter une ligne pour exécuter la tâche dans les minutes qui suivent. La supprimer par la suite.
- fin sauvegardes
Mies à jour de sécurités automatique
voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1 et surtout : https://wiki.deimos.fr/Cron-apt_:_Installation_des_mises_%C3%A0_jour_de_s%C3%A9curit%C3%A9_automatique.html
Installer cron-apt
Créer le fichier /etc/cron-apt/action.d/5-security et y coller le contenu upgrade -y -o APT::Get::Show-Upgraded=true
- Ajouter l'option "-d" pour télécharger uniquement - utilse pour les tests
éditer /etc/apt/sources.list
Copier les lignes contenant 'security' deb http://fr.archive.ubuntu.com/ubuntu focal-security main restricted
- deb-src http://fr.archive.ubuntu.com/ubuntu focal-security main restricted
deb http://fr.archive.ubuntu.com/ubuntu focal-security universe
- deb-src http://fr.archive.ubuntu.com/ubuntu focal-security universe
deb http://fr.archive.ubuntu.com/ubuntu focal-security multiverse
- deb-src http://fr.archive.ubuntu.com/ubuntu focal-security multiverse
et les placer dans un nouveau fichier /etc/apt/sources.list.d/security.list. (On peut les commenter dans le fichier d'origine pour éviter les redondances)
Automatiser la mise à jour -> créer le fichier /etc/cron-apt/config.d/5-security et y coller le contenu OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\""
Vérifier le fonctionnement : - Forcer l'exécution : # cron-apt - vérifier : # cat /var/log/cron-apt/log - à comparer avec : # #apt list upgradable
Automatiser les mises à jour : Editer le fichier /etc/cron.d/cron-apt et vérifier la présence des lignes
- Every night at 4 o'clock.
0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt (ou les modifier pour changer les paramètres)
- fin Mises à jour de sécurité automatiques
Installation d'urbackup (sauvegarde automatique de type client-serveur : ici on installe les 2 sur la même machine physique)
doc à : https://www.urbackup.org/index.html Préparer le chemin de sauvegarde :
- mkdir /var/sauvegarde (ou /mnt/sauvegarde, ou autre...)
Peut servir de point de montage pour un HD externe...
ajout du dépôt et de la clé :
- echo 'deb http://download.opensuse.org/repositories/home:/uroni/Debian_9.0/ /' > /etc/apt/sources.list.d/urbackup-server.list
- wget -nv https://download.opensuse.org/repositories/home:uroni/Debian_9.0/Release.key -O Release.key
- apt-key add - < Release.key
- Installation de la partie serveur :
- apt-get update
- apt-get install urbackup-server
Le serveur est accessible à l'adresse : http://(adresse du serveur):55414
Réglages > Utilisateur Ajouter un utilisateur administrateur pour limiter les accès
- Installation de la partie client :
- TF=`mktemp` && wget "https://hndl.urbackup.org/Client/2.1.17/UrBackup%20Client%20Linux%202.1.17.sh" -O $TF && sh $TF; rm $TF
(snapshot mechanism = pas LVM ici)
Le client est visible immédiatement dans la console de gestion. (Etats : rafraîchir l'affichage)
- Configuration de la sauvegarde de la base de données :
Dans /usr/local/etc/urbackup/mariadbdump.conf, mettre MARIA_DUMP_ENABLED=1
- Modification du script pour ne sauver que la base pmb (vérifier la pérénité lors d'une mise à jour...) :
dans /usr/local/share/urbackup/scripts/mariadbdump : changer --all-databses -> pmb (ou nom de la base de données)
- Configuration retenue (enregistrer avant de changer d'onglet) :
Régalges > Général
- Serveur
Désactiver la sauvegarde d'image disque coché Le reste par défaut
- Sauvegarde de fichiers (à adapter à l'usage) :
Intervalle pour la sauvegarde incrémentale de fichers : 72 ...complète : 30 Nbre max de sauvegardes de fichiers incrémentielles : 30 Nbre min... 10 Nbre max de sauvegarde de fichers complètes : 3 Nmbre min... 2 Répertoires par défaut à sauvegarder : /var/www/html/pmb/opac_css Seule l'appli pmb nous intéresse ici
Sauvegarde de Volume : Intervalle pour les images système Désactiver Intervalle pour la sauvegarde image complète Désactiver
Droits : par défaut Client : Intervalle de sauvegarde : -> plus de détails ...incrémentielles de fichiers : 1-7/3-4 (tous les jours de 3h à 4h) ...complètes de fichiers : 6-7/3-4 (sa-di, de 3h à 4h)
Le reste par défaut
Réglages > Email (paramétrage à revoir)
- fin configuration retenue
Lancer une sauvegarde complète
Etats > Menu déroulant sous le client -> Sauvegarde complète Suivre la progression dans Activités Vérifier la sauvegarde dans /var/sauvegarde Suivre la progression : journaux (ouvre un nouvel onglet) : Warning : Missing checksum for script ouput for command "mariadbdump.sql" -> normal, le script a été modifié... 203Mo en 3 min Pour naviguer dans la sauvegarde / télécharger : Menu Sauvegardes