Accedi
Accedi

Come Installare Bitwarden con Docker

Come Installare Bitwarden con Docker
Hostman Team
Technical writer
Piattaforma Docker
07.11.2025
Reading time: 6 min

Bitwarden è un gestore di password gratuito e open source che archivia informazioni sensibili in un archivio crittografato. È sviluppato in C# utilizzando .NET Core e ASP.NET Core, e il suo database si basa su T-SQL/SQL Server.

Bitwarden è un servizio cloud accessibile tramite diverse applicazioni client, il che lo rende multipiattaforma: tramite web, app desktop (Windows, macOS, Linux), app mobili, estensioni per browser (Chrome, Firefox, Safari, Edge, Opera, Vivaldi, Brave, Tor) o tramite interfaccia a riga di comando (CLI).

Uno dei principali motivi per utilizzare Bitwarden è evitare i gestori di password di terze parti, dove i dati sensibili vengono archiviati su server esterni. Con Bitwarden puoi invece ospitare il servizio sul tuo server sicuro, mantenendo il pieno controllo dei tuoi dati.

Bitwarden è composto da un gruppo di container, ciascuno contenente un componente funzionale separato, come il database o il server web. Pertanto, per installare ed eseguire Bitwarden è necessario un sistema di containerizzazione, ovvero Docker.

Principali caratteristiche di Bitwarden

  • Open source

  • Basato sullo standard di crittografia AES a 256 bit

  • Supporto per l’autenticazione a due fattori (2FA)

  • Sistema di verifica e auditing delle password

  • Supporto per autenticazione biometrica

  • Possibilità di ospitare il server localmente

  • Applicazioni client multipiattaforma su tutti i principali sistemi operativi

Prerequisiti

Questa guida utilizza comandi per sistemi operativi di tipo UNIX, in particolare Debian/Ubuntu, spesso impiegati per il deploy di applicazioni server.

Prima di installare e configurare Bitwarden, assicurati che tutti i pacchetti di sistema siano aggiornati:

sudo apt update

sudo apt upgrade

Se il server è nuovo, installa alcuni strumenti di base:

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

Successivamente, assicurati di avere Docker e Docker Compose installati per gestire i container di Bitwarden.

Passaggio 1: Installare Docker e i suoi componenti

Aggiungi la chiave GPG ufficiale di Docker, utilizzata per firmare i pacchetti:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Aggiungi quindi il repository Docker per ottenere la versione più recente:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Aggiorna nuovamente il sistema:

sudo apt update

Infine, installa Docker e Docker Compose:

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose

Passaggio 2: Mettere in sicurezza l’installazione di Bitwarden

Per migliorare la sicurezza, crea un utente dedicato con permessi limitati.

Crea la directory per Bitwarden:

sudo mkdir /opt/bitwarden

Crea l’utente:

sudo adduser bitwarden

Assegna i permessi corretti alla directory:

sudo chmod -R 700 /opt/bitwarden

sudo chown -R bitwarden:bitwarden /opt/bitwarden

Consenti all’utente Bitwarden di eseguire comandi Docker:

sudo usermod -aG docker bitwarden

Passa all’utente Bitwarden e spostati nella directory di installazione:

su bitwarden

cd /opt/bitwarden

Passaggio 3: Installare Bitwarden in Docker e avviare il server

Anche se non hai esperienza con Docker, gli sviluppatori di Bitwarden hanno fornito uno script di installazione automatizzato.

Scaricalo e rendilo eseguibile:

curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh

Esegui lo script:

./bitwarden.sh install

Durante l’installazione, ti verranno richieste diverse informazioni, come:

  • Il nome di dominio per il tuo server Bitwarden

  • Il nome del database

  • Se desideri utilizzare Let’s Encrypt per ottenere un certificato SSL gratuito

Ti verrà inoltre richiesto di inserire un ID di installazione e una chiave, che puoi generare sul sito ufficiale di Bitwarden.

Passaggio 4: Configurare il server SMTP

Sebbene opzionale, è consigliato configurare un server SMTP per gestire i messaggi di login e amministrazione. Modifica il file ./bwdata/env/global.override.env e aggiungi i seguenti parametri:

globalSettings__mail__smtp__host=smtp.gmail.com

globalSettings__mail__smtp__port=587

globalSettings__mail__smtp__ssl=true

globalSettings__mail__smtp__username=tuo_email@gmail.com

globalSettings__mail__smtp__password=tua_password

adminSettings__admins=tuo_email@gmail.com

Se conosci già Docker, puoi usare un server email containerizzato come docker-mailserver, ottimo per questo tipo di configurazione. In alternativa, puoi utilizzare un server pubblico come Gmail (anche se è meno sicuro):

