Los certificados https son requeridos cada dia mas por mas servicios. Aqui os dejo un par de imagenes docker que con una simple pipeline y un dns publico podemos crear certificados por los dominios que usemos. Lo bueno que tiene el poder crear certificados standalone es que una vez exportados ya podemos integrados en una red interna donde controlemos tambien el dns o en servicios publicos pero que no usen el puertos 80, como por ejemplo un servidor mail.
Ahora que tengo un jenkins y una pipline que me almacena los certificados, crearlos y almacenarlos es mas facil que nunca.
Lo primero que tenemos que hacer es tener un servidor con ip publica y los puertos 80 y 8080 con docker instalado.
Lo sigueinte es pulear la imagen jenkins de mi repositorio, es un poco especial por lo que os advierto que esto no se puede hacer con la imagen de jenkins oficial de docker.
docker pull akaronte/jenkins-docker
Una vez descargado arrancamos el contenedor
docker run --name jenkins-docker -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -d akaronte/jenkins-docker
Entramos al contenedor para obtener la clave de inicio de jenkins e instalamos los plugins recomendados.
docker exec -ti -u root jenkins-docker bash cat /var/jenkins_home/secrets/initialAdminPassword
La copiamos y nos vamos al puerto 8080 del servidor en el navegador
Ademas de los plugins standar tenemos que añadir los plugins docker y docker pipeline
Una vez instalados los plugins creamos una nueva pipeline con dos parametos «mail» y «domain»
Y ya solo nos queda poner el nuestro mail y el dominio del que queremos generar certificados, obviamente la dns tiene que estar apuntando a la ip del servidor donde estemos corriendo nuestro contenedor jenkins.
https://hub.docker.com/r/akaronte/jenkins-docker
https://github.com/Akaronte/letsEncrypt-o-matik
pipeline { agent any parameters { string(name: 'domain', defaultValue: '', description: 'hostname') string(name: 'mail', defaultValue: '', description: 'mail') } stages { stage('Docker pull') { steps { sh "docker pull akaronte/certbot" } } stage('Run certbot') { agent { docker { image 'akaronte/certbot' args "-u root -p 80:80 -v ${WORKSPACE}:/mnt" } } steps { sh """ /usr/sbin/nginx certbot certonly --email ${params.mail} --agree-tos --non-interactive --webroot -w "/var/www/html" -d ${params.domain} cp -r /etc/letsencrypt/archive/${params.domain}/* ${WORKSPACE} cd ${WORKSPACE} ls chmod -R 666 * cp fullchain1.pem ${params.domain}.crt cp fullchain1.pem ${params.domain}.crt.remove cp privkey1.pem ${params.domain}.key """ archiveArtifacts artifacts: '*.pem' archiveArtifacts artifacts: '*.crt' archiveArtifacts artifacts: '*.crt.remove' archiveArtifacts artifacts: '*.key' } } } post{ cleanup { echo "CLEAN" cleanWs() } } }
Para descar el .ctr y el .key desde linux
curl -u "user":"pass" http://kluster.tk:8080/job/lets-encrypt-o-matik/lastSuccessfulBuild/artifact/kluster.cf.crt --output kluster.cf.crt curl -u "user":"pass" http://kluster.tk:8080/job/lets-encrypt-o-matik/lastSuccessfulBuild/artifact/kluster.cf.key --output kluster.cf.key
Cambiar el nombres del job y el dominio que useis.
0 comentarios