Skip to content

Instantly share code, notes, and snippets.

@dadajuice
Last active October 18, 2021 19:47
Show Gist options
  • Save dadajuice/a10b953b7c01db11f0c6d498f1dcc8ed to your computer and use it in GitHub Desktop.
Save dadajuice/a10b953b7c01db11f0c6d498f1dcc8ed to your computer and use it in GitHub Desktop.
Debian configuration LAMP (PHP 8.0)

Pré-requis

Installation de sudo

su -
update-alternatives --set editor /usr/bin/vim.basic 
apt-get update
apt-get upgrade
apt-get install sudo
visudo

Ajouter l'utilisateur principal dans les sudoers (depuis visudo sous la ligne de root dans la section des privilèges).

# User privilege specification
root    ALL=(ALL:ALL) ALL
<USER>  ALL=(ALL:ALL) ALL

Quitter ensuite le compte root pour retourner à l'utilisateur principal.

Server Web et PHP

Installation de Apache

sudo apt-get -y install apache2

Installation de PHP 8 et ses dépendances

sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt update
sudo apt install php8.0
sudo apt-get -y install libapache2-mod-php8.0 php8.0-mysql php8.0-curl php8.0-gd php8.0-msgpack php8.0-memcached php8.0-intl php8.0-sqlite3 php8.0-gmp php8.0-mbstring php8.0-xml php8.0-zip php8.0-pgsql php8.0-apcu

Pour ajouter d'autres dépendances, faire simplement sudo apt-get -y install php8.0-<dependency>. Peut être réalisé à tout moment une fois PHP installé.

Activation de modules de Apache

Les modules suivants sont normalement essentiels pour la plus part des Frameworks.

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod expires

Installation de git

Permet de faire des git checkout, git pull, git fetch et toutes autres opérations du gestionnaire de sources depuis l'invite de commandes. Utile pour des déploiements automatisés.

sudo apt-get -y install git

Installation de Composer

Permet d'avoir accès de manière globale au gestionnaire de dépendances de PHP. Composer permet une mise à jour simple des dépendances et le démarrage de projet issue de Frameworks.

cd
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Syncronisation de l'horloge

Permet de toujours avoir un temps synchrionisé avec l'heure Internet. Très utile pour certaine fonctionnalité comme par exemple Google Authenticator qui vérifié un code dans un temps précis (un déclage d'horloge de 30 secondes est suffisant pour que le code soit invalide).

sudo apt-get install ntp

Configuration de la langue

Ajouter la langue française dans la VM si nécessaire pour s'assurer que les traductions issues des fonctions de type format fonctionnent correctement.

sudo dpkg-reconfigure locales

Sélectionnez fr_CA.UTF-8 (attention de ne pas prendre ca_FR qui est une langue différente). Nécessite un redémarrage de Apache sudo systemctl restart apache2 ou de la machine.

Base de données MariaDB (optionnel)

Installation

Lors de l'exécution de mysql_secure_installation, choisir toutes les options par défaut et saisissez un mot de passe pour l'utilisateur root de MySQL.

sudo apt-get install mariadb-server
sudo mysql_secure_installation

Ajout d'un utilisateur administratif (optionnel)

Depuis la console de MySQL sudo mysql -u root -p, créer un utilisateur administrateur autre que root qui pourra s'authentifier depuis l'externe (DataGrip par exemple). Attention! Ne pas permettre cette option pour un système en production.

GRANT ALL PRIVILEGES ON *.* TO '<USER>'@'%' IDENTIFIED BY '<PASS>' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Ouvrir MySQL aux connexions distantes (pour prise de contrôle depuis DataGrip par exemple)

Attention, ne pas permettre pour un serveur de production.

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

Ajouter un commentaire devant l'instruction bind-address.

#bind-address = 127.0.0.1

Base de données (PostgreSQL)

Installation

sudo apt-get install postgresql postgresql-contrib

Configuration des rôles

Depuis la console PostgreSQL sudo -u postgres psql, ajouter les rôles nécessaires. Chaque application devrait avoir son propre utilisateur (<USER_APP>).

postgres=# CREATE ROLE <USER> WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD '<PASS>';
postgres=# CREATE ROLE <USER_APP> WITH LOGIN ENCRYPTED PASSWORD '<PASS_APP>';
postgres=# \q

Création des bases de données

createdb <DB_NAME>

Depuis la console PostgreSQL sudo -u postgres psql, Spécifier les privilèges des rôles applicatifs sur les bases de données créées.

postgres=# grant all privileges on database <DB_NAME> to <USER_APP>;
postgres=# \q

Mise à jour des informations d'authentification de PostGreSQL

sudo vi /etc/postgresql/11/main/pg_hba.conf

L'utilisateur applicatif (<USER_APP>) devrait avoir accès uniquement à sa base de données depuis une connexion locale (même machine). L'utilisateur est en quelque sorte l'utilisateur administratif qui permet une connexion distante.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             <USER>          0.0.0.0/0               password
host    <DB_NAME>       <USER_APP>      localhost               password

Ouvrir PostGreSQL aux connexions distantes (optionnel pour prise de contrôle depuis DataGrip par exemple)

Attention, ne pas permettre pour un serveur de production.

sudo vi /etc/postgresql/11/main/postgresql.conf
listen_addresses = '*'

Installation de Fail2Ban (optionnel pour machine de développement)

sudo apt-get -y install fail2ban

Raccourcis dans le dossier /home

ln -s /var/www www
ln -s /etc/apache2/sites-enabled/000-default.conf vhosts
ln -s /etc/apache2/sites-enabled/000-default-ssl.conf vhosts-ssl
cd www
sudo rm -fR html/
sudo chown -R www-data:www-data .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment