startSection('title', 'Guida - ' . $appName); ?> startSection('page_title', 'Guida alla Configurazione'); ?> startSection('breadcrumbs'); ?>
WebDAV è un protocollo che permette di accedere a file su server remoti. Nextcloud lo utilizza per la sincronizzazione dei file.
Vai in Impostazioni → Repository e crea un nuovo repository di tipo WebDAV.
https://tuodominio.it/remote.php/dav/files/utente/
https://server.webdav.it//Documenti/). Lascia / per usare la root.Basic per la maggior parte dei server (Nextcloud, ownCloud).Se il tuo nome utente contiene il carattere @ (es. mario.rossi@azienda.com), segui queste regole:
https://server.it/remote.php/dav/files/mario.rossi%40azienda.com/
@ diventa %40)@ vera.%40) e l'autenticazione (che usa la @ reale).
Dopo aver salvato, usa il pulsante Test nella tabella dei repository per verificare che la connessione funzioni.
Apri la sezione Documenti, clicca sul pulsante del repository nella toolbar per sfogliare i file remoti, poi clicca Salva tra i documenti su un file per importarlo come documento locale.
Integrazione con Google Drive per sfogliare e importare file direttamente dal tuo spazio Google Drive.
https://drive.google.com/drive/folders/ID_QUI)Se vedi l'errore "Google Drive API non abilitata" nel test connessione, significa che l'API Drive non è stata attivata nel tuo progetto Google Cloud.
Vai su https://console.developers.google.com/apis/api/drive.googleapis.com/overview
Seleziona il progetto corretto dall'header in alto, clicca "Enable" e attendi qualche minuto prima di riprovare.
Stessa procedura di WebDAV: apri Documenti, clicca sul repository Drive, sfoglia i file e usa Salva tra i documenti.
I file creati con Google Workspace (Documenti Google, Fogli Google, Presentazioni Google, Disegni Google) non possono essere scaricati direttamente perché non hanno un formato binario nativo.
Il sistema li converte automaticamente in formato Office Open XML durante l'import:
| File Google | Formato convertito |
|---|---|
| Documento Google | .docx (Word) |
| Foglio Google | .xlsx (Excel) |
| Presentazione Google | .pptx (PowerPoint) |
| Disegno Google | .png (Immagine) |
| Altri (Moduli, Script) | .pdf (PDF) |
Le tipologie classificano i documenti (avatar, galleria, documento, statuto, altro).
Si gestiscono in Impostazioni → Tipologie Documenti. Puoi aggiungere, rinominare, riordinare ed eliminare tipologie (tranne quelle con documenti associati).
Classificano gli individui (es. socio, volontario, dipendente). Si gestiscono in Impostazioni → Tipologie.
Classificano gli eventi (es. riunione, assemblea, formazione). Si gestiscono in Impostazioni → Tipologie Eventi.
Definiscono il ruolo o la carica di un individuo (es. presidente, segretario, tesoriere). Si gestiscono in Impostazioni → Ruoli.
Ogni documento può avere diversi livelli di visibilità:
Vai in Impostazioni → Email per configurare la posta elettronica.
Usato per ricevere e leggere le email direttamente nell'app.
| Provider | Host | Porta | Crittografia |
|---|---|---|---|
| Gmail | imap.gmail.com | 993 | SSL |
| Outlook/Office 365 | outlook.office365.com | 993 | SSL |
| Libero | imapmail.libero.it | 993 | SSL |
| Aruba | imap.aruba.it | 993 | SSL |
Usato per inviare email dall'app. Supporta account multipli (mittenti).
| Provider | Host | Porta | Crittografia |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | TLS |
| Outlook/Office 365 | smtp.office365.com | 587 | TLS |
| Libero | smtp.libero.it | 465 | SSL |
| Aruba | smtp.aruba.it | 465 | SSL |
Le Mailing List permettono di inviare email a gruppi predefiniti di destinatari.
Dopo aver configurato i server, usa il pulsante Test Connessione per verificare che IMAP e SMTP funzionino correttamente.
Il sistema di backup crea un archivio ZIP contenente tutto il necessario per ripristinare l'applicazione su un nuovo server. Include database, file caricati e configurazione.
| Componente | Incluso | Dettagli |
|---|---|---|
| Database (MySQL) | Sempre | Struttura, dati, stored procedure, eventi, trigger |
| File caricati | Opzionale | Documenti, avatar, gallerie |
| Configurazione .env | Opzionale | APP_KEY, credenziali DB, SMTP, token OAuth |
| Metadati | Sempre | Versione app, PHP, Laravel |
php artisan backup:run
Il file viene creato in storage/app/backups/
Puoi abilitare il backup automatico dalla pagina Admin → Backup:
* * * * * cd && php artisan schedule:run >> /dev/null 2>&1
Segui questa procedura per migrare Glastree su un nuovo server LAMP (Linux, Apache, MySQL, PHP).
L'APP_KEY cripta i dati sensibili (password email SMTP, token OAuth Google Drive, ecc.).
sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 mariadb-server php8.4 php8.4-cli \
php8.4-mysql php8.4-xml php8.4-mbstring php8.4-curl \
php8.4-zip php8.4-bcmath php8.4-gd php8.4-intl \
composer git unzip
sudo a2enmod rewrite
cd /var/www
git clone <URL_REPOSITORY> glastree
cd glastree
composer install --no-dev --optimize-autoloader
npm ci && npm run build
Copia il file backup.zip sul nuovo server e estrailo:
mkdir -p /tmp/restore
unzip backup.zip -d /tmp/restore/
ls -la /tmp/restore/
# Dovresti vedere: database.sql .env files/ manifest.json
sudo mysql -u root <<EOF
CREATE DATABASE glastree CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'glastree'@'localhost' IDENTIFIED BY 'ScegliPasswordFortep4ss!';
GRANT ALL ON glastree.* TO 'glastree'@'localhost';
FLUSH PRIVILEGES;
EOF
mysql -u glastree -p glastree < /tmp/restore/database.sql
cp /tmp/restore/.env .env
# Modifica se necessario:
# APP_URL=https://nuovo-dominio.it
# DB_HOST=localhost
# DB_DATABASE=glastree
# DB_USERNAME=glastree
# DB_PASSWORD=ScegliPasswordFortep4ss!
# DECIDI SULL'APP_KEY (leggi avviso sopra!)
# php artisan key:generate ← SOLO se non hai il .env originale
cp -r /tmp/restore/files/* storage/app/documenti/
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 755 storage bootstrap/cache
php artisan storage:link
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo tee /etc/apache2/sites-available/glastree.conf <<APACHE
<VirtualHost *:80>
ServerName glastree.esempio.it
DocumentRoot /var/www/glastree/public
<Directory /var/www/glastree/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/glastree_error.log
CustomLog \${APACHE_LOG_DIR}/glastree_access.log combined
</VirtualHost>
APACHE
sudo a2dissite 000-default.conf
sudo a2ensite glastree.conf
sudo systemctl reload apache2
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d glastree.esempio.it
sudo crontab -u www-data -e
# Inserisci:
* * * * * cd /var/www/glastree && php artisan schedule:run >> /dev/null 2>&1
L'applicazione include un wizard di installazione web nella cartella installer/. Questo wizard gestisce sia installazioni fresh che ripristino da backup.
Vedi la sezione Installazione per la guida completa.
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:
Database embedded, nessun servizio aggiuntivo. Ideale per demo, test, sviluppo locale o ambienti con poca concorrenza.
Database separato in un container MySQL. Configurazione standard, ideale per produzione, staging e ambienti con piu utenti.
Crea un file Dockerfile nella root del progetto:
FROM php:8.4-apache
# Abilita mod_rewrite
RUN docker-php-ext-enable opcache \
&& a2enmod rewrite
# Installa estensioni PHP (sia SQLite che MySQL)
RUN docker-php-ext-install pdo_mysql pdo_sqlite bcmath gd zip
# Installa Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Configura DocumentRoot per Laravel
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
# Copia l'applicazione
COPY . /var/www/html/
# Installa dipendenze e compila asset
RUN composer install --no-dev --optimize-autoloader \
&& mkdir -p storage/app/public \
&& mkdir -p storage/framework/cache/data \
&& mkdir -p storage/framework/sessions \
&& mkdir -p storage/framework/views \
&& mkdir -p storage/logs \
&& mkdir -p bootstrap/cache \
&& chown -R www-data:www-data storage bootstrap/cache
# Entrypoint per inizializzazione
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]
Crea docker-entrypoint.sh. Lo script rileva automaticamente la configurazione in base alle variabili d'ambiente:
#!/bin/bash
set -e
# Se .env non esiste, lo genera dalle variabili d'ambiente
if [ ! -f .env ]; then
cp .env.example .env
if [ "$DB_CONNECTION" = "mysql" ]; then
# Configura MySQL
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
# Attende che MySQL sia pronto
echo "Attendo 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 pronto."
else
# Configura SQLite
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
# Genera APP_KEY
php artisan key:generate --force
fi
# Esegui migration e seed se il database e vuoto
if [ ! -f .db_initialized ]; then
php artisan migrate --force
php artisan db:seed --force
touch .db_initialized
fi
# Configura storage link
php artisan storage:link --force 2>/dev/null || true
exec "$@"
chmod +x docker-entrypoint.sh
Per includere tipologie documenti, tipologie eventi e ruoli, crea un seeder dedicato:
php artisan make:seeder DockerBaseDataSeeder
Contenuto di database/seeders/DockerBaseDataSeeder.php:
<?php
declare(strict_types=1);
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DockerBaseDataSeeder extends Seeder
{
public function run(): void
{
// Tipologie Documenti
$tipologieDoc = ['documento', 'avatar', 'galleria', 'statuto', 'programma', 'locandina', 'altro'];
foreach ($tipologieDoc as $ord => $nome) {
DB::table('tipologie_documenti')->updateOrInsert(
['nome' => $nome],
['descrizione' => ucfirst($nome), 'ordine' => $ord + 1, 'attiva' => true]
);
}
// Tipologie Eventi
$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
$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]
);
}
}
}
Registralo in database/seeders/DatabaseSeeder.php:
$this->call([
// ... altri seeder ...
DockerBaseDataSeeder::class,
]);
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:
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:
# Costruisci l'immagine (comune)
docker build -t glastree:latest .
# Avvia con SQLite
docker compose -f docker-compose.yml up -d
# Oppure avvia con MySQL
# docker compose -f docker-compose.mysql.yml up -d
# Apri nel browser
open http://localhost:8080
Al primo avvio, l'entrypoint esegue automaticamente migration e seed. Troverai gia popolati:
Dovrai creare il primo utente amministratore via CLI:
docker exec -it glastree php artisan tinker --execute="
\$u = new \App\Models\User;
\$u->name = 'Amministratore';
\$u->email = 'admin@esempio.it';
\$u->password = bcrypt('password-forte');
\$u->is_admin = true;
\$u->permissions = ['individui' => 2, 'gruppi' => 2, 'eventi' => 2, 'documenti' => 2, 'mailing' => 2, 'viste' => 2, 'report' => 2, 'settings' => 2];
\$u->save();
echo 'Utente creato con successo!';
"
MYSQL_PASSWORD e MYSQL_ROOT_PASSWORDdocker-compose.yml per SQLite, docker-compose.mysql.yml per MySQL) e scegliere con -fGlastree include un wizard di installazione web che guida passo-passo nella configurazione su un nuovo server LAMP. Supporta due modalita:
Installa l'applicazione da zero su un nuovo server: crea il database, esegue le migration, popola i dati di base e crea l'amministratore.
Ripristina un'installazione esistente da un file ZIP di backup: importa il database, ripristina i documenti e la configurazione.
| Componente | Versione Minima | Note |
|---|---|---|
| Web Server | Apache 2.4+ | Con mod_rewrite abilitato |
| PHP | 8.2+ (consigliato 8.4) | Estensioni: pdo_mysql, mbstring, xml, curl, zip, gd, fileinfo |
| MySQL / MariaDB | MySQL 8.0+ / MariaDB 10.5+ | Supporto utf8mb4 |
| Composer | 2.x | Per gestione dipendenze PHP |
| Node.js / npm | Node 20+ / npm 10+ | Per compilazione asset frontend (opzionale se precompilati) |
sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 mariadb-server php8.4 php8.4-cli \
php8.4-mysql php8.4-xml php8.4-mbstring php8.4-curl \
php8.4-zip php8.4-bcmath php8.4-gd php8.4-intl \
composer git unzip
sudo a2enmod rewrite
sudo systemctl restart apache2
cd /var/www
git clone <URL_REPOSITORY> glastree
cd glastree
composer install --no-dev --optimize-autoloader
npm ci && npm run build
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
sudo tee /etc/apache2/sites-available/glastree.conf <<APACHE
<VirtualHost *:80>
ServerName glastree.esempio.it
DocumentRoot /var/www/glastree/public
<Directory /var/www/glastree/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/glastree_error.log
CustomLog \${APACHE_LOG_DIR}/glastree_access.log combined
</VirtualHost>
APACHE
sudo a2dissite 000-default.conf
sudo a2ensite glastree.conf
sudo systemctl reload apache2
Apri il browser e visita l'indirizzo del tuo server:
http://glastree.esempio.it/installer/
Il wizard ti guidera attraverso 6 passi:
| Passo | Descrizione |
|---|---|
| 1. Benvenuto | Scegli Fresh Install o Restore da Backup |
| 2. Requisiti | Verifica PHP, estensioni e permessi |
| 3. Database | Configura MySQL (crea nuovo o usa esistente) |
| 4. Installazione | Fresh: migration e seed. Backup: upload ZIP |
| 5. Amministratore | Fresh: crea super-admin. Backup: verifica utenti |
| 6. Finalizzazione | Cache, storage link, auto-eliminazione installer |
installer/ viene automaticamente eliminata. Non puoi rieseguire l'installazione se non ricreando manualmente la cartella.
Seleziona questa modalita quando installi Glastree per la prima volta su un server.
Cosa succede durante l'installazione:
APP_KEY per la crittografiastorage → public/storageSeleziona questa modalita quando vuoi migrare un'installazione esistente su un nuovo server.
Cosa serve:
Cosa succede durante il restore:
database.sql nel database MySQL configuratostorage/app/documenti/.env dal backup (preservando le credenziali DB del nuovo server)sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d glastree.esempio.it
sudo crontab -u www-data -e
# Inserisci:
* * * * * cd /var/www/glastree && php artisan schedule:run >> /dev/null 2>&1
Probabilmente mancano permessi sulle cartelle storage o bootstrap/cache:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
APP_KEY non generata. Nella cartella dell'app:
php artisan key:generate
Se le rotte restituiscono 404, verifica che Apache abbia AllowOverride:
sudo a2enmod rewrite
# Nel VirtualHost: AllowOverride All
sudo systemctl reload apache2