Servidor 16/17
Contenido
Cosas a preguntar
- ¿Accceso a cualquier sitio dentro de egc.us.es mediante clave? No supondría mucho trabajo usar la misma clave para todos
- Limitación de subdominios, Propuestas de mejora
- Mediante http://www.duckdns.org -> http://egc.duckdns.org
- Pedir cambio en el dns de la facultad (que resuelva los dominios *.egc.us.es como egc.us.es)
Próximos pasos
- Como desplegar proyectos tomcat en un docker que se genere automáticamente
- Como lanzar pruebas de un proyecto maven en un docker que se genere automáticamente
Aplicando seguridad a la máquina
Creación de usuarios y dando permisos sudo
Con el fin de securizar el sistema se creará un usuario distinto de root con permisos de sudo:
useradd -m -g users -G sudo,docker -s /bin/bash egcuser
y asignamos una clave:
passwd egcuser
Securizando SSH
Para ello lo más importante es cerrar el acceso para el usuario root con el fin de evitar que, con ataques de fuerza bruta, se consiga acceder puesto que ya se sabe el usuario con antelación.
Modificaremos el archivo /etc/ssh/sshd_config cambiando el siguiente valor:
PermitRootLogin no
Eliminación elementos innecesarios
Al encontrar elementos innecesarios se eliminaron (esta orden no se ejecuta directamente si no se va eliminado paquete a paquete):
yum groups remove gnome-desktop Xfce
yum remove xfce4-* xorg-x11* xfwm4* libreoffice* alsa-* pulseaudio-* gtk* adwaita-* desktop-file-utils* gnome-* cups-* anaconda-*
Ayudado por sudo yum list installed | less
NetworkManager ModemManager anaconda avahi bacula bluez bzip2 colord cracklib dejavu glib*
Con todo esto conseguí reducir el espacio ocupado a 4'5 G quedando libres 11 G. Inicialmente el espacio libre no llegaba a 2 G
Eliminar antiguos dockers
Se encontrarón imágenes antiguas que ocupaban espacio innecesario y se decidieron eliminar según lo indicado en esta fuente: http://blog.yohanliyanage.com/2015/05/docker-clean-up-after-yourself/
Uso básico docker
- Listart dockers: docker ps -a
- Listar imágenes locales: docker images
Despliegue continuo
La idea a seguir sería la plasmada en este artículo pero necesita modificaciones: https://blog.philipphauer.de/tutorial-continuous-delivery-with-docker-jenkins/
Idea inicial
- Desplegar proxy-inverso
- Desplegar Let's Encrypt
- ¿Desplegar registry?
- Desplegar jenkins master
- Configurar proyecto en jenkins (varios y tal)
-- Tras cada modificación --
- Desplegar dockers necesarios para pasar los tests
- Ejecutar scripts preparación dockers
- Pasar los tests
- Si los pasa, desplegar dockers de despliegue (docker beta)
- Ejecutar scripts preparación dockers
- Desplegar en dockers beta un war (que sea una copia del war así evitamos problemas mientras se lanzan test del anterior)
-- Para despliegue estable --
- Se despliegan los dockers estables
- Ejecutar scripts preparación dockers
- Desplegar en dockers estable un wat (que sea una copia del war del docker beta)
Posibilidades
- Es posible desplegar y eliminar contenedores desde dentro del contenedor jenkins.
Configuración jenkins master
Plugins
- docker-plugin -> https://github.com/jenkinsci/docker-plugin
- Deploy to container Plugin -> https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin
Configuración para usar docker-plugin
Para configurar dicho plugin habría que conectarse a "unix:///var/run/docker.sock" pero, puesto que existe algún fallo en java, este método no es posible. Por ello se ha tenido que habilitar un puerto al que conectarse. En el host crear el archivo y carpeta "/etc/systemd/system/docker.service.d/docker.conf" y añadir:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --tls=false -H tcp://192.168.20.84:4243 -H unix:///var/run/docker.sock
Posteriormente ejecutar "sudo systemctl daemon-reload" y "sudo systemctl restart docker" con el fin de que cargue la configuración.
Está configuración no es totalmente segura puesto que no requiere autenticación pero al limitarlo solo al equipo local el riesgo se minimiza aunque no se disipa.
(Fuente: https://docs.docker.com/engine/admin/#centos--red-hat-enterprise-linux--fedora)
Docker
- Administrar Jenkins > Configurar el sistema > Añadir una nueva nube (abajo) > Docker
- Docker Name: docker_on_localhost
- Docker URL: tcp://192.168.20.84:4243
- Probamos la configuración en el botón "test configuration" y anotamos correctamente el "Docker API Version"
- Connection Timeout: 5
- Read Timeout: 5
Otras herramientas
Varias sesiones con una misma conexión
Para ello usaremos el programa screen.
Uso básico:
- Conexión: screen -S tuSesion
- Reconexión: screen -R tuSesion
- Desconexión: [ctrl + A] + D
- Crear sesión virtual: [ctrl + A] + C
Editor de texto
El usado habitualmente es vim
Monitor del equipo
El usado habitualmente es htop
Espacio usado por las subcarpetas de la carpeta actual
sudo bash -c "du -shc --time *" | sort -h -r
Autocompletado en bash para comandos docker [no funciona]
curl -L https://raw.githubusercontent.com/docker/docker/$(docker version --short)/contrib/completion/bash/docker > /etc/bash_completion.d/docker
https://docs.docker.com/compose/completion/
Problemas encontrados
Uso de certificados
El contenedor daba problemas puesto que la máquina no es capaz de resolver su propio nombre. Esto era necesario puesto que antes de renovar el certificado comprueba que el dominio este en pie. La solución fue decirle que sus direcciones las resuelva como localhost.
(fuente: https://support.rackspace.com/how-to/centos-hostname-change/)
Plugin de Docker para Jenkins
Tiempo empleado
Alumno | Dia | Inicio | Fin | Acumulado | Motivo |
---|---|---|---|---|---|
Manuel López Ruiz | 28/10/2016 | 16:10 | 18:15 | 02:05 | Eliminación y securización máquina |
Manuel López Ruiz | 28/10/2016 | 21:35 | 22:00 | 02:30 | Eliminación y securización máquina |
Manuel López Ruiz | 29/10/2016 | 15:15 | 16:00 | 03:15 | Creación scripts Let's Enccryot y proxy inverso |
Manuel López Ruiz | 29/10/2016 | 16:30 | 17:35 | 04:10 | Prueba de contenedores y detección de errores |
Manuel López Ruiz | 30/10/2016 | 19:45 | 20:45 | 05:10 | Prueba compilación proyectos y prueba despliegue contenedores |
Manuel López Ruiz | 31/10/2016 | 07:30 | 08:20 | 06:00 | Búsqueda información lanzar pruebas en docker distinto a jenkins master |
Manuel López Ruiz | 31/10/2016 | 14:35 | 16:00 | 07:25 | Creación script "Acceptance-test-stage" |
Manuel López Ruiz | 31/10/2016 | 16:56 | 19:21 | 09:50 | Problema plugin docker-jenkins con la conexión docker.sock (NO SOLUCIONADO) |
Manuel López Ruiz | 31/10/2016 | 21:00 | 21:35 | 10:25 | Decisión cambio de plugin de docker a "Docker Slaves Plugin" (Dockins) |
Referencias
- http://christoph-burmeister.eu?p=2989
- https://www.wouterdanes.net/2014/04/11/continuous-integration-using-docker-maven-and-jenkins.html
- blog.philipphauer.de/tutorial-continuous-delivery-with-docker-jenkins/