globalSettings__mail__replyToEmail=tuo_email@gmail.com

globalSettings__mail__smtp__host=smtp.gmail.com

globalSettings__mail__smtp__username=tuo_email

globalSettings__mail__smtp__password=tua_password

globalSettings__mail__smtp__ssl=true

globalSettings__mail__smtp__port=587

globalSettings__mail__smtp__useDefaultCredentials=false

globalSettings__disableUserRegistration=true

Dopo la configurazione, Bitwarden invierà notifiche tramite il tuo account Gmail. Assicurati di attivare l’opzione “consenti app meno sicure” nel tuo account, altrimenti Google bloccherà la connessione.

Se utilizzi un altro servizio di posta, consulta i suoi parametri SMTP (host, porta, SSL, ecc.) e impostali in modo analogo. Se i messaggi non vengono inviati correttamente, utilizza un verificatore SMTP online per testare e regolare la configurazione.

Passaggio 5: Avviare il server e verificarne il funzionamento

Avvia il server utilizzando lo stesso script:

./bitwarden.sh start

Apri un browser e accedi al server tramite il suo IP o dominio. Per aprire il pannello di amministrazione, aggiungi /admin all’URL.

La pagina ti chiederà l’indirizzo email impostato nel file global.override.env. Il server SMTP invierà un link di accesso senza password a quell’indirizzo.

Da qui, puoi utilizzare qualsiasi client Bitwarden (desktop, web o mobile) per connetterti al tuo server e gestire in modo sicuro le tue credenziali.

Arrestare e rimuovere il server

Se si verificano problemi o desideri reinstallare Bitwarden, arresta completamente il servizio:

./bitwarden.sh stop

Elimina la directory dei dati:

rm -r ~/bwdata

E reinstalla se necessario:

./bitwarden.sh install

Conclusione

L’installazione di Bitwarden è semplice, grazie allo script automatizzato fornito dagli sviluppatori. Una volta configurato, puoi proteggere i tuoi dati sensibili con questo potente gestore di password, utilizzando DNS, SSL e SMTP a seconda delle tue esigenze. Per ulteriori dettagli e suggerimenti pratici, consulta la documentazione ufficiale di Bitwarden.

Piattaforma Docker
07.11.2025
Reading time: 6 min

Simili

Piattaforma Docker

Configurazione di registri Docker esterni

