Migration d'un VPS testing du Canada vers la France
Avec un VPS qui se trouve dans une région éloignées pour d'obscurs raisons il est difficile de communiquer rapidement avec. J'ai donc décidé de rapatrier celui-ci vers un VPS en France.
La création avec le dashboard d'OVH est, bien que simple, une purge par sa lenteur, j'ai l'impression que c'est le cas pour toutes les interfaces dite cloud. Mais jusque là tout va bien, il suffit de sélectionner les options qui nous intéressent: Système d'exploitation Debian 12, clé publique de l'ordinateur que j'utilise actuellement et nous voilà parti... Une fois que j'ai l'IP public de la machine je m'attèle à faire un playbook Ansible pour faire le backup et la migration.
Je commence par un inventory.yml
pour y lister les hôtes dont je vais avoir besoin.
testing:
hosts:
51.92.13.12:
old:
hosts:
91.121.12.13:
J'écris ensuite le fameux playbook dont j'ai besoin que je nomme migration-playbook.yml
, j'ai besoin d'effectuer les tâches suivantes:
- Installer docker
- Avoir l'utilisateur de base dans le groupe docker
- Transférer les clefs d'autorisations publiques
- Transférer le fichier acme pour le SSL
- Transférer le fichier compose du loadbalancer
J'en suis donc arrivé au fichier qui se trouve en dessous. Ce n'est pas le plus optimal car j'aurais très bien pu faire une simple copie via SSH avec SCP mais de cette manière j'ai des étapes reproductibles facilement, l'installation de docker a d'ailleurs été reprise d'un de mes précédents playbooks.
---
- name: Install Docker
hosts: testing
remote_user: debian
tags: docker
tasks:
- name: Update System
become: true
ansible.builtin.apt:
update_cache: true
only_upgrade: true
- name: Installing Docker
ansible.builtin.script: scripts/install-docker.sh
- name: Docker rights
ansible.builtin.shell: sudo usermod -aG docker $USER
register: output
changed_when: output.rc == 0
- name: Gather authorized keys
hosts: old
remote_user: debian
tags: ssh
tasks:
- name: Save authorized_keys
ansible.builtin.fetch:
src: ~/.ssh/authorized_keys
dest: data/authorized_keys
flat: true
- name: Deploy authorized keys
hosts: testing
remote_user: debian
tags: ssh
tasks:
- name: Deploy
ansible.posix.authorized_key:
user: debian
state: present
key: "{{ lookup('file', './data/authorized_keys') }}"
- name: Backup files
hosts: old
remote_user: debian
tags: backup
tasks:
- name: Backup Acme
become: true
ansible.builtin.fetch:
src: /home/debian/acme.json
dest: ./data/acme.json
flat: true
- name: Backup compose
ansible.builtin.fetch:
src: /home/debian/loadbalancer.compose.yml
dest: ./data/
flat: true
- name: Migrate files
hosts: testing
remote_user: debian
become: true
tags: migrate
tasks:
- name: Migrate acme
ansible.builtin.copy:
src: ./data/acme.json
dest: ~/acme.json
owner: root
group: root
mode: "0600"
- name: Migrate compose files
ansible.builtin.copy:
src: ./data/loadbalancer.compose.yml
dest: /home/debian/loadbalancer.compose.yml
mode: "0644"
owner: debian
group: debian
Le lancement s'effectue avec la commande suivante: ansible-playbook -i ./inventory.yml ./migration-playbook.yml
.
Ce n'est pas sur ça que performe le plus Ansible, la copie de plusieurs fichiers avec fetch n'est pas terrible, c'est plus utile pour installer sur plusieurs machines en même temps les mêmes outils et appliquer les mêmes configurations. Néanmoins, je sais qu'il me suffit d'avoir un nouveau VPS pour le rendre fonctionnel rapidement. Je pourrais améliorer le tout en ajoutant par exemple le réseau traefik directement et démarrer le loadbalancer.