Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Prossima revisione | Revisione precedente | ||
| python:django:how_to_deploy_on_apache_ubuntu [2025/11/22 02:17] – creata apressato | python:django:how_to_deploy_on_apache_ubuntu [2025/11/22 04:13] (versione attuale) – FIX apressato | ||
|---|---|---|---|
| Linea 6: | Linea 6: | ||
| ===== 1. Configurare il backend Web ===== | ===== 1. Configurare il backend Web ===== | ||
| - | ==== 1.1. Configurazione | + | ==== 1.1. Configurazione |
| === 1.1.1. Installazione software per l' | === 1.1.1. Installazione software per l' | ||
| Loggarsi come utente <# | Loggarsi come utente <# | ||
| Linea 18: | Linea 18: | ||
| Settaggio della variabile necessaria per usare **//uv//** | Settaggio della variabile necessaria per usare **//uv//** | ||
| < | < | ||
| + | |||
| + | Creare la seguente struttura di cartelle | ||
| + | < | ||
| + | |||
| + | Copiare il progetto django nella cartella <# | ||
| + | |||
| + | Spostarsi nella cartella del progetto | ||
| + | < | ||
| + | |||
| + | === 1.1.2. Ambiente Virtuale e Librerie === | ||
| + | |||
| + | == Creazione virtual environment con UV == | ||
| + | Se il progetto contiene giá un file //'' | ||
| + | < | ||
| + | |||
| + | Se contiene solo il file //'' | ||
| + | <cli> | ||
| + | uv venv .venv | ||
| + | uv pip install -r requirements.txt | ||
| + | </ | ||
| + | |||
| + | Una volta installati tutti i pacchetti necessari aggiungere i seguenti | ||
| + | <cli> | ||
| + | uv pip install daphne | ||
| + | uv pip install channels | ||
| + | uv pip install gunicorn | ||
| + | </ | ||
| + | |||
| + | == Creazione virtual environment con VENV/PIP == | ||
| + | Se siete tradizionalisti e preferite usare i vecchi strumenti | ||
| + | <cli> | ||
| + | python3 -m venv .venv | ||
| + | source venv/ | ||
| + | |||
| + | pip install --upgrade pip | ||
| + | pip install -r requirements.txt | ||
| + | pip install daphne | ||
| + | pip install channels | ||
| + | pip install gunicorn | ||
| + | </ | ||
| + | |||
| + | === 1.1.3. Modifiche a '' | ||
| + | Il file settings richiede alcune modifiche post deploy per il corretto funzionamento. | ||
| + | < | ||
| + | Quello seguente é un esempio di '' | ||
| + | < | ||
| + | # / | ||
| + | |||
| + | import os | ||
| + | from pathlib import Path | ||
| + | |||
| + | BASE_DIR = Path(__file__).resolve().parent.parent | ||
| + | |||
| + | # SECURITY WARNING: keep the secret key used in production secret! | ||
| + | SECRET_KEY = ' | ||
| + | |||
| + | # SECURITY WARNING: don't run with debug turned on in production! | ||
| + | DEBUG = False | ||
| + | |||
| + | ALLOWED_HOSTS = [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ] | ||
| + | |||
| + | # Application definition | ||
| + | INSTALLED_APPS = [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | # ... tue app | ||
| + | ] | ||
| + | |||
| + | MIDDLEWARE = [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ] | ||
| + | |||
| + | ROOT_URLCONF = '<# | ||
| + | |||
| + | # IMPORTANTE: Configura per sottocartella | ||
| + | FORCE_SCRIPT_NAME = '/<# | ||
| + | |||
| + | TEMPLATES = [ | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | }, | ||
| + | }, | ||
| + | ] | ||
| + | |||
| + | # ASGI | ||
| + | ASGI_APPLICATION = ' | ||
| + | |||
| + | # Database (esempio con SQLite) | ||
| + | DATABASES = { | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Static files (CSS, JavaScript, Images) | ||
| + | STATIC_URL = '/<# | ||
| + | STATIC_ROOT = os.path.join(BASE_DIR, | ||
| + | |||
| + | # Media files | ||
| + | MEDIA_URL = '/<# | ||
| + | MEDIA_ROOT = os.path.join(BASE_DIR, | ||
| + | |||
| + | # CSRF trusted origins (importante!) | ||
| + | CSRF_TRUSTED_ORIGINS = [ | ||
| + | ' | ||
| + | ' | ||
| + | ] | ||
| + | |||
| + | # Configurazione per sottocartella | ||
| + | USE_X_FORWARDED_HOST = True | ||
| + | </ | ||
| + | |||
| + | === 1.1.4. Ultimi ritocchi al progetto === | ||
| + | Preparazione il DB | ||
| + | <cli> | ||
| + | uv run manage.py makemigrations | ||
| + | uv run manage.py migrate | ||
| + | </ | ||
| + | |||
| + | Creiamo / aggiorniamo la cartella '' | ||
| + | < | ||
| Tornare all' | Tornare all' | ||
| < | < | ||
| + | |||
| + | ==== 2.1. Configurare Daphne con Systemd ==== | ||
| + | === 2.1.1. Creare il service file === | ||
| + | < | ||
| + | === 2.1.2. Contenuto del service file === | ||
| + | < | ||
| + | [Unit] | ||
| + | Description=Daphne ASGI Server per <# | ||
| + | After=network.target | ||
| + | |||
| + | [Service] | ||
| + | Type=simple | ||
| + | User=<# | ||
| + | Group=<# | ||
| + | WorkingDirectory=/ | ||
| + | Environment=" | ||
| + | Environment=" | ||
| + | |||
| + | ExecStart=/ | ||
| + | -b 127.0.0.1 \ | ||
| + | -p 8001 \ | ||
| + | --proxy-headers \ | ||
| + | --access-log - \ | ||
| + | <# | ||
| + | |||
| + | Restart=on-failure | ||
| + | RestartSec=5s | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | === 2.1.3 Avviare il servizio === | ||
| + | <cli> | ||
| + | sudo systemctl daemon-reload | ||
| + | sudo systemctl start daphne-<# | ||
| + | sudo systemctl enable daphne-<# | ||
| + | sudo systemctl status daphne-<# | ||
| + | </ | ||
| + | |||
| + | ==== 3.1 Configurare Apache ==== | ||
| + | === 3.1.1 Backup della configurazione esistente === | ||
| + | <cli> | ||
| + | sudo cp / | ||
| + | </ | ||
| + | |||
| + | === 3.1.2. Modificare 010-miosito.com.conf === | ||
| + | < | ||
| + | |||
| + | === 3.1.3. Configurazione da aggiungere === | ||
| + | < | ||
| + | # ===== CONFIGURAZIONE DJANGO - SOTTOCARTELLA ===== | ||
| + | |||
| + | # File statici Django | ||
| + | Alias /<# | ||
| + | < | ||
| + | Require all granted | ||
| + | Options -Indexes | ||
| + | </ | ||
| + | |||
| + | # File media Django | ||
| + | Alias /<# | ||
| + | < | ||
| + | Require all granted | ||
| + | Options -Indexes | ||
| + | </ | ||
| + | |||
| + | # Proxy per Django (sottocartella) | ||
| + | ProxyPreserveHost On | ||
| + | |||
| + | # Non fare proxy di static e media | ||
| + | ProxyPass /<# | ||
| + | ProxyPass /<# | ||
| + | |||
| + | # WebSocket per Django (se necessario) | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{HTTP: | ||
| + | RewriteCond %{HTTP: | ||
| + | RewriteRule ^/<# | ||
| + | |||
| + | # Proxy HTTP per Django | ||
| + | ProxyPass /<# | ||
| + | ProxyPassReverse /<# | ||
| + | </ | ||
| + | |||
| + | ==== 4.1 Impostare i Permessi ==== | ||
| + | Dare ownership all' | ||
| + | <cli> | ||
| + | sudo chown -R <# | ||
| + | sudo chown -R <# | ||
| + | sudo chown -R <# | ||
| + | </ | ||
| + | |||
| + | Permessi corretti | ||
| + | <cli> | ||
| + | sudo chmod -R 755 / | ||
| + | sudo chmod -R 775 / | ||
| + | sudo chmod -R 775 / | ||
| + | sudo chmod 644 / | ||
| + | </ | ||
| + | |||
| + | Permettere ad Apache di leggere i file | ||
| + | <cli> | ||
| + | sudo chmod 755 / | ||
| + | sudo chmod 755 / | ||
| + | </ | ||
| + | |||
| + | Ricaricare la configurazione | ||
| + | < | ||
| + | |||
| + | ===== 2. Controlli ===== | ||
| + | ==== 2.1. Controlla il file di servizio ==== | ||
| + | <cli> | ||
| + | sudo systemctl cat daphne-<# | ||
| + | </ | ||
| + | |||
| + | ==== 2.2. Verifica lo status dettagliato ==== | ||
| + | <cli> | ||
| + | sudo systemctl status daphne-<# | ||
| + | </ | ||
| + | |||
| + | ==== 2.3. Controlla i log completi ==== | ||
| + | <cli> | ||
| + | sudo journalctl -u daphne-<# | ||
| + | </ | ||
| + | Per capire quale file settings.py viene caricato | ||
| + | li> | ||
| + | sudo journalctl -u daphne-<# | ||
| + | </ | ||
| + | |||
| + | ===== 3. Test ===== | ||
| + | ==== 3.1. Riavviare il servizio Dafne ==== | ||
| + | Il file settings.py viene caricato all' | ||
| + | Quindi prima di testare riavviare il servizio. | ||
| + | <cli> | ||
| + | sudo systemctl restart daphne-<# | ||
| + | </ | ||
| + | |||
| + | ==== 3.2. Test di Accesso ==== | ||
| + | Per testare aprire un bowser e puntare a **http:// | ||