Quando si lavora con Docker, si utilizzano delle immagini — file eseguibili che contengono tutto ciò che serve per eseguire un’applicazione, inclusi il codice sorgente, le librerie e le dipendenze. Queste immagini vengono archiviate in repository specializzati chiamati registri, che possono essere privati o pubblici. Il registro pubblico più conosciuto è Docker Hub, dove è possibile trovare molte immagini ufficiali come Nginx, PostgreSQL, Alpine, Ubuntu, Node e MongoDB. Gli utenti possono registrarsi su Docker Hub e archiviare le proprie immagini — per impostazione predefinita, con un registro pubblico e tre registri privati. Docker Hub è il registro predefinito che Docker utilizza per scaricare (pull) le immagini. Questa guida spiega come modificare il registro predefinito di Docker e utilizzare un registro alternativo. Utilizzare registri Docker esterni Un modo semplice per usare registri esterni è sfruttare quelli offerti da fornitori terzi come Google o Amazon. Ecco un elenco di registri pubblici che puoi utilizzare: URL del registro Proprietario https://mirror.gcr.io Google https://public.ecr.aws Amazon https://quay.io Red Hat https://registry.access.redhat.com Red Hat https://registry.redhat.io Red Hat ⚠️ Nota: l’utilizzo di registri Docker esterni può comportare rischi per la sicurezza. Procedi con cautela. Di seguito troverai i passaggi per sostituire Docker Hub con un altro registro predefinito. Configurazione su Linux Apri il file daemon.json con un editor di testo.  Se Docker è installato in modalità non rootless, il file si trova in: /etc/docker/daemon.json Se il file non esiste, crealo con: nano /etc/docker/daemon.json Per Docker in modalità rootless, il file si trova nella directory personale dell’utente: ~/.config/docker/daemon.json Crealo se necessario: nano ~/.config/docker/daemon.json Aggiungi il seguente parametro per impostare un nuovo registro predefinito (in questo esempio, il mirror di Google): {   "registry-mirrors": ["https://mirror.gcr.io"] } Salva e chiudi il file. Riavvia poi il servizio Docker per applicare le modifiche: systemctl reload docker Da questo momento, Docker utilizzerà il nuovo registro per scaricare le immagini. Ad esempio, per scaricare l’immagine Alpine dal registro di Google: docker pull mirror.gcr.io/alpine Puoi anche specificare una versione precisa, ad esempio: docker pull mirror.gcr.io/nginx:1.25.2 Configurazione su Windows (Docker Desktop) Apri il file daemon.json, che si trova in: C:\Users\<tuo_nome_utente>\.docker\daemon.json Aggiungi il parametro: {   "registry-mirrors": ["https://mirror.gcr.io"] } Salva il file e riavvia Docker. Fai clic con il tasto destro sull’icona di Docker nella barra delle applicazioni e seleziona Restart. Puoi anche configurare il registro tramite l’interfaccia di Docker Desktop:vai su Settings → Docker Engine e aggiungi: {   "registry-mirrors": ["https://mirror.gcr.io"] } Clicca su Apply & Restart per salvare e applicare le modifiche. Dopo il riavvio, Docker utilizzerà il nuovo registro per i download.Ad esempio, per scaricare un’immagine curl: docker pull mirror.gcr.io/curlimages/curl Oppure per scaricare una versione specifica: docker pull mirror.gcr.io/node:21-alpine Utilizzare Nexus come registro Docker È anche possibile utilizzare Nexus per gestire le immagini Docker. Nexus supporta repository proxy, che memorizzano nella cache le immagini scaricate da registri esterni come Docker Hub. In questo modo Nexus può agire come registro proxy di caching, utile quando i registri esterni non sono disponibili. Configurare un repository proxy in Nexus Accedi a Nexus come amministratore o come utente con diritti di creazione repository. Vai su Server Administration and Configuration → Repositories. Clicca su Create repository e scegli il tipo docker (proxy). Compila i campi richiesti: Name: assegna un nome univoco al repository. Online: lascia selezionata questa opzione per mantenerlo attivo. Proxy server: se Nexus è dietro un proxy (ad esempio Nginx), non serve impostare porte di autenticazione.In caso contrario, assegna una porta unica per HTTP o HTTPS. Allow anonymous docker pull: se abilitato, sarà possibile scaricare immagini senza autenticazione.Se disattivato, sarà necessario eseguire il login prima del pull. Remote storage: specifica l’URL del registro esterno (es. https://registry-1.docker.io per Docker Hub). Dopo aver creato il repository, accedi (se richiesto) con: docker login <indirizzo_registro_nexus> Per scaricare un’immagine: docker pull <indirizzo_registro_nexus>/nome_immagine:tag Esempio: scaricare un’immagine Python con tag 3.8.19-alpine: docker pull nexus-repo.com/python:3.8.19-alpine ⚠️ Suggerimento di sicurezza: evita di utilizzare il tag latest, poiché potrebbe contenere bug o vulnerabilità. Conclusione In questo articolo abbiamo esaminato diversi metodi per scaricare e archiviare immagini Docker. L’uso di registri esterni può essere utile quando Docker Hub non è disponibile. Se non ti fidi dei registri pubblici, puoi sempre configurare un registro Docker privato o pubblico autonomamente, ad esempio con Nexus o Harbor.
05 November 2025 · 5 min to read
Piattaforma Docker

Eseguire Selenium con Chrome in Docker

