{"title":"Λίστα ελέγχου για το Deployment","version":"4.2","locale":"el","docname":"howto/deployment/checklist","url":"/el/4.2/howto/deployment/checklist/","canonical":"https://djangodocs.dev/el/4.2/howto/deployment/checklist/","summary":"The internet is a hostile environment. Before deploying your Django project, you should take some time to review your settings, with security, performance, and…","html":"<h1>Λίστα ελέγχου για το Deployment<a class=\"heading-anchor\" href=\"#deployment-checklist\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>The internet is a hostile environment. Before deploying your Django project,\nyou should take some time to review your settings, with security, performance,\nand operations in mind.</p>\n<p>Το Django περιέχει πολλά <a class=\"reference internal\" href=\"/el/4.2/topics/security/\"><span class=\"doc\">χαρακτηριστικά ασφαλείας</span></a>. Κάποια είναι προεγκατεστημένα και πάντα ενεργοποιημένα. Κάποια άλλα είναι προαιρετικά επειδή δεν είναι πάντα κατάλληλα ή είναι μη βολικά για το development. Για παράδειγμα, ο εξαναγκασμός για χρήση HTTPS ίσως όχι μόνο να μην είναι κατάλληλο για όλα τα websites αλλά, επίσης, και μη πρακτικό όταν κάνετε development τοπικά στον υπολογιστή σας.</p>\n<p>Ένα άλλο trade-off είναι μεταξύ των βελτιστοποιήσεων της απόδοσης (performance optimizations) και της ευκολίας. Για παράδειγμα, το caching είναι χρήσιμο στην παραγωγή, αλλά όχι τόσο για τοπικό development (στον υπολογιστή σας). Οι ανάγκες για αναφορά σφαλμάτων είναι, επίσης, διαφορετικές μεταξύ τοπικού (local) και παραγωγικού (production) περιβάλλοντος.</p>\n<p>Η ακόλουθη λίστα ελέγχου περιλαμβάνει ρυθμίσεις που:</p>\n<ul class=\"simple\">\n<li><p>πρέπει να ρυθμιστούν κατάλληλα για το Django για την παροχή του αναμενόμενου επιπέδου ασφαλείας,</p></li>\n<li><p>αναμένονται να είναι διαφορετικές για κάθε περιβάλλον,</p></li>\n<li><p>ενεργοποιούν προαιρετικά χαρακτηριστικά ασφαλείας,</p></li>\n<li><p>ενεργοποιούν βελτιστοποιήσεις της απόδοσης και</p></li>\n<li><p>παρέχουν αναφορές σφαλμάτων.</p></li>\n</ul>\n<p>Πολλές από αυτές τις ρυθμίσεις είναι ευαίσθητες και θα πρέπει να αντιμετωπιστούν ως απόρρητες. Αν πρόκειται να διανείμετε τον πηγαίο κώδικα του project σας, μια κοινή πρακτική είναι να δημοσιοποιήσετε τις κατάλληλες ρυθμίσεις για το αναπτυξιακό περιβάλλον και να χρησιμοποιήσετε ένα προσωπικό module ρυθμίσεων για την παραγωγή. Αντί, λοιπόν, να έχετε ένα μόνο αρχείο <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> μπορείτε να έχετε ένα Python package με το όνομα settings και μέσα διάφορα settings αρχεία, καθένα διαφορετικό για κάθε περιβάλλον.</p>\n<section id=\"run-manage-py-check-deploy\">\n<h2>Τρέξτε την εντολή <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code><a class=\"heading-anchor\" href=\"#run-manage-py-check-deploy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Μερικοί από τους ελέγχους που περιγράφονται παρακάτω μπορούν να αυτοματοποιηθούν χρησιμοποιώντας την επιλογή <a class=\"reference internal\" href=\"/el/4.2/ref/django-admin/#cmdoption-check-deploy\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code></a>. Σιγουρευτείτε ότι τρέχετε αυτή την εντολή σύμφωνα με το αρχείο ρυθμίσεων που αφορά στο παραγωγικό σας περιβάλλον, όπως περιγράφεται στο εγχειρίδιο της επιλογής αυτής.</p>\n</section>\n<section id=\"critical-settings\">\n<h2>Σημαντικές ρυθμίσεις<a class=\"heading-anchor\" href=\"#critical-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"secret-key\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a><a class=\"heading-anchor\" href=\"#secret-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>Το μυστικό κλειδί (secret key) πρέπει να είναι μια μεγάλου μήκους τυχαία τιμή και πρέπει να κρατηθεί μυστική.</strong></p>\n<p>Σιγουρευτείτε ότι το κλειδί που χρησιμοποιείτε σε παραγωγικό περιβάλλον δεν χρησιμοποιείται πουθενά αλλού και αποφύγετε να το κάνετε commit σε κάποιο source control (πχ git, mercurial κλπ). Αυτό ελαχιστοποιεί τις πιθανότητες όπου κάποιος κακόβουλος τρίτος θα μπορούσε να αποκτήσει πρόσβαση στο κλειδί σας.</p>\n<p>Αντί να υπάρχει γραμμένο, ως έχει, το κλειδί στο module των ρυθμίσεων σας, σκεφτείτε να το φορτώνετε από μια environment variable:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;SECRET_KEY&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ή από ένα αρχείο:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/etc/secret_key.txt&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>If rotating secret keys, you may use <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;CURRENT_SECRET_KEY&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">SECRET_KEY_FALLBACKS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;OLD_SECRET_KEY&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ensure that old secret keys are removed from <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code> in a\ntimely manner.</p>\n<aside class=\"version-note version-changed\" data-version=\"4.1\">\n<p class=\"version-note-title\">Changed in Django 4.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code> setting was added to support rotating secret\nkeys.</p>\n</aside>\n</section>\n<section id=\"debug\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a><a class=\"heading-anchor\" href=\"#debug\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Δεν πρέπει ποτέ να έχετε ενεργοποιημένο το debug στην παραγωγή.</p>\n<p>Εννοείται πως αναπτύσσετε το project σας με το <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a>, αφού αυτό παρέχει μερικά χρήσιμα χαρακτηριστικά όπως full tracebacks μέσα στον browser σας.</p>\n<p>Ωστόσο, για ένα παραγωγικό περιβάλλον, αυτό είναι μια εντελώς κακή ιδέα, επειδή διαρρέει πολλές πληροφορίες για το project σας: αποσπάσματα από τον πηγαίο κώδικα σας, τοπικές μεταβλητές, ρυθμίσεις, βιβλιοθήκες που χρησιμοποιείτε κλπ.</p>\n</section>\n</section>\n<section id=\"environment-specific-settings\">\n<h2>Ρυθμίσεις ανάλογα το περιβάλλον<a class=\"heading-anchor\" href=\"#environment-specific-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"allowed-hosts\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a><a class=\"heading-anchor\" href=\"#allowed-hosts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Όταν το <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>, το Django δεν μπορεί να δουλέψει χωρίς μια κατάλληλη τιμή για την ρύθμιση <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a>.</p>\n<p>Αυτή η ρύθμιση είναι απαραίτητη για να προστατέψει το site σας από τυχόν CSRF επιθέσεις. Αν χρησιμοποιήσετε ένα wildcard (πχ <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code>), θα πρέπει να φτιάξετε το δικό σας validation για τον HTTP header με το όνομα <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code> ή αλλιώς σιγουρευτείτε ότι δεν είστε ευάλωτοι από τέτοιου είδους επιθέσεις.</p>\n<p>You should also configure the web server that sits in front of Django to\nvalidate the host. It should respond with a static error page or ignore\nrequests for incorrect hosts instead of forwarding the request to Django. This\nway you’ll avoid spurious errors in your Django logs (or emails if you have\nerror reporting configured that way). For example, on nginx you might set up a\ndefault server to return «444 No Response» on an unrecognized host:</p>\n<div class=\"code-block\" data-language=\"nginx\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Nginx</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Nginx code\"><code><span class=\"k\">server</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kn\">listen</span><span class=\"w\"> </span><span class=\"mi\">80</span><span class=\"w\"> </span><span class=\"s\">default_server</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"kn\">return</span><span class=\"w\"> </span><span class=\"mi\">444</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"caches\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a><a class=\"heading-anchor\" href=\"#caches\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Αν χρησιμοποιείτε μια cache, οι ρυθμίσεις της σύνδεσης ενδέχεται να είναι διαφορετικές μεταξύ του development και του production περιβάλλοντος. Η προεπιλογή του Django είναι η per-process <a class=\"reference internal\" href=\"/el/4.2/topics/cache/#local-memory-caching\"><span class=\"std std-ref\">local-memory caching</span></a> που ίσως να μην είναι η επιθυμητή ρύθμιση.</p>\n<p>Οι cache servers δεν έχουν συνήθως δυνατό σύστημα πιστοποίησης (authentication). Σιγουρευτείτε ότι δέχονται συνδέσεις μόνο από τους application servers σας.</p>\n</section>\n<section id=\"databases\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a><a class=\"heading-anchor\" href=\"#databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Οι παράμετροι σύνδεσης με την βάση δεδομένων είναι πιθανώς διαφορετικές μεταξύ development και production.</p>\n<p>Οι κωδικοί της βάσης δεδομένων είναι πολύ ευαίσθητοι. Άλλωστε πρόκειται για κωδικούς που αν γνωστοποιηθούν, τα πραγματικά δεδομένα σας θα είναι εκτεθειμένα. Θα πρέπει να τους προστατέψετε ακριβώς όπως το <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a>.</p>\n<p>Για μέγιστη ασφάλεια, σιγουρευτείτε ότι οι database servers δέχονται μόνο συνδέσεις από τους δικούς σας application servers.</p>\n<p>Αν δεν έχετε κάνει κάποιο backup για τη βάση δεδομένων σας, κάντε το τώρα! Σκεφτείτε επίσης να κάνετε συχνά backup (πχ τα ξημερώματα κάθε μέρα) μέσω ενός cron job.</p>\n</section>\n<section id=\"email-backend-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> και σχετικές ρυθμίσεις<a class=\"heading-anchor\" href=\"#email-backend-and-related-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Αν το site σας στέλνει emails, αυτές οι τιμές πρέπει να οριστούν καταλλήλως.</p>\n<p>Από προεπιλογή, το Django στέλνει email από τις διευθύνσεις <a class=\"reference external\" href=\"mailto:webmaster&#37;&#52;&#48;localhost\">webmaster<span>&#64;</span>localhost</a> και <a class=\"reference external\" href=\"mailto:root&#37;&#52;&#48;localhost\">root<span>&#64;</span>localhost</a>. Ωστόσο, μερικοί πάροχοι email απορρίπτουν τα email από αυτές τις διευθύνσεις. Για να χρησιμοποιήσετε διαφορετικές διευθύνσεις αποστολέα, αλλάξτε τις ρυθμίσεις <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_FROM_EMAIL</span></code></a> και <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SERVER_EMAIL</span></code></a>.</p>\n</section>\n<section id=\"static-root-and-static-url\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> και <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a><a class=\"heading-anchor\" href=\"#static-root-and-static-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Τα static files (στατικά αρχεία – css, fonts, js, εικόνες κλπ) εξυπηρετούνται αυτόματα από τον development server. Στην παραγωγή, όμως, θα πρέπει να ορίσετε έναν φάκελο <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> όπου η εντολή <a class=\"reference internal\" href=\"/el/4.2/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> θα τα αντιγράψει.</p>\n<p>Δείτε το άρθρο See <a class=\"reference internal\" href=\"/el/4.2/howto/static-files/\"><span class=\"doc\">Διαχειρίζοντας τα static files (εικόνες, JavaScript, CSS)</span></a> για περισσότερες πληροφορίες.</p>\n</section>\n<section id=\"media-root-and-media-url\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> και <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a><a class=\"heading-anchor\" href=\"#media-root-and-media-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Τα media files τα ανεβάζουν οι χρήστες σας. Χρήστης θεωρείται και ο Django admin που έχει πρόσβαση στο Django admin και μέσα από κει ανεβάζει σε κάποιον server φωτογραφίες, αρχεία κλπ. Αυτού του είδους τα αρχεία είναι μη έμπιστα! Σιγουρευτείτε ότι ο Web server σας δεν θα πρέπει ποτέ να προσπαθήσει να τα εκτελέσει-τρέξει. Για παράδειγμα, αν ένας χρήστης ανεβάσει ένα αρχείο <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code>, ο Web server δεν θα πρέπει να το εκτελέσει.</p>\n<p>Τώρα είναι μια καλή στιγμή να ελέγξετε την στρατηγική σας σχετικά με αυτού του είδους τα αρχεία.</p>\n</section>\n</section>\n<section id=\"https\">\n<h2>HTTPS<a class=\"heading-anchor\" href=\"#https\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Κάθε website το οποίο επιτρέπει σε χρήστες να κάνουν log in, θα πρέπει να χρησιμοποιούν HTTPS πρόσβαση για την αποφυγή της εκπομπής των διακριτικών πρόσβασης χωρίς κρυπτογράφηση. Στο Django, τα διακριτικά πρόσβασης περιλαμβάνουν τα login/password, το session cookie και τα password reset tokens. (Δεν μπορείτε να κάνετε και πολλά για να προστατέψετε τα password reset tokens αν τα στέλνετε με email.)</p>\n<p>Η προστασία των ευαίσθητων τομέων όπως ο λογαριασμός του χρήστη ή του admin δεν είναι αρκετή, επειδή το ίδιο το session cookie χρησιμοποιείται για το HTTP και το HTTPS. Ο Web server σας θα πρέπει αν ανακατευθύνει όλη την HTTP κίνηση στην HTTPS και να εκπέμπει μόνο HTTPS requests στο Django.</p>\n<p>Όταν ρυθμίσετε το HTTPS, ενεργοποιήστε τις ακόλουθες ρυθμίσεις.</p>\n<section id=\"csrf-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-CSRF_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#csrf-cookie-secure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Θέστε το σε <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> για να αποφύγετε την ακούσια εκπομπή του CSRF cookie μέσω HTTP.</p>\n</section>\n<section id=\"session-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#session-cookie-secure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Θέστε το σε <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> για να αποφύγετε την ακούσια εκπομπή του session cookie μέσω HTTP.</p>\n</section>\n</section>\n<section id=\"performance-optimizations\">\n<h2>Βελτιστοποιήσεις απόδοσης<a class=\"heading-anchor\" href=\"#performance-optimizations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Θέτοντας το <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a> απενεργοποιεί πολλά χαρακτηριστικά τα οποία είναι χρήσιμα μόνο στο development. Επιπροσθέτως, μπορείτε να φέρετε στα μέτρα σας τις ακόλουθες ρυθμίσεις.</p>\n<section id=\"sessions\">\n<h3>Συνεδρίες<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Consider using <a class=\"reference internal\" href=\"/el/4.2/topics/http/sessions/#cached-sessions-backend\"><span class=\"std std-ref\">cached sessions</span></a> to improve\nperformance.</p>\n<p>If using database-backed sessions, regularly <a class=\"reference internal\" href=\"/el/4.2/topics/http/sessions/#clearing-the-session-store\"><span class=\"std std-ref\">clear old sessions</span></a> to avoid storing unnecessary data.</p>\n</section>\n<section id=\"conn-max-age\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CONN_MAX_AGE</span></code></a><a class=\"heading-anchor\" href=\"#conn-max-age\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ενεργοποιώντας τις <a class=\"reference internal\" href=\"/el/4.2/ref/databases/#persistent-database-connections\"><span class=\"std std-ref\">μόνιμες συνδέσεις στη βάση δεδομένων</span></a> θα έχετε, ως αποτέλεσμα, περισσότερη ταχύτητα όταν συνδέεστε στη βάση δεδομένων σας για πολλαπλά request. Με άλλα λόγια, δεν θέλετε να περιλαμβάνεται το ovehead για την εγκαθίδρυση νέας σύνδεσης στη βάση για κάθε νέο request.</p>\n<p>Αυτό βοηθάει πολύ σε virtualized hosts με περιορισμένη απόδοση του δικτύου.</p>\n</section>\n<section id=\"templates\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a><a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Enabling the cached template loader often improves performance drastically, as\nit avoids compiling each template every time it needs to be rendered. When\n<a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>, the cached template loader is enabled\nautomatically. See <a class=\"reference internal\" href=\"/el/4.2/ref/templates/api/#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.loaders.cached.Loader</span></code></a> for more\ninformation.</p>\n</section>\n</section>\n<section id=\"error-reporting\">\n<h2>Αναφορά σφαλμάτων<a class=\"heading-anchor\" href=\"#error-reporting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Όταν ανεβάσετε το site σας για το ευρύ κοινό, θα είναι πιθανόν σταθερό και πλήρως λειτουργικό, αλλά αυτό δε σημαίνει ότι έχετε υπολογίσει κάθε σφάλμα που μπορεί να προκύψει. Ευτυχώς, το Django μπορεί να αιχμαλωτίσει τα σφάλματα και να σας ειδοποιήσει καταλλήλως.</p>\n<section id=\"logging\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a><a class=\"heading-anchor\" href=\"#logging\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Επανεξετάστε τις ρυθμίσεις του logging σας πριν ανεβάσετε το website σας και ελέγξτε ότι δουλεύει πλήρως, μόλις αποκτήσετε κάποια κίνηση.</p>\n<p>Δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/4.2/topics/logging/\"><span class=\"doc\">Logging</span></a> για περισσότερες πληροφορίες σχετικά με το logging.</p>\n</section>\n<section id=\"admins-and-managers\">\n<h3><a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> και <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a><a class=\"heading-anchor\" href=\"#admins-and-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Οι <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> θα ειδοποιηθούν για σφάλματα τύπου 500 μέσω email.</p>\n<p>Οι <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> θα ειδοποιηθούν για σφάλματα τύπου 404. Η ρύθμιση <a class=\"reference internal\" href=\"/el/4.2/ref/settings/#std-setting-IGNORABLE_404_URLS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">IGNORABLE_404_URLS</span></code></a> μπορεί να σας βοηθήσει να φιλτράρετε τυχόν ψεύτικες αναφορές. Δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/4.2/howto/error-reporting/\"><span class=\"doc\">αναφορές σφαλμάτων</span></a> για λεπτομέρειες σχετικά με αναφορές σφαλμάτων μέσω email.</p>\n<p>Δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/4.2/howto/error-reporting/\"><span class=\"doc\">αναφορές σφαλμάτων</span></a> για λεπτομέρειες σχετικά με αναφορές σφαλμάτων μέσω email.</p>\n<aside class=\"admonition-error-reporting-by-email-doesn-t-scale-very-well admonition\">\n<p class=\"admonition-title\">Οι αναφορές σφαλμάτων μέσω email δεν κλιμακώνονται πολύ καλά</p>\n<p>Σκεφτείτε να χρησιμοποιήσετε ένα σύστημα παρακολούθησης όπως το <a class=\"reference external\" href=\"https://docs.sentry.io/\">Sentry</a> πριν τα εισερχόμενα σας ξεχειλίσουν από αναφορές. Το Sentry μπορεί επίσης να ομαδοποιήσει τα logs.</p>\n</aside>\n</section>\n<section id=\"customize-the-default-error-views\">\n<h3>Παραμετροποιώντας τα προεπιλεγμένα views σφαλμάτων<a class=\"heading-anchor\" href=\"#customize-the-default-error-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django includes default views and templates for several HTTP error codes. You\nmay want to override the default templates by creating the following templates\nin your root template directory: <code class=\"docutils literal notranslate\"><span class=\"pre\">404.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">500.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">403.html</span></code>, and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">400.html</span></code>. The <a class=\"reference internal\" href=\"/el/4.2/ref/views/#error-views\"><span class=\"std std-ref\">default error views</span></a> that use these\ntemplates should suffice for 99% of web applications, but you can\n<a class=\"reference internal\" href=\"/el/4.2/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">customize them</span></a> as well.</p>\n</section>\n</section>","rootId":"deployment-checklist","toc":[{"title":"Τρέξτε την εντολή manage.py check --deploy","anchor":"run-manage-py-check-deploy","children":[]},{"title":"Σημαντικές ρυθμίσεις","anchor":"critical-settings","children":[{"title":"SECRET_KEY","anchor":"secret-key","children":[]},{"title":"DEBUG","anchor":"debug","children":[]}]},{"title":"Ρυθμίσεις ανάλογα το περιβάλλον","anchor":"environment-specific-settings","children":[{"title":"ALLOWED_HOSTS","anchor":"allowed-hosts","children":[]},{"title":"CACHES","anchor":"caches","children":[]},{"title":"DATABASES","anchor":"databases","children":[]},{"title":"EMAIL_BACKEND και σχετικές ρυθμίσεις","anchor":"email-backend-and-related-settings","children":[]},{"title":"STATIC_ROOT και STATIC_URL","anchor":"static-root-and-static-url","children":[]},{"title":"MEDIA_ROOT και MEDIA_URL","anchor":"media-root-and-media-url","children":[]}]},{"title":"HTTPS","anchor":"https","children":[{"title":"CSRF_COOKIE_SECURE","anchor":"csrf-cookie-secure","children":[]},{"title":"SESSION_COOKIE_SECURE","anchor":"session-cookie-secure","children":[]}]},{"title":"Βελτιστοποιήσεις απόδοσης","anchor":"performance-optimizations","children":[{"title":"Συνεδρίες","anchor":"sessions","children":[]},{"title":"CONN_MAX_AGE","anchor":"conn-max-age","children":[]},{"title":"TEMPLATES","anchor":"templates","children":[]}]},{"title":"Αναφορά σφαλμάτων","anchor":"error-reporting","children":[{"title":"LOGGING","anchor":"logging","children":[]},{"title":"ADMINS και MANAGERS","anchor":"admins-and-managers","children":[]},{"title":"Παραμετροποιώντας τα προεπιλεγμένα views σφαλμάτων","anchor":"customize-the-default-error-views","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Οδηγοί «Πως-να»","url":"/el/4.2/howto/"},{"docname":"howto/deployment/index","title":"How to deploy Django","url":"/el/4.2/howto/deployment/"}],"prev":{"docname":"howto/deployment/asgi/uvicorn","title":"How to use Django with Uvicorn","url":"/el/4.2/howto/deployment/asgi/uvicorn/"},"next":{"docname":"howto/upgrade-version","title":"How to upgrade Django to a newer version","url":"/el/4.2/howto/upgrade-version/"},"formats":{"html":"/el/4.2/howto/deployment/checklist/","markdown":"/el/4.2/howto/deployment/checklist.md","json":"/el/4.2/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/el/4.2/howto/deployment/checklist/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}