From 7bdbf4e077d019edd4908309d39bcc492e8be69f Mon Sep 17 00:00:00 2001 From: Inext68 Date: Mon, 1 Jun 2026 19:38:22 +0200 Subject: [PATCH] DOCKER IMAGE geenration --- .dockerignore | 15 ++++++ Dockerfile | 32 +++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/DockerBaseDataSeeder.php | 47 +++++++++++++++++++ docker-compose.mysql.yml | 39 +++++++++++++++ docker-compose.yml | 17 +++++++ docker-entrypoint.sh | 45 ++++++++++++++++++ resources/views/help/index.blade.php | 34 ++++++++++++-- .../a54cb906b71ecddfe8edf55b3671046a.php | 34 ++++++++++++-- 9 files changed, 256 insertions(+), 8 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 database/seeders/DockerBaseDataSeeder.php create mode 100644 docker-compose.mysql.yml create mode 100644 docker-compose.yml create mode 100644 docker-entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..5dccde6a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +.env +.git +.gitignore +.vite +node_modules +vendor +storage/app/backups +storage/app/documenti +storage/framework/cache +storage/framework/sessions +storage/framework/views +storage/logs +bootstrap/cache +docker-compose.yml +docker-compose.mysql.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..431642e9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM php:8.4-apache + +RUN docker-php-ext-enable opcache \ + && a2enmod rewrite + +RUN apt-get update && apt-get install -y libsqlite3-dev libpng-dev libjpeg-dev libwebp-dev libzip-dev \ + && docker-php-ext-configure gd --with-jpeg --with-webp \ + && docker-php-ext-install pdo_mysql pdo_sqlite bcmath gd zip \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +ENV APACHE_DOCUMENT_ROOT=/var/www/html/public +RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \ + && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +COPY . /var/www/html/ + +RUN mkdir -p bootstrap/cache \ + && composer install --no-dev --optimize-autoloader --no-scripts \ + && mkdir -p storage/app/public \ + storage/framework/cache/data \ + storage/framework/sessions \ + storage/framework/views \ + storage/logs \ + && chown -R www-data:www-data storage bootstrap/cache + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["apache2-foreground"] diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b24a4c6d..6e01fb57 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -17,6 +17,7 @@ class DatabaseSeeder extends Seeder ComuniSeeder::class, RoleSeeder::class, RolePresetSeeder::class, + DockerBaseDataSeeder::class, ]); $admin = User::create([ diff --git a/database/seeders/DockerBaseDataSeeder.php b/database/seeders/DockerBaseDataSeeder.php new file mode 100644 index 00000000..e3006b77 --- /dev/null +++ b/database/seeders/DockerBaseDataSeeder.php @@ -0,0 +1,47 @@ + $nome) { + DB::table('tipologie_documenti')->updateOrInsert( + ['nome' => $nome], + ['descrizione' => ucfirst($nome), 'ordine' => $ord + 1, 'attiva' => true] + ); + } + + $tipologieEventi = [ + ['nome' => 'catechesi', 'descrizione' => 'Catechesi'], + ['nome' => 'liturgia', 'descrizione' => 'Liturgia'], + ['nome' => 'animazione', 'descrizione' => 'Animazione'], + ['nome' => 'formazione', 'descrizione' => 'Formazione'], + ['nome' => 'incontro', 'descrizione' => 'Incontro'], + ['nome' => 'riunione', 'descrizione' => 'Riunione'], + ['nome' => 'festa', 'descrizione' => 'Festa'], + ['nome' => 'altro', 'descrizione' => 'Altro'], + ]; + foreach ($tipologieEventi as $ord => $t) { + DB::table('tipologie_eventi')->updateOrInsert( + ['nome' => $t['nome']], + ['descrizione' => $t['descrizione'], 'ordine' => $ord + 1, 'attiva' => true] + ); + } + + $ruoli = ['presidente', 'vicepresidente', 'segretario', 'tesoriere', 'consigliere', 'volontario', 'socio', 'altro']; + foreach ($ruoli as $ord => $nome) { + DB::table('ruoli')->updateOrInsert( + ['nome' => $nome], + ['descrizione' => ucfirst($nome), 'ordine' => $ord + 1, 'attiva' => true] + ); + } + } +} diff --git a/docker-compose.mysql.yml b/docker-compose.mysql.yml new file mode 100644 index 00000000..739ccd42 --- /dev/null +++ b/docker-compose.mysql.yml @@ -0,0 +1,39 @@ +services: + glastree: + build: . + ports: + - "8080:80" + volumes: + - glastree_storage:/var/www/html/storage + depends_on: + mysql: + condition: service_healthy + environment: + - APP_ENV=production + - APP_DEBUG=false + - APP_URL=http://localhost:8080 + - DB_CONNECTION=mysql + - DB_HOST=mysql + - DB_PORT=3306 + - DB_DATABASE=glastree + - DB_USERNAME=glastree + - DB_PASSWORD=secret + + mysql: + image: mysql:8.0 + volumes: + - mysql_data:/var/lib/mysql + environment: + - MYSQL_DATABASE=glastree + - MYSQL_USER=glastree + - MYSQL_PASSWORD=secret + - MYSQL_ROOT_PASSWORD=root_secret + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 5s + timeout: 3s + retries: 10 + +volumes: + glastree_storage: + mysql_data: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..1465b80c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +services: + glastree: + build: . + ports: + - "8080:80" + volumes: + - glastree_storage:/var/www/html/storage + - glastree_db:/var/www/html/database + environment: + - APP_ENV=production + - APP_DEBUG=false + - APP_URL=http://localhost:8080 + - DB_CONNECTION=sqlite + +volumes: + glastree_storage: + glastree_db: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 00000000..442df41b --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,45 @@ +#!/bin/bash +set -e + +if [ ! -f .env ]; then + cp .env.example .env + + if [ "$DB_CONNECTION" = "mysql" ]; then + sed -i "s/DB_CONNECTION=mysql/DB_CONNECTION=mysql/" .env + sed -i "s/DB_HOST=.*/DB_HOST=${DB_HOST:-mysql}/" .env + sed -i "s/DB_PORT=.*/DB_PORT=${DB_PORT:-3306}/" .env + sed -i "s/DB_DATABASE=.*/DB_DATABASE=${DB_DATABASE:-glastree}/" .env + sed -i "s/DB_USERNAME=.*/DB_USERNAME=${DB_USERNAME:-glastree}/" .env + sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=${DB_PASSWORD:-secret}/" .env + + echo "Waiting for MySQL..." + until php -r "new PDO('mysql:host=${DB_HOST:-mysql};dbname=${DB_DATABASE:-glastree}', '${DB_USERNAME:-glastree}', '${DB_PASSWORD:-secret}');" 2>/dev/null; do + sleep 2 + done + echo "MySQL ready." + else + sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=sqlite/' .env + sed -i 's/DB_HOST=.*//' .env + sed -i 's/DB_PORT=.*//' .env + sed -i 's/DB_DATABASE=.*/DB_DATABASE=\/var\/www\/html\/database\/database.sqlite/' .env + sed -i 's/DB_USERNAME=.*//' .env + sed -i 's/DB_PASSWORD=.*//' .env + + touch database/database.sqlite + chmod 664 database/database.sqlite + fi + + php artisan key:generate --force +fi + +if [ ! -f .db_initialized ]; then + php artisan package:discover --ansi 2>/dev/null || true + php artisan migrate --force + php artisan db:seed --force + touch .db_initialized +fi + +php artisan storage:link --force 2>/dev/null || true +php artisan optimize:clear 2>/dev/null || true + +exec "$@" diff --git a/resources/views/help/index.blade.php b/resources/views/help/index.blade.php index 24c0e5d6..446c3b4e 100644 --- a/resources/views/help/index.blade.php +++ b/resources/views/help/index.blade.php @@ -342,7 +342,7 @@

