readytouse
This commit is contained in:
parent
91063c1a0c
commit
9281354f2e
16 changed files with 690 additions and 0 deletions
3
immich-ansible/.gitignore
vendored
Normal file
3
immich-ansible/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
*.retry
|
||||
.vault_pass
|
||||
.env
|
||||
137
immich-ansible/README.md
Normal file
137
immich-ansible/README.md
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
# Immich Ansible
|
||||
|
||||
Playbook Ansible pour installer Immich auto-hébergé avec Docker Compose, PostgreSQL, Redis/Valkey, machine-learning et Nginx/Certbot.
|
||||
|
||||
Il reprend le modèle du projet Forgejo fourni :
|
||||
|
||||
- même host Ansible ;
|
||||
- installation Docker Compose v2 ;
|
||||
- reverse proxy Nginx + certificat Let's Encrypt ;
|
||||
- port Docker hôte non standard ;
|
||||
- données applicatives persistantes bind-mountées sur le partage NFS.
|
||||
|
||||
## Structure
|
||||
|
||||
```text
|
||||
immich-ansible/
|
||||
├── ansible.cfg
|
||||
├── inventory.ini
|
||||
├── playbook.yml
|
||||
├── group_vars/
|
||||
│ └── immich.yml
|
||||
├── templates/
|
||||
│ ├── .env.j2
|
||||
│ └── docker-compose.yml.j2
|
||||
└── roles/
|
||||
└── nginx/
|
||||
```
|
||||
|
||||
## Configuration appliquée
|
||||
|
||||
```yaml
|
||||
immich_domain: "immich.esfs.fr"
|
||||
immich_dir: "/opt/immich"
|
||||
nfs_mount_point: "/mnt/nfs-share"
|
||||
immich_library_path: "/mnt/nfs-share/applications/immich/library"
|
||||
immich_postgres_data_path: "/opt/immich/postgres"
|
||||
immich_host_http_port: "32283"
|
||||
immich_container_http_port: "2283"
|
||||
```
|
||||
|
||||
Nginx proxy vers :
|
||||
|
||||
```text
|
||||
http://127.0.0.1:32283
|
||||
```
|
||||
|
||||
L'accès final sera :
|
||||
|
||||
```text
|
||||
https://immich.esfs.fr
|
||||
```
|
||||
|
||||
## Point important sur NFS
|
||||
|
||||
La bibliothèque Immich est sur NFS :
|
||||
|
||||
```text
|
||||
/mnt/nfs-share/applications/immich/library
|
||||
```
|
||||
|
||||
PostgreSQL est volontairement local :
|
||||
|
||||
```text
|
||||
/opt/immich/postgres
|
||||
```
|
||||
|
||||
C'est fait ainsi parce que le fichier `example.env` officiel Immich précise que les partages réseau ne sont pas supportés pour `DB_DATA_LOCATION`. C'est aussi cohérent avec le projet Forgejo fourni, où les données Forgejo sont sur NFS mais PostgreSQL reste local.
|
||||
|
||||
## Lancement
|
||||
|
||||
Depuis le dossier du projet :
|
||||
|
||||
```bash
|
||||
ansible-playbook playbook.yml
|
||||
```
|
||||
|
||||
Ou explicitement :
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory.ini playbook.yml
|
||||
```
|
||||
|
||||
## Après installation
|
||||
|
||||
Ouvre :
|
||||
|
||||
```text
|
||||
https://immich.esfs.fr
|
||||
```
|
||||
|
||||
Puis crée le premier compte administrateur via l'assistant Immich.
|
||||
|
||||
## Variables utiles
|
||||
|
||||
Dans `group_vars/immich.yml` :
|
||||
|
||||
```yaml
|
||||
immich_db_password: "Yb8qD7vRc4Nz29AhKp6Lx5Tf"
|
||||
immich_version: "v2"
|
||||
immich_host_http_port: "32283"
|
||||
immich_nginx_client_max_body_size: "10G"
|
||||
```
|
||||
|
||||
Le mot de passe PostgreSQL est volontairement alphanumérique uniquement.
|
||||
|
||||
## Mise à jour Immich
|
||||
|
||||
Sur le serveur :
|
||||
|
||||
```bash
|
||||
cd /opt/immich
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Ou relancer le playbook Ansible.
|
||||
|
||||
## Sauvegarde
|
||||
|
||||
À sauvegarder régulièrement :
|
||||
|
||||
```text
|
||||
/mnt/nfs-share/applications/immich/library
|
||||
/opt/immich/postgres
|
||||
/opt/immich/docker-compose.yml
|
||||
/opt/immich/.env
|
||||
```
|
||||
|
||||
Pour une sauvegarde froide :
|
||||
|
||||
```bash
|
||||
cd /opt/immich
|
||||
docker compose down
|
||||
# sauvegarde
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
10
immich-ansible/ansible.cfg
Normal file
10
immich-ansible/ansible.cfg
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[defaults]
|
||||
inventory = inventory.ini
|
||||
host_key_checking = False
|
||||
retry_files_enabled = False
|
||||
stdout_callback = default
|
||||
interpreter_python = auto_silent
|
||||
|
||||
[privilege_escalation]
|
||||
become = True
|
||||
become_method = sudo
|
||||
55
immich-ansible/group_vars/immich.yml
Normal file
55
immich-ansible/group_vars/immich.yml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
# Immich variables (group_vars/immich.yml)
|
||||
# Reprise du modèle Forgejo fourni : Docker Compose, Nginx/Certbot, host identique,
|
||||
# données applicatives persistantes sur NFS, base PostgreSQL locale.
|
||||
|
||||
# Réseau / domaine public
|
||||
nginx_required: true
|
||||
immich_domain: "immich.esfs.fr"
|
||||
letsencrypt_email: "admin@esfs.fr"
|
||||
immich_nginx_site_filename: "immich.esfs.fr.conf"
|
||||
immich_nginx_client_max_body_size: "10G"
|
||||
|
||||
# Chemins d'installation
|
||||
immich_dir: "/opt/immich"
|
||||
nfs_mount_point: "/mnt/nfs-share"
|
||||
check_nfs_mount: true
|
||||
|
||||
# Données persistantes
|
||||
# La bibliothèque Immich contient les uploads, thumbnails, encoded-video, profile, backups, etc.
|
||||
# Elle est bind-mountée sur le partage NFS, comme les données Forgejo dans le projet d'exemple.
|
||||
immich_library_path: "{{ nfs_mount_point }}/applications/immich/library"
|
||||
|
||||
# Important : Immich déconseille / ne supporte pas DB_DATA_LOCATION sur un partage réseau.
|
||||
# On garde donc PostgreSQL en local, comme PostgreSQL Forgejo était local dans le projet fourni.
|
||||
immich_postgres_data_path: "{{ immich_dir }}/postgres"
|
||||
immich_model_cache_path: "{{ immich_dir }}/model-cache"
|
||||
|
||||
# Ports exposés Docker
|
||||
# Nginx proxy vers 127.0.0.1:{{ immich_host_http_port }}.
|
||||
# Port hôte volontairement non standard pour éviter les conflits avec les autres applis web.
|
||||
immich_host_http_port: "32283"
|
||||
immich_container_http_port: "2283"
|
||||
|
||||
# Images / version Immich
|
||||
# v2 suit la branche majeure stable actuelle. Remplacer par une version précise si besoin, ex: v2.1.0.
|
||||
immich_version: "v2"
|
||||
immich_server_image: "ghcr.io/immich-app/immich-server"
|
||||
immich_machine_learning_image: "ghcr.io/immich-app/immich-machine-learning"
|
||||
immich_redis_image: "docker.io/valkey/valkey:9"
|
||||
immich_postgres_image: "ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0"
|
||||
|
||||
# PostgreSQL Immich
|
||||
immich_db_username: "postgres"
|
||||
immich_db_database: "immich"
|
||||
# Alphanumérique uniquement, comme recommandé par Immich.
|
||||
immich_db_password: "Yb8qD7vRc4Nz29AhKp6Lx5Tf"
|
||||
|
||||
# Système
|
||||
server_timezone: "Europe/Paris"
|
||||
docker_remove_conflicting_packages: true
|
||||
|
||||
# Permissions
|
||||
immich_library_mode: "0777"
|
||||
immich_postgres_uid: "999"
|
||||
immich_postgres_gid: "999"
|
||||
2
immich-ansible/inventory.ini
Normal file
2
immich-ansible/inventory.ini
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
[immich]
|
||||
forgejo-server ansible_host=92.222.203.70 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/ovhkey
|
||||
210
immich-ansible/playbook.yml
Normal file
210
immich-ansible/playbook.yml
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
---
|
||||
- name: Installer Immich avec Docker Compose
|
||||
hosts: immich
|
||||
become: true
|
||||
|
||||
tasks:
|
||||
- name: Installer les prérequis système
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
- gnupg
|
||||
- lsb-release
|
||||
- nfs-common
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Vérifier que le partage NFS est monté
|
||||
ansible.builtin.command:
|
||||
cmd: findmnt -T "{{ nfs_mount_point }}"
|
||||
register: nfs_mount_check
|
||||
changed_when: false
|
||||
failed_when: nfs_mount_check.rc != 0
|
||||
when: check_nfs_mount | bool
|
||||
|
||||
- name: Définir l'architecture Docker APT
|
||||
ansible.builtin.set_fact:
|
||||
docker_apt_arch: >-
|
||||
{{
|
||||
{
|
||||
'x86_64': 'amd64',
|
||||
'aarch64': 'arm64',
|
||||
'armv7l': 'armhf',
|
||||
'armv6l': 'armhf'
|
||||
}.get(ansible_architecture, ansible_architecture)
|
||||
}}
|
||||
docker_apt_distribution: >-
|
||||
{{
|
||||
'ubuntu' if ansible_distribution == 'Ubuntu'
|
||||
else 'debian' if ansible_distribution == 'Debian'
|
||||
else ansible_distribution | lower
|
||||
}}
|
||||
|
||||
- name: Supprimer les anciens paquets Docker conflictuels
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- docker.io
|
||||
- docker-doc
|
||||
- docker-compose
|
||||
- podman-docker
|
||||
- containerd
|
||||
- runc
|
||||
state: absent
|
||||
when: docker_remove_conflicting_packages | bool
|
||||
|
||||
- name: Créer le dossier des clés APT
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Installer la clé GPG du dépôt Docker officiel
|
||||
ansible.builtin.get_url:
|
||||
url: "https://download.docker.com/linux/{{ docker_apt_distribution }}/gpg"
|
||||
dest: /etc/apt/keyrings/docker.asc
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
|
||||
- name: Ajouter le dépôt Docker officiel
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ docker_apt_distribution }} {{ ansible_distribution_release }} stable"
|
||||
filename: docker
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Installer Docker Engine et Docker Compose v2
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Activer et démarrer Docker
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: true
|
||||
|
||||
- name: Créer le dossier Immich
|
||||
ansible.builtin.file:
|
||||
path: "{{ immich_dir }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Créer la bibliothèque Immich sur le NFS
|
||||
ansible.builtin.file:
|
||||
path: "{{ immich_library_path }}"
|
||||
state: directory
|
||||
mode: "{{ immich_library_mode }}"
|
||||
recurse: true
|
||||
|
||||
- name: Forcer les permissions sur la bibliothèque Immich NFS
|
||||
ansible.builtin.command:
|
||||
cmd: chmod -R {{ immich_library_mode }} "{{ immich_library_path }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Créer le dossier PostgreSQL local Immich
|
||||
ansible.builtin.file:
|
||||
path: "{{ immich_postgres_data_path }}"
|
||||
state: directory
|
||||
owner: "{{ immich_postgres_uid }}"
|
||||
group: "{{ immich_postgres_gid }}"
|
||||
mode: "0700"
|
||||
|
||||
- name: Créer le dossier de cache machine-learning Immich
|
||||
ansible.builtin.file:
|
||||
path: "{{ immich_model_cache_path }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0777"
|
||||
|
||||
- name: Déployer le fichier .env Immich
|
||||
ansible.builtin.template:
|
||||
src: templates/.env.j2
|
||||
dest: "{{ immich_dir }}/.env"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0600"
|
||||
notify: Redémarrer Immich
|
||||
|
||||
- name: Déployer docker-compose.yml Immich
|
||||
ansible.builtin.template:
|
||||
src: templates/docker-compose.yml.j2
|
||||
dest: "{{ immich_dir }}/docker-compose.yml"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: Redémarrer Immich
|
||||
|
||||
- name: Supprimer les anciens conteneurs Immich portant les mêmes noms
|
||||
ansible.builtin.shell: |
|
||||
old_ids=$(docker ps -aq \
|
||||
--filter "name=immich_server" \
|
||||
--filter "name=immich_machine_learning" \
|
||||
--filter "name=immich_redis" \
|
||||
--filter "name=immich_postgres")
|
||||
if [ -n "$old_ids" ]; then
|
||||
docker rm -f $old_ids
|
||||
fi
|
||||
printf "%s" "$old_ids"
|
||||
changed_when: removed_immich_containers.stdout != ''
|
||||
register: removed_immich_containers
|
||||
|
||||
- name: Démarrer Immich
|
||||
ansible.builtin.command:
|
||||
cmd: docker compose up -d
|
||||
chdir: "{{ immich_dir }}"
|
||||
register: immich_compose_up
|
||||
changed_when: >-
|
||||
'Started' in immich_compose_up.stdout or
|
||||
'Created' in immich_compose_up.stdout or
|
||||
'Recreated' in immich_compose_up.stdout or
|
||||
'Running' in immich_compose_up.stdout
|
||||
|
||||
- name: Attendre que le port HTTP Immich soit ouvert localement
|
||||
ansible.builtin.wait_for:
|
||||
host: 127.0.0.1
|
||||
port: "{{ immich_host_http_port }}"
|
||||
delay: 5
|
||||
timeout: 240
|
||||
state: started
|
||||
|
||||
- name: Attendre que le conteneur Immich Server soit en état running
|
||||
ansible.builtin.shell: |
|
||||
cid=$(docker compose ps -q immich-server)
|
||||
if [ -z "$cid" ]; then
|
||||
exit 1
|
||||
fi
|
||||
status=$(docker inspect "$cid" | grep -m1 '"Status":' | awk -F'"' '{print $4}')
|
||||
[ "$status" = "running" ]
|
||||
args:
|
||||
chdir: "{{ immich_dir }}"
|
||||
register: immich_container_status
|
||||
retries: 30
|
||||
delay: 5
|
||||
until: immich_container_status.rc == 0
|
||||
changed_when: false
|
||||
|
||||
- name: Lancer le rôle Nginx configuration réseau
|
||||
ansible.builtin.include_role:
|
||||
name: nginx
|
||||
when: nginx_required | bool
|
||||
|
||||
handlers:
|
||||
- name: Redémarrer Immich
|
||||
ansible.builtin.command:
|
||||
cmd: docker compose up -d
|
||||
chdir: "{{ immich_dir }}"
|
||||
register: immich_restart
|
||||
changed_when: true
|
||||
20
immich-ansible/roles/nginx/README.md
Normal file
20
immich-ansible/roles/nginx/README.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Rôle Nginx Immich
|
||||
|
||||
Ce rôle configure Nginx comme reverse proxy HTTPS pour Immich.
|
||||
|
||||
Variables obligatoires :
|
||||
|
||||
```yaml
|
||||
immich_domain: "immich.esfs.fr"
|
||||
immich_host_http_port: "32283"
|
||||
letsencrypt_email: "admin@esfs.fr"
|
||||
```
|
||||
|
||||
Variable optionnelle :
|
||||
|
||||
```yaml
|
||||
immich_nginx_client_max_body_size: "10G"
|
||||
immich_nginx_site_filename: "immich.esfs.fr.conf"
|
||||
```
|
||||
|
||||
Le rôle obtient automatiquement un certificat Let's Encrypt avec `certbot --nginx`.
|
||||
7
immich-ansible/roles/nginx/defaults/main.yml
Normal file
7
immich-ansible/roles/nginx/defaults/main.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
# Nom du fichier dans /etc/nginx/sites-available et sites-enabled.
|
||||
# Par défaut : "{{ immich_domain }}.conf"
|
||||
# immich_nginx_site_filename: "{{ immich_domain }}.conf"
|
||||
|
||||
# Uploads photos/vidéos : taille élevée par défaut.
|
||||
immich_nginx_client_max_body_size: "10G"
|
||||
10
immich-ansible/roles/nginx/handlers/main.yml
Normal file
10
immich-ansible/roles/nginx/handlers/main.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
- name: reload nginx
|
||||
ansible.builtin.command: nginx -t
|
||||
changed_when: true
|
||||
notify: do reload nginx
|
||||
|
||||
- name: do reload nginx
|
||||
ansible.builtin.service:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
63
immich-ansible/roles/nginx/tasks/config.yml
Normal file
63
immich-ansible/roles/nginx/tasks/config.yml
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
- name: Vérifier les variables obligatoires du rôle Nginx Immich
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- immich_domain is defined
|
||||
- immich_domain | length > 0
|
||||
- immich_host_http_port is defined
|
||||
- immich_host_http_port | string | length > 0
|
||||
- letsencrypt_email is defined
|
||||
- letsencrypt_email | length > 0
|
||||
fail_msg: >-
|
||||
Variables obligatoires manquantes pour le rôle nginx :
|
||||
immich_domain, immich_host_http_port, letsencrypt_email.
|
||||
|
||||
- name: Définir le nom du fichier de site Nginx Immich
|
||||
ansible.builtin.set_fact:
|
||||
immich_nginx_site_filename_resolved: "{{ immich_nginx_site_filename | default(immich_domain ~ '.conf') }}"
|
||||
|
||||
- name: Supprimer le site Nginx par défaut si présent
|
||||
ansible.builtin.file:
|
||||
path: /etc/nginx/sites-enabled/default
|
||||
state: absent
|
||||
notify: reload nginx
|
||||
|
||||
- name: Déployer la configuration HTTP temporaire Immich
|
||||
ansible.builtin.template:
|
||||
src: immich.http-only.conf.j2
|
||||
dest: "/etc/nginx/sites-available/{{ immich_nginx_site_filename_resolved }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: reload nginx
|
||||
|
||||
- name: Activer le site Nginx Immich
|
||||
ansible.builtin.file:
|
||||
src: "/etc/nginx/sites-available/{{ immich_nginx_site_filename_resolved }}"
|
||||
dest: "/etc/nginx/sites-enabled/{{ immich_nginx_site_filename_resolved }}"
|
||||
state: link
|
||||
force: true
|
||||
notify: reload nginx
|
||||
|
||||
- name: Appliquer la configuration HTTP temporaire
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Obtenir le certificat Let's Encrypt pour Immich
|
||||
ansible.builtin.command: >-
|
||||
certbot certonly --non-interactive --agree-tos
|
||||
--email {{ letsencrypt_email }}
|
||||
--nginx -d {{ immich_domain }}
|
||||
args:
|
||||
creates: "/etc/letsencrypt/live/{{ immich_domain }}/fullchain.pem"
|
||||
|
||||
- name: Déployer la configuration HTTPS finale Immich
|
||||
ansible.builtin.template:
|
||||
src: immich.https.conf.j2
|
||||
dest: "/etc/nginx/sites-available/{{ immich_nginx_site_filename_resolved }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: reload nginx
|
||||
|
||||
- name: Appliquer la configuration HTTPS finale
|
||||
ansible.builtin.meta: flush_handlers
|
||||
15
immich-ansible/roles/nginx/tasks/install.yml
Normal file
15
immich-ansible/roles/nginx/tasks/install.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Installer Nginx et Certbot
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
name:
|
||||
- nginx
|
||||
- certbot
|
||||
- python3-certbot-nginx
|
||||
state: present
|
||||
|
||||
- name: Activer et démarrer Nginx
|
||||
ansible.builtin.service:
|
||||
name: nginx
|
||||
state: started
|
||||
enabled: true
|
||||
14
immich-ansible/roles/nginx/tasks/main.yml
Normal file
14
immich-ansible/roles/nginx/tasks/main.yml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
- name: Installer / mettre à jour Nginx et Certbot
|
||||
ansible.builtin.include_tasks:
|
||||
file: install.yml
|
||||
apply:
|
||||
tags: [nginx_update, nginx_config]
|
||||
tags: [nginx_update, nginx_config]
|
||||
|
||||
- name: Configurer Nginx pour Immich
|
||||
ansible.builtin.include_tasks:
|
||||
file: config.yml
|
||||
apply:
|
||||
tags: [nginx_config]
|
||||
tags: [nginx_config]
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# Configuration HTTP temporaire pour obtenir le certificat Let's Encrypt
|
||||
server {
|
||||
listen 80;
|
||||
server_name {{ immich_domain }};
|
||||
|
||||
client_max_body_size {{ immich_nginx_client_max_body_size | default('10G') }};
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:{{ immich_host_http_port }};
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_read_timeout 3600;
|
||||
proxy_send_timeout 3600;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
}
|
||||
41
immich-ansible/roles/nginx/templates/immich.https.conf.j2
Normal file
41
immich-ansible/roles/nginx/templates/immich.https.conf.j2
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# HTTP -> HTTPS
|
||||
server {
|
||||
listen 80;
|
||||
server_name {{ immich_domain }};
|
||||
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
# Immich HTTPS reverse proxy
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name {{ immich_domain }};
|
||||
|
||||
client_max_body_size {{ immich_nginx_client_max_body_size | default('10G') }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ immich_domain }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ immich_domain }}/privkey.pem;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_prefer_server_ciphers off;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 1d;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:{{ immich_host_http_port }};
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto https;
|
||||
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_read_timeout 3600;
|
||||
proxy_send_timeout 3600;
|
||||
proxy_request_buffering off;
|
||||
proxy_buffering off;
|
||||
}
|
||||
}
|
||||
14
immich-ansible/templates/.env.j2
Normal file
14
immich-ansible/templates/.env.j2
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Fichier généré par Ansible - ne pas modifier directement.
|
||||
|
||||
# Bibliothèque Immich : bind mount vers le partage NFS
|
||||
UPLOAD_LOCATION={{ immich_library_path }}
|
||||
|
||||
# Base PostgreSQL : volontairement locale, pas sur NFS
|
||||
DB_DATA_LOCATION={{ immich_postgres_data_path }}
|
||||
|
||||
TZ={{ server_timezone }}
|
||||
IMMICH_VERSION={{ immich_version }}
|
||||
|
||||
DB_PASSWORD={{ immich_db_password }}
|
||||
DB_USERNAME={{ immich_db_username }}
|
||||
DB_DATABASE_NAME={{ immich_db_database }}
|
||||
64
immich-ansible/templates/docker-compose.yml.j2
Normal file
64
immich-ansible/templates/docker-compose.yml.j2
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
name: immich
|
||||
|
||||
services:
|
||||
immich-server:
|
||||
image: "{{ immich_server_image }}:${IMMICH_VERSION:-{{ immich_version }}}"
|
||||
container_name: immich_server
|
||||
restart: always
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
- "${UPLOAD_LOCATION}:/data"
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "127.0.0.1:{{ immich_host_http_port }}:{{ immich_container_http_port }}"
|
||||
healthcheck:
|
||||
disable: false
|
||||
networks:
|
||||
- immich
|
||||
|
||||
immich-machine-learning:
|
||||
image: "{{ immich_machine_learning_image }}:${IMMICH_VERSION:-{{ immich_version }}}"
|
||||
container_name: immich_machine_learning
|
||||
restart: always
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
- "{{ immich_model_cache_path }}:/cache"
|
||||
healthcheck:
|
||||
disable: false
|
||||
networks:
|
||||
- immich
|
||||
|
||||
redis:
|
||||
image: "{{ immich_redis_image }}"
|
||||
container_name: immich_redis
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
networks:
|
||||
- immich
|
||||
|
||||
database:
|
||||
image: "{{ immich_postgres_image }}"
|
||||
container_name: immich_postgres
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
POSTGRES_INITDB_ARGS: "--data-checksums"
|
||||
volumes:
|
||||
- "${DB_DATA_LOCATION}:/var/lib/postgresql/data"
|
||||
shm_size: 128mb
|
||||
healthcheck:
|
||||
disable: false
|
||||
networks:
|
||||
- immich
|
||||
|
||||
networks:
|
||||
immich:
|
||||
name: immich
|
||||
Loading…
Add table
Add a link
Reference in a new issue