---
title: "Πως να χρησιμοποιήσετε το Django με τον Apache και το mod_wsgi"
version: 5.1
locale: el
source: https://docs.djangoproject.com/el/5.1/howto/deployment/wsgi/modwsgi/
canonical: https://djangodocs.dev/el/5.1/howto/deployment/wsgi/modwsgi/
---
# Πως να χρησιμοποιήσετε το Django με τον Apache και το `mod_wsgi`

Το να ανεβάσετε το Django site σας (deploying) στην παραγωγή (production) χρησιμοποιώντας τον [Apache](https://httpd.apache.org/) Web server και το [mod\_wsgi](https://modwsgi.readthedocs.io/en/develop/) είναι μια δοκιμασμένη και πετυχημένη μέθοδος.

Το mod\_wsgi είναι ένα Apache module το οποίο μπορεί να φιλοξενήσει κάθε Python [WSGI](https://wsgi.readthedocs.io/en/latest/) εφαρμογή, συμπεριλαμβανομένου και του Django. Το Django θα δουλέψει με κάθε έκδοση του Apache που υποστηρίζει το mod\_wsgi.

The [official mod\_wsgi documentation](https://modwsgi.readthedocs.io/) is your source for all the details about
how to use mod\_wsgi. You’ll probably want to start with the [installation and
configuration documentation](https://modwsgi.readthedocs.io/en/develop/installation.html).

## Βασική παραμετροποίηση

Once you’ve got mod\_wsgi installed and activated, edit your Apache server’s
[httpd.conf](https://cwiki.apache.org/confluence/display/httpd/DistrosDefaultLayout) file and add the following.

```apache
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
```

Η πρώτη παράμετρος στη γραμμή του `WSGIScriptAlias` είναι το βασικό URL path που θέλετε να εξυπηρετηθεί η εφαρμογή σας (η κάθετος, `/`, υποδεικνύει το root url) και η δεύτερη είναι η τοποθεσία που βρίσκεται το «WSGI file» – δείτε παρακάτω – στο σύστημα σας, συνήθως μέσα στο φάκελο του project σας (`mysite`, σε αυτό το παράδειγμα). Αυτό λέει στον Apache να εξυπηρετήσει κάθε request κάτω από αυτό το url (αν κατέχετε το url με το όνομα πχ www.mysite.com τότε θα εξυπηρετηθούν όλα τα urls που ξεκινούν με αυτό το όνομα) χρησιμοποιώντας την WSGI εφαρμογή η οποία ορίζεται σε αυτό το αρχείο (`wsgi.py`).

If you install your project’s Python dependencies inside a [`virtual
environment`](https://docs.python.org/3/library/venv.html#module-venv), add the path using `WSGIPythonHome`. See the [mod\_wsgi
virtual environment guide](https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html) for more details.

Η γραμμή `WSGIPythonPath` βεβαιώνει ότι το project σας θα είναι διαθέσιμο για να γίνει import στο Python path. Με άλλα λόγια, ότι το `import mysite` δουλεύει.

The `<Directory>` piece ensures that Apache can access your `wsgi.py`
file.

Επόμενο βήμα είναι να σιγουρευτούμε ότι υπάρχει το αρχείο `wsgi.py` με το WSGI application object. Από την έκδοση του Django 1.4 και μετά, η εντολή [`startproject`](/el/5.1/ref/django-admin/#django-admin-startproject) θα δημιουργήσει ένα τέτοιο αρχείο. Αν όχι, θα χρειαστεί να το δημιουργήσετε εσείς. Δείτε στο [εγχειρίδιο του WSGI](/el/5.1/howto/deployment/wsgi/) για τα προεπιλεγμένα περιεχόμενα που μπορείτε να βάλτε σε αυτό το αρχείο καθώς και άλλα πράγματα που μπορείτε να προσθέσετε.

> **Warning**
>
> Αν μια mod\_wsgi process τρέχει πολλά Django sites, τότε όλα τα sites θα χρησιμοποιήσουν τις ρυθμίσεις του Django της εφαρμογής που θα τύχει να τρέξει πρώτη. Αυτό το πρόβλημα μπορεί να λυθεί αλλάζοντας το:
>
> ```
> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
> ```
>
> μέσα στο αρχείο `wsgi.py`, με το:
>
> ```
> os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
> ```
>
> ή [χρησιμοποιώντας το mod\_wsgi daemon mode](#daemon-mode) και βεβαιώνοντας ότι κάθε site τρέχει σε ένα δικό του daemon process.

> **Διορθώνοντας το σφάλμα UnicodeEncodeError για uploads αρχείων**
>
> If you get a `UnicodeEncodeError` when uploading or writing files with
> file names or content that contains non-ASCII characters, make sure Apache
> is configured to support UTF-8 encoding:
>
> ```shell
> export LANG='en_US.UTF-8'
> export LC_ALL='en_US.UTF-8'
> ```
>
> Ένα συνηθισμένο μέρος για να βάλετε τα άνωθεν είναι το `/etc/apache2/envvars`.
>
> Alternatively, if you are [using mod\_wsgi daemon mode](#daemon-mode)
> you can add `lang` and `locale` options to the `WSGIDaemonProcess`
> directive:
>
> ```text
> WSGIDaemonProcess example.com lang='en_US.UTF-8' locale='en_US.UTF-8'
> ```
>
> Δείτε στην ενότητα [Αρχεία](/el/5.1/ref/unicode/#unicode-files) του Unicode οδηγού για λεπτομέρειες.

## Χρησιμοποιώντας το `mod_wsgi` daemon mode

Η λειτουργία daemon («daemon mode») είναι η προτεινόμενη λειτουργία για να τρέχετε το mod\_wsgi (σε πλατφόρμες εκτός Windows). Για να δημιουργήσετε το απαραίτητο daemon process group και να εξουσιοδοτήσετε το Django instance να το τρέξει, θα πρέπει να προσθέσετε τα κατάλληλα directives `WSGIDaemonProcess` και `WSGIProcessGroup`. Αν χρησιμοποιείτε την παραπάνω ρύθμιση με το daemon mode δεν θα μπορείτε να χρησιμοποιήσετε το `WSGIPythonPath`. Αντ’ αυτού θα πρέπει να χρησιμοποιήσετε την επιλογή `python-path` μέσα στο `WSGIDaemonProcess`. Για παράδειγμα:

```apache
WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com
```

Αν θέλετε να εξυπηρετήσετε το project σας σε κάποιον υποφάκελο (πχ στη διεύθυνση `https://example.com/mysite`), μπορείτε να προσθέσετε το `WSGIScriptAlias` στην παραπάνω παραμετροποίηση:

```apache
WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com
```

Δείτε το επίσημο εγχειρίδιο του mod\_wsgi για περισσότερες λεπτομέρειες στην παραμετροποίηση του [daemon mode](https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html#delegation-to-daemon-process).

## Εξυπηρετώντας αρχεία

Django doesn’t serve files itself; it leaves that job to whichever web
server you choose.

We recommend using a separate web server – i.e., one that’s not also running
Django – for serving media. Here are some good choices:

- [Nginx](https://nginx.org/en/)
- [Μια stripped-down έκδοση του Apache](https://httpd.apache.org/)

Αν, παρόλ’ αυτά, δεν έχετε άλλη επιλογή παρά να εξυπηρετήσετε τα media files στον ίδιο Apache `VirtualHost` που τρέχει και το Django, μπορείτε να ρυθμίσετε τον Apache να εξυπηρετήσει μερικά URLs ως static media και άλλα χρησιμοποιώντας το mod\_wsgi interface στο Django.

Αυτό το παράδειγμα ρυθμίζει το Django στο site root, αλλά εξυπηρετεί τα αρχεία `robots.txt`, `favicon.ico` και οτιδήποτε μέσα στα URLs `/static/` και `/media/` ως ένα static file (πχ JavaScript, CSS, fonts αρχείο κλπ). Όλα τα άλλα URLs θα εξυπηρετηθούν χρησιμοποιώντας το mod\_wsgi:

```apache
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
```

## Εξυπηρετώντας τα αρχεία του admin

When [`django.contrib.staticfiles`](/el/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) is in [`INSTALLED_APPS`](/el/5.1/ref/settings/#std-setting-INSTALLED_APPS), the
Django development server automatically serves the static files of the
admin app (and any other installed apps). This is however not the case when you
use any other server arrangement. You’re responsible for setting up Apache, or
whichever web server you’re using, to serve the admin files.

The admin files live in ([django/contrib/admin/static/admin](https://github.com/django/django/blob/stable/5.1.x/django/contrib/admin/static/admin)) of the
Django distribution.

We **strongly** recommend using [`django.contrib.staticfiles`](/el/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) to handle the
admin files (along with a web server as outlined in the previous section; this
means using the [`collectstatic`](/el/5.1/ref/contrib/staticfiles/#django-admin-collectstatic) management command to collect the
static files in [`STATIC_ROOT`](/el/5.1/ref/settings/#std-setting-STATIC_ROOT), and then configuring your web server to
serve [`STATIC_ROOT`](/el/5.1/ref/settings/#std-setting-STATIC_ROOT) at [`STATIC_URL`](/el/5.1/ref/settings/#std-setting-STATIC_URL)), but here are three
other approaches:

1. Δημιουργήστε ένα symbolic link στα static files του admin από το document root σας (αυτό ίσως απαιτήσει να χρησιμοποιήσετε το `+FollowSymLinks` στη ρύθμιση του Apache).
2. Χρησιμοποιήστε ένα directive `Alias`, όπως περιγράφηκε παραπάνω, για να κάνετε alias το κατάλληλο URL (πιθανόν το [`STATIC_URL`](/el/5.1/ref/settings/#std-setting-STATIC_URL) \+ `admin/`) με την ακριβή τοποθεσία των αρχείων του admin.
3. Αντιγράψτε τα static files του admin ούτως ώστε να υπάρχουν μέσα στο document root του Apache σας.

## Πιστοποίηση της βάσης δεδομένων ενός Django χρήστη μέσω Apache

Το Django παρέχει έναν handler που επιτρέπει στον Apache να πιστοποιεί τους χρήστες απ’ ευθείας μέσω το σύστημα πιστοποίησης του Django. Δείτε περισσότερα στο εγχειρίδιο της [πιστοποίησης του mod\_wsgi](/el/5.1/howto/deployment/wsgi/apache-auth/).
