logo
Secciones

Entradas del blog


PHP & MariaDB & Docker | Fedora

362

Contexto

XAMPP era el entorno de desarrollo para PHP favorito de muchos, ya que incluía en empaquetados Base de datos, PHP, Perl, phpMyAdmin para la gestión de base de datos.

Sin embargo, XAMPP se quedó hasta la versión 8.2.12, aparentemente está descontinuado, por lo que es necesario buscar nuevas formas de probar y desarrollar PHP

Aquí entra en juego Docker, la idea es sencilla, instalar docker en fedora, crear un contenedor con PHP y MariaDB. De lado del host en éste caso Fedora, crear una carpeta donde estarán todos los proyectos, enviarlos a docker y desde el host abrir los proyectos en un navegador.

Instalar Docker en Fedora

La instalación de docker se explica en éste otro post: Instalación de docker en Fedora

Configurar en Host

Crear una carpeta llamada www en la carpeta personal:

mkdir ~/www

Crear dentro del directorio ~/www los directorios de devs y docker

cd ~/www
mkdir devs
mkdir docker

Dentro del director docker crear los siguientes archivos:

gnome-text-editor docker-compose.yml

Y añadir el siguiente texto:

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php-web
    ports:
      - "81:80"
    volumes:
      - ../devs:/var/www/html/devs
    networks:
      - backend

  mariadb:
    image: mariadb:11
    container_name: mariadb
    restart: always
    ports:
      - "3308:3306"
    environment:
      MYSQL_ROOT_PASSWORD: d7yMyRVFGybbPDcF
      MYSQL_DATABASE: defaultdb
    volumes:
      - mariadb_data:/var/lib/mysql
      - ./initdb:/docker-entrypoint-initdb.d
    networks:
      - backend

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: always
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mariadb
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: d7yMyRVFGybbPDcF
    networks:
      - backend

volumes:
  mariadb_data:


networks:
  backend:
gnome-text-editor Dockerfile
FROM php:8.4-apache

RUN apt-get update && apt-get install -y \
	libpng-dev libjpeg-dev libfreetype6-dev \
	libonig-dev libxml2-dev zip unzip git curl \
	libicu-dev mariadb-client \
	&& docker-php-ext-install intl pdo pdo_mysql

RUN a2enmod rewrite

RUN echo '\n\
	DocumentRoot /var/www/html\n\
	\n\
	Options Indexes FollowSymLinks\n\
	AllowOverride All\n\
	Require all granted\n\
	\n\
	' > /etc/apache2/sites-available/000-default.conf

Crear una carpeta llamada initdb crear el siguiente archivo y pegar el contenido:

gnome-text-editor root-remote
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'd7yMyRVFGybbPDcF';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Para ejecutar el contenedor en segundo plano usar:

docker compose up --build -d

Para ejecutar el contenedor no en segundo plano:

 docker compose up --build

Configurar proyectos

Cada proyecto que ese cree dentro del directorio ~/www/devs/ deberá contener el sigueinte htaccess. Para ésto, entrar al proyecto creado, por ejemplo, para un proyecto de laravel, añadir lo siguiente:

gnome-text-editor .htaccess
Options All -Indexes

<IfModule mod_rewrite.c>
	Options +FollowSymlinks
	RewriteEngine On

	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteRule ^(.*)/$ /$1 [L,R=301]

	RewriteCond %{HTTPS} !=on
	RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
	RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php/$1 [L]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 index.php
</IfModule>


ServerSignature Off

<Files .env>
order allow,deny
Deny from all
</Files>

Si es un proyecto de laravel o codeigniter modificar el archivo .env para el acceso de la base de datos:

DB_CONNECTION=mysql
#para acceder a los datos desde la aplicacion usar esta linea, y para migraciones, comentar esta linea
DB_HOST=mariadb
DB_PORT=3306
#para migraciones se descomenta la linea de abajo
#DB_HOST=127.0.0.1
DB_DATABASE=dashtool
DB_USERNAME=root
DB_PASSWORD=d7yMyRV

Y listo, eso sería todo. Ahora los proyecto se lanzarán directo.

Comentarios:

Conoce la red social linuxClick
Redes sociales
Accesos directos