Installation d’un serveur web (LAMP)

Nextcloud 12 et Raspberry Pi

Installation d'un serveur web (LAMP)

Le choix se porte sur un serveur web LAMP (Linux Apache Mariadb PHP) bien supporté par Debian et Nextcloud. Il existe d'autres solutions préconisées sur Raspberry Pi utilisant NGINX.

carte monde

Installation d’un serveur web (LAMP)

Préparatifs : nom de domaine et certificat

Acquisition d’un nom de domaine gratuit sur un DNS dynamique (duckdns.org).

L’objectif est de remplacer notre adresse IP externe (88.180.180.180) par un nom mémorisable et de s’assurer que si cette adresse est dynamique (elle change régulièrement), notre nom de domaine puisse pointer au bon endroit.
Même en cas d'IP fixe, le nom de domaine associé au service permet d'enregistrer un certificat de confiance Lets Encrypt.

Dans cet exemple, duckdns.org qui est gratuit et est reconnu par l'autorité de certification Let's Encrypt a été choisi.

Pour se connecter sur duckdns.org, il faut le faire par un réseau social. Persona de la fondation Mozilla étant bientôt fermé, on le fera par un compte reddit de préférence aux autres réseaux.

Sur duckdns.org, après s’être loggé, on inscrit son nom de domaine : nextcloud-myweb

duckdns capture 1

Ce qui va nous permettre de générer les instruction pour le pi :

duckdns configuration pi
lambda_user@myweb:~ $ cd
lambda_user@myweb:~ $ mkdir duckdns
lambda_user@myweb:~ $ cd duckdns
lambda_user@myweb:~/duckdns $ nano duck.sh

echo url="https://www.duckdns.org/update?domains=nextcloud-myweb&token=8(...)b&ip=" | curl -k -o ~/duckdns/duck.log -K -

Ctrl-o Ctrl-x

lambda_user@myweb:~/duckdns $ chmod 700 duck.sh
lambda_user@myweb:~/duckdns $ crontab -e
no crontab for lambda_user - using an empty one 
 
/usr/bin/select-editor: 1: /usr/bin/select-editor: gettext: not found 
 'select-editor'. 
  1. /bin/ed 
/usr/bin/select-editor: 1: /usr/bin/select-editor: gettext: not found 
  2. /bin/nano        <----  
  3. /usr/bin/vim.tiny 
 
/usr/bin/select-editor: 32: /usr/bin/select-editor: gettext: not found 
 1-3 [2]:2

On ajoute à la fin du fichier :

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Ctrl-o Ctrl-x

On teste :

lambda_user@myweb:~/duckdns $ ./duck.sh
lambda_user@myweb:~/duckdns $ cat duck.log
OKlambda_user@myweb:~/duckdns $
OKlambda_user@myweb:~/duckdns $ cd
lambda_user@myweb:~ $

Si OK apparaît, cela fonctionne.

 

Installation de la base de données Mariadb

lambda_user@myweb:~ $ sudo apt install mariadb-server
lambda_user@myweb:~ $ sudo mysql_secure_installation

 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): [taper la touche Entrée]
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

Il suffit de donner un mot de passe (à se souvenir pour la suite) et taper Entrée pour le reste.

On termine par :

lambda_user@myweb:~ $ sudo mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
lambda_user@myweb:~ $ sudo systemctl restart mysqld
lambda_user@myweb:~ $ sudo systemctl status mysqld

Installation de Apache

lambda_user@myweb:~ $ sudo apt install apache2
lambda_user@myweb:~ $ sudo systemctl status apache2

 

NB : Il peut arriver que l'installation d'Apache se bloque. Dans ce cas, rebooter le Pi (en le débranchant et rebranchant), se reconnecter par ssh ou putty, lancer les commandes :

$ sudo dpkg --configure -a
$ sudo apt upgrade

et l'installation devrait se terminer

 

Installation de PHP 7 et PHP-FPM

Avec Raspbian Stretch, on passe à la version 7 de PHP (version 5 auparavant), ce qui nous permet de bénéficier de PHP-FPM. On en profite pour installer dès maintenant les modules nécessaires à Nextcloud.

lambda_user@myweb:~ $ sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli  
lambda_user@myweb:~ $ sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip
lambda_user@myweb:~ $ sudo apt install php-apcu
lambda_user@myweb:~ $ sudo a2enmod proxy_fcgi setenvif
lambda_user@myweb:~ $ sudo a2enconf php7.0-fpm
lambda_user@myweb:~ $ sudo nano /etc/apache2/sites-available/000-default.conf

ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/

lambda_user@myweb:~ $ sudo systemctl reload apache2
lambda_user@myweb:~ $ sudo systemctl status apache2
lambda_user@myweb:~ $ sudo systemctl status php7.0-fpm

lambda_user@myweb:~ $ sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

Sur l'ordinateur, taper dans la barre d'adresse du navigateur :
http://192.168.0.10/info.php

qui doit donner une page d'information php :

Après avoir vérifié que le Server API est bien FPM/FastCGI, par sécurité, retirer cette page :

lambda_user@myweb:~ $ sudo rm /var/www/html/info.php

Sécurisation de LAMP

lambda_user@myweb:~ $ sudo nano /etc/apache2/conf-available/security.conf
#
# Disable access to the entire file system except for the directories that
# are explicitly allowed later.
(...)
#ServerTokens Minimal
#ServerTokens OS
ServerTokens Prod
#ServerTokens Full

#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
ServerSignature Off
#ServerSignature On

Ctrl-o pour enregistrer, Ctrl-x pour quitter

 

On modifie ensuite le fichier de configuration php.ini pour la sécurité et pour permettre aussi le transfert de fichiers de taille plus importante (20M au lieu de 2M).

lambda_user@myweb:~ $ sudo nano /etc/php/7.0/apache2/php.ini
(...)
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 20M
(...)
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M
(...)
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-fopen
;allow_url_fopen = On
allow_url_fopen = Off
lambda_user@myweb:~ $ sudo systemctl restart apache2
lambda_user@myweb:~ $ sudo systemctl status apache2