12. Finalizar el archivo de docker-compose
1. Contexto del problema:
Cuando usas Docker, los contenedores tienen su propio usuario y grupo (por defecto root o un usuario genérico). Si creas archivos desde el contenedor, estos pueden quedar con permisos de root en tu máquina local, lo que te impedirá editarlos o borrarlos sin sudo.
Para evitar eso, se crea un usuario dentro del contenedor que tenga el mismo UID (User ID) que tu usuario actual en tu sistema.
2. Lo que hace el fragmento del docker-compose.yml:
En el archivo docker-compose.yml, se están pasando variables de construcción (args) al Dockerfile:
services:
app:
build:
args:
user: udemy # Nombre del usuario dentro del contenedor
uid: 1000 # UID que coincidirá con tu UID en el sistemauser: udemy: Será el nombre del usuario dentro del contenedor.uid: 1000: Es el UID de tu usuario en tu máquina real. Así, los archivos creados en el contenedor tendrán el mismo UID que tu usuario local.
3. ¿Por qué echo $UID?
El comando echo $UID en la terminal muestra tu User ID actual. En Linux/macOS, el primer usuario suele tener UID 1000.
Ejemplo en la terminal:
$ echo $UID
1000Ese valor (1000 o el tuyo) es el que debes poner en uid:.
4. Lo que dice el tutorial (traducido y explicado):
"Vamos a guardar el archivo y salir, luego ejecutamos
echo $UIDpara saber cuál es el UID del usuario actual. En mi caso es 1000. Si tú tienes otro UID, ese es el que debes usar. Luego volvemos aldocker-compose.ymly lo ajustamos."
5. Resumen práctico:
Verifica tu UID ejecutando en terminal:
echo $UIDPon ese valor en
docker-compose.ymlbajoargs: uid: TU_UID.Así, cuando el contenedor cree archivos, tendrán tu mismo usuario y permisos.
Ejemplo final de docker-compose.yml ajustado:
version: "3.8"
services:
app:
build:
context: .
args:
user: udemy
uid: 1000 # ← Aquí pones el resultado de `echo $UID`
volumes:
- .:/var/www/html ¡Excelente! Este paso es crucial, ya que completa la orquestación del entorno al agregar el servidor web (Nginx) y la base de datos (MySQL) al archivo docker-compose.yml.
⚙️ 12. Finalizar el Archivo Docker Compose (Nginx y MySQL)
Este tutorial te guiará a través de la adición de los servicios de Nginx y MySQL al archivo docker-compose.yml y la creación del archivo de configuración de Nginx para Laravel.
Paso 1: Limpiar Contenedores y Preparar Directorios
Primero, asegúrate de que no haya contenedores de la aplicación corriendo para evitar conflictos, y luego crea el directorio de configuración de Nginx.
Detener y Eliminar Contenedores Previos:
Si el contenedor de app del paso anterior sigue corriendo, detenlo y elimínalo junto con la red creada:
Bashdocker-compose down # (Opcional, verifica que no haya contenedores) # docker ps -aCrear Directorio de Configuración de Nginx:
Crea la estructura de carpetas necesaria para alojar el archivo de configuración de Nginx que compartiremos con el contenedor:
Bashmkdir -p docker-compose/nginx** (Referencia a Imagen 12.4 Finalizar el archivo de docker-compose.png)
Crear el Archivo de Configuración de Nginx:
Crea el archivo de configuración del servidor Nginx para Laravel. Lo llamaremos app-laravel.conf:
Bashnano docker-compose/nginx/app-laravel.conf** (Referencia a Imagen 12.1 Finalizar el archivo de docker-compose.png)
Paso 2: Contenido del Archivo de Configuración de Nginx
Copia el siguiente código boilerplate de Nginx, el cual está optimizado para funcionar con Laravel y PHP-FPM.
Variables de Entorno (DB): Docker Compose lee las variables
${DB_DATABASE},${DB_USERNAME}y${DB_PASSWORD}de tu archivo.envde Laravel para configurar la base de datos MySQL automáticamente.Red: Los tres servicios (
app,nginx,db) están en la misma redlaravel, permitiendo que se comuniquen usando sus nombres de servicio.
** (Referencia a Imagen 12.8 Finalizar el archivo de docker-compose.png)
Guarda (Ctrl + O, Enter) y sal (Ctrl + X).
Conclusión: El archivo docker-compose.yml está completo. Al ejecutar docker-compose up -d, se crearán tres contenedores: PHP-FPM, Nginx y MySQL, todos interconectados a través de la red bridge laravel.
En el siguiente video, verificarás si la configuración funciona correctamente y si puedes acceder a la aplicación Laravel a través del puerto 8000 de tu máquina virtual.
server {
# Puerto donde Nginx escucha dentro del contenedor
listen 80;
# Rutas para logs
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# Directorio raíz del proyecto, apuntando a la carpeta 'public' de Laravel
root /var/www/public;
# Manejo de archivos PHP
location ~ \.php$ {
# Intentar el archivo .php, si no, devolver 404
try_files $uri =404;
# Pasar las peticiones a nuestro servicio de PHP-FPM (el nombre del contenedor 'app')
fastcgi_pass app:9000;
# Index principal para PHP
fastcgi_index index.php;
# Incluir parámetros FastCGI estándar
include fastcgi_params;
# Configuración para que Laravel obtenga el nombre del archivo
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
# Reglas para URLs limpias (Clean URLs) de Laravel
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
```
* **Puntos clave:**
* `listen 80`: Nginx escucha en el puerto 80 del contenedor.
* `root /var/www/public`: Apunta al directorio `public` de Laravel.
* `fastcgi_pass app:9000`: **IMPORTANTE**: Envía las peticiones PHP al contenedor `app` (el servicio de PHP-FPM), usando su nombre de servicio como *hostname* y el puerto 9000.
** (Referencia a Imagen 12.3 Finalizar el archivo de docker-compose.png)
Guarda (`Ctrl + O`, `Enter`) y sal (`Ctrl + X`).
---
### Paso 3: Finalizar el Archivo `docker-compose.yml`
Abre el archivo Compose nuevamente para añadir los servicios `nginx` y `db` (MySQL).
1. **Modificar el Archivo `.env` (Laravel):**
Antes de editar el Compose, es crucial asegurarse de que las variables de entorno de Laravel apunten al servicio de base de datos correcto. Abre el archivo `.env` de Laravel y cambia las variables de conexión a la base de datos:
```bash
nano .env
Comentarios
Publicar un comentario