Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mouheb_ben_mansoura's avatar

Deploying laravel app in Azure Kubernetes Service

I created a Laravel application (APP + MYSQL ) then i built docker images and it runed successfully but when i tried to deploy it into AKS it failed when I execute the container in the cluster and "ls" I don't have any application file .

This is my dockerfile :

FROM php:8.0-apache

RUN apt-get update && apt-get install -y libfreetype6-dev libjpeg-dev libpng-dev libwebp-dev --no-install-recommends && docker-php-ext-enable opcache && docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install pdo_mysql -j$(nproc) gd && apt-get autoclean -y && rm -rf /var/lib/apt/lists/*

Update apache conf to point to application public directory

ENV APACHE_DOCUMENT_ROOT=/var/www/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/.conf

Update uploads config

RUN echo "file_uploads = On\n" "memory_limit = 1024M\n" "upload_max_filesize = 512M\n" "post_max_size = 512M\n" "max_execution_time = 1200\n" > /usr/local/etc/php/conf.d/uploads.ini

Enable headers module

RUN a2enmod rewrite headers

This is my docker-compose :

version: '3.8' services:

# Application & web server
app:
    build:
        context: .
    working_dir: /var/www
    volumes:
        - ./:/var/www
    depends_on:
        - "db"
    ports:
        - 80:80 
db:
    image: mysql:5.7
    container_name: db
    environment:
        MYSQL_ROOT_PASSWORD: root 
        MYSQL_DATABASE: mydb
    ports:
        - "6033:3306"
    volumes:
        - dbdata:/var/lib/mysql
phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    links:
        - db
    environment:
        PMA_HOST: db
        PMA_PORT: 3306
        PMA_ARBITRARY: 1
    restart: always
    ports:
        - 8081:80

volumes: dbdata:

deployment of application :

apiVersion: v1 kind: Service metadata: name: webapp-sql-service spec: ports:

  • port: 80 selector: app: webapp-sql

apiVersion: apps/v1 kind: Deployment metadata: name: webapp-sql spec: replicas: 1 selector: matchLabels: app: webapp-sql template: metadata: labels: app: webapp-sql spec: nodeSelector: "kubernetes.io/os": linux imagePullSecrets: - name: mysecret1 containers: - name: webapp-sql image: laravelregistry.azurecr.io/employeesmanager_app:latest env: - name: ALLOW_EMPTY_PASSWORD value: "yes" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80

And deployment of mysql :

apiVersion: v1 kind: Service metadata: name: mysql-service

namespace: mysql-database

spec: type: NodePort ports:

  • port: 3306 nodePort: 30037 targetPort: 3306 selector: app: mysql

apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment

namespace: mysql-database

labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: nodeSelector: "kubernetes.io/os": linux imagePullSecrets: - name: mysecret1 containers: - name: mysql image: laravelregistry.azurecr.io/mysql:latest resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql-root-username - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: mysql-secret key: mysql-root-password

0 likes
3 replies

Please or to participate in this conversation.