Skip to content

Commit

Permalink
chore:fix Dockerfile and laravel.yml files
Browse files Browse the repository at this point in the history
  • Loading branch information
ThePushMaker committed Dec 29, 2024
1 parent 89a4940 commit 77407c9
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 22 deletions.
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

# DB_CONNECTION=sqlite
DB_CONNECTION=sqlite
DB_DATABASE=/path/to/database.sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
Expand All @@ -30,6 +32,9 @@ DB_CONNECTION=sqlite

SESSION_DRIVER=database
SESSION_LIFETIME=120
DB_CONNECTION=sqlite
DB_DATABASE=${PWD}/database/database.sqlite

SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
Expand Down
34 changes: 33 additions & 1 deletion .github/workflows/laravel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,45 @@ jobs:
# Paso 1: Descargamos el contenido completo del repositorio (checkout) para trabajar con el código fuente
- name: Checkout
uses: actions/checkout@v2

# Notificación de fallo
- name: Notificar fallo en Checkout
if: failure()
run: echo "Checkout ha fallado 😢"

# Paso 2: Configuramos QEMU para permitir la construcción de imágenes multiplataforma
- name: Set up QEMU
uses: docker/setup-qemu-action@master
with:
platforms: all

# Notificación de fallo
- name: Notificar fallo en Set up QEMU
if: failure()
run: echo "Set up QEMU ha fallado 😢"

# Paso 3: Iniciamos sesión en Docker Hub usando las credenciales almacenadas como secretos de github
# Esto es necesario para subir la imagen construida al repositorio en Docker Hub
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

# Notificación de fallo
- name: Notificar fallo en Login to Docker Hub
if: failure()
run: echo "Login to Docker Hub ha fallado 😢"

# Paso 4: Configuramos Docker Buildx, una herramienta que permite construir imágenes multiplataforma
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

# Notificación de fallo
- name: Notificar fallo en Set up Docker Buildx
if: failure()
run: echo "Set up Docker Buildx ha fallado 😢"

# Paso 5: Construimos y subimos la imagen al repositorio de Docker Hub
- name: Build and push
uses: docker/build-push-action@v2
Expand All @@ -49,4 +71,14 @@ jobs:
platforms: linux/amd64, linux/arm64
push: true
# - La imagen se etiqueta como 'latest' para indicar que es la última versión
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/laravel:latest
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/laravel:latest

# Notificación de fallo
- name: Notificar fallo en Build and push
if: failure()
run: echo "Build and push ha fallado 😢"

# Notificación de éxito
- name: Notificar éxito
if: success()
run: echo "¡La imagen Docker se construyó y subió con éxito! 🎉"
78 changes: 57 additions & 21 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,40 +1,76 @@
# cargamos imagen de php nodo alpine super reducida
# Usamos una imagen base oficial de PHP 8.2 con FPM y Alpine
FROM php:8.2-fpm-alpine

# construimos una imagen partiendo del asistente de octane. Usamos una imagen base optimizada para Laravel,
# que incluye PHP y todos los paquetes requeridos.
# Podemos usar siempre esta para construir nuestros proyectos de laravel
FROM elrincondelisma/octane:latest
# Actualizamos el gestor de paquetes e instalamos dependencias necesarias
RUN apk add --update --no-cache \
curl \
bash \
libpng-dev \
libjpeg-turbo-dev \
libwebp-dev \
libxpm-dev \
freetype-dev \
zip \
libzip-dev \
oniguruma-dev \
autoconf \
gcc \
g++ \
make \
icu-dev \
libxml2-dev \
curl-dev && \
docker-php-ext-configure gd \
--with-freetype \
--with-jpeg \
--with-webp \
--with-xpm && \
docker-php-ext-install -j$(nproc) gd && \
docker-php-ext-install -j$(nproc) mbstring xml curl zip bcmath soap intl && \
apk del autoconf gcc g++ make

#Instalamos Composer descargando el instalador oficial y configurándolo en /usr/local/bin.
Run curl -sS https://getcomposer.org/installer | php -- \
# Instalamos Composer
RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/local/bin --filename=composer

# Copiamos Composer y Roadrunner desde sus imágenes oficiales para habilitar su uso en el contenedor.
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Copiamos Roadrunner desde su imágen oficiales
COPY --from=spiralscout/roadrunner:2.4.2 /usr/bin/rr /usr/bin/rr

# Configuramos el directorio de trabajo principal del contenedor como /app.
# Configuramos el directorio de trabajo
WORKDIR /app
# Copiamos todos los archivos del proyecto local al directorio de trabajo en el contenedor.

# Copiamos los archivos del proyecto
COPY . .
# Eliminamos la carpeta vendor y el archivo composer.lock para evitar problemas de dependencias
# causados por diferencias entre versiones de php en entornos de desarrollo y producción.

# Creamos el archivo de base de datos SQLite y ajustamos permisos
RUN mkdir -p /app/database && touch /app/database/database.sqlite
RUN chmod 777 /app/database/database.sqlite

# Eliminamos archivos previos
RUN rm -rf /app/vendor
RUN rm -rf /app/composer.lock
# Instalamos las dependencias necesarias para Laravel y Octane, incluyendo Roadrunner.

# Instalamos dependencias de Composer
RUN composer install
RUN composer require laravel/octane spiral/roadrunner
# Configuramos el entorno copiando el archivo env.example como .env, ya que este archivo puede faltar tras un pull de git.

# Configuramos el entorno
COPY .env.example .env
# Creamos el directorio de logs dentro de la carpeta de storage, esencial para Laravel.

# Creamos directorios necesarios
RUN mkdir -p /app/storage/logs
# Limpiamos las cachés de la aplicación para evitar configuraciones desactualizadas o conflictos.

# Ejecutar migraciones y luego limpiar cachés
RUN php artisan migrate --force
RUN php artisan cache:clear
RUN php artisan view:clear
RUN php artisan config:clear
# Instalamos Octane con el servidor Swoole y configuramos su inicio para escuchar todas las direcciones IP.

# Instalamos Octane con Swoole
RUN php artisan octane:install --server="swoole"
RUN php artisan octane:start --server="swoole" --host="0.0.0.0"

# Exponemos el puerto 8000 para permitir conexiones al servidor de octane porque ese está escuchando en el puerto 8000
EXPOSE 8000
# Exponemos el puerto
EXPOSE 8000

# Comando para iniciar Octane
CMD ["php", "artisan", "octane:start", "--server=swoole", "--host=0.0.0.0"]

0 comments on commit 77407c9

Please sign in to comment.