Questa è una vecchia versione del documento!


Rilascio di un Progetto Django su Ubuntu con Apache

  • Le informazioni riportate in questa guida danno per scontato che sia stata seguita la guida AMPP Server
  • Come per la guida di cui sopra valgono le convenzioni sui nomi delle variabili usati nella presente guida

1. Configurare il backend Web

1.1. Configurazione di Apache

1.1.1. Installazione software per l'utente "WebMaster" e creazione Cartelle che ospiteranno il progetto

Loggarsi come utente <#WebMaster>

su - <#webmaster>

Installazione del nuovo gestore di pacchetto uv

curl -LsSf https://astral.sh/uv/install.sh | sh

Settaggio della variabile necessaria per usare uv

source $HOME/.local/bin/env

Creare la seguente struttura di cartelle

mkdir -p /home/<#webmaster>/www/django/<#djangoprj>

Copiare il progetto django nella cartella <#djangoprj> usando SCP o clonando il progetto da github/gitlab.

spostarsi nella cartella del progetto

cd /home/<#webmaster>/www/django/<#djangoprj>

1.1.2. Configurare il progetto

Creazione virtual environment con UV

se il progetto contiene giá un file pyproject.toml usare

uv sync

Se contiene solo il file requirements.txt usare

uv venv .venv
uv pip install -r requirements.txt

una volta installati tutti i pacchetti necessari aggiungere i seguenti

uv pip install daphne
uv pip install channels  # Se usi WebSocket
uv pip install gunicorn  # Opzionale, alternativa a Daphne
Creazione virtual environment con VENV/PIP

Se siete tradizionalisti e preferite usare i vecchi strumenti

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

Modifiche a ''settings.py''

Il file settings richiede alcune modifiche post deploy per il corretto funzionamento.

nano /home/<#webmaster>/www/django/<#djangoprj>/<#djangoprj>/settings.py

Quello seguente é un esempio di settings.py per mostrare i punti da modificare

# /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

1.1.3. Ultimi ritocchi al progetto

Preparazione il DB

uv run manage.py makemigrations
uv run manage.py migrate

Creiamo / aggiorniamo la cartella staticfiles

uv run manage.py collectstatic --noinput

Tornare all'utente precedente

exit
python/django/how_to_deploy_on_apache_ubuntu.1763780516.txt.gz · Ultima modifica: 2025/11/22 03:01 da apressato
Torna su
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0