Skip to content

Instantly share code, notes, and snippets.

@AlexAlonsoMontero
Last active August 20, 2025 18:33
Show Gist options
  • Select an option

  • Save AlexAlonsoMontero/1b5943d7b05c2be181b5880ef0ba81a3 to your computer and use it in GitHub Desktop.

Select an option

Save AlexAlonsoMontero/1b5943d7b05c2be181b5880ef0ba81a3 to your computer and use it in GitHub Desktop.
Configuración servidor devops privado

🗃️ Bitácora de Configuración y Operación del Servidor de Pruebas Privado

Servidor basado en Ubuntu Server 24.04
Documento de consulta y referencia para administración, mantenimiento y replicación.
Actualizado: 2025-08-20


🗂️ Índice


1. Propósito

Documento de referencia para la configuración, administración y posible replicación del servidor privado de pruebas, orientado a DevOps y desarrolladores.


2. Resumen de arquitectura

  • Sistema Operativo: Ubuntu Server 24.04 LTS

  • Servicios nativos:

    • NGINX: despliegue y pruebas de proyectos web.
  • Servicios en Docker:

    • MySQL: base de datos para proyectos generales.
    • SonarQube + PostgreSQL: análisis de código y control de calidad, con base de datos dedicada.

3. Acceso y administración

  • Acceso SSH:

    • 192.168.1.100
  • Ubicación de credenciales:

    • Usuarios y contraseñas guardadas en KeepassXC
    • Usuarios: root, alex, devops
  • Escalado de privilegios:

    • Acceso root por sudo desde usuario devops.

4. Estructura de carpetas

/srv/docker/
├── mysql/
│   ├── data/                         # Persistencia de datos MySQL
│   └── docker-compose.mysql.yml
└── sonarqube/
    ├── data/                         # Persistencia de datos SonarQube
    ├── extensions/                   # Plugins SonarQube
    ├── logs/                         # Logs SonarQube
    ├── postgresql/                   # Persistencia de datos PostgreSQL
    └── docker-compose.sonarqube.yml
  • Web apps:
    • /var/www/proyecto1.com/public_html/
    • /var/www/proyecto2.com/public_html/

5. Usuarios y credenciales

  • Usuarios principales:
    • root
    • alex
    • devops
  • Gestión de contraseñas:
    • Todas las credenciales están en KeepassXC.

6. Servicios nativos

6.1. NGINX

  • Versión:

    • nginx/1.24.0
  • Rutas clave:

    • Config global: /etc/nginx/nginx.conf
    • Sitios disponibles: /etc/nginx/sites-available/
    • Sitios habilitados: /etc/nginx/sites-enabled/
    • Logs: /var/log/nginx/
  • Configuración de proyectos:

# Fragmento de /etc/nginx/sites-available/default

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

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

	location = /proyecto1 { return 301 /proyecto1/; }
	location = /proyecto2 { return 301 /proyecto2/; }

	location /proyecto1/ {
		alias /var/www/proyecto1.com/public_html/;
		index index.html index.htm index.php;
		try_files $uri $uri/ =404;
	}
	location /proyecto2/ {
		alias /var/www/proyecto2.com/public_html/;
		index index.html index.htm index.php;
		try_files $uri $uri/ =404;
	}
	location / { return 404; }
}
  • SSL:
    • No instalado

7. Servicios en Docker

7.1. MySQL

  • Compose: /srv/docker/mysql/docker-compose.mysql.yml
version: "3.9"
services:
  mysql:
    image: mysql:8.4
    container_name: mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: mostovoi
      MYSQL_ROOT_HOST: "%"
    ports:
      - "3306:3306"
    volumes:
      - /srv/docker/mysql/data:/var/lib/mysql
    networks:
      - mysqlnet
networks:
  mysqlnet:
    driver: bridge
  • Datos persistentes: /srv/docker/mysql/data

7.2. SonarQube + PostgreSQL

  • Compose: /srv/docker/sonarqube/docker-compose.sonarqube.yml
version: "3.8"
services:
  sonarqube:
    image: sonarqube:latest
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    environment:
      - SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonarqube
      - SONAR_JDBC_USERNAME=sonar
      - SONAR_JDBC_PASSWORD=sonarpassword
      - SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
    volumes:
      - /srv/docker/sonarqube/data:/opt/sonarqube/data
      - /srv/docker/sonarqube/extensions:/opt/sonarqube/extensions
      - /srv/docker/sonarqube/logs:/opt/sonarqube/logs
    restart: unless-stopped

  db:
    image: postgres:15
    container_name: sonarqube-db
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonarpassword
      - POSTGRES_DB=sonarqube
    volumes:
      - /srv/docker/sonarqube/postgresql:/var/lib/postgresql/data
    restart: unless-stopped
  • Datos persistentes:
    • SonarQube: /srv/docker/sonarqube/data, /srv/docker/sonarqube/logs, /srv/docker/sonarqube/extensions
    • PostgreSQL: /srv/docker/sonarqube/postgresql

8. Comandos útiles

8.1. NGINX

# Recargar configuración sin reiniciar servicio
sudo nginx -t            # Testear sintaxis
sudo systemctl reload nginx

# Ver logs en tiempo real
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# Reiniciar/parar/arrancar servicio
sudo systemctl restart nginx
sudo systemctl stop nginx
sudo systemctl start nginx

8.2. MySQL (Docker)

# Arrancar/parar servicio
cd /srv/docker/mysql
docker compose -f docker-compose.mysql.yml up -d
docker compose -f docker-compose.mysql.yml down

# Entrar a la consola MySQL
docker exec -it mysql mysql -u root -p

# Ver logs
docker logs mysql

8.3. SonarQube + PostgreSQL (Docker)

# Arrancar/parar servicio
cd /srv/docker/sonarqube
docker compose -f docker-compose.sonarqube.yml up -d
docker compose -f docker-compose.sonarqube.yml down

# Ver logs de SonarQube y DB
docker logs sonarqube
docker logs sonarqube-db

9. Buenas prácticas y seguridad

  • Usuarios y contraseñas solo en KeepassXC.
  • No expongas puertos a internet sin reglas de firewall.
  • Backup regular de volúmenes de datos (MySQL, PostgreSQL, SonarQube).
  • No guardar credenciales en repositorios ni scripts.
  • Actualizar el sistema y las imágenes Docker periódicamente.

10. Replicación y backup

  • Backup manual:

    • Copia los directorios /srv/docker/mysql/data y /srv/docker/sonarqube/postgresql
  • Restauración:

    • Detén el servicio, reemplaza la carpeta de datos y levanta el contenedor.
  • Replicación:

    • Clona la estructura de carpetas y los archivos docker-compose.*.yml en el nuevo servidor.
    • Instala Docker y docker-compose.
    • Lanza los servicios con los mismos comandos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment