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 laroot user
. Recomendamos actuar como unnon-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 .