bookmark_borderInstalar servidor NGINX en Ubuntu Server 22.04

Instala desde el repositorio de Ubuntu

  • Instala desde el repositorio de Ubuntu
sudo apt update
sudo apt install nginx
  • Actualiza el firewall
sudo ufw app list
sudo ufw allow 'Nginx FULL'
sudo ufw status
  • Verifica que se haya instalado el servidor correctamente
sudo systemctl status nginx
http://mi_servidor
  • Actualiza los server blocks
sudo mkdir -p /var/www/mi_nuevo_dominio/html
sudo chown -R $USER:$USER /var/www/mi_nuevo_dominio/html
sudo chmod -R 755 /var/www/mi_nuevo_dominio
sudo nano /var/www/mi_nuevo_dominio/html/index.html
sudo nano /etc/nginx/sites-available/mi_nuevo_dominio

Crea el index.html con la siguiente plantilla que despues deberás cambiar

<html>
    <head>
        <title>Bienvenido a mi_nuevo_dominio!</title>
    </head>
    <body>
        <h1>Perfect!  El server block de mi_nuevo_dominio esta trabajando!</h1>
    </body>
</html>

Crea el archivo de configuración para tu nuevo dominio con la siguiente plantilla, esta la uso para aplicación SPA (Angular, React) ya que todo el redireccionamiento se hace del lado de cliente.

server {
        listen 80;
        listen [::]:80;

        root /var/www/mi_nuevo_dominio/html;
        index index.html index.htm index.nginx-debian.html;

        server_name mi_nuevo_dominio www.mi_nuevo_dominio;

        location / {
            index index.html;
            try_files $uri $uri/ /index.html =404;
        }
}
  • Familiarizate con los archivos y directorios mas importantes de NGINX
    • Contenido. Los sitios se almacenan en /var/www/, cada sitio se almacena en un directorio diferente y el sitio por default se almacena en /var/www/html
    • Configuración.
      • /etc/nginx: Directorio de configuración del servidor Nginx. Todos los archivos de configuración de Nginx se encuentran aqui.
      • /etc/nginx/nginx.conf: The main Nginx configuration file. This can be modified to make changes to the Nginx global configuration.
      • /etc/nginx/sites-available/: The directory where per-site server blocks can be stored. Nginx will not use the configuration files found in this directory unless they are linked to the sites-enabled directory. Typically, all server block configuration is done in this directory, and then enabled by linking to the other directory.
      • /etc/nginx/sites-enabled/: The directory where enabled per-site server blocks are stored. Typically, these are created by linking to configuration files found in the sites-available directory.
      • /etc/nginx/snippets: This directory contains configuration fragments that can be included elsewhere in the Nginx configuration. Potentially repeatable configuration segments are good candidates for refactoring into snippets.
    • Logs
      • /var/log/nginx/access.log: Every request to your web server is recorded in this log file unless Nginx is configured to do otherwise.
      • /var/log/nginx/error.log: Any Nginx errors will be recorded in this log.

Fuente: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04

bookmark_borderCambiar el nombre del server Ubuntu 22.04 lts

Para cambiar el nombre del servidor en ubuntu 22.04 lts, se requiere realizar los siguientes pasos.

Con hostnamectl

Esta es una utilidad que casi siempre esta presente, sino instalala.

  • Verifica el nombre del servidor
$ sudo hostnamectl
  • Cambia el nombre de forma permanente. Requiere que seas sudo
$ sudo hostnamectl set-hostname pruebas.midominio.com

Cambiando con comando hostname y archivos de configuración

  • Para cambiarlo de forma temporal y vuelve a su nombre cuando se cierra la sesión.
$ hostname
$ hostname pruebas.midominio.com
  • Para cambiarlo de forma permanente, requiere que tengas permisos de sudo. Edita el archivo hostname.
$ sudo vi /etc/hostname

***
pruebas.midominio.com
  • Modifica el archivo hosts
$ sudo vi /etc/hosts

***

127.0.0.1       localhost
127.0.0.1       pruebas.midominio.com
  • Por ultimo, si es estas en un ambiente virtualizado es posible que tengas el archivo de configuración de la nube. Cambia la bandera para preservar el nombre en la maquina virtual
