En esta entrada vamos a instalar un servidor keycloak en producción, utilizando docker, mariadb y certbot
Los pasos que vamos a seguir son
- Genera un certificado para producción utilizando certbot
- Configura la red de docker y configura los contenedores.
- Instala el reverse proxy para tu servidor.
Genera un certificado para producción utilizando certbot
$ sudo certbot certonly -d tu.dominio.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 3
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for tu.dominio.com
Input the webroot for tu.dominio.com: (Enter 'c' to cancel): /var/www/html
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: pruebas@dominio.com).
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/tu.dominio.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/tu.dominio.com/privkey.pem
Your cert will expire on 2021-11-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Si no quieres utilizar certbot, puedes ocupara para crear el certificado openssl, solo que como no es emitido por una entidad certificadora, seguramente lo va a detectar como aprocrifo.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/tudominio-selfsigned.key -out /etc/ssl/certs/tudominio-selfsigned.crt
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Para que podamos leer la llave privada desde el servidor docker debemos de cambiarle los permisos para que se pueda leer.
Si lo hicimios con certbot
$ sudo chmod 644 /etc/letsencrypt/live/tu.dominio.com/privkey.pem
Si lo hicimos con openssl
$ sudo chmod 644 /etc/ssl/private/tudominio-selfsigned.key
Configura la red de docker
Esto lo vamos a ocupar para que sea vea el contenedor de keycloak y el de la base de datos.
$ docker network create keycloak-network
Instala una instancia de mariadb para almacenar la información
$ docker run -d --name mariadb \
--net keycloak-network \
-e MYSQL_ROOT_PASSWORD=root_p@assword \
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=p@ssword \
mariadb
Si ya tienes una instancia de mariadb en un contenedor docker solo debes de poner ponerla en la misma red de keycloak, con la sentencia
$ docker network connect mariadb
Donde mariadb es el nombre del contenedor de mariadb.
Descarga e instala la imagen de keycloak para producción.
$ docker run -it -d --name keycloak \
--net keycloak-network \
-p8080:8080 -p 8443:8443s \
-v /etc/ssl/certs/keycloak-selfsigned.crt:/etc/x509/https/tls.crt \
-v /etc/ssl/private/keycloak-selfsigned.key:/etc/x509/https/tls.key \
-e KEYCLOAK_USER=administrador \
-e KEYCLOAK_PASSWORD=p@ssword \
-e DB_VENDOR=mariadb \
-e DB_DATABASE=keycloak \
-e DB_USER=keycloak \
-e DB_PASSWORD=p@assworddb \
jboss/keycloak
donde
-v se indican el certificado y la llave privada para el keycloak.
Por último, si necesitamos reiniciar el servidor, debemos detener el contenedor, borrarlo y volverlo a construir
$ docker stop keycloak
$ docker rm keycloak