Pubblicare la Sua app creata con Lovable, Bolt o un altro builder IA sul Suo hosting WebOké
Ha creato un'app con Lovable, Bolt o un altro builder IA e desidera pubblicarla sul Suo dominio presso WebOké? È possibile. In questo articolo scoprirà come estrarre il codice dal builder IA, come compilare e caricare l'app e come GitHub può farlo automaticamente per Lei.
1. Che tipo di app ha?
Apra il file package.json nel Suo progetto. Da questo file capisce di che tipo di app si tratta.
- Un'app statica (React con Vite). In
package.jsoncomparevitee nessun framework server. Connpm run buildcrea una cartelladistcon normali file HTML, JavaScript e CSS, che va caricata inpublic_html. Questo funziona con qualsiasi pacchetto di hosting. Molte app di Bolt e le app più vecchie di Lovable sono costruite in questo modo. - Un'app con un proprio server. Dal 13 maggio 2026 Lovable crea app con TanStack Start: in tal caso in
package.jsoncompare@tanstack/react-start. Un'app di questo tipo esegue codice lato server e quindi non funziona come semplici file inpublic_html. Va configurata come app Node.js (vedere il punto 6). Lo stesso vale per altre app con un proprio server, come un backend Express. - Un'app con Supabase o Lovable Cloud come backend. Il database, l'accesso e le funzioni restano in tal caso presso Supabase o Lovable. Su WebOké pubblica soltanto la parte visibile (il front-end). Durante la compilazione deve però indicare l'indirizzo e la chiave pubblica di Supabase (vedere il punto 5).
2. Estrarre il codice dal builder IA tramite GitHub
Lovable e Bolt possono salvare il Suo progetto in un repository GitHub personale. Le modifiche vengono quindi sincronizzate in entrambe le direzioni: ciò che modifica nel builder IA arriva su GitHub e ciò che modifica su GitHub torna nel builder IA.
In Lovable:
- Apra il Suo progetto e vada su Project settings > Git > GitHub.
- Faccia clic su Add connection e conceda all'app Lovable l'accesso al Suo account GitHub.
- Alla voce Accounts faccia clic su Connect. Lovable crea un repository privato e lo mantiene aggiornato.
È possibile anche senza GitHub: con Download codebase in Project settings > Git può scaricare il codice (con un abbonamento Lovable a pagamento).
In Bolt:
- Apra il Suo progetto e faccia clic sull'icona di GitHub in alto a destra.
- Acceda a GitHub, faccia clic su Authorize e installi l'app GitHub di Bolt.
- Inserisca un nome per il repository e faccia clic su Create repository. Da quel momento Bolt lavora nel branch
main.
3. Compilare e caricare un'app statica
L'app va compilata sul Suo computer. A tale scopo serve Node.js, versione 22 (la versione attuale di Vite richiede almeno la 20.19 o la 22.12).
- Recuperi il codice: esegua
git clonedel Suo repository oppure estragga il file scaricato. - Apra un terminale nella cartella del progetto e installi i pacchetti con
npm ci(oppurenpm installse non è presente un filepackage-lock.json). - Compili l'app con
npm run build. Ora è presente una cartelladistcon un fileindex.htmle una cartellaassets. - Carichi il contenuto di
distindomains/ilsuodominio.it/public_html, con un programma FTP o con il File Manager di DirectAdmin. Non carichi quindi la cartelladiststessa, né il codice sorgente onode_modules. - Inserisca il file
.htaccessriportato di seguito inpublic_html.
Un'app con più pagine (un router) mostra nel browser indirizzi come ilsuodominio.it/chi-siamo. Queste pagine non esistono come file sul server. Se aggiorna una pagina di questo tipo o apre direttamente il link, ottiene un errore 404. Con questo file .htaccess il server inoltra tali indirizzi a index.html e l'app mostra la pagina corretta:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^assets/ - [R=404,L]
RewriteRule ^ index.html [L]
I file e le cartelle esistenti vengono mostrati normalmente dal server. Un file mancante in assets restituisce un vero errore 404, così individua più facilmente un problema. Tutto il resto viene inoltrato all'app.
.htaccess nella cartella public del Suo progetto. A ogni compilazione Vite copia tutto il contenuto di public in dist, quindi il file viene sempre caricato insieme al resto. Non vede il file nel Suo programma FTP o nel File Manager? I file che iniziano con un punto a volte sono nascosti, consulti Visualizzare e modificare file nascosti come .htaccess.4. Pubblicare l'app in una sottocartella
Desidera pubblicare l'app non su ilsuodominio.it ma su ilsuodominio.it/app? In tal caso l'app deve saperlo già al momento della compilazione. Altrimenti il browser cerca i file in /assets anziché in /app/assets e la schermata resta bianca.
- In
vite.config.js(ovite.config.ts) imposti l'opzionebase: '/app/'. - Indichi lo stesso percorso al router. Con React Router lo fa con
<BrowserRouter basename={import.meta.env.BASE_URL}>. - Compili di nuovo e carichi il contenuto di
distinpublic_html/app. - In
public_html/app/.htaccessinserisca lo stesso file riportato sopra, conRewriteBase /app/.
5. Supabase, Lovable Cloud e altre impostazioni (variabili env)
Le impostazioni che iniziano con VITE_, come VITE_SUPABASE_URL e VITE_SUPABASE_PUBLISHABLE_KEY (nei progetti meno recenti VITE_SUPABASE_ANON_KEY), vengono inserite da Vite nei file JavaScript durante la build. Non è possibile impostarle successivamente sul server.
- Trova i valori nel file
.envdel Suo progetto. Riporti i nomi esattamente così come sono. - Se il file
.envnon è presente nel Suo progetto, lo crei Lei stesso nella cartella del progetto prima di eseguirenpm run build. Con GitHub Actions li imposta come secret (vedere il punto 7). - Se ha modificato un valore, esegua di nuovo la build e carichi nuovamente l'app.
VITE_ è leggibile da qualsiasi visitatore. La chiave pubblica (publishable o anon key) di Supabase può trovarsi lì, poiché è pensata a questo scopo; Supabase protegge i Suoi dati con regole di sicurezza (row level security). Non inserisca mai la chiave service_role o un'altra chiave segreta in una variabile VITE_.6. Un'app con un proprio server: come app Node.js
Un'app con codice lato server, come un'app TanStack Start creata con Lovable, si configura con Setup Node.js App in DirectAdmin. Come funziona è spiegato in Attivare Node.js in DirectAdmin. Per un'app TanStack Start si procede così:
- Esegua la build dell'app sul Suo computer con
NITRO_PRESET=node-server npm run build. Ora è presente una cartella.output. - Crei un'app in Setup Node.js App, con Node.js 22 e una cartella al di fuori di
public_html, ad esempioapps/myapp. - Carichi la cartella
.outputin quella cartella. - Nella stessa cartella crei un file
start.cjscon questa unica riga e inseriscastart.cjsin Application startup file:import('./.output/server/index.mjs'); - Imposti le impostazioni di cui il server ha bisogno, come
SUPABASE_URLeSUPABASE_PUBLISHABLE_KEY, in Environment variables. - Clicchi su Restart. Lo faccia anche dopo ogni nuovo caricamento.
Il piccolo file start.cjs è necessario perché il server in .output è un modulo JavaScript moderno (.mjs), mentre l'ambiente Node.js carica il file di avvio nel modo tradizionale. Se l'app restituisce un errore 503, controlli il file stderr.log nella cartella della Sua app.
7. Deploy automatico con GitHub Actions
Con GitHub Actions, GitHub compila la Sua app a ogni modifica nel branch main e carica il risultato sul Suo pacchetto. Poiché Lovable e Bolt scrivono su GitHub, una modifica fatta nel builder IA sarà online dopo pochi minuti. La funzione Git di DirectAdmin non compila nulla, si limita a copiare i file; per un'app Vite è quindi più pratico GitHub Actions.
Password e chiavi non vanno mai inserite nel repository, ma salvate come secret in GitHub:
- Apra il Suo repository su GitHub e vada su Settings > Secrets and variables > Actions.
- Clicchi su New repository secret, inserisca il nome e il valore e clicchi su Add secret. Ripeta l'operazione per ogni secret della variante scelta.
- Crei nel Suo repository il file
.github/workflows/deploy.ymlcon uno dei due esempi riportati di seguito. - Dopo la modifica successiva, controlli nella scheda Actions se l'operazione è riuscita. Con Run workflow può avviare il workflow anche manualmente.
Variante A: tramite FTPS (tutti i pacchetti hosting). Crei in DirectAdmin un account FTP dedicato a GitHub, selezionando in Cartella root l'opzione Dominio (vedere Come funziona l'FTP su WebOké?). Secret: FTP_SERVER (il nome del server del Suo pacchetto, ad esempio linux2023.webawere.nl, non il Suo nome di dominio), FTP_USERNAME (il nome completo, ad esempio github@tuodominio.it), FTP_PASSWORD e i valori VITE_ della Sua app.
name: Build and deploy
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run build
env:
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_PUBLISHABLE_KEY: ${{ secrets.VITE_SUPABASE_PUBLISHABLE_KEY }}
- uses: SamKirkland/FTP-Deploy-Action@v4.4.0
with:
server: ${{ secrets.FTP_SERVER }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
protocol: ftps
port: 21
local-dir: ./dist/
server-dir: public_html/
Variante B: tramite SSH con rsync (pacchetti con SSH). L'SSH è incluso in Power Webhost Three e Four, AI Wordpress Three e Power Reseller, sulla porta 1967 e solo con chiave (vedere Accesso SSH e il Terminale in DirectAdmin).
- Crei sul Suo computer una chiave dedicata a GitHub, senza password:
ssh-keygen -t ed25519 -f github-deploy -N "". - Inserisca il contenuto di
github-deploy.pubin DirectAdmin in Chiavi SSH > INCOLLA CHIAVE. - Inserisca il contenuto di
github-deploy(la chiave privata) nel secretSSH_PRIVATE_KEY. Successivamente elimini il file dal Suo computer. - Esegua
ssh-keyscan -p 1967 linux2023.webawere.nle inserisca l'output nel secretSSH_KNOWN_HOSTS. In questo modo GitHub verifica di connettersi davvero al Suo server. - Imposti come secret anche
SSH_HOST(il nome del server),SSH_USER(il Suo nome utente DirectAdmin),DOMEIN(ad esempiotuodominio.it) e i valoriVITE_.
name: Build and deploy
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run build
env:
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_PUBLISHABLE_KEY: ${{ secrets.VITE_SUPABASE_PUBLISHABLE_KEY }}
- name: Deploy
env:
SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
DOMEIN: ${{ secrets.DOMEIN }}
run: |
mkdir -p ~/.ssh
printf '%s\n' "$SSH_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
printf '%s\n' "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
rsync -rlptz --delete --exclude=.well-known --exclude=cgi-bin \
-e "ssh -p 1967 -i ~/.ssh/deploy_key" \
dist/ "$SSH_USER@$SSH_HOST:domains/$DOMEIN/public_html/"
--delete, rsync rimuove da public_html tutto ciò che non fa parte della Sua app, tranne .well-known (necessaria per il Suo certificato SSL) e cgi-bin. Se in public_html si trova altro, ad esempio un secondo sito in una sottocartella, rimuova --delete oppure collochi l'app in una sottocartella dedicata.Se non utilizza Supabase, ometta le righe con VITE_SUPABASE oppure le sostituisca con le variabili VITE_ della Sua app. Se l'accesso non riesce più volte, il server blocca temporaneamente l'indirizzo IP di GitHub. In tal caso controlli i Suoi secret e avvii di nuovo il workflow.
8. Errori frequenti
- La homepage funziona, ma aggiornando la pagina o aprendo un link diretto compare un errore 404. Il file
.htaccessdel punto 3 manca o si trova nella cartella sbagliata. - Una schermata bianca. Apra gli strumenti per sviluppatori del Suo browser (F12) e controlli in Console o Network. Vede errori 404 sui file in
/assets? Allora il percorso non è corretto: ha caricato la cartelladiststessa invece del suo contenuto, oppure l'app si trova in una sottocartella senza ilbasecorretto (punto 4). - L'app si carica, ma l'accesso o i dati non funzionano, oppure vede un messaggio come
supabaseUrl is required. Le variabiliVITE_non erano presenti durante la build. Le inserisca in.envo come secret ed esegua di nuovo la build. - La build non riesce con un messaggio sulla versione di Node.js. Utilizzi Node.js 22, sia sul Suo computer sia nel workflow (
node-version: 22). npm cinon riesce. Non è presente alcunpackage-lock.json, ad esempio perché il progetto ha solo unbun.lock. Esegua una voltanpm installe aggiunga il nuovopackage-lock.jsonal Suo repository.- Nella build non c'è alcun
index.html. Si tratta allora di un'app con un proprio server, come TanStack Start. La configuri come app Node.js (punto 6).
Vedere anche: Connettersi con FileZilla (FTP, FTPS e SFTP) e Chiavi SSH e accesso con SSH.
Spiegazione dettagliata con screenshot: Configurare un'app Node.js nella guida di DirectAdmin.
