Salta el contingut

Instal·lació de SGBD

Requisits previs a la instal·lació

Abans d'instal·lar qualsevol SGBD en un entorn real cal avaluar i preparar el sistema amfitrió. Una instal·lació feta sense planificació pot causar problemes de rendiment, seguretat i mantenibilitat difícils de corregir a posteriori.

Requisits de maquinari (referència per a entorn de proves)

Recurs PostgreSQL 18 MySQL 8.4 LTS SQL Server 2025 Oracle 21c XE
CPU (mínima) 1 core 1 core 2 cores 1 core
RAM (mínima) 256 MB 512 MB 2 GB 2 GB
RAM (recomanada) 2+ GB 2+ GB 4+ GB 4+ GB
Espai en disc 500 MB + dades 500 MB + dades 6 GB 10 GB
Arquitectura x86-64, ARM64 x86-64, ARM64 x86-64 (ARM en preview) x86-64

SQL Server i Oracle en ARM

Microsoft SQL Server no té suport oficial estable per a arquitectura ARM (Apple Silicon M1/M2/M3) en Docker. En Mac amb processador Apple Silicon, useu la imatge --platform linux/amd64 o considereu alternatives com Azure SQL Edge (mcr.microsoft.com/azure-sql-edge). Oracle XE tampoc té imatge ARM oficial; useu Colima o una màquina virtual x86.

Requisits de sistema operatiu

  • PostgreSQL: Linux (Debian/Ubuntu, RHEL/Rocky), Windows Server, macOS
  • MySQL / MariaDB: Linux, Windows, macOS
  • SQL Server: Linux (Ubuntu 20.04/22.04, RHEL 8/9), Windows Server 2019/2022
  • Oracle Database: Linux (Oracle Linux, RHEL), Windows Server

Ports de xarxa per defecte

Motor Port Protocol
PostgreSQL 5432 TCP
MySQL / MariaDB 3306 TCP
SQL Server 1433 TCP
Oracle Database 1521 TCP (listener)
Oracle Enterprise Manager 5500 HTTPS

Seguretat de ports

Mai exposeu els ports de base de dades directament a Internet sense un tallafoc adequat. En producció, els SGBD han d'escoltar únicament a la interfície de xarxa interna, i l'accés exterior s'ha de fer a través de VPN, SSH tunneling o un proxy d'aplicació.

Usuaris del sistema operatiu

Cada motor crea (o espera trobar) un usuari del sistema operatiu dedicat:

Motor Usuari SO Grup SO
PostgreSQL postgres postgres
MySQL / MariaDB mysql mysql
SQL Server mssql mssql
Oracle oracle oinstall, dba

Mètodes d'instal·lació

Existeixen tres aproximacions principals per instal·lar un SGBD:

flowchart LR
    A[Mètodes d'instal·lació] --> B[Gestor de paquets\napt / yum / dnf]
    A --> C[Docker / Contenidor]
    A --> D[Binari / Instal·lador\nmanual]

    B --> B1[Pros: integrat amb SO\nActualitzacions automàtiques]
    B --> B2[Contres: versió limitada\nal repositori de la distro]

    C --> C1[Pros: aïllament, portabilitat\nversió exacta, fàcil de netejar]
    C --> C2[Contres: overhead mínim\ncal gestionar volums]

    D --> D1[Pros: versió exacta\nconfigurable al màxim]
    D --> D2[Contres: gestió manual\nd'actualitzacions i serveis]

Instal·lació via gestor de paquets

# Ubuntu / Debian — repositori oficial PGDG
sudo apt install -y curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
    --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
    https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
    > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt install -y postgresql-17

# Verifica el servei
sudo systemctl status postgresql
# Ubuntu / Debian — MySQL 8.4
sudo apt update
sudo apt install -y mysql-server

# O bé MariaDB 11.4
sudo apt install -y mariadb-server

# Verifica el servei
sudo systemctl status mysql
# Ubuntu 22.04
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
    sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | \
    sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
sudo apt update
sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo systemctl status mssql-server
# Oracle Linux / RHEL — Oracle XE 21c
sudo dnf install -y oracle-database-preinstall-21c
sudo rpm -ivh oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
sudo /etc/init.d/oracle-xe-21c configure

Instal·lació amb Docker

Docker és el mètode recomanat per a entorns de desenvolupament i aprenentatge. Permet tenir múltiples versions i motors executant-se simultàniament sense conflictes, i netejar-ho tot amb una sola comanda.

Comandes docker run bàsiques

docker run -d \
  --name postgres18 \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=S3cr3tPass! \
  -e POSTGRES_DB=prova \
  -p 5432:5432 \
  -v postgres_data:/var/lib/postgresql/data \
  postgres:17

# Comprova que el contenidor és en marxa
docker ps
docker logs postgres16
# MySQL 8.4
docker run -d \
  --name mysql8 \
  -e MYSQL_ROOT_PASSWORD=S3cr3tPass! \
  -e MYSQL_DATABASE=prova \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD=AdminPass1! \
  -p 3306:3306 \
  -v mysql_data:/var/lib/mysql \
  mysql:8.4

# MariaDB 11.4
docker run -d \
  --name mariadb11 \
  -e MARIADB_ROOT_PASSWORD=S3cr3tPass! \
  -e MARIADB_DATABASE=prova \
  -e MARIADB_USER=admin \
  -e MARIADB_PASSWORD=AdminPass1! \
  -p 3307:3306 \
  -v mariadb_data:/var/lib/mysql \
  mariadb:11.4
docker run -d \
  --name sqlserver2025 \
  -e ACCEPT_EULA=Y \
  -e MSSQL_SA_PASSWORD=S3cr3tPass!23 \
  -e MSSQL_PID=Developer \
  -p 1433:1433 \
  -v sqlserver_data:/var/opt/mssql \
  mcr.microsoft.com/mssql/server:2025-latest

# Nota: la contrasenya ha de tenir mínim 8 caràcters,
# majúscules, minúscules, xifres i símbols (política SA)
docker run -d \
  --name oracle21xe \
  -e ORACLE_PASSWORD=S3cr3tPass! \
  -e ORACLE_DATABASE=FREEPDB1 \
  -p 1521:1521 \
  -p 5500:5500 \
  -v oracle_data:/opt/oracle/oradata \
  gvenzl/oracle-xe:21-slim

# El port 5500 és Oracle Enterprise Manager Express (HTTPS)
# Pot trigar 2-3 minuts a arrencar la primera vegada
docker logs -f oracle21xe

Docker Compose amb tots els motors

El fitxer docker-compose.yml següent aixeca els quatre motors simultàniament, cadascun en la seva xarxa i amb volums persistents:

version: "3.9"

services:

  postgres:
    image: postgres:18
    container_name: sgbd_postgres
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: S3cr3tPass!
      POSTGRES_DB: prova
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - sgbd_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin -d prova"]
      interval: 10s
      timeout: 5s
      retries: 5

  mysql:
    image: mysql:8.5
    container_name: sgbd_mysql
    environment:
      MYSQL_ROOT_PASSWORD: S3cr3tPass!
      MYSQL_DATABASE: prova
      MYSQL_USER: admin
      MYSQL_PASSWORD: AdminPass1!
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - sgbd_net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "admin", "-pAdminPass1!"]
      interval: 10s
      timeout: 5s
      retries: 5

  sqlserver:
    image: mcr.microsoft.com/mssql/server:2025-latest
    container_name: sgbd_sqlserver
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: S3cr3tPass!23
      MSSQL_PID: Developer
    ports:
      - "1433:1433"
    volumes:
      - sqlserver_data:/var/opt/mssql
    networks:
      - sgbd_net

  oracle:
    image: gvenzl/oracle-xe:21-slim
    container_name: sgbd_oracle
    environment:
      ORACLE_PASSWORD: S3cr3tPass!
      ORACLE_DATABASE: FREEPDB1
    ports:
      - "1521:1521"
      - "5500:5500"
    volumes:
      - oracle_data:/opt/oracle/oradata
    networks:
      - sgbd_net

volumes:
  postgres_data:
  mysql_data:
  sqlserver_data:
  oracle_data:

networks:
  sgbd_net:
    driver: bridge

Per aixecar tots els serveis:

docker compose up -d
docker compose ps
docker compose logs -f

Connexió inicial i verificació

Un cop el servei és en marxa, cal verificar que accepta connexions correctament.

Connexió amb el client de línia de comandes

# Des de fora del contenidor (cal tenir psql instal·lat)
psql -h localhost -p 5432 -U admin -d prova

# O entrant al contenidor directament
docker exec -it postgres psql -U admin -d prova

# Comandes de verificació dins psql
\conninfo          -- Mostra la connexió activa
SELECT version();  -- Versió del servidor
\l                 -- Llista de bases de dades
\q                 -- Sortir
# Des de fora (cal tenir el client mysql instal·lat)
mysql -h 127.0.0.1 -P 3306 -u admin -pAdminPass1! prova

# O entrant al contenidor
docker exec -it mysql mysql -u admin -pAdminPass1! prova

# Comandes de verificació
SELECT VERSION();
SHOW DATABASES;
SHOW STATUS LIKE 'Uptime%';
EXIT;
# Entrant al contenidor amb sqlcmd
docker exec -it sqlserver /opt/mssql-tools18/bin/sqlcmd \
    -S localhost -U SA -P "S3cr3tPass!23" -No

# O des de fora si teniu sqlcmd instal·lat
sqlcmd -S localhost,1433 -U SA -P "S3cr3tPass!23" -No

# Comandes de verificació
SELECT @@VERSION;
GO
SELECT name FROM sys.databases;
GO
EXIT
# Entrant al contenidor amb sqlplus
docker exec -it oracle sqlplus system/S3cr3tPass!@//localhost/FREEPDB1

# O com a SYSDBA
docker exec -it oracle21xe sqlplus / as sysdba

# Comandes de verificació
SELECT banner FROM v$version;
SELECT name, open_mode FROM v$database;
SHOW CON_NAME;
EXIT;

Verificació del servei des del sistema amfitrió

# Comprova que el port respon
nc -zv localhost 5432    # PostgreSQL
nc -zv localhost 3306    # MySQL
nc -zv localhost 1433    # SQL Server
nc -zv localhost 1521    # Oracle

# O amb nmap
nmap -p 5432,3306,1433,1521 localhost

Resum de ports i credencials de proves

Motor Port Usuari Contrasenya Base de dades
PostgreSQL 5432 admin S3cr3tPass! prova
MySQL 3306 admin (root: S3cr3tPass!) AdminPass1! prova
SQL Server 1433 SA S3cr3tPass!23 master (per defecte)
Oracle 1521 system S3cr3tPass! FREEPDB1

Credencials d'exemple

Les credencials d'aquest document són exclusivament per a entorns de proves locals. En cap cas les reutilitzeu en entorns de producció o accessibles per xarxa. Useu sempre gestors de secrets (HashiCorp Vault, Docker Secrets, variables d'entorn encriptades) en producció.


Miniactivitat — AC0110

Instal·lació amb Docker

  1. Instal·leu Docker Desktop (o Docker Engine + Compose) al vostre equip si no el teniu.
  2. Descarregueu la imatge de PostgreSQL 18 amb docker pull postgres:18 i comproveu la mida de la imatge.
  3. Aixequeu un contenidor PostgreSQL amb el docker run de la secció anterior.
  4. Connecteu-vos amb psql (des del contenidor o des de l'amfitrió) i executeu SELECT version();.
  5. Repetiu els passos 3 i 4 per a MySQL 8.4.
  6. Llisteu els contenidors en marxa amb docker ps i captureu una captura de pantalla.
  7. Atureu i elimineu els contenidors amb docker stop i docker rm.

Entrega: captura de pantalla de docker ps amb ambdós contenidors actius i de les connexions exitoses.