$ sudo vi /etc/cloud/cloud.cfg

***

.....

preserve_hostname: true

.....
  • Por ultimo reinicia el servidor, y vuelve a conectarte para validar los cambios.
$ sudo reboot
$ ssh pruebas.midominio.com
usuario@pruebas: ~$ 

bookmark_borderInstalar Jenkins 2 LTS en ubuntu 22.04 LTS

Vamos a instalar Jenkins 2 LTS para producción. Nota siempre ocupamos para producción las versiones LTS (Long Term Service) para los ambientes de producción.

En una consola de ingresa los siguientes comandos

  • Instalación de Java JDK 17 LTS
sudo apt update
sudo apt install openjdk-17-jdk
java -version
javac -version
sudo update-alternatives --config java
  • Instala Maven, en el Filesystem recomendado.
curl https://dlcdn.apache.org/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.tar.gz --output apache-maven-3.9.0-bin.tar.gz
tar xzvf apache-maven-3.9.0-bin.tar.gz
sudo chown root:root -R /usr/bin/apache-maven-3.9.0
  • Instala GIT
sudo apt update
sudo apt install git
  • Instala Jenkins

Descarga la llave para mantener la versión actualizada.

$ curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
    /usr/share/keyrings/jenkins-keyring.asc > /dev/null
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null
$ sudo apt install jenkins
  • Instala CertBot

  • Configura Jenkins con CertBot

bookmark_borderInstalar jdk 17 LTS en ubuntu server 22.04 LTS

Descripción

En una consola escribe la sentencia, para actualizar, buscar y en su caso instalar el openjdk desde el repository default de Ubuntu

sudo apt update
sudo apt search openjdk-17-jdk
sudo apt install openjdk-17-jdk

Verifica que se haya instalado la versión con el siguiente comando

java -version
javac -version

Si tienes varias versiones de java configura la que se va a ocupar por default

sudo update-alternatives --config java

bookmark_borderRenovar el certificado de keycloak

Habia instalado keycloak con una imagen de docker y le puse un certificado hecho con certbot. El problema que ahora veo es que los certificados de cerbot solo tienen una vigencia de 3 meses, por lo tanto, unos dias antes de que expire hay que renovar el certificado y volver a pasarlo al contenedor de keycloak.

Bueno en este articulo voy a describir los pasos que realice para renovar y automatizar la renovación de los certificados de certbot.

Versiones

Esto utilizando las siguientes versiones.

  • Ubuntu server 22.04
  • Docker version 20.10.8, build 3967b7d
  • certbot 1.32.2
  • KEYCLOAK_VERSION=15.0.0

Procedimiento

  • Crea un nuevo certificado con certbot
$ sudo certbot certonly --manual -d keycloak.yourdomain.com
[sudo] contraseña para username: 
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certificate not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/keycloak.yourdomain.com.conf)

What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the certificate (may be subject to CA rate limits)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate for keycloak.yourdomain.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/keycloak.yourdomain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/keycloak.yourdomain.com/privkey.pem
This certificate expires on 2023-04-12.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • Deten el contenedor de keycloak
$ docker stop keycloak
keycloak
  • Borra el contenedor de keycloak, asegurate de tener:
    • Configurada la base de datos fuera de tu contenedor
    • El script de creación del contenedor con la configuración de las variables de sesión.
$ docker rm keycloak
keycloak
  • Vuelve a crear el contenedor con el script de creación que tenias.
docker run -it -d --name keycloak --net keycloak-network -p8080:8080 -p 8443:8443 -v /etc/letsencrypt/live/keycloak.yourdomain.com/fullchain.pem:/etc/x509/https/tls.crt -v /etc/letsencrypt/live/keycloak.yourdomain.com/privkey.pem:/etc/x509/https/tls.key -e KEYCLOAK_USER=administrador -e KEYCLOAK_PASSWORD=yourkeycloakpassword -e DB_VENDOR=mariadb -e DB_DATABASE=keycloak -e DB_USER=keycloak -e DB_PASSWORD=your-db-password jboss/keycloak
  • Asegurate de que la llave privada y la llave publica, el agente de docker tenga permisos para su ejecución.