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.
sudo apt-get -y install apache2
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é.
Les modules suivants sont normalement essentiels pour la plus part des Frameworks.
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod expires
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
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
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
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.
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
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;
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
sudo apt-get install postgresql postgresql-contrib
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
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
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 = '*'
sudo apt-get -y install fail2ban
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 .