Procedura di Migrazione Completa

-

Segui questa procedura per migrare Glastree su un nuovo server LAMP (Linux, Apache, MySQL, PHP).

+

Segui questa procedura per migrare l'applicazione su un nuovo server LAMP (Linux, Apache, MySQL, PHP).

@@ -365,9 +365,19 @@ sudo a2enmod rewrite -
Passo 3: Clona l'applicazione
+
Passo 3: Ottieni l'applicazione
+
+ + Puoi clonare il repository con git oppure estrarre il file ZIP ricevuto nella cartella /var/www/glastree. +
cd /var/www
+
+# Opzione A — Git clone
 git clone <URL_REPOSITORY> glastree
+
+# Opzione B — ZIP (se non hai git)
+# unzip /percorso/del/glastree.zip -d glastree
+
 cd glastree
 composer install --no-dev --optimize-autoloader
 npm ci && npm run build
@@ -472,6 +482,11 @@ sudo certbot --apache -d glastree.esempio.it
Creare un'immagine Docker con dati di base

Puoi creare un'immagine Docker pronta all'uso che include l'applicazione e i dati di base (tipologie documenti, tipologie eventi, ruoli). Scegli la configurazione in base alle tue esigenze:

+
+ + Ottenere il codice: puoi clonare il repository con git clone <URL> glastree oppure, se non hai git, estrarre il file ZIP ricevuto con unzip glastree.zip -d glastree e posizionarti nella cartella glastree prima di procedere. +
+
@@ -703,6 +718,7 @@ volumes: mysql_data:
5. Build e avvio
+

Assicurati di essere nella cartella del progetto (ottenuta via git clone o estraendo il ZIP), poi:

# Costruisci l'immagine (comune)
 docker build -t glastree:latest .
 
@@ -755,7 +771,7 @@ echo 'Utente creato con successo!';
                     
Panoramica
-

Glastree include un wizard di installazione web che guida passo-passo nella configurazione su un nuovo server LAMP. Supporta due modalita:

+

l'applicazione include un wizard di installazione web che guida passo-passo nella configurazione su un nuovo server LAMP. Supporta due modalita:

@@ -797,8 +813,18 @@ sudo a2enmod rewrite sudo systemctl restart apache2
Passo 2: Ottenere l'applicazione
+
+ + Puoi clonare il repository con git oppure estrarre il file ZIP ricevuto nella cartella /var/www/glastree. +
cd /var/www
+
+# Opzione A — Git clone
 git clone <URL_REPOSITORY> glastree
+
+# Opzione B — ZIP (se non hai git)
+# unzip /percorso/del/glastree.zip -d glastree
+
 cd glastree
 composer install --no-dev --optimize-autoloader
 npm ci && npm run build
@@ -856,7 +882,7 @@ sudo systemctl reload apache2
Modalita Fresh Install
-

Seleziona questa modalita quando installi Glastree per la prima volta su un server.

+

Seleziona questa modalita quando installi l'applicazione per la prima volta su un server.

Cosa succede durante l'installazione:

  1. Genera APP_KEY per la crittografia
  2. diff --git a/storage/framework/views/a54cb906b71ecddfe8edf55b3671046a.php b/storage/framework/views/a54cb906b71ecddfe8edf55b3671046a.php index f7eb35c3..75602808 100755 --- a/storage/framework/views/a54cb906b71ecddfe8edf55b3671046a.php +++ b/storage/framework/views/a54cb906b71ecddfe8edf55b3671046a.php @@ -340,7 +340,7 @@

    Procedura di Migrazione Completa

    -

    Segui questa procedura per migrare Glastree su un nuovo server LAMP (Linux, Apache, MySQL, PHP).

    +

    Segui questa procedura per migrare l'applicazione su un nuovo server LAMP (Linux, Apache, MySQL, PHP).

    @@ -363,9 +363,19 @@ sudo a2enmod rewrite -
    Passo 3: Clona l'applicazione
    +
    Passo 3: Ottieni l'applicazione
    +
    + + Puoi clonare il repository con git oppure estrarre il file ZIP ricevuto nella cartella /var/www/glastree. +
    cd /var/www
    +
    +# Opzione A — Git clone
     git clone <URL_REPOSITORY> glastree
    +
    +# Opzione B — ZIP (se non hai git)
    +# unzip /percorso/del/glastree.zip -d glastree
    +
     cd glastree
     composer install --no-dev --optimize-autoloader
     npm ci && npm run build
    @@ -470,6 +480,11 @@ sudo certbot --apache -d glastree.esempio.it
    Creare un'immagine Docker con dati di base

    Puoi creare un'immagine Docker pronta all'uso che include l'applicazione e i dati di base (tipologie documenti, tipologie eventi, ruoli). Scegli la configurazione in base alle tue esigenze:

    +
    + + Ottenere il codice: puoi clonare il repository con git clone <URL> glastree oppure, se non hai git, estrarre il file ZIP ricevuto con unzip glastree.zip -d glastree e posizionarti nella cartella glastree prima di procedere. +
    +
    @@ -701,6 +716,7 @@ volumes: mysql_data:
    5. Build e avvio
    +

    Assicurati di essere nella cartella del progetto (ottenuta via git clone o estraendo il ZIP), poi:

    # Costruisci l'immagine (comune)
     docker build -t glastree:latest .
     
    @@ -753,7 +769,7 @@ echo 'Utente creato con successo!';
                         
    Panoramica
    -

    Glastree include un wizard di installazione web che guida passo-passo nella configurazione su un nuovo server LAMP. Supporta due modalita:

    +

    l'applicazione include un wizard di installazione web che guida passo-passo nella configurazione su un nuovo server LAMP. Supporta due modalita:

    @@ -795,8 +811,18 @@ sudo a2enmod rewrite sudo systemctl restart apache2
    Passo 2: Ottenere l'applicazione
    +
    + + Puoi clonare il repository con git oppure estrarre il file ZIP ricevuto nella cartella /var/www/glastree. +
    cd /var/www
    +
    +# Opzione A — Git clone
     git clone <URL_REPOSITORY> glastree
    +
    +# Opzione B — ZIP (se non hai git)
    +# unzip /percorso/del/glastree.zip -d glastree
    +
     cd glastree
     composer install --no-dev --optimize-autoloader
     npm ci && npm run build
    @@ -854,7 +880,7 @@ sudo systemctl reload apache2
    Modalita Fresh Install
    -

    Seleziona questa modalita quando installi Glastree per la prima volta su un server.

    +

    Seleziona questa modalita quando installi l'applicazione per la prima volta su un server.

    Cosa succede durante l'installazione:

    1. Genera APP_KEY per la crittografia