A volte è utile lavorare con Selenium in Python all’interno di un container Docker. Questo solleva alcune domande sui vantaggi di questa configurazione, sulla compatibilità tra ChromeDriver e Chromium, e sui dettagli della loro implementazione. In questo articolo analizzeremo i punti fondamentali e forniremo soluzioni ai problemi più comuni. Perché eseguire Selenium in Docker? Eseguire Selenium in un container offre diversi vantaggi: 🧩 Portabilità – L’ambiente può essere facilmente trasferito tra diverse macchine, evitando conflitti di versione e dipendenze specifiche del sistema operativo. 🧱 Isolamento – Il container Selenium può essere aggiornato o sostituito rapidamente senza influire su altri componenti del server. ⚙️ Compatibilità CI/CD – Selenium containerizzato si integra perfettamente nelle pipeline CI/CD, permettendo di creare un ambiente di test pulito ogni volta che vengono eseguite le verifiche automatiche. Preparare un server Ubuntu per Selenium con Docker Prima di iniziare, assicurati che Docker e Docker Compose siano installati: docker --version && docker compose version 💡 In alcune versioni, il comando si scrive docker-compose (con trattino) invece di docker compose. Se gli strumenti sono installati, verranno visualizzate le versioni. In caso contrario, segui la guida di installazione per aggiungerli al sistema. Esempio: Selenium in Docker Quando si implementa Selenium all’interno di container Docker, è importante considerare: l’architettura dell’host, i requisiti funzionali, e le prestazioni. Le immagini ufficiali selenium/standalone-* sono progettate per CPU AMD64 (x86_64), mentre seleniarm/standalone-* sono ottimizzate per architetture ARM (come Apple Silicon o server ARM64). Crea un file docker-compose.yml nella directory principale del progetto: version: "3" services: app: build: . restart: always volumes: - .:/app depends_on: - selenium platform: linux/amd64 selenium: image: selenium/standalone-chromium:latest # For AMD64 # image: seleniarm/standalone-chromium:latest # For ARM64 container_name: selenium-container restart: unless-stopped shm_size: 2g ports: - "4444:4444" # Selenium WebDriver API - "7900:7900" # VNC Viewer environment: - SE_NODE_MAX_SESSIONS=1 - SE_NODE_OVERRIDE_MAX_SESSIONS=true - SE_NODE_SESSION_TIMEOUT=300 - SE_NODE_GRID_URL=http://localhost:4444 - SE_NODE_DETECT_DRIVERS=false Scegli l’immagine corretta per la tua architettura commentando o decommentando la riga appropriata. Il servizio app eseguirà il codice Python principale. Definiscilo in un Dockerfile come segue: # Use a minimal Python image FROM python:3.11-slim # Set working directory WORKDIR /app # Install Python dependencies COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt # Copy project files COPY . /app/ # Set environment variables (Chromium is in a separate container) ENV SELENIUM_REMOTE_URL="http://selenium:4444/wd/hub" # Run Python script CMD ["python", "main.py"] Questo Dockerfile utilizza una base Python leggera e installa automaticamente le dipendenze richieste. Script principale (main.py) import time # Used to create a delay for checking browser functionality import os from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options # WebDriver settings chrome_options = Options() chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--disable-webrtc") chrome_options.add_argument("--hide-scrollbars") chrome_options.add_argument("--disable-notifications") chrome_options.add_argument("--start-maximized") SELENIUM_REMOTE_URL = os.getenv("SELENIUM_REMOTE_URL", "http://selenium:4444/wd/hub") driver = webdriver.Remote( command_executor=SELENIUM_REMOTE_URL, options=chrome_options ) # Open a test page driver.get("https://www.hostman.com") time.sleep(9999) # Shut down WebDriver driver.quit() requirements.txt attrs==25.1.0 certifi==2025.1.31 h11==0.14.0 idna==3.10 outcome==1.3.0.post0 PySocks==1.7.1 selenium==4.28.1 sniffio==1.3.1 sortedcontainers==2.4.0 trio==0.28.0 trio-websocket==0.11.1 typing_extensions==4.12.2 urllib3==2.3.0 websocket-client==1.8.0 wsproto==1.2.0 Avvio dei container Avvia i container con: docker compose up -d Docker costruirà e avvierà i container in background. Verifica lo stato con: docker compose ps Se entrambi i container risultano attivi, l’ambiente è stato avviato correttamente. Puoi ora utilizzare Selenium per interagire con i siti web. Debug di Selenium in Docker tramite VNC Nelle immagini ufficiali di Selenium (come selenium/standalone-chrome o seleniarm/standalone-chromium), l’accesso diretto al Chrome DevTools Protocol (CDP) viene gestito da Selenium Grid. Ogni sessione crea una nuova porta WebSocket, impedendo l’accesso esterno diretto. Le opzioni come --remote-debugging-port=9229 vengono ignorate o sovrascritte. Per questo motivo, queste immagini includono un server VNC (Virtual Network Computing) integrato, simile a TeamViewer o AnyDesk. ⚠️ La modalità headless deve essere disattivata, poiché il VNC trasmette lo schermo reale, e senza interfaccia visiva non verrà mostrato nulla. Accedi all’interfaccia web VNC su: http://<server_ip>:7900 Alla connessione verrà richiesta una password. Per crearla, accedi al container Selenium: docker exec -it selenium-container bash x11vnc -storepasswd Inserisci e conferma la password. Successivamente, utilizza la password nella pagina VNC per accedere al browser controllato da Selenium. Da qui puoi aprire DevTools, ispezionare elementi DOM o analizzare le richieste di rete. Conclusione Eseguire Selenium in container Docker semplifica la portabilità dell’ambiente e riduce i conflitti di versione tra strumenti. Inoltre, consente di eseguire il debug visivo tramite VNC quando necessario. Ricorda di: scegliere l’immagine corretta in base all’architettura (AMD64 o ARM64); disattivare la modalità headless se desideri visualizzare l’interfaccia grafica. Questa configurazione fornisce un’infrastruttura di test flessibile, stabile e facilmente integrabile nelle pipeline CI/CD, ottimizzando i flussi di lavoro di test automatizzati con Selenium.
30 October 2025 · 6 min to read

Hai domande,
commenti o dubbi?

I nostri professionisti sono disponibili per assisterti in ogni momento,
che tu abbia bisogno di aiuto o non sappia da dove iniziare.
Inviaci un'email
Hostman's Support