Pour installer l'ensemble applicatif LAMP (Linux Apache MySQL et PHP), vous devez au préalable vous créer un compte Hetzner et posséder un nom de domaine. Ceci fait, allons-y.
Votre compte Hetzner créé, connectez-vous au service cloud.
Créer votre projet si ce n'est déjà fait. Un projet regroupe un ensemble de serveurs.
Si vous éprouvez des difficultés avec les clés SSH sur Hetzner, peut-être bien que cet article pourrait vous aider : Se connecter en SSH sur un server cloud Hetzner.
Sélectionner le type de serveur que vous désirez en fonction de votre budget et de la puissance que vous désirez.
La clé SSH que vous avez renseigné précédemment devrait être sélectionné par défaut.
Donnez un petit nom à votre nouveau serveur et donnez-lui vie.
Faire pointer votre nom de domaine vers votre serveur.
Ouvrir un terminal (invite de commandes) et connecter en SSH à votre serveur :
ssh root@ipduserveur
Dire oui au deux premières questions, puis saisir votre e-mail pour recevoir les notifications de Let's Encrypt.
Félicitations, votre nom de domaine pointe désormais vers un beau Hello World en https ;)
Vous devriez avoir une version d'Ubuntu récente, pour l'identifier :
lsb_release -a
Votre mot de passe root pour MySQL (mysql_root_pass) a été déposé sur votre serveur, vous pouvez y accéder par SFTP dans /root/.hcloud_password. Une fois le mot de passe récupéré et stocké dans un VaultWarden, supprimer le fichier.
Pour créer votre utilisateur MySQL nous allons configurer MySQL.
mysql_secure_installation
Saisir votre mot de passe root MySQL.
Ne validez pas le composant VALIDATE PASSWORD (sous si vous le souhaitez), vous pouvez rencontrer potentiellement des erreurs à l'installation de certaines applications.
Modifier votre mot de passe root si vous le souhaitez, celui généré par défaut est quand même pas mal.
Supprimer les utilisateurs anonymes.
Désactiver l'accès à distance de l'accès root.
Supprimer la base de données test.
Et enfin recharger les tables de privilèges.
All done!
mysql -u root -p
Saisir votre mot de passe root MySQL.
Saisir la requête suivante :
CREATE USER 'username' IDENTIFIED BY 'password';
En prenant bien soin de remplacer username et password hin.
GRANT ALL PRIVILEGES ON * . * TO 'username';
SHOW GRANTS FOR username;
exit
Bye
nano /etc/mysql/mysql.conf.d/mysqld.cnf
Chercher le paramètre bind-address et remplacer la valeur 127.0.0.1 par 0.0.0.0
Redémarrer MySQL :
systemctl restart mysql
mysql -u root -p
Saisir votre mot de passe root MySQL.
Créer un utilisateur spécifique associé au serveur distant (remote_server_ip) :
CREATE USER 'username'@'remote_server_ip' IDENTIFIED BY 'password';
En prenant bien soin de remplacer username, remote_server_ip et password hin.
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'username'@'remote_server_ip' WITH GRANT OPTION;
ALTER USER 'username'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
exit
Bye
systemctl restart mysql
ufw allow from remote_server_ip to any port 3306
ufw enable
ufw status
Pour l'accès SSH
ufw allow 22/tcp
Pour l'accès au site et renouvellement de votre certificat SSL :
ufw allow in 80
ufw allow in 443
Pensez à recharger UFW :
ufw reload
Vous devriez pouvoir vous connecter depuis le serveur remote_server_ip à votre base MySQL ;)
Pourquoi Adminer me direz-vous ? Parce que plus léger et nettement plus rapide que phpMyAdmin tout simplement pour ce qu'en j'en fais.
apt update
apt upgrade
adduser master
usermod -aG sudo master
su - master
sudo apt install adminer
sudo a2enconf adminer
sudo systemctl restart apache2
A noter que l'on aurait pu opter pour la solution portable (un fichier php à déposer dans le répertoire de votre choix), mais on perd la souplesse de mise jour proposée par Ubuntu, à vous de voir.
Pour plus de sécurité, vous pouvez ajouter de la double authentification via son système de plugin. Avant d'installer celui-ci, il faut vous assurer que le serveur utilise le même fuseau horaire que les applications que vous allez utiliser pour générer votre code OTP. En effet, ce système est basé sur la date.
timedatectl
timedatectl set-timezone Europe/Paris
Ceci fait installons le plugin login-otp.php :
Télécharger le plugin et copier le sur votre serveur dans le dossier /usr/share/adminer/plugins. Normalement avec l’installation via le gestionnaire de paquets d'Ubuntu (APT), il devrait déjà y être.
Sur cette Url : https://www.adminer.org/en/plugins/otp/ vous trouvez la méthode pour générer votre clé. Vous pouvez utilisez cette méthode pour Google Authenticator, ou scanner simplement le QR Code pour récupérer votre clé pour la copier dans votre VaultWarden par exemple. Tout dépend de l'outil que vous utiliserez pour générer votre code.
Toujours sur cette Url récupérer le code généré en dessous du QR Code et reporter les modifications dans le fichier de configuration d'Adminer qui se trouve dans le dossier /etc/adminer/conf.php
Si vous rencontrez des difficultés à le paramétrer, je vous ai mis plus bas la configuration complète ;)
Redémarrer Apache :
sudo systemctl restart apache2
Si vous ne trouvez pas le design d'Adminer très heureux, vous pouvez activer un sélecteur de designs (ou thèmes).
nano /etc/apache2/conf-available/adminer.conf
Alias /adminer /etc/adminer
Alias /designs /usr/share/adminer/designs
<Directory /etc/adminer>
Require all granted
DirectoryIndex conf.php
</Directory>
nano /etc/adminer/conf.php
<?php
define('ADMINER_DIR', '/usr/share/adminer');
function adminer_object() {
// required to run any plugin
include_once ADMINER_DIR . "/plugins/plugin.php";
include_once ADMINER_DIR . "/plugins/login-otp.php";
include_once ADMINER_DIR . "/plugins/designs.php";
// autoloader
foreach (glob(ADMINER_DIR . "/plugins/*.php") as $filename) {
include_once $filename;
}
// designs
$designs = array();
foreach (glob(ADMINER_DIR . "/designs/*", GLOB_ONLYDIR) as $filename) {
$designs["/designs/". basename($filename) ."/adminer.css"] = basename($filename);
}
$plugins = array(
new AdminerDesigns($designs),
new AdminerLoginOtp(base64_decode('MLM7N1kV/a2dQA==')),
new AdminerVersionNoverify(),
);
return new AdminerPlugin($plugins);
}
include ADMINER_DIR . "/adminer.php";
?>
sudo systemctl restart apache2
En bas à droite de l'interface d'Adminer, vous devriez trouver un sélecteur de designs.
Vous devriez voir un nouveau thème comme par exemple celui-ci :
A noter que si vous avez opter pour la version portable, déposez simplement le fichier adminer.css de votre design préféré à côté du fichier php portable.
Enjoy ^^