Installazione OpenProject con Docker

Breve post per tenere traccia di come installare OpenProject sul proprio server usando Docker e NGINX come reverse proxy.

Per prima cosa si crea una cartella di lavoro, con due sottocartelle vuote: assets e pgdata. Nella cartella di lavoro si crea un file, chiamiamolo run.sh, con questo contenuto:

docker run -d -p 1000:80 --name openproject \
  -e SERVER_HOSTNAME=miohost.it \
  -e SECRET_KEY_BASE=***************************** \
  -v /apps/openproject/pgdata:/var/openproject/pgdata \
  -v /apps/openproject/assets:/var/openproject/assets \
  -e OPENPROJECT_RAILS__RELATIVE__URL__ROOT=/openproject \
  -e OPENPROJECT_RAILS__FORCE__SSL=true \
  openproject/community:12

Una volta creato il file lo rendiamo eseguibile con:

chmod +x run.sh

Il comando qui sopra istruisce Docker su come eseguire l'immagine di OpenProject, versione community 12. Il server_hostname deve contenere il dominio del server. La secret_key_base è una stringa casuale da generare al momento, ad esempio con questo comando:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''

I due comandi -v specificano la mappatura locale delle directory interne dell'immagine. È necessario che la parte sinistra del comando indichi il percorso assoluto delle cartelle create in precedenza. Il comando OPENPROJECT...ROOT specifica che l'applicazione è esposta su una sottodirectory del dominio, una cosa del tipo: www.miosito.it/openproject.

Dal comando sopra si evince che abbiamo esposto la porta 80 dell'applicazione sulla porta 1000 del nostro server (una porta qualsiasi va bene purchè non sia già in uso). Per esporre questa porta all'esterno in una sottodirectory del nostro dominio dobbiamo modificare il file di configurazione di Nginx aggiungendo questa sezione:

location /openproject/ {
  proxy_pass http://localhost:1000;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
}

A questo punto dobbiamo riavviare Nginx:

sudo service nginx restart

Ora possiamo avviare il nostro container eseguendo il file che abbiamo creato prima. Il primo avvio richiede qualche minuto, durante il quale possiamo monitorare la situazione con il solito comando

docker stats

Dopo qualche minuto OpenProject dovrebbe essere disponibile all'indirizzo desiderato. Se vogliamo fermare l'immagina usiamo il solito comando:

docker stop openproject
# per eliminare l'immagina
docker rm openproject

Al primo accesso con l'utente admin (password: admin) verrà richiesto di cambiare la password.