Servidor basado en Ubuntu Server 24.04
Documento de consulta y referencia para administración, mantenimiento y replicación.
Actualizado: 2025-08-20
- 1. Propósito
- 2. Resumen de arquitectura
- 3. Acceso y administración
- 4. Estructura de carpetas
- 5. Usuarios y credenciales
- 6. Servicios nativos
- 7. Servicios en Docker
- 8. Comandos útiles
- 9. Buenas prácticas y seguridad
- 10. Replicación y backup
- 11. Troubleshooting y notas rápidas
- 12. Contacto y responsables
Documento de referencia para la configuración, administración y posible replicación del servidor privado de pruebas, orientado a DevOps y desarrolladores.
-
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.
-
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.
/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/
- Usuarios principales:
rootalexdevops
- Gestión de contraseñas:
- Todas las credenciales están en KeepassXC.
-
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/
- Config global:
-
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
- 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
- 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
- SonarQube:
# 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# 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# 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- 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.
-
Backup manual:
- Copia los directorios
/srv/docker/mysql/datay/srv/docker/sonarqube/postgresql
- Copia los directorios
-
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.*.ymlen el nuevo servidor. - Instala Docker y docker-compose.
- Lanza los servicios con los mismos comandos.
- Clona la estructura de carpetas y los archivos