Questa è una vecchia versione del documento!
Indice
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

