Exposer votre conteneur
Pour rendre my-frontend:0.0.1 accessible sur my-domain.com et my-api:0.0.1 sur api.my-domain.com, disposez d’un VPS ou d’un serveur dédié/Baremetal, et faites pointer ces deux domaines vers lui.
Vérifiez également que Docker est installé sur le serveur.
Transférer nos images sur le serveur
Pour enregistrer et exporter les images des conteneurs, utilisez :
docker save my-frontend:0.0.1 | gzip > /tmp/my-frontend-0.0.1.tar.gz
docker save my-api:0.0.1 | gzip > /tmp/my-api-0.0.1.tar.gzSi SSH est configuré sur votre VPS, transférez les images avec scp :
scp /tmp/my-frontend-0.0.1.tar.gz /tmp/my-api-0.0.1.tar.gz [email protected]:~Connectez-vous ensuite au VPS par SSH :
Enfin, chargez les images des conteneurs :
cat ~/my-frontend-0.0.1.tar.gz | docker load
cat ~/api-0.0.1.tar.gz | docker loadDémarrer vos images
Après leur chargement sur le serveur, créez un réseau Docker avant de les exécuter avec :
docker network create my-domainDémarrez maintenant les images avec :
docker run -d --network my-domain --name my-frontend my-frontend:0.0.1
docker run -d --network my-domain --name my-api my-api:0.0.1Voici quelques informations sur les options utilisées :
run: crée et exécute un nouveau conteneur depuis une image.-d: mode détaché, exécute le conteneur en arrière-plan et affiche son nouvel identifiant.--network: définit le mode réseau du conteneur.--name: définit le nom du conteneur.my-frontend|my-api: nom du conteneur.my-frontend:0.0.1|my-api:0.0.1: image utilisée pour créer le conteneur.
Configurer Nginx
Plusieurs méthodes d’installation de Nginx existent selon le système d’exploitation du serveur.
Sur Ubuntu, installez Nginx avec :
sudo apt install -y nginxSon répertoire de configuration est généralement /etc/nginx.
Créez le fichier de configuration de my-domain.com dans /etc/nginx/sites-enabled/my-domain.com.
server {
listen 80;
server_name my-domain.com;
location / {
proxy_pass http://ip_of_frontend_container:80;
}
}Pour obtenir l’adresse IP du conteneur frontend, utilisez l’une de ces commandes :
docker network inspecy my-domain
docker container inspect my-frontendCréez ensuite la configuration de api.my-domain.com dans /etc/nginx/sites-enabled/api.my-domain.com.
server {
listen 80;
server_name api.my-domain.com;
## To allow versioning
## We can add a location /v1/ to the next version of our api and keep the old container running
## note that the last / is important
location /v0/ {
proxy_pass http://ip_of_api_container:80/;
}
}Pour obtenir l’adresse IP du conteneur API, utilisez l’une de ces commandes :
docker network inspecy my-domain
docker container inspect my-apiEnfin, rechargez la configuration Nginx avec :
sudo nginx -s reloadVous devriez maintenant accéder au frontend sur http://my-domain.com et au backend sur http://api.my-domain.com/v0.
Activer HTTPS avec Certbot
Comme pour Nginx, plusieurs méthodes d’installation de Certbot existent selon votre système.
Sur Ubuntu, installez Certbot avec :
sudo apt install -y certbotCertbot possède un plugin Nginx qui transforme la configuration HTTP en HTTPS avec le certificat SSL qu’il génère.
Pour l’utiliser, exécutez :
certbot --nginx --email [email protected] --agree-tos -d your-domain.com
certbot --nginx --email [email protected] --agree-tos -d api.your-domain.comAprès génération du certificat SSL, mettons à jour les configurations Nginx.
Modifiez /etc/nginx/sites-enabled/my-domain.com ainsi :
server {
listen 80;
listen 443 ssl;
server_name my-domain.com;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
if ($scheme != https) {
return 301 https://$host$request_uri;
}
location / {
proxy_pass http://ip_of_your_container:80;
}
}Puis /etc/nginx/sites-enabled/api.my-domain.com ainsi :
server {
listen 80;
listen 443 ssl;
server_name api.my-domain.com;
ssl_certificate /etc/letsencrypt/live/api.my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.my-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
if ($scheme != https) {
return 301 https://$host$request_uri;
}
location /v0/ {
proxy_pass http://ip_of_your_container:80/;
}
}Nous avons ajouté les configurations SSL et une redirection vers HTTPS lorsque le protocole n’est pas déjà HTTPS.
Enfin, rechargeons la configuration Nginx :
sudo nginx -s reloadVos conteneurs sont désormais accessibles en HTTPS : frontend sur https://my-domain.com, backend sur https://api.my-domain.com/v0.