Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
python:django:how_to_deploy_on_apache_ubuntu [2025/11/22 02:17] – creata apressatopython: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 di Apache ====+==== 1.1. Configurazione Progetto ====
 === 1.1.1. Installazione software per l'utente "WebMaster" e creazione Cartelle che ospiteranno il progetto === === 1.1.1. Installazione software per l'utente "WebMaster" e creazione Cartelle che ospiteranno il progetto ===
 Loggarsi come utente <#WebMaster> Loggarsi come utente <#WebMaster>
Linea 18: Linea 18:
 Settaggio della variabile necessaria per usare **//uv//** Settaggio della variabile necessaria per usare **//uv//**
 <cli>source $HOME/.local/bin/env</cli> <cli>source $HOME/.local/bin/env</cli>
 +
 +Creare la seguente struttura di cartelle
 +<cli>mkdir -p /home/<#webmaster>/www/django/<#djangoprj></cli>
 +
 +Copiare il progetto django nella cartella <#djangoprj> usando SCP o clonando il progetto da github/gitlab.
 +
 +Spostarsi nella cartella del progetto
 +<cli>cd /home/<#webmaster>/www/django/<#djangoprj></cli>
 +
 +=== 1.1.2. Ambiente Virtuale e Librerie ===
 +
 +== Creazione virtual environment con UV ==
 +Se il progetto contiene giá un file //''pyproject.toml''// usare
 +<cli>uv sync</cli>
 +
 +Se contiene solo il file //''requirements.txt''// usare
 +<cli>
 +uv venv .venv
 +uv pip install -r requirements.txt
 +</cli>
 +
 +Una volta installati tutti i pacchetti necessari aggiungere i seguenti
 +<cli>
 +uv pip install daphne
 +uv pip install channels  # Se usi WebSocket
 +uv pip install gunicorn  # Opzionale, alternativa a Daphne
 +</cli>
 +
 +== Creazione virtual environment con VENV/PIP ==
 +Se siete tradizionalisti e preferite usare i vecchi strumenti
 +<cli>
 +python3 -m venv .venv
 +source venv/bin/activate
 +
 +pip install --upgrade pip
 +pip install -r requirements.txt
 +pip install daphne
 +pip install channels  # Se usi WebSocket
 +pip install gunicorn  # Opzionale, alternativa a Daphne
 +</cli>
 +
 +=== 1.1.3. Modifiche a ''settings.py'' ===
 +Il file settings richiede alcune modifiche post deploy per il corretto funzionamento.
 +<cli>nano /home/<#webmaster>/www/django/<#djangoprj>/<#djangoprj>/settings.py</cli>
 +Quello seguente é un esempio di ''settings.py'' per mostrare i punti da modificare
 +<file>
 +# /home/<#webmaster>/www/django/<#djangoprj>/<#djangoprj>/settings.py
 +
 +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 = 'tua-chiave-segreta-super-sicura'
 +
 +# SECURITY WARNING: don't run with debug turned on in production!
 +DEBUG = False
 +
 +ALLOWED_HOSTS = [
 +    'miosito.com',
 +    'www.miosito.com',
 +    'your-server-ip',  # Aggiungi l'IP del server
 +]
 +
 +# Application definition
 +INSTALLED_APPS = [
 +    'daphne',  # Per ASGI - metti per primo!
 +    'django.contrib.admin',
 +    'django.contrib.auth',
 +    'django.contrib.contenttypes',
 +    'django.contrib.sessions',
 +    'django.contrib.messages',
 +    'django.contrib.staticfiles',
 +    # ... tue app
 +]
 +
 +MIDDLEWARE = [
 +    'django.middleware.security.SecurityMiddleware',
 +    'django.contrib.sessions.middleware.SessionMiddleware',
 +    'django.middleware.common.CommonMiddleware',
 +    'django.middleware.csrf.CsrfViewMiddleware',
 +    'django.contrib.auth.middleware.AuthenticationMiddleware',
 +    'django.contrib.messages.middleware.MessageMiddleware',
 +    'django.middleware.clickjacking.XFrameOptionsMiddleware',
 +]
 +
 +ROOT_URLCONF = '<#djangoprj>.urls'
 +
 +# IMPORTANTE: Configura per sottocartella
 +FORCE_SCRIPT_NAME = '/<#djangoprj>'  # Necessario per miosito.com/<#djangoprj>
 +
 +TEMPLATES = [
 +    {
 +        'BACKEND': 'django.template.backends.django.DjangoTemplates',
 +        'DIRS': [],
 +        'APP_DIRS': True,
 +        'OPTIONS': {
 +            'context_processors': [
 +                'django.template.context_processors.debug',
 +                'django.template.context_processors.request',
 +                'django.contrib.auth.context_processors.auth',
 +                'django.contrib.messages.context_processors.messages',
 +            ],
 +        },
 +    },
 +]
 +
 +# ASGI
 +ASGI_APPLICATION = 'myproject.asgi.application'
 +
 +# Database (esempio con SQLite)
 +DATABASES = {
 +    'default': {
 +        'ENGINE': 'django.db.backends.sqlite3',
 +        'NAME': BASE_DIR / 'db' / 'db.sqlite3',
 +    }
 +}
 +
 +# Static files (CSS, JavaScript, Images)
 +STATIC_URL = '/<#djangoprj>/static/'  # Per sottocartella
 +STATIC_ROOT = os.path.join(BASE_DIR, 'static')
 +
 +# Media files
 +MEDIA_URL = '/<#djangoprj>/media/'  # Per sottocartella
 +MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
 +
 +# CSRF trusted origins (importante!)
 +CSRF_TRUSTED_ORIGINS = [
 +    'http://miosito.com',
 +    'https://miosito.com',
 +]
 +
 +# Configurazione per sottocartella
 +USE_X_FORWARDED_HOST = True
 +</file>
 +
 +=== 1.1.4. Ultimi ritocchi al progetto ===
 +Preparazione il DB
 +<cli>
 +uv run manage.py makemigrations
 +uv run manage.py migrate
 +</cli>
 +
 +Creiamo / aggiorniamo la cartella ''staticfiles''
 +<cli>uv run manage.py collectstatic --noinput</cli>
  
 Tornare all'utente precedente Tornare all'utente precedente
 <cli>exit</cli> <cli>exit</cli>
 +
 +==== 2.1. Configurare Daphne con Systemd ====
 +=== 2.1.1. Creare il service file ===
 +<cli>sudo nano /etc/systemd/system/daphne-<#djangoprj>.service</cli>
 +=== 2.1.2. Contenuto del service file ===
 +<file>
 +[Unit]
 +Description=Daphne ASGI Server per <#djangoprj>
 +After=network.target
 +
 +[Service]
 +Type=simple
 +User=<#webmaster>
 +Group=<#webmaster>
 +WorkingDirectory=/home/<#webmaster>/www/django/<#djangoprj>
 +Environment="PATH=/home/<#webmaster>/www/django/<#djangoprj>/.venv/bin"
 +Environment="DJANGO_SETTINGS_MODULE=<#djangoprj>.settings"
 +
 +ExecStart=/home/<#webmaster>/www/django/<#djangoprj>/.venv/bin/daphne \
 +    -b 127.0.0.1 \
 +    -p 8001 \
 +    --proxy-headers \
 +    --access-log - \
 +    <#djangoprj>.asgi:application
 +
 +Restart=on-failure
 +RestartSec=5s
 +
 +[Install]
 +WantedBy=multi-user.target
 +</file>
 +
 +=== 2.1.3 Avviare il servizio ===
 +<cli>
 +sudo systemctl daemon-reload
 +sudo systemctl start daphne-<#djangoprj>
 +sudo systemctl enable daphne-<#djangoprj>
 +sudo systemctl status daphne-<#djangoprj>
 +</cli>
 +
 +==== 3.1 Configurare Apache ====
 +=== 3.1.1 Backup della configurazione esistente ===
 +<cli>
 +sudo cp /etc/apache2/sites-available/010-miosito.com.conf /etc/apache2/sites-available/010-miosito.com.conf.backup
 +</cli>
 +
 +=== 3.1.2. Modificare 010-miosito.com.conf ===
 +<cli>sudo nano /etc/apache2/sites-available/010-miosito.com.conf</cli>
 +
 +=== 3.1.3. Configurazione da aggiungere ===
 +<file>
 +    # ===== CONFIGURAZIONE DJANGO - SOTTOCARTELLA =====
 +
 +    # File statici Django
 +    Alias /<#djangoprj>/static /home/<#webmaster>/www/django/<#djangoprj>/staticfiles
 +    <Directory /home/<#webmaster>/www/django/<#djangoprj>/staticfiles>
 +        Require all granted
 +        Options -Indexes
 +    </Directory>
 +
 +    # File media Django
 +    Alias /<#djangoprj>/media /home/<#webmaster>/www/django/<#djangoprj>/media
 +    <Directory /home/<#webmaster>/www/django/<#djangoprj>/media>
 +        Require all granted
 +        Options -Indexes
 +    </Directory>
 +
 +    # Proxy per Django (sottocartella)
 +    ProxyPreserveHost On
 +
 +    # Non fare proxy di static e media
 +    ProxyPass /<#djangoprj>/static !
 +    ProxyPass /<#djangoprj>/media !
 +
 +    # WebSocket per Django (se necessario)
 +    RewriteEngine On
 +    RewriteCond %{HTTP:Upgrade} ^websocket$ [NC]
 +    RewriteCond %{HTTP:Connection} ^upgrade$ [NC]
 +    RewriteRule ^/<#djangoprj>/(.*)$ ws://127.0.0.1:8001/$1 [P,L]
 +
 +    # Proxy HTTP per Django
 +    ProxyPass /<#djangoprj> http://127.0.0.1:8001/<#djangoprj>
 +    ProxyPassReverse /<#djangoprj> http://127.0.0.1:8001/<#djangoprj>
 +</file>
 +
 +==== 4.1 Impostare i Permessi ====
 +Dare ownership all'utente webmaster ed al gruppo www-data
 +<cli>
 +sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/django
 +sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/django/<#djangoprj>/staticfiles/
 +sudo chown -R <#webmaster>:www-data /home/<#webmaster>/www/django/<#djangoprj>/media/
 +</cli>
 +
 +Permessi corretti
 +<cli>
 +sudo chmod -R 755 /home/<#webmaster>/www/django/<#djangoprj>
 +sudo chmod -R 775 /home/<#webmaster>/www/django/<#djangoprj>/media
 +sudo chmod -R 775 /home/<#webmaster>/www/django/<#djangoprj>/db # Se usi SQLite
 +sudo chmod 644 /home/<#webmaster>/www/django/<#djangoprj>/db/db.sqlite3  # Se usi SQLite
 +</cli>
 +
 +Permettere ad Apache di leggere i file
 +<cli>
 +sudo chmod 755 /home/<#webmaster>
 +sudo chmod 755 /home/<#webmaster>/www
 +</cli>
 +
 +Ricaricare la configurazione
 +<cli>sudo systemctl restart apache2</cli>
 +
 +===== 2. Controlli =====
 +==== 2.1. Controlla il file di servizio ====
 +<cli>
 +sudo systemctl cat daphne-<#djangoprj>.service
 +</cli>
 +
 +==== 2.2. Verifica lo status dettagliato ====
 +<cli>
 +sudo systemctl status daphne-<#djangoprj>.service -l
 +</cli>
 +
 +==== 2.3. Controlla i log completi ====
 +<cli>
 +sudo journalctl -u daphne-<#djangoprj>.service -n 50 --no-pager
 +</cli>
 +Per capire quale file settings.py viene caricato
 +li>
 +sudo journalctl -u daphne-<#djangoprj>.service -n 100 --no-pager
 +</cli>
 +
 +===== 3. Test =====
 +==== 3.1. Riavviare il servizio Dafne ====
 +Il file settings.py viene caricato all'avvio del servizio, qualsiasi variazione non viene presa in considerazione se non riavviando il servizio. \\ 
 +Quindi prima di testare riavviare il servizio.
 +<cli>
 +sudo systemctl restart daphne-<#djangoprj>.service
 +</cli>
 +
 +==== 3.2. Test di Accesso ====
 +Per testare aprire un bowser e puntare a **http://[miosito.com]/<#djangoprj>**.
  
python/django/how_to_deploy_on_apache_ubuntu.1763777832.txt.gz · Ultima modifica: 2025/11/22 02:17 da apressato
Torna su
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0