{"title":"Ανεβάζοντας τα static files","version":"1.10","locale":"el","docname":"howto/static-files/deployment","url":"/el/1.10/howto/static-files/deployment/","canonical":"https://djangodocs.dev/el/1.10/howto/static-files/deployment/","summary":"Τα βασικά βήματα για να εξυπηρετήσετε τα static files σας από κάποιον server και όχι, φυσικά, τοπικά από τον υπολογιστή σας (όπως γίνεται αυτόματα με το…","html":"<h1>Ανεβάζοντας τα static files<a class=\"heading-anchor\" href=\"#deploying-static-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Δείτε επίσης</p>\n<p>Για μια εισαγωγή στη χρήση του module <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a>, δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/howto/static-files/\"><span class=\"doc\">Διαχειρίζοντας τα static files (πχ εικόνες, JavaScript, CSS κλπ)</span></a>.</p>\n</aside>\n<section id=\"serving-static-files-in-production\">\n<span id=\"staticfiles-production\"></span><h2>Εξυπηρετώντας τα static files στην παραγωγή<a class=\"heading-anchor\" href=\"#serving-static-files-in-production\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Τα βασικά βήματα για να εξυπηρετήσετε τα static files σας από κάποιον server και όχι, φυσικά, τοπικά από τον υπολογιστή σας (όπως γίνεται αυτόματα με το <code class=\"docutils literal notranslate\">runserver</code>) είναι απλά: τρέξτε την διαχειριστική εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> όταν αλλάζουν τα static files και μετά δείτε πως μπορείτε να μεταφέρετε τα static files που έχουν συλλεχθεί στον προκαθορισμένο, από εσάς, φάκελο (<a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a>) στον server που θα χειρίζεται τα static files και θα τα εξυπηρετεί. Αναλόγως τη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_STORAGE</code></a>, τα αρχεία ίσως χρειαστεί να μετακινηθούν χειροκίνητα στη νέα τοποθεσία ή αυτό μπορεί να το τακτοποιήσει η μέθοδος <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><code class=\"xref py py-func docutils literal notranslate\">post_process</code></a> της κλάσης <code class=\"docutils literal notranslate\">Storage</code>.</p>\n<p>Φυσικά, όπως με όλες τις διαδικασίες μετάβασης από το development στο production περιβάλλον, ο διάβολος κρύβεται στις λεπτομέρειες. Κάθε εγκατάσταση-ρύθμιση ενός production περιβάλλοντος είναι διαφορετική, που σημαίνει ότι θα πρέπει να προσαρμόσετε τα ανωτέρω βασικά βήματα για να ταιριάζουν με τις ανάγκες σας. Παρακάτω φαίνονται μερικά συνηθισμένα παραδείγματα που μπορεί να βοηθήσουν.</p>\n<section id=\"serving-the-site-and-your-static-files-from-the-same-server\">\n<h3>Εξυπηρετώντας το site και τα static files σας από τον ίδιο server<a class=\"heading-anchor\" href=\"#serving-the-site-and-your-static-files-from-the-same-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Αν θέλετε να εξυπηρετήσετε τα static files σας από τον ίδιο server ο οποίος εξυπηρετεί ήδη το site σας, η διαδικασία θα μοιάζει κάπως έτσι:</p>\n<ul class=\"simple\">\n<li><p>Ανεβάστε τον κώδικα σας στον deployment server.</p></li>\n<li><p>Στον server, τρέξτε την εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> για να αντιγραφτούν όλα τα static files μέσα στο φάκελο <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a>.</p></li>\n<li><p>Παραμετροποιήστε τον Web server σας για να εξυπηρετεί τα αρχεία του φακέλου <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> στο URL <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a>. Για παράδειγμα, δείτε <a class=\"reference internal\" href=\"/el/1.10/howto/deployment/wsgi/modwsgi/#serving-files\"><span class=\"std std-ref\">πως μπορείτε να το κάνετε αυτό με τον Apache και το mod_wsgi</span></a>.</p></li>\n</ul>\n<p>Το πιο πιθανό είναι, ίσως, να αυτοματοποιήσετε την παραπάνω διαδικασία, ειδικά όταν έχετε πολλούς Web servers. Υπάρχουν πολλοί τρόποι να πραγματοποιήσετε αυτόν τον αυτοματισμό, αλλά μια επιλογή που απολαμβάνουν πολλοί Django developers είναι το <a class=\"reference external\" href=\"http://fabfile.org/\">Fabric</a>.</p>\n<p>Παρακάτω και στις επόμενες ενότητες, θα σας δείξουμε μερικά παραδείγματα των fabfiles αρχείων (δηλαδή, Fabric scripts) τα οποία αυτοματοποιούν την παραπάνω διαδικασία του deployment των static files (και όχι μόνο). Η σύνταξη ενός fabfile είναι αρκετά επεξηγηματική αλλά δεν θα καλυφθεί εδώ. Συμβουλευτείτε το <a class=\"reference external\" href=\"http://docs.fabfile.org/\">Fabric’s documentation</a>, για μια πλήρη εξήγηση της σύνταξης fabfile αρχείων.</p>\n<p>Οπότε, ένα fabfile για να ανεβάσει τα static files σε μερικούς Web servers, θα μοιάζει κάπως έτσι:</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\">from</span> <span class=\"nn\">fabric.api</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n\n<span class=\"c1\"># Hosts to deploy onto</span>\nenv<span class=\"o\">.</span>hosts <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;www1.example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;www2.example.com&#39;</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># Where your project code lives on the server</span>\nenv<span class=\"o\">.</span>project_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/home/www/myproject&#39;</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">deploy_static</span><span class=\"p\">():</span>\n    <span class=\"k\">with</span> cd<span class=\"p\">(</span>env<span class=\"o\">.</span>project_root<span class=\"p\">):</span>\n        run<span class=\"p\">(</span><span class=\"s1\">&#39;./manage.py collectstatic -v0 --noinput&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"serving-static-files-from-a-dedicated-server\">\n<h3>Εξυπηρετώντας τα static files από έναν dedicated server<a class=\"heading-anchor\" href=\"#serving-static-files-from-a-dedicated-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Τα περισσότερα μεγάλα Django sites χρησιμοποιούν ένα ξεχωριστό Web server – πχ κάποιον ο οποίος δεν τρέχει ήδη το Django – για να εξυπηρετήσουν τα static files. Αυτός ο server συνήθως τρέχει έναν διαφορετικού τύπου web server – γρηγορότερος αλλά με λιγότερες λειτουργίες. Μερικές κοινές επιλογές είναι:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"http://wiki.nginx.org/Main\">Nginx</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://httpd.apache.org/\">Μια stripped-down έκδοση του Apache</a></p></li>\n</ul>\n<p>Η παραμετροποίηση αυτών των servers είναι εκτός του πεδίου εφαρμογής του παρόντος άρθρου. Συμβουλευτείτε το εγχειρίδιο καθενός από τους παραπάνω servers για λεπτομέρειες και οδηγίες.</p>\n<p>Εφόσον ο static file server δεν θα τρέχει το Django, θα χρειαστεί να αλλάξετε τη στρατηγική του deployment για να μοιάζει κάπως έτσι:</p>\n<ul class=\"simple\">\n<li><p>Όταν τα static files αλλάζουν, τρέξτε την εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> τοπικά στον υπολογιστή σας.</p></li>\n<li><p>Ανεβάστε τον τοπικό σας φάκελο <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> στον static file server μέσα στο φάκελο όπου εξυπηρετείται. Η εντολή <a class=\"reference external\" href=\"https://rsync.samba.org/\">rsync</a> είναι μια κοινή λύση για αυτό το βήμα καθώς δεν αντιγράφει κάθε φορά όλο το φάκελο, παρά μόνο τις αλλαγές που έγιναν.</p></li>\n</ul>\n<p>Δείτε πως φαίνεται η παραπάνω διαδικασία, μέσα σε ένα fabfile:</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\">from</span> <span class=\"nn\">fabric.api</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n<span class=\"kn\">from</span> <span class=\"nn\">fabric.contrib</span> <span class=\"kn\">import</span> project\n\n<span class=\"c1\"># Where the static files get collected locally. Your STATIC_ROOT setting.</span>\nenv<span class=\"o\">.</span>local_static_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/path/to/static&#39;</span>\n\n<span class=\"c1\"># Where the static files should go remotely</span>\nenv<span class=\"o\">.</span>remote_static_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/home/www/static.example.com&#39;</span>\n\n<span class=\"nd\">@roles</span><span class=\"p\">(</span><span class=\"s1\">&#39;static&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">deploy_static</span><span class=\"p\">():</span>\n    local<span class=\"p\">(</span><span class=\"s1\">&#39;./manage.py collectstatic&#39;</span><span class=\"p\">)</span>\n    project<span class=\"o\">.</span>rsync_project<span class=\"p\">(</span>\n        remote_dir<span class=\"o\">=</span>env<span class=\"o\">.</span>remote_static_root<span class=\"p\">,</span>\n        local_dir<span class=\"o\">=</span>env<span class=\"o\">.</span>local_static_root<span class=\"p\">,</span>\n        delete<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"serving-static-files-from-a-cloud-service-or-cdn\">\n<span id=\"staticfiles-from-cdn\"></span><h3>Εξυπηρετώντας τα static files από μια υπηρεσία cloud ή CDN<a class=\"heading-anchor\" href=\"#serving-static-files-from-a-cloud-service-or-cdn\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Μια άλλη συνηθισμένη τακτική είναι να εξυπηρετείτε τα static files από έναν πάροχο αποθήκευσης αρχείων στο cloud, όπως είναι η υπηρεσία S3 της Amazon και/ή σε κάποιο CDN (content delivery network). Αυτό, φυσικά, σας απαλλάσσει από το πρόβλημα της εξυπηρέτησης των static files και συχνά συμβάλλει στη γρηγορότερη φόρτωση των ιστοσελίδων (ειδικότερα αν χρησιμοποιείτε CDN).</p>\n<p>Όταν χρησιμοποιείτε αυτές τις υπηρεσίες, η βασική διαδικασία θα μοιάζει λίγο-πολύ με την παραπάνω, εκτός του ότι αντί να χρησιμοποιείτε την εντολή <code class=\"docutils literal notranslate\">rsync</code> για να μεταφέρετε τα static files στον server, θα χρειαστεί να μεταφέρετε τα static files στον πάροχο αποθήκευσης αρχείων ή στο CDN.</p>\n<p>Υπάρχουν πολλοί τρόποι για το πετύχετε αυτό, αλλά αν ο πάροχος έχει κάποιο API, τότε ένα <a class=\"reference internal\" href=\"/el/1.10/howto/custom-file-storage/\"><span class=\"doc\">παραμετροποιήσιμο σύστημα αποθήκευσης</span></a> θα κάνει την διαδικασία απίστευτα απλή. Αν έχετε γράψει ή χρησιμοποιείτε ένα σύστημα αποθήκευσης τρίτου (third-party custom storage backend), μπορείτε να πείτε στην εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> να χρησιμοποιήσει αυτό το σύστημα, ρυθμίζοντας ανάλογα την επιλογή <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_STORAGE</code></a> στη μηχανή αποθήκευσης.</p>\n<p>Για παράδειγμα, αν έχετε γράψει ένα σύστημα αποθήκευσης S3 στο αρχείο <code class=\"docutils literal notranslate\">myproject.storage.S3Storage</code>, μπορείτε να το χρησιμοποιήσετε ως εξής:</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>STATICFILES_STORAGE <span class=\"o\">=</span> <span class=\"s1\">&#39;myproject.storage.S3Storage&#39;</span>\n</code></pre></div>\n<p>Όταν γίνει αυτό, το μόνο που έχετε να κάνετε είναι να τρέξετε την εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> και όλα τα static files σας θα αποθηκευτούν, μέσω του συστήματος αποθήκευσης σας, στο S3. Αν αργότερα αποφασίσετε ότι θέλετε να αλλάξετε πάροχο αποθήκευσης αρχείων, δεν θα μπορούσε να είναι πιο απλό από το να αλλάξετε τη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_STORAGE</code></a> αναλόγως.</p>\n<p>Για λεπτομέρειες του πως να γράψετε ένα από αυτά τα συστήματα, δείτε στο άρθρο <span class=\"xref std std-doc\">παραμετροποιήσιμο σύστημα αποθήκευσης αρχείων /howto/custom-file-storage</span>. Υπάρχουν, επίσης, και διάφορες διαθέσιμες εφαρμογές, οι οποίες παρέχουν συστήματα αποθήκευσης αρχειών για πολύ κοινά APIs αποθήκευσης αρχείων. Μια καλή αρχή να ξεκινήσετε να ψάξετε τέτοιου είδους πακέτα (και όχι μόνο) είναι το <a class=\"reference external\" href=\"https://www.djangopackages.com/grids/g/storage-backends/\">djangopackages.com</a>.</p>\n</section>\n</section>\n<section id=\"learn-more\">\n<h2>Μάθετε περισσότερα<a class=\"heading-anchor\" href=\"#learn-more\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Για πλήρεις λεπτομέρειες πάνω σε όλες τις ρυθμίσεις, εντολές, template tags και άλλα κομμάτια που περιέχονται στο <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a>, δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/\"><span class=\"doc\">αναφορά στα staticfiles</span></a>.</p>\n</section>","rootId":"deploying-static-files","toc":[{"title":"Εξυπηρετώντας τα static files στην παραγωγή","anchor":"serving-static-files-in-production","children":[{"title":"Εξυπηρετώντας το site και τα static files σας από τον ίδιο server","anchor":"serving-the-site-and-your-static-files-from-the-same-server","children":[]},{"title":"Εξυπηρετώντας τα static files από έναν dedicated server","anchor":"serving-static-files-from-a-dedicated-server","children":[]},{"title":"Εξυπηρετώντας τα static files από μια υπηρεσία cloud ή CDN","anchor":"serving-static-files-from-a-cloud-service-or-cdn","children":[]}]},{"title":"Μάθετε περισσότερα","anchor":"learn-more","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Οδηγοί «Πως-να»","url":"/el/1.10/howto/"}],"prev":{"docname":"howto/static-files/index","title":"Διαχειρίζοντας τα static files (πχ εικόνες, JavaScript, CSS)","url":"/el/1.10/howto/static-files/"},"next":{"docname":"howto/windows","title":"Πώς να εγκαταστήσετε το Django στα Windows","url":"/el/1.10/howto/windows/"},"formats":{"html":"/el/1.10/howto/static-files/deployment/","markdown":"/el/1.10/howto/static-files/deployment.md","json":"/el/1.10/howto/static-files/deployment.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/howto/static-files/deployment.txt","official":"https://docs.djangoproject.com/el/1.10/howto/static-files/deployment/","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","fr","ja","id","pt-br","es","el","pl"]}