Cómo instalar Drupal con Docker en Ubuntu 22.04 LTS

En este tutorial, le mostraremos cómo instalar Drupal con Docker en Ubuntu 22.04 LTS. Para aquellos de ustedes que no lo sabían, Drupal es una plataforma de código abierto para crear experiencias digitales increíbles. Está hecho por una comunidad dedicada. Drupal utiliza una arquitectura modular, que permite a los desarrolladores agregar funcionalidad al sistema central instalando y configurando módulos. Hay miles de módulos disponibles para Drupal, que brindan una amplia gama de funciones, como comercio electrónico, foros e integración de redes sociales.

Este artículo asume que tiene al menos un conocimiento básico de Linux, sabe cómo usar el shell y, lo que es más importante, aloja su sitio en su propio VPS. La instalación es bastante simple y se supone que está ejecutando en la cuenta raíz, si no, es posible que deba agregar ‘ sudo ‘ a los comandos para obtener privilegios de root. Te mostraré la instalación paso a paso de Drupal con Docker en Ubuntu 22.04. Puede seguir las mismas instrucciones para Ubuntu 22.04 y cualquier otra distribución basada en Debian como Linux Mint, Elementary OS, Pop!_OS y más.

requisitos previos

  • Un servidor que ejecuta uno de los siguientes sistemas operativos: Ubuntu 22.04, 20.04 y cualquier otra distribución basada en Debian como Linux Mint.
  • Se recomienda que utilice una instalación de sistema operativo nueva para evitar posibles problemas.
  • Acceso SSH al servidor (o simplemente abra la Terminal si está en una computadora de escritorio).
  • Una conexión a Internet activa. Necesitará una conexión a Internet para descargar los paquetes y dependencias necesarios para Drupal y Docker.
  • A non-root sudo user o acceder a la root user . Recomendamos actuar como un non-root sudo user sin embargo, puede dañar su sistema si no tiene cuidado al actuar como raíz.

Instalar Drupal con Docker en Ubuntu 22.04 LTS Jammy Jellyfish

Paso 1. Primero, asegúrese de que todos los paquetes de su sistema estén actualizados ejecutando lo siguiente apt Comandos en la terminal.

                      sudo apt update
sudo apt upgrade
                    

Paso 2. Instalación de Docker.

De forma predeterminada, Docker no está disponible en el repositorio base de Ubuntu 22.04. Ahora ejecute el siguiente comando a continuación para agregar el repositorio de Docker al sistema:

                      echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
                    

A continuación, importe la clave GPG a su sistema:

                      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
                    

Después de que el repositorio esté habilitado, ahora instale la última versión del paquete Docker usando el siguiente comando:

                      sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
                    

Puede verificar que Docker está instalado y sobre la versión actual:

                      docker -v
                    

Después de instalarlo correctamente, habilite Docker (para que se inicie automáticamente al iniciar el sistema), inicie y verifique el estado con los siguientes comandos:

                      sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
                    

De forma predeterminada, Docker requiere privilegios de root. Si desea evitar el uso sudo cada vez que ejecutas el docker comando, agregue su nombre de usuario al docker grupo:

                      sudo usermod -aG docker $(whoami)
su - ${USER}
                    

Confirme que su usuario está agregado al grupo de Docker:

                      groups
                    

Para obtener recursos adicionales sobre la instalación y administración de Docker, lea la publicación a continuación:

  • Cómo instalar Docker en Ubuntu Linux √

Paso 3. Cree el archivo Docker Compose para Drupal.

Primero, crea un directorio para la configuración de Drupal:

                      mkdir ~/drupal
cd ~/drupal
                    

Ahora creamos y abrimos el archivo de redacción de Docker usando su editor de texto favorito:

                      nano docker-compose.yml
                    

Agregue el siguiente archivo:

                      services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal
  
  drupal:
    image: drupal:10-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html
  
  webserver:
    image: nginx:1.22.1-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
  
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email --staging -d your-domain.com -d www.your-domain.com

networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:
  certbot-etc:
                    

Guardar y close el archivo.

Paso 4. Configure Docker Compose para Nginx.

Primero, creamos el directorio para la configuración de Nginx:

                      mkdir nginx-conf
                    

A continuación, cree y abra el archivo para Nginx con su editor de texto favorito:

                      nano nginx-conf/drupal.conf
                    

Agregue el siguiente archivo:

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

    server_name your-domain.com;

    index index.php index.html index.htm;

    root /var/www/html;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass drupal:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /.ht {
        deny all;
    }

    location = /favicon.ico { 
        log_not_found off; access_log off; 
    }
    location = /robots.txt { 
        log_not_found off; access_log off; allow all; 
    }
    location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}
                    

Una vez hecho esto, guarde y close el archivo.

Paso 5. Configure Docker para SSL.

Antes de generar los certificados SSL, iniciamos nuestros contenedores usando el siguiente comando:

                      docker compose up -d
                    

A continuación, abra un archivo docker-compose con el siguiente comando a continuación:

                      nano docker-compose.yml
                    

Reemplace la --staging en la sección de servicio de Certbot y reemplácelo con el --force-renewal bandera:

                      certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email --staple-ocsp --force-renewal -d your-domain.com
                    

Guardar y close el archivo, luego ejecute el docker compose up comando de nuevo para recrear el contenedor de Certbot:

                      docker compose up --force-recreate --no-deps certbot
                    

Paso 6. Configure Nginx para SSL.

Primero, detenemos el servidor Nginx usando el siguiente comando:

                      docker stop webserver
                    

A continuación, cree un nuevo archivo Nginx para la configuración de SSL:

                      nano nginx-conf/drupal-ssl.conf
                    

Agregue el siguiente archivo:

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

    server_name your-domain.com;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your-domain.com;

    index index.php index.html index.htm;

    root /var/www/html;

    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/your-domain.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass drupal:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /.ht {
        deny all;
    }

    location = /favicon.ico {
        log_not_found off; access_log off;
    }
    location = /robots.txt {
        log_not_found off; access_log off; allow all;
    }
    location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}
                    

Guardar y close el archivo, luego asegúrese de que el contenedor Nginx escuche el puerto 443:

                      nano docker-compose.yml
                    

Siguiendo la configuración:

                      webserver:
    image: nginx:1.22.1-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
      - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
    networks:
      - external
                    

Guardar y close el archivo, luego elimine el archivo de configuración HTTP anterior usando el siguiente comando:

                      rm nginx-conf/drupal.conf
                    

A continuación, genera un certificado de grupo Diffie-Hellman que ya hemos configurado anteriormente:

                      sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
                    

Finalmente, vuelva a crear el contenedor Nginx:

                      docker compose up -d --force-recreate --no-deps webserver
                    

Paso 7. Configure el cortafuegos.

Ahora configuramos un cortafuegos sin complicaciones (UFW) con Drupal para permitir el acceso público en los puertos web predeterminados 80 y 443:

                      sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
                    

Paso 8. Acceso a la interfaz web de Drupal.

Ahora abra su navegador web y acceda a la interfaz de usuario web de Drupal usando la URL https://your-domain.com . Será redirigido a la siguiente página:

¡Felicidades! Ha instalado correctamente Drupal con Docker. Gracias por usar este tutorial para instalar Drupal con Docker en el sistema Ubuntu. Para obtener ayuda adicional o información útil, le recomendamos que consulte el sitio web oficial de Drupal .

Related Posts