# Restic : Déploiement

# Docker Restic REST with SSL

Pré-requis : 
- Posséder un binaire restic : `apt install restic`
- Posséder la suite openssl : `apt install openssl`
- Posséder docker et docker compose : `apt install docker docker-compose`
- Savoir lire :)


## 1) Préparation du répertoire projet
Variable de la documentation :
```bash
	NAME_PROJECT=projet
	PATH_PROJECT=/mnt/"${NAME_PROJECT}"
	FOLDER_DATA_NAME=data
	PATH_DATA="${PATH_PROJECT}"/"${FOLDER_DATA_NAME}"
	PORT_EXPOSED=8009
	USER_PROJECT=projet_user
	SRV_RESTIC=127.0.0.1 #TEST EN LOCAL
```

Créer votre répertoire de projet :
```bash
	mkdir /mnt/projet && cd $_
```

Créer le répertoire de sauvegarde dans le projet = 
```bash
	mkdir /mnt/projet/data
```
## 2) Générer un utilisateut restic

Créer un utilisateur pouvant intéragir avec le répertoire de sauvegarde :
```bash
htpasswd -B -c ${PATH_DATA}/.htpasswd projet_user
```
Un prompt apparaîtra afin de valider votre mot de passe.

## 3) Générer une paire de clés SSL

Créer un bundle de clés SSL ou importer les vôtre sous le format : 
- public_key
- private_key

### Méthode 1 : Let's Encrypt
Il est préférable d'utiliser une paire de clés valide via let's encrypt par exemple : 
```bash
certbot certonly --standalone -d ${DOMAINE}
```
Il faudra suite intégrer les clés dans votre espace data : 
```bash
cp -fra /etc/letsencrypt/archive/${DOMAINE}/fullchain1.pem ${PATH_DATA}/public_key
cp -fra /etc/letsencrypt/archive/${DOMAINE}/privkey1.pem ${PATH_DATA}/private_key

```
## Méthode 2 : Snakeoil
Voici une manière manuelle de les générer :
```bash
openssl req -newkey rsa:4096  -x509  -sha512  -days 365 -nodes -out ${PATH_DATA}/public_key -keyout ${PATH_DATA}/private_key
```
Cette méthode vous obligera à indiquer à restic de ne pas prendre en compte la validité du certificat via l'option :
```bash
restic --insecure-tls
```
## 4) Préparer votre docker-compose.yml

Créer votre fichier docker-compose.yml en modifiant les valeurs entre "{{ }}" :
`vim ${PATH_PROJECT}/docker-compose.yml`
```yml
  services:
  rest_server_{{ NAME_PROJECT }}:
    command:
      - "/entrypoint.sh"
    container_name: "rest_server_{{ NAME_PROJECT }}"
    environment:
      - "OPTIONS=--tls --prometheus"
      - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      - "DATA_DIRECTORY=/data"
      - "PASSWORD_FILE=/data/.htpasswd"
    hostname: "rest_server_{{ NAME_PROJECT }}"
    image: "restic/rest-server"
    ipc: "private"
    labels:
      org.opencontainers.image.source: "https://github.com/restic/rest-server"
      org.opencontainers.image.title: "rest-server"
    logging:
      driver: "json-file"
      options: {}
    ports:
      - "{{ PORT_EXPOSED }}:8000/tcp"
    volumes:
      - "{{ PATH_DATA }}:/data"
version: "3.6"
```

Lancer ensuite votre instance restic 
```bash
cd "${PATH_PROJECT}"
docker-compose up -d
```
## 5) Initialiser le workspace de sauvegarde

Init : initialiser un répertoire de sauvegarde
```bash
restic -r rest:https://${USER_PROJECT}:{{ MOT DE PASSE ETAPE 3 }}@${SRV_RESTIC}:${PORT_EXPOSED} init
```
Votre dépôt comporte désormais un répertoire de sauvegarde.

## 6) Bashrc && alias
Sur votre utilisateur courant (différent de root), éditer votre fichier bashrc
`vim /home/user/.bashrc`
```bash 
export RESTIC_PASSWORD="${USER_MDP}"
export RESTIC_REPOSITORY="rest:https://${USER_PROJECT}:${USER_MDP}@${SRV_RESTIC}:${PORT_EXPOSED}/"
```
Se reconnecter sur sa session ou charger le fichier bashrc :
```bash
source /home/user/.bashrc
``` 
Cela permet ensuite d'utiliser le binaire vers votre dépôt de sauvegarde sans à divulguer toutes les informations : 
```
zayad@vmi2007645:~$ restic stats
repository 6d0ed1e0 opened (repository version 2) successfully, password is correct
scanning...
Stats in restore-size mode:
Snapshots processed:   2
   Total File Count:   281
         Total Size:   24.191 KiB
```