first commit
This commit is contained in:
222
README.md
Normal file
222
README.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# Vue Demo - Pagina di Benvenuto
|
||||
|
||||
Progetto demo Vue.js con deploy automatico tramite Docker, Traefik e Gitea Actions.
|
||||
|
||||
## Requisiti
|
||||
|
||||
- Node.js 20+
|
||||
- Docker e Docker Compose
|
||||
- Traefik come reverse proxy (sul server di produzione)
|
||||
- Gitea con Actions abilitato (per CI/CD)
|
||||
|
||||
## Sviluppo Locale
|
||||
|
||||
```bash
|
||||
# Installa dipendenze
|
||||
npm install
|
||||
|
||||
# Avvia server di sviluppo
|
||||
npm run dev
|
||||
|
||||
# Build per produzione
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Deploy con Docker e Traefik
|
||||
|
||||
### Prerequisiti Server
|
||||
|
||||
Il server deve avere:
|
||||
1. Docker e Docker Compose installati
|
||||
2. Traefik configurato e in esecuzione
|
||||
3. Una rete Docker chiamata `traefik-network`
|
||||
|
||||
Se non hai ancora la rete Traefik, creala con:
|
||||
```bash
|
||||
docker network create traefik-network
|
||||
```
|
||||
|
||||
### Configurazione
|
||||
|
||||
1. Copia il file di esempio delle variabili d'ambiente:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. Modifica il file [.env](.env) con il tuo dominio:
|
||||
```env
|
||||
DOMAIN=vue-demo.tuodominio.com
|
||||
```
|
||||
|
||||
### Avvio Manuale
|
||||
|
||||
```bash
|
||||
# Build e avvio con docker-compose
|
||||
docker-compose up -d
|
||||
|
||||
# L'applicazione sarà disponibile su https://vue-demo.tuodominio.com
|
||||
```
|
||||
|
||||
### Labels Traefik
|
||||
|
||||
Il [docker-compose.yml](docker-compose.yml) include automaticamente:
|
||||
- Router HTTP con redirect automatico a HTTPS
|
||||
- Router HTTPS con certificati Let's Encrypt
|
||||
- Configurazione del dominio tramite variabile `DOMAIN`
|
||||
- Integrazione con la rete `traefik-network`
|
||||
|
||||
## CI/CD con Gitea Actions
|
||||
|
||||
Il progetto include una configurazione completa per il deploy automatico con Gitea Actions e Traefik.
|
||||
|
||||
### Setup Secrets in Gitea
|
||||
|
||||
Configura i seguenti secrets nel tuo repository Gitea (Settings → Secrets):
|
||||
|
||||
| Secret | Descrizione | Esempio |
|
||||
|--------|-------------|---------|
|
||||
| `SERVER_HOST` | IP o hostname del server | `192.168.1.100` o `server.example.com` |
|
||||
| `SERVER_USER` | Username SSH | `deployer` |
|
||||
| `SSH_PRIVATE_KEY` | Chiave privata SSH (completa) | `-----BEGIN OPENSSH PRIVATE KEY-----...` |
|
||||
| `DEPLOY_PATH` | Path di deploy sul server | `/opt/vue-demo` |
|
||||
| `DOMAIN` | Dominio dell'applicazione | `vue-demo.example.com` |
|
||||
|
||||
### Workflow Automatico
|
||||
|
||||
Il workflow in [.gitea/workflows/deploy.yml](.gitea/workflows/deploy.yml) esegue automaticamente:
|
||||
|
||||
1. **Build**:
|
||||
- Checkout del codice
|
||||
- Installazione dipendenze Node.js
|
||||
- Build dell'applicazione Vue
|
||||
|
||||
2. **Deploy** (solo su push a `main`/`master`):
|
||||
- Build dell'immagine Docker
|
||||
- Upload dell'immagine al server via SSH
|
||||
- Creazione automatica del file `.env` con il dominio
|
||||
- Verifica/creazione della rete `traefik-network`
|
||||
- Deploy del container con docker-compose
|
||||
- Cleanup delle vecchie immagini
|
||||
|
||||
### Configurazione Server
|
||||
|
||||
Sul server di produzione, assicurati che:
|
||||
|
||||
1. **Traefik sia configurato** con:
|
||||
- Entrypoint `web` (porta 80)
|
||||
- Entrypoint `websecure` (porta 443)
|
||||
- Cert resolver `letsencrypt` configurato
|
||||
|
||||
2. **La directory di deploy esista**:
|
||||
```bash
|
||||
mkdir -p /opt/vue-demo
|
||||
chown deployer:deployer /opt/vue-demo
|
||||
```
|
||||
|
||||
3. **L'utente SSH abbia accesso a Docker**:
|
||||
```bash
|
||||
usermod -aG docker deployer
|
||||
```
|
||||
|
||||
### Esempio Configurazione Traefik
|
||||
|
||||
Se non hai ancora Traefik configurato, ecco un esempio base:
|
||||
|
||||
```yaml
|
||||
# traefik/docker-compose.yml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v2.10
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- "--api.dashboard=true"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.web.address=:80"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--certificatesresolvers.letsencrypt.acme.email=tua-email@example.com"
|
||||
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
|
||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./letsencrypt:/letsencrypt
|
||||
networks:
|
||||
- traefik-network
|
||||
|
||||
networks:
|
||||
traefik-network:
|
||||
external: true
|
||||
```
|
||||
|
||||
## Struttura File
|
||||
|
||||
### Docker
|
||||
- [Dockerfile](Dockerfile) - Multi-stage build con Node.js e Nginx
|
||||
- [docker-compose.yml](docker-compose.yml) - Orchestrazione container con labels Traefik
|
||||
- [nginx.conf](nginx.conf) - Configurazione Nginx per SPA
|
||||
- [.dockerignore](.dockerignore) - File esclusi dal build Docker
|
||||
|
||||
### CI/CD
|
||||
- [.gitea/workflows/deploy.yml](.gitea/workflows/deploy.yml) - Pipeline CI/CD completa
|
||||
- [.env.example](.env.example) - Template variabili d'ambiente
|
||||
|
||||
### Applicazione
|
||||
- [src/App.vue](src/App.vue) - Componente principale con pagina di benvenuto
|
||||
- [src/main.js](src/main.js) - Bootstrap applicazione Vue
|
||||
- [index.html](index.html) - File HTML principale
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Il sito non è raggiungibile
|
||||
|
||||
1. Verifica che Traefik sia in esecuzione:
|
||||
```bash
|
||||
docker ps | grep traefik
|
||||
```
|
||||
|
||||
2. Controlla i logs del container:
|
||||
```bash
|
||||
docker logs vue-demo-app
|
||||
```
|
||||
|
||||
3. Verifica che il dominio punti al server corretto
|
||||
|
||||
### Certificato SSL non viene generato
|
||||
|
||||
1. Verifica la configurazione Let's Encrypt in Traefik
|
||||
2. Assicurati che il dominio sia raggiungibile pubblicamente sulla porta 80
|
||||
3. Controlla i logs di Traefik:
|
||||
```bash
|
||||
docker logs traefik
|
||||
```
|
||||
|
||||
### Deploy fallisce
|
||||
|
||||
1. Verifica i secrets in Gitea
|
||||
2. Controlla che l'utente SSH abbia i permessi corretti
|
||||
3. Verifica che la rete `traefik-network` esista sul server
|
||||
|
||||
## Comandi Utili
|
||||
|
||||
```bash
|
||||
# Visualizza logs dell'applicazione
|
||||
docker logs vue-demo-app -f
|
||||
|
||||
# Riavvia l'applicazione
|
||||
docker-compose restart
|
||||
|
||||
# Ferma l'applicazione
|
||||
docker-compose down
|
||||
|
||||
# Aggiorna l'applicazione manualmente
|
||||
git pull
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
Reference in New Issue
Block a user