Come Distribuire l'Applicazione
Il progetto Salvo, dopo la compilazione, diventa un file eseguibile. Per la distribuzione, è sufficiente caricare questo file eseguibile insieme alle risorse statiche da cui dipende sul server.
Per i progetti in Rust, esiste anche una piattaforma di distribuzione estremamente semplice: shuttle.rs. Shuttle offre supporto per progetti come Salvo. Per maggiori dettagli, consultare la documentazione ufficiale.
Distribuzione con Docker
Puoi anche utilizzare Docker per distribuire applicazioni Salvo. Di seguito è riportato un esempio base di Dockerfile
che puoi adattare in base alle esigenze del tuo progetto:
# Fase di build
FROM rust:slim AS build
WORKDIR /app
# Copia i file delle dipendenze e costruisci prima le dipendenze (sfruttando la cache)
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && \
echo 'fn main() { println!("Placeholder"); }' > src/main.rs && \
cargo build --release
# Copia il codice sorgente effettivo e costruisci l'applicazione
COPY src ./src/
RUN touch src/main.rs && \
cargo build --release
# Fase di esecuzione con immagine base minimale
FROM debian:bookworm-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Crea un utente non-root per eseguire l'applicazione
RUN useradd -ms /bin/bash appuser
USER appuser
WORKDIR /app
# Copia il file binario dalla fase di build
COPY --from=build /app/target/release/nome_tua_app ./app
# Imposta il comando di avvio del container
CMD ["./app"]
Istruzioni per l'uso
- Salva il
Dockerfile
sopra nella root del tuo progetto
- Modifica
nome_tua_app
con il nome effettivo del file binario del tuo progetto
- Se la tua applicazione necessita di file statici (come template, CSS, JS ecc.), puoi aggiungere i relativi comandi
COPY
- Se la tua applicazione richiede configurazioni tramite variabili d'ambiente, puoi usare l'istruzione
ENV
- Costruisci l'immagine Docker:
docker build -t nome-tua-app .
- Esegui il container:
docker run -p 5800:5800 nome-tua-app
Modifica il numero di porta e altre configurazioni in base alle esigenze specifiche della tua applicazione.