Pocket-ID: Installation Bare-metal sur Debian
AprĂšs avoir utilisĂ© PocketID pendant de nombreux mois via une installation dans un LXC avec les Proxmox Helper Scripts, jâai constatĂ© que le service tourne en tant que root. De plus, jâai lu quâune installation dans une VM sâavĂšre davantage sĂ©curisĂ©e quâun LXC.
Présentation de Pocket-ID
Avant toute chose, si vous ne connaissez pas Pocket-ID, câest un client OIDC moderne et lĂ©ger pour gĂ©rer lâauthentification de vos services tels quâAuthentific, Aurelia, etc. Sa particularitĂ© est quâil ne prend en charge que les passkeys. Je lâutilise avec de nombreux services auto-hĂ©bergĂ©s tels que Proxmox, Proxmox Backup Server, Komodo, Betszel, Karakeep, et Ă©videmment Headscale/Headplane. Pour davantage de dĂ©tails, le site officiel rĂ©pondra sĂ»rement Ă beaucoup de vos questions. Si une installation via Docker est plus adaptĂ©e Ă votre environnement, je vous invite Ă visiter lâexcellent billet de BlackVoid en anglais. Il dĂ©taille Ă©galement la configuration pour utiliser Pocket-ID afin de se connecter Ă Synology DSM.
Préamble
Ătant donnĂ© que je ne manque pas de mĂ©moire sur mon nĆud Proxmox et que je suis trĂšs attentif au niveau de sĂ©curitĂ© de mon homelab, je me suis lancĂ© dans lâinstallation dâune VM. Cela a Ă©tĂ© laborieux, car jusquâĂ la version 0.53, il y avait deux services, de nombreuses dĂ©pendances et des compilations nĂ©cessaires. MalgrĂ© les nombreux obstacles, jâai rĂ©ussi ma mission ! Puis, quelques heures aprĂšs, sans avoir mĂȘme eu le temps de savourer ma petite victoire, la version 1.0 est sortie. Cette rĂ©vision majeure simplifie grandement les choses, car câest un exĂ©cutable. Voici la procĂ©dure pour une installation simplifiĂ©e en tant que service avec un utilisateur non root dans une VM Debian de Proxmox. Cette procĂ©dure devrait pouvoir sâadapter relativement facilement Ă dâautres types de configurations. Il existe beaucoup dâautres mĂ©thodes pour installer Pocket-ID, je vous invite Ă consulter la page âinstallationâ sur du site de Pocket-ID.
Préparation de la VM dans Proxmox
Si vous ĂȘtes dans Proxmox, je vous invite Ă installer une VM Debian en utilisant les Proxmox Helper Scripts. Il est Ă©galement possible de le faire avec une Alpine plus lĂ©gĂšre, mais je ne me suis pas encore lancĂ© dans cette aventure. Choisir le mode mode advanced et ajuste pour votre situation et changer le nom du host Ă âpocketidâ.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/debian-vm.sh)"
QEMU
Il est recommandĂ© dâinstaller lâagent invitĂ© QEMU sur votre machine virtuelle. Vous pouvez suivre ces Ă©tapes dans la console Proxmox de la machine virtuelle.
Mettre Ă jour la liste des paquets :
sudo apt update && sudo apt upgrade -y
Installer le paquet Proxmox QEMU Guest Agent :
sudo apt install qemu-guest-agent -y
Démarrer et activer le service :
sudo systemctl start qemu-guest-agentsudo systemctl enable emu-guest-agent
VĂ©rifier que le service est en cours dâexĂ©cution
sudo systemctl status qemu-guest-agent
Cela garantira que lâagent invitĂ© Proxmox QEMU est correctement installĂ© et exĂ©cutĂ© sur votre systĂšme Debian.
Installation de Pocket-ID
Préparation du systÚme
apt update && apt upgrade -y
Créer un utilisateur dédié
useradd -r -s /bin/false -m -d /opt/pocket-id pocketid
Installer les dĂ©pendances nĂ©cessaires Ă lâinstallation
apt install -y curl
Téléchargement et Installation de PocketID
cd /opt/pocket-idARCH="amd64"LATEST_RELEASE_URL=$(curl -s https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "browser_download_url.*pocket-id-linux-${ARCH}" | cut -d '"' -f 4)sudo curl -L -o pocket-id "${LATEST_RELEASE_URL}"sudo chmod +x pocket-idsudo chown pocketid:pocketid pocket-id
Création des répertoires pour les données de Pocket-ID
sudo mkdir -p /opt/pocket-id/data/uploads
Fichier de configuration de Pocket-ID. Pour obtenir la localisation des adresses IP des visiteurs, je vous invite à créer une clé API sur le site de Maxmind.
sudo nano /opt/pocket-id/.env
APP_URL=https://id.xxxx.xxPORT=1411# Database: SQLite, file located at /opt/pocket-id/data/db.sqlite# (relative to WorkingDirectory=/opt/pocket-id)DB_CONNECTION_STRING=file:data/db.sqlite?_journal_mode=WAL&_busy_timeout=2500&_txlock=immediate# Optional: Maxmind License Key for IP GeolocationMAXMIND_LICENSE_KEY="YOUR-MAXMIND-LICENSE-KEY"# Optional: Logging level (debug, info, warn, error)LOG_LEVEL=info
Assurez-vous que tous les fichiers de pocket-ID soient avec les bonnes permissions dâutilisateur.
sudo chown pocketid:pocketid /opt/pocket-id/.envsudo chmod 600 /opt/pocket-id/.env
Mise en place du service Pocket-ID
sudo nano /etc/systemd/system/pocketid.service
[Unit]Description=Pocket ID Application ServerAfter=network.target[Service]Type=simpleUser=pocketidGroup=pocketidWorkingDirectory=/opt/pocket-idExecStart=/opt/pocket-id/pocket-idEnvironmentFile=/opt/pocket-id/.envRestart=alwaysRestartSec=10NoNewPrivileges=truePrivateTmp=true[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable pocketid.servicesudo systemctl start pocketid.servicesudo systemctl status pocketid.service
Si tout se passe comme prévu, vous devriez recevoir une confirmation.
â pocketid.service - Pocket ID Application Server Loaded: loaded (/etc/systemd/system/pocketid.service; enabled; preset: enabled) Active: active (running) since Sun 2025-06-01 07:12:57 EDT; 7s ago Main PID: 28699 (pocket-id) Tasks: 8 (limit: 2309) Memory: 8.7M CPU: 65ms CGroup: /system.slice/pocketid.service ââ28699 /opt/pocket-id/pocket-idJun 01 07:12:57 pocketid systemd[1]: Started pocketid.service - Pocket ID Application Server.Jun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 Starting job schedulerJun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 Server listening on 0.0.0.0:1411Jun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 GeoLite2 City database is up-to-dateJun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 Job "UpdateGeoLiteDB" run successfullyJun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 Job "SyncLdap" run successfullyJun 01 07:12:57 pocketid pocket-id[28699]: 2025/06/01 07:12:57 Job "SendHeartbeat" run successfully
Reverse Proxy avec Caddy
Voici mon Caddyfile avec le fichier /robots.txt au cas oĂč il serait respectĂ© (câest beau de rĂȘver).
# Snippet for robots.txt(common_robots_txt) {handle /robots.txt {# Set the Content-Type headerheader Content-Type "text/plain; charset=utf-8"# Respond with the body and status code 200respond `User-agent: *Disallow: /` 200}}# Pocket-IDid.xxxx.xx {import common_robots_txt# Fallback to reverse proxy for other requestsreverse_proxy 192.168.x.yyy:1411 [xxxx:xxxx:xxxx:xxxx::yyyy]:1411}
systemctl reload caddy.service
Pour la premiÚre configuration de votre instance Pocket-ID, je vous invite à créer votre compte administrateur sur https://id.xxxx.xx/login/setup
. Il est trĂšs fortement encouragĂ© dâavoir deux passkeys vu que câest la seule maniĂšre dâauthentification. Jâen ai une dans Bitwarden/Vaultwarden et une autre dans le trousseau iCloud (via Safari).
Mise Ă jour
Puisque nous ne sommes pas dans Docker, la mise Ă jour peut ĂȘtre un peu plus compliquĂ©e. Cependant, rien dâinsurmontable, surtout depuis la version 1.0 dĂ©jĂ compilĂ©e. Voici un petit script de mise Ă jour qui mâa permis de passer de la version 1.0 Ă 1.1.0 sans encombre.
nano /root/update-pocketid.sh
#!/bin/bash# update-pocketid.sh# --- Configuration ---INSTALL_DIR="/opt/pocket-id"SERVICE_NAME="pocketid.service"USER="pocketid"GROUP="pocketid"VERSION_FILE="${INSTALL_DIR}/version.txt" ARCHITECTURE="amd64" # Change if needed (e.g., arm64)# --- End Configuration ---echo "Checking for the latest version of PocketID..."LATEST_TAG_JSON=$(curl -s https://api.github.com/repos/pocket-id/pocket-id/releases/latest)LATEST_TAG=$(echo "$LATEST_TAG_JSON" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') # Version without 'v'LATEST_TAG_WITH_V=$(echo "$LATEST_TAG_JSON" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') # Version with 'v'if [ -z "$LATEST_TAG" ]; then echo "Could not retrieve the latest version from GitHub." exit 1fiecho "Latest version available: v${LATEST_TAG}"CURRENT_VERSION="0" # Default to 0 if no version fileif [ -f "$VERSION_FILE" ]; then CURRENT_VERSION=$(cat "$VERSION_FILE")fiecho "Currently installed version: v${CURRENT_VERSION}"if [ "$LATEST_TAG" = "$CURRENT_VERSION" ]; then echo "PocketID is already up to date (v${CURRENT_VERSION})." exit 0fiecho "New version v${LATEST_TAG} available. Updating..."DOWNLOAD_URL=$(echo "$LATEST_TAG_JSON" | grep -E "browser_download_url.*pocket-id-linux-${ARCHITECTURE}" | cut -d '"' -f 4)if [ -z "$DOWNLOAD_URL" ]; then echo "Could not find the download URL for linux-${ARCHITECTURE} and version v${LATEST_TAG}." exit 1fiecho "Stopping service ${SERVICE_NAME}..."sudo systemctl stop "${SERVICE_NAME}"echo "Backing up the old binary..."BACKUP_NAME="pocket-id_backup_v${CURRENT_VERSION}_$(date +%Y%m%d_%H%M%S)"sudo cp "${INSTALL_DIR}/pocket-id" "${INSTALL_DIR}/${BACKUP_NAME}"echo "Old binary backed up to ${INSTALL_DIR}/${BACKUP_NAME}"
Rendre le script exécutable
sudo chmod +x /root/update-pocketid.sh
Jâai ajoutĂ© dans mes alias.
alias update='/root/update-pocketid.sh'
Pensez Ă faire une mise Ă jour du systĂšme avant celle de Pocket-ID.
sudo apt update && sudo apt upgrade -y
Si vous utilisez Proxmox, je vous encourage à faire un snapshot juste avant la mise à jour et à avoir des sauvegardes réguliÚres (on ne sait jamais :-).
Conclusion
Vous ĂȘtes maintenant prĂȘt a entrer dans le futur avec OIDC et Passkey. Vous pouvez visiter la page Exemples de clients pour configurer facilement vos services avec Pocket-ID. Je vous souhaite un bon voyage dans le monde captivant de lâauto-hĂ©bergement !