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 @@
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).
/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
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:
+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.
+ 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!';
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:
/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
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:
APP_KEY per la crittografiaSegui 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).
/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
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:
+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.
+ 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!';
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:
/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
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:
APP_KEY per la crittografia