- Installe WSL :
wsl --install -d Ubuntu
- Installe Docker Desktop :
Documentation officielle
- Récupérer une image :
docker pull ubuntu:latest - Voir les images :
docker image ls - Supprimer une image :
docker rmi ubuntu:latest - Lancer un container :
docker run ubuntu:latest
- Lancer un container Ubuntu :
docker run -it --name monubuntu ubuntu:latest bash - Rentrer dans le container :
docker exec -it monubuntu bash - Créer un fichier :
touch /tmp/monfichier.txt - Sortir (
exit) - Récupérer le fichier :
docker cp monubuntu:/tmp/monfichier.txt C:/Users/votreuser/Desktop/
À refaire avec Alpine
docker pull alpine:latestdocker run -it --name monalpine alpine:latest sh- etc.
- Ubuntu :
apt update && apt install -y nano - Alpine :
apk update && apk add nano
- Voir actifs :
docker container ls - Voir tous :
docker container ls -a - Stopper :
docker stop moncontainer - Redémarrer :
docker start moncontainer - Supprimer :
docker rm moncontainer - Tout supprimer :
docker container prune
- Container → machine :
docker cp moncontainer:/chemin/du/fichier.txt /chemin/de/destination - Machine → container :
docker cp /chemin/du/fichier.txt moncontainer:/destination
- Windows :
docker run -d --name apache --rm -v C:/chemin/vers/votre/dossier:/usr/local/apache2/htdocs -p 8080:80 httpd - WSL :
docker run -d --name apache --rm -v $(pwd):/usr/local/apache2/htdocs -p 8080:80 httpd - Voir les fichiers :
docker exec -it apache ls /usr/local/apache2/htdocs
-p 8080:80: port-v /chemin/local:/chemin/container: volume-e VAR=valeur: variable d'env-d: détaché--name: nom--rm: suppression auto
- Installer Node.js : nodejs.org
- Installer uuid :
npm install uuid
ou globalement :
npm install -g uuid
- Lancer :
docker run -d --name db -e MARIADB_ROOT_PASSWORD=secret mariadb - Rentrer :
docker exec -it db bash - Se connecter :
mariadb -uroot -psecret - SQL :
CREATE DATABASE simplon; USE simplon; CREATE TABLE student (id int primary key not null auto_increment, name varchar(255)); INSERT INTO student (name) values ("Jean"), ("Bernard"), ("Véronique"); SELECT * FROM student; - Dump :
mariadb-dump -uroot -psecret simplon > /tmp/student.sql - Récupérer le dump :
docker cp db:/tmp/student.sql C:/Users/votreuser/Desktop/ - Persistance :
docker run -d --name db2 -e MARIADB_ROOT_PASSWORD=secret -v mariadbdata:/var/lib/mysql mariadb
- Ubuntu + nano (Dockerfile) :
FROM ubuntu:24.10 RUN apt update && apt install -y nano
- PHP + Composer (Dockerfile) :
FROM php:8.2-cli RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- Manipulation Ubuntu/Alpine
- Apache : servez vos fichiers
- MariaDB : base, table, dump, persistance
- Dockerfile : Ubuntu+Nano, PHP+Composer
- Node.js/npm/uuid
$(pwd)(WSL) ou${PWD}(Powershell) : dossier courantdocker system prune -a: tout nettoyer (attention !)
Si tu veux aller plus loin, explore les autres fichiers du dossier pour des commandes Linux, Apache, domaines, etc.
Voir le guide complet Linux
Ctrl Alt T Ouvrir un terminal Ctrl A Mettre le curseur au début de la ligne Ctrl E Mettre le curseur à la fin de la ligne Fleche Haut/Bas Retrouve la commande précédente/suivante Ctrl L "Clear" le terminal Tab Auto complétion si possible Shift Ctrl V Coller Ctrl K Coupe tout le texte après le curseur Ctrl U Coupe tout le texte avant le curseur Ctrl Y Colle le texte coupé
sudo !! Lance la commande précédente en tant que root
Donne le nom de l'utilisateur courant.
"Manuel". Affiche la documentation pour une commande donnée.
man ls # Explique comment utiliser la commande "ls"Donne une explication courte sur une commande donnée.
Pour "print working directory". Affiche votre position actuelle sur la machine.
Pour "change directory". Permet de se déplacer de dossier en dossier.
cd destination # On entre dans le dossier destination
cd /destination/absolue/ici
cd ~ # Retour à la "home" de l utilisateur
cd # Idem
cd / # Retour à la racine
cd - # Retour au dossier précédent (PAS forcément parent)Afficher les fichiers dans le repertoire courant
ls
ls -l # --long Liste verticale avec plus d'informations
ls -a # --all Voir tous les fichiers et dossiers, même cachés
ls -al # Combinaison des deux switchs ci-dessus
ls --color # Ajoute des couleurs au résultatAffiche le contenu d'un fichier.
Affiche le contenu "page par page"
Affiche le début d'un fichier. On peut préciser le nombre de lignes.
head fichier
head -5 fichier # Affiche seulement 5 lignesAffiche la fin d'un fichier On peut préciser le nombre de lignes.
tail fichier
tail -5 fichier # Affiche seulement 5 lignesPermet de créer un fichier ou plusieurs fichiers
touch nom-du-ficher
touch fichier1.txt fichier2.txt
touch fichier{1..10}.txt # Créer fichier1.txt, fichier2.txt ... fichier10.txtAffiche du texte dans le terminal (génère un output de texte).
Editeur de texte en terminal.
Editeur de texte en terminal très difficile à manipuler.
(Move) Déplace un fichier ou un dossier Permet aussi de renommer un fichier si on spécifie un nouveau nom
mv fichier destination/
mv fichier meme_fichier_avec_un_nouveau_nom
mv fichier destination/meme_fichier_avec_un_nouveau_nomOn peut aussi déplacer plusieurs fichiers à la fois
mv fichier1 fichier2 fichier3 destination
mv *.txt destinationLa dernière commande permet ici de déplacer tous les fichiers .txt vers le dossier de destination.
Pour "copy". Fait une copie du ficher spécifié.
cp fichier1 fichier1copiéPour "compare". Vérifie si deux fichiers sont identiques.
Pour "différence". Voir les différences entre plusieurs fichiers.
Permet de trouver du texte dans des fichers via des expressions régulières.
-i : case incensitive -r : recursive -v : trouve toutes les lignes qui ne correspondent PAS à la recherche -n : affiche le numéro de la ligne -c : "count", compte le nombre d'occurence -E : Expression régulière. Plus besoin d'échapper les caractères spéciaux comme |.
grep plop fichier # Regarde si "fichier" contient "plop"
grep plop ./dossier/* # Regarde si un des fichiers de "dossier" contient plop
grep -E "ou$|plop$" fichier # Trouve les lignes se terminant par "ou" ou "plop"
# Avec le pipe
cat fichier | grep coucou # Recherche coucou dans l'output de cat
ls -al | grep coucou # Recherche coucou dans l'output de lsTuto de DistroTube Permet de remplacer des chaines de caractères. -i case incensitive -e expression régulière
sed -e "s/coucou/PLOP/g" fichier # Remplace les "coucou" par des "PLOP" dans fichier
cat fichier | sed -e "s/ou/PLOP/g" # Remplace les "ou" par des "PLOP" dans l'output de cat (mais le fichier est intact).Tuto de DistroTube Outil surpuissant de traitement de texte avancé. Permet une grande précision, des déclarations de variables et executions de commandes.
awk pattern { action }
awk '{print $3}' monfichier.txt # On peut lui passer un fichier
cat monfichier | awk '{print $1}' # On peut aussi lui passer un flux
awk '{print $0}' fichier # Affiche tout le contenu de fichier
awk '{print $1}' fichier # Affiche la première "colonne" de fichier (premier mot de chaque ligne)
awk 'FS=";" {print $2} fichier' # Défini ";" comme séparateur de champs au lieu de espace.
awk '$3 ~ /pattern/ {print $1 " " $2 }' fichier # Recherche de pattern
awk '$3 !~ /pattern/ {print $1 " " $2 }' fichier # Exclusion de patternTransformation de caractères
tr pattern remplacement
echo abcd | tr bd 24 # Retourne a2c4Voir l'espace utilisé sur le disque. Le switch -h ('human') permet d'avoir un retour plus lisible.
Comme df, mais affiche l'espace libre.
S'assure qu'un fichier soit "déchiquetté" et rendu parfaitement illisible, même après suppression.
Permet de trouver un fichier ou dossier dans un repertoire donné.
find . -type f -name "*.mp3" # Trouve tous les fichiers .mp3 se trouvant dans le dossier courant
find / -type d -name "important*" #Trouve tous les dossiers commençant par "important" sur toute la machine"Processes" Affiche les processus en cours d'execution.
Permet de "tuer" un processus en renseignant sont Pid (process id).
Ajoute un nouvel utilisateur sur la machine.
sudo adduser charlotte # Créer l'utilisatrice "charlotte" et le groupe "Charlotte"
# On sera invité à lui choisir un mdp et d'autres informations
# Le repertoire /home/charlotte sera créé automatiquement avec les bonnes permissions
# Une Shell lui sera attribué par defaultAjoute un utilisateur mais ne donne pas la possibilité de changer ses données et mdp. Ne génère pas non plus de "home" pour ce user par défault !
sudo useradd sylvain # Créé juste le user
sudo useradd sylvain -m # Génère aussi le dossier "/home/sylvain"Change le mot de passe d'un utilisateur.
sudo passwd françois # Change le mdp de l'utilisateur "françois"
sudo passwd root # Change le mdp de root (qui n'a pas de mdp par défault)Supprime un utilisateur (mais pas son dossier home).
sudo userdel françois # François n'existe plus, mais ses fichiers existent toujoursPermet d'éditer le fichiers des "sudoers" : les utilisateurs ayant le droit d'utiliser "sudo" (les administrateurs donc).
sudo visudoOn peut alors ajouter des users et groupes et leur donner les droits sudoers.
françois ALL = /sbin/useradd # Autorise françois à utiliser l'executable useradd
charlotte ALL = ALL # Donne tous les droits à charlottes"User modification" permet de changer les informations d'un utilisateur. Consultez "man usermod" pour voir toutes les options possibles.
sudo usermod charlotte --shell /usr/bin/zsh # Change la shell de Charlotte à ZSH.
sudo usermod -l michel françois # Renomme "françois" en "michel""Switch user" Permet de se logger en tant qu'un autre utilisateur
su charlotte # Se log en tant que charlotte
su # Se log en tant que root
su - charlotte # Se log en tant que charlotte et charge son environnement (MIEUX)
su - # Se log en tant que root et charge son environnement (MIEUX)On peut simplement faire "exit" pour revenir à son profil de base.
Doit être installé. Permet d'avoir des informations concernant un utilisateur.
cat /etc/passwdPour chaque user, nous obtenons une ligne suivant ce model username:password:uid:gid:personaldata:homeDIR:shell uid = user id gid = group id
Exemple: charlotte:x:1000:1000:,,,:/home/charlotte:/bin/bash Le "x" pour password indique que celui ci est rangé dans un autre fichier (/etc/shadow). Bien sûr ce dernier est hashé.
Voir les groupes auquels appartient le user.
Ajoute un nouveau groupe.
sudo groupadd powerrangerscat /etc/groupIl faut passer par la commande usermod.
sudo usermod -G powerangers françois # DANGER !! François ne fera plus parti QUE du groupe powerangers
sudo usermod -aG powerangers françois # On AJOUTE le groupe poweranger à FrançoisChange les droits d'accès à un fichier/dossier. read = r = 4 write = w = 2 execute = x = 1
user = u group = g others = o
chmod 744 fichier # Donne toutes les permission au possesseur, mais les autres ne peuvent que lire
chmod 777 fichier # Donne toutes les permissions à tout le monde sur ce fichier
chmod +x fichier # Ajoute à tout le monde la permission d'execution sur ce fichier
chmod u+x go-rw fichier # Ajoute "execute" au user, retire read/write au groupe et aux autresChange le propriétaire du fichier/dossier.
chown françois fichier # Maintenant le fichier appartient à françois
chown -R françois dossier # Maintenant le dossier et son contenu appartiennent à françoisChange le groupe d'un fichier
chgrp powerrangers fichier # Maintenant le fichier appartient au groupe powerrangers
chgrp -R powerrangers dossier # Maintenant le fichier appartient au groupe powerrangers"Change shell" permet de changer la shell de l'utilisateur. Par défault il s'agit de /bin/bash, mais il existe d'autres shells tels que zsh et fish, plus modernes, mais qui ne sont pas forcément installées sur la machine.
sudo chsh # On sera alors invité à renseigner la nouvelle shellLe changement de shell ne prendra effet qu'en relançant la machine.
Ressources Tuto SSH par DistroTube Tuto SSH par TraversyMedia
Le client et le serveur permettant de réaliser des connections SSH. La machine qui essaye de se connecter en remote est le "client" et doit donc avoir openssh-client installé. La machine a laquelle on veut se connecter doit avoir openssh-server installé ET doit exposer un port.
sudo apt install openssh-server # Debian
sudo pacman install openssh # Arch (openssh contient le client et le serveur)
sudo systemctl status ssh # Check le status du serveur SSH
# sshd (pour ssh daemon) fonctionne égalementCodé en Rust. Configuration en .toml.
Voir le guide complet Apache
sudo apt update
sudo apt install apache2Apache est maintenant installé. Il écoute par défaut sur le port 80.
- Contrairement à Nginx et Caddy, Apache n'a pas besoin de fastCGI, il à son propre moteur PHP
mod_php
sudo mkdir -p /var/www/mon-site-php
sudo chown -R www-data:www-data /var/www/mon-site-phpPlace tes fichiers PHP dans ce dossier. Par exemple un index.php.
Créer un fichier dans /etc/apache2/sites-available/mon-site-php.conf :
<VirtualHost *:80>
ServerName monsite.domaine.fr
DocumentRoot /var/www/mon-site-php
<Directory /var/www/mon-site-php>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-site-php_error.log
CustomLog ${APACHE_LOG_DIR}/mon-site-php_access.log combined
</VirtualHost>sudo a2ensite mon-site-php.conf
sudo a2enmod rewrite
sudo systemctl reload apache2Ton site est maintenant accessible en HTTP.
sudo apt install certbot python3-certbot-apachesudo certbot --apacheIl te demandera le nom de domaine (ex:
monsite.domaine.fr) et configurera automatiquement le SSL.
Certbot le propose pendant la configuration. Sinon, ajoute dans ton vhost :
<VirtualHost *:80>
ServerName monsite.domaine.fr
Redirect permanent / https://monsite.domaine.fr/
</VirtualHost>Si tu veux désactiver ou supprimer un site :
sudo a2dissite mon-site-php.conf
sudo systemctl reload apache2| Étape | Action |
|---|---|
| 1 | Installer Apache |
| 2 | Créer le dossier du site |
| 3 | Créer un VirtualHost |
| 4 | Activer le site et les modules |
| 5 | Installer Certbot |
| 6 | Générer le certificat HTTPS |
| 7 | (Optionnel) Rediriger HTTP → HTTPS |
- Un seul service peut écouter le port 80/443 (Apache OU Caddy, pas les deux)
- Si tu veux faire cohabiter les deux, il faut les faire écouter sur des ports différents ou utiliser un reverse proxy
Voir le guide complet Domaines
Un nom de domaine est une adresse lisible par les humains pour accéder à un site web. Exemples :
google.comwikipedia.orgtonsite.fr
Un domaine correspond à une identité unique sur Internet.
Exemple : site1.example.com
com→ extension (TLD)example.com→ domaine principalsite1.example.com→ sous-domaine
Un sous-domaine est un domaine "en dessous" d’un domaine principal, utile pour séparer des sections ou projets :
www.tonsite.fr(souvent utilisé comme sous-domaine principal)blog.tonsite.fradmin.tonsite.frapi.tonsite.fr
Tu peux créer autant de sous-domaines que tu veux gratuitement une fois ton domaine principal acheté.
Parmi les principaux registrars (bureaux d'enregistrement) :
- OVH ✅ recommandé
- Gandi
- Ionos
- Namecheap
- Google Domains (fermé depuis 2023)
Nous allons nous concentrer sur OVH, un fournisseur français sérieux avec une bonne interface de gestion DNS.
| Extension | Prix achat 1 an | Renouvellement annuel |
|---|---|---|
.fr |
~6,59 € HT | ~6,59 € HT |
.com |
~9,99 € HT | ~9,99 € HT |
.net |
~11,99 € HT | ~11,99 € HT |
.dev |
~14,99 € HT | ~14,99 € HT |
.io |
~39,99 € HT | ~39,99 € HT |
- Tu achètes un domaine sur OVH (ex:
monsite.fr) - Tu vas dans l’espace client OVH → section Zone DNS
- Tu ajoutes un enregistrement A pour chaque sous-domaine :
@ A 123.45.67.89 # domaine principal (monsite.fr)
www A 123.45.67.89
admin A 123.45.67.89
blog A 123.45.67.89- En quelques minutes/heures, les domaines pointeront vers ton serveur
- Un nom de domaine = ton identité sur le web
- Un sous-domaine = une section dédiée (admin, blog, app, etc.)
- OVH permet de tout gérer (achat, DNS, mail)
- Une fois le domaine acheté, tu configures les zones DNS pour pointer vers ton serveur
✅ Une fois tes domaines configurés, tu peux passer à la mise en ligne avec Caddy ou un autre serveur web !
Voir le guide complet Serveur en ligne
Comprendre comment louer un serveur en ligne (VPS ou dédié), y installer un Linux propre (Debian ou Ubuntu), et y héberger des projets web (Symfony, WordPress, PHP, etc.)
| Type de serveur | Description | Pour qui ? |
|---|---|---|
| VPS (Virtual Private Server) | Un serveur virtuel isolé partagé sur une machine physique. | Idéal pour héberger 1 à 5 sites, coût réduit. |
| Serveur dédié | Une vraie machine physique pour toi seul. | Pour les gros projets ou plusieurs dizaines de sites. |
- https://www.ovhcloud.com/fr/vps/
- Datacenters en France et en Europe
- Offre VPS à partir de 5,00€ HT/mois
- OS au choix : Ubuntu, Debian, CentOS, etc.
- Interface claire, documentation abondante
Exemple d’offre :
VPS Discovery
→ 1 vCore / 2 Go RAM / 20 Go SSD
→ 5 € HT / mois
- https://www.scaleway.com/fr/virtual-instances/
- VPS (instances) hébergées en France (Paris/DC5)
- Facturation à l’heure ou au mois
- Images prêtes pour Debian, Ubuntu, Docker, etc.
Exemple d’offre :
DEV1-S
→ 2 vCPU / 2 Go RAM / 40 Go SSD
→ 4,99 € HT / mois
Une fois acheté, tu as :
- Une adresse IP publique fixe
- Un accès complet root au serveur
- Un Linux propre (Debian/Ubuntu selon ton choix)
- L’accès SSH (ex :
ssh root@IP_DU_SERVEUR) - Aucune interface préinstallée : c’est à toi d’installer ce que tu veux
Une fois connecté au serveur, tu installeras :
- Un serveur web : Apache, Nginx, ou Caddy
- PHP, MySQL/MariaDB, Composer
- Un pare-feu (UFW)
- Certbot ou Caddy pour le HTTPS
- Git, Node.js, etc. selon les besoins de ton projet
| Critère | OVH | Scaleway |
|---|---|---|
| 🇫🇷 Serveurs en France | ✅ | ✅ |
| 🧾 Prix abordables | ✅ | ✅ |
| 📚 Documentation | ✅ | ✅ (moins complète qu’OVH) |
| 🌐 Interface client | Classique | Moderne & rapide |
| ☁️ Autres services cloud | ✅ | ✅ |
Dès que tu accèdes à ton serveur :
adduser monuser
usermod -aG sudo monuserPuis connecte-toi avec :
ssh monuser@IP- Louer un VPS = acheter un mini-serveur personnel 24/7 accessible depuis le monde entier
- Debian et Ubuntu sont les plus simples à administrer pour héberger des apps PHP/Symfony
- OVH et Scaleway offrent un excellent rapport qualité/prix pour débuter ou héberger plusieurs sites web