Einführung
DigitalOcean Spaces ist eine Objektspeicherlösung, die sich ideal für unstrukturierte Daten wie Audio, Video, Bilder oder große Textmengen eignet. Um mehr über Leerzeichen und Objektspeicher zu erfahren, können SieAn Introduction to DigitalOcean Spaces durchlesen.
In diesem Tutorial erfahren Sie, wie Sie Ihre Django-Anwendung für die Arbeit mit Spaces einrichten.
Voraussetzungen
Um dieses Tutorial zu beginnen, sollten Sie ein paar Dinge einrichten:
-
Ein Nicht-Root-Benutzerkonto mit
sudo
-Berechtigungen, das auf einem Debian- oder Ubuntu-Linux-Server eingerichtet wurde. Wenn Sie dies noch nicht eingerichtet haben, folgen Sie dem Tutorial voninitial server setup for Ubuntu 16.04 oderDebian. -
Darüber hinaus sollten Sie einen DigitalOcean Space erstellen und einen API-Schlüssel generieren. Zur Orientierung können Sie diesentutorial to create a Space and set up the API key folgen.
Mit der Einrichtung eines ersten Servers und einem DigitalOcean Space- und API-Schlüssel können Sie beginnen.
[[Schritt 1 - Einrichten einer virtuellen Umgebung]] == Schritt 1 - Einrichten einer virtuellen Umgebung
Falls noch nicht geschehen, aktualisieren Sie zuerst Ihren Server und führen Sie ein Upgrade durch.
sudo apt-get update && sudo apt-get -y upgrade
Ihr Server sollte mit Python 3 ausgeliefert werden, aber Sie können den folgenden Befehl ausführen, um sicherzustellen, dass er installiert ist:
sudo apt-get install python3
Installieren Sie als Nächstes pip, um die Softwarepakete für Python zu verwalten:
sudo apt-get install -y python3-pip
Schließlich können wir das Modulvirtualenv installieren, um damit eine Programmierumgebung einzurichten:
sudo pip3 install virtualenv
Weitere Anleitungen und Informationen zu Programmierumgebungen finden Sie untersetting up a virtual environment.
[[Schritt-2 - Erstellen von Django-App- und Install-Abhängigkeiten]] == Schritt 2 - Erstellen von Django-App und Installieren von Abhängigkeiten
Wir werden jetzt die Django-App entwickeln, die unseren DigitalOcean Space nutzt.
Führen Sie im Ausgangsverzeichnis des Servers den folgenden Befehl aus, um ein Verzeichnis zu erstellen (in diesem Fall nennen wir esdjango-apps
), in dem das Projekt gespeichert und zum Verzeichnis navigiert werden soll:
mkdir django-apps
cd django-apps
Erstellen Sie in diesem Verzeichnis eine virtuelle Umgebung mit dem folgenden Befehl. Wir nennen esenv
, aber Sie können es so nennen, wie Sie möchten.
virtualenv env
Sie können jetzt die Umgebung aktivieren und erhalten eine Rückmeldung, dass Sie sich in der Umgebung befinden, indem Sie das Präfix Ihrer Befehlszeile ändern.
. env/bin/activate
Sie erhalten eine Rückmeldung, dass Sie sich in der Umgebung befinden, wenn Sie das Präfix Ihrer Befehlszeile ändern. Es sieht ungefähr so aus, ändert sich jedoch je nachdem, in welchem Verzeichnis Sie sich befinden:
Installieren Sie in der Umgebung das Django-Paket mit pip, damit wir eine Django-App erstellen und ausführen können. Um mehr über Django zu erfahren, lesen Sie unsere Tutorial-Reihe zuDjango Development.
pip install django
Erstellen Sie dann das Projekt mit dem folgenden Befehl. In diesem Fall nennen wir esmysite
.
django-admin startproject mysite
Als Nächstes installieren wir Boto 3, einAWS SDK for Python, mit dem unsere Anwendung mit Dingen wie S3, EC2 und DigitalOcean Spaces interagieren kann. Da DigitalOcean Spaces mit Amazon S3 kompatibel ist, können Spaces problemlos mit Tools wie Boto 3 interagieren. Weitere Informationen zum Vergleich zwischen S3 und Spaces finden Sie inSpaces docs.
sudo pip install boto3
Eine weitere Bibliothek, die für unser Projekt von entscheidender Bedeutung ist, sind Django-Speicher, nämlicha collection of custom storage backends for Django. Wir werden dies auch mit pip installieren.
sudo pip install django-storages
Sie haben Ihre Abhängigkeiten in der Umgebung Ihrer Django-App eingerichtet und können nun statische Verzeichnisse und Vorlagenverzeichnisse einrichten.
[[Schritt-3 - Hinzufügen von Verzeichnissen und Assets]] == Schritt 3 - Verzeichnisse und Assets hinzufügen
Wenn unsere Umgebung mit allen Abhängigkeiten eingerichtet ist, können Sie jetzt in das Verzeichnismysite/mysite
wechseln.
cd ~/django-apps/mysite/mysite
Führen Sie im Verzeichnismysite/mysite
die folgenden Befehle aus, um das statische Verzeichnis und das Vorlagenverzeichnis zu erstellen.
mkdir static && mkdir templates
Als Nächstes erstellen wir die Unterverzeichnisse für Bilder und CSS, die im Verzeichnisstatic
gespeichert werden sollen.
mkdir static/img && mkdir static/css
Sobald Sie die Verzeichnisse erstellt haben, laden wir eine Testdatei herunter, die wir schließlich zu unserem Objektspeicher hinzufügen. Wechseln Sie in das Verzeichnisimg
, da wir ein Bild herunterladen.
cd ~/django-apps/mysite/mysite/static/img
In diesem Verzeichnis laden wir das DigitalOcean-Logo mit dem Befehlwget
von Wget herunter. Dies ist ein häufig verwendetes GNU-Programm, das auf Ubuntu-Distributionen vorinstalliert ist, um Inhalte von Webservern abzurufen.
wget http://assets.digitalocean.com/logos/DO_Logo_icon_blue.png
Sie sehen die Ausgabe ähnlich der folgenden:
OutputResolving www.digitalocean.com (www.digitalocean.com)... 104.16.24.4, 104.16.25.4
Connecting to www.digitalocean.com (www.digitalocean.com)|104.16.24.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1283 (1.3K) [image/png]
Saving to: ‘DO_Logo_icon_blue.png’
DO_Logo_icon_blue-6edd7377 100%[=====================================>] 1.25K --.-KB/s in 0s
2017-11-05 12:26:24 (9.60 MB/s) - ‘DO_Logo_icon_blue.png’ saved [1283/1283]
Wenn Sie zu diesem Zeitpunkt den Befehlls
ausführen, werden Sie feststellen, dass jetzt ein Bild mit dem NamenDO_Logo_icon_blue.png
im Verzeichnisstatic/img/
vorhanden ist.
Wenn diese Verzeichnisse eingerichtet sind und das Bild auf den Server heruntergeladen wird, können wir die mit unserer Django-App verknüpften Dateien bearbeiten.
[[Schritt 4 - Bearbeiten von CSS- und HTML-Dateien]] == Schritt 4 - Bearbeiten von CSS- und HTML-Dateien
Beginnen wir mit der Bearbeitung des Stylesheets. Sie sollten in das Verzeichniscss
wechseln, damit wir ein grundlegendes Stylesheet für unsere Web-App hinzufügen können.
cd ~/django-apps/mysite/mysite/static/css
Verwenden Sie nano oder einen anderen Texteditor Ihrer Wahl, um das Dokument zu bearbeiten.
nano app.css
Fügen Sie nach dem Öffnen der Datei das folgende CSS hinzu:
app.css
body {
margin: 0;
background-color: #f1f1f1;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.container {
width: 80%;
border: 1px solid #ddd;
background-color: #fff;
padding: 20px;
margin: 40px auto;
}
form {
margin-bottom: 20px;
padding: 10px;
border: 1px solid #ff9900;
width: 350px;
}
table {
border-collapse: collapse;
width: 100%;
}
table td,
table th {
border: 1px solid #eceeef;
padding: 5px 8px;
text-align: left;
}
table thead {
border-bottom: 2px solid #eceeef;
}
Sobald Sie fertig sind, können Sie die Datei speichern und schließen. Navigieren Sie von hier aus zum Verzeichnistemplates
.
cd ~/django-apps/mysite/mysite/templates
Wir müssen eine Datei mit dem Namenhome.html
öffnen und HTML hinzufügen, damit unsere grundlegende Web-App angezeigt wird. Öffnen Sie die Datei mit nano, damit Sie sie bearbeiten können:
nano home.html
Fügen Sie im Dokument Folgendes hinzu:
home.html
{% load static %}
Spaces + Django Tutorial
Spaces + Django Tutorial
Congratulations, you’re using Spaces!
Speichern und schließen Sie die Datei. Die letzte Datei, die wir aktualisieren, ist die Dateiurls.py
, sodass sie auf die neu erstellte Dateihome.html
verweist. Wir müssen in das folgende Verzeichnis wechseln:
cd ~/django-apps/mysite/mysite
Verwenden Sie nano, um die Datei urls.py zu bearbeiten.
nano urls.py
Sie können alles in der Datei löschen und dann Folgendes hinzufügen:
urls.py
from django.conf.urls import url
from django.views.generic import TemplateView
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
]
Wenn diese Dateien eingerichtet sind, können wir mit der Bearbeitung unserersettings.py
-Datei fortfahren, um sie in den Objektspeicher zu integrieren.
[[Schritt-5 -—- Update-Einstellungen]] == Schritt 5 - Update-Einstellungen
Jetzt ist es an der Zeit, Ihre Einstellungsdatei mit Ihren Spaces-Anmeldeinformationen zu aktualisieren, damit wir die Seite, die wir eingerichtet haben, nutzen können, um das Bild anzuzeigen.
Beachten Sie, dass wir in diesem Beispiel unsere Anmeldeinformationen der Kürze halber fest codieren, dies ist jedoch für eine Produktionskonfiguration nicht sicher genug. Es wird empfohlen, ein Paket wiePython Decouple zu verwenden, um Ihre Spaces-Anmeldeinformationen zu maskieren. Dieses Paket trennt die Einstellungsparameter von Ihrem Quellcode, der für eine produktionsfähige Django-Anwendung erforderlich ist.
Zunächst navigieren wir zum Speicherort Ihrer Einstellungsdatei.
cd ~/django-apps/mysite/mysite
Öffnen Sie die Datei zum Bearbeiten mit nano:
nano settings.py
Fügen Sie Ihre Server-IP als zulässigen Host hinzu.
settings.py
...
ALLOWED_HOSTS = ['your-server-ip']
...
Fügen Sie dannstorages
zum Abschnitt "Installierte Apps" der Einstellungsdatei hinzu und entfernen Siedjango.contrib.admin
, da dies in diesem Lernprogramm nicht verwendet wird. Es sollte wie folgt aussehen.
settings.py
...
# Application definition
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storages'
]
...
Ersetzen Sie den markierten Text und fügen Sie ihn dem AbschnittTEMPLATES
der Einstellungsdatei hinzu, damit das Projekt weiß, wo sich Ihre home.html-Datei befindet.
settings.py
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'mysite/templates')],
'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',
],
},
},
]
...
Zuletzt aktualisieren wir Ihre Einstellungen am Ende der Datei. Wir werden Folgendes unter dem Abschnitt# Static files
hinzufügen. Stellen Sie sicher, dass Sie Ihre eigenen Zugriffsschlüssel, den Bucket-Namen und das Verzeichnis hinzufügen, in dem Ihre Dateien gespeichert werden sollen. Sie können ein Verzeichnis über die Spaces-Oberfläche im Browser hinzufügen. Zum Zeitpunkt des Schreibens ist NYC3 die einzige Region, in der sich derzeit Spaces befinden, sodass dies als Endpunkt-URL übergeben wird.
settings.py
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
AWS_ACCESS_KEY_ID = 'your-spaces-access-key'
AWS_SECRET_ACCESS_KEY = 'your-spaces-secret-access-key'
AWS_STORAGE_BUCKET_NAME = 'your-storage-bucket-name'
AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'your-spaces-files-folder'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'mysite/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_ENDPOINT_URL, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Jetzt ist unsere Einstellungsdatei bereit, um unsere Django-App in den Objektspeicher zu integrieren.
[[Schritt-6 - Sammeln statischer Dateien]] == Schritt 6 - Statische Dateien sammeln
Jetzt führen wircollectstatic
aus und Sie werden feststellen, dass Dateien übertragen werden, einschließlich des Bildes, das wir in unserem statischen Verzeichnis gespeichert haben. Es wird an den Speicherort übertragen, den wir in der Einstellungsdatei angegeben haben.
Navigieren Sie dazu zu~/django-apps/mysite/
:
cd ~/django-apps/mysite
Führen Sie im Verzeichnis den folgenden Befehl aus:
python manage.py collectstatic
Sie sehen die folgende Ausgabe und sollten auf Aufforderung mit "Ja" antworten.
OutputYou have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel:
Anschließend wird eine Meldung angezeigt, dass die Datei in Spaces kopiert wurde.
OutputCopying '/root/django-apps/mysite/mysite/static/css/app.css'
1 static file copied, 1 unmodified.
Wenn Sie zu diesem Zeitpunkt von Ihrem DigitalOcean Cloud-Konto zu Ihrem Bucket zurückkehren, werden die Verzeichnissecss
undimg
zu dem Ordner hinzugefügt, auf den Sie sie verwiesen haben, mitapp.css
im css
Verzeichnis und dasDO-Logo_icon_blue-.png
Bild imimg
Verzeichnis.
[[Schritt 7 - Testen der Anwendung]] == Schritt 7 - Testen der Anwendung
Nachdem alles eingerichtet und unsere Dateien in unserem Objektspeicher abgelegt sind, können wir unsere Anwendung testen, indem wir zu der Seite navigieren, auf der unsere statische Datei bereitgestellt wird.
Stellen Sie zunächst sicher, dass unsere Firewall den Datenverkehr über Port 8000 zulässt, indem Sie den folgenden Befehl eingeben:
sudo ufw allow 8000
Jetzt können wir unseren Server ausführen, indem wir auf die IP-Adresse unseres Servers verweisen und Port 8000 verwenden.
python manage.py runserver your-server-ip:8000
Navigieren Sie in einem Webbrowser zuhttp://your-server-ip:8000
, um das Ergebnis der von Ihnen erstellten Django-Anwendung anzuzeigen. Sie werden die folgende Ausgabe in Ihrem Browser sehen:
Wenn Sie mit dem Testen Ihrer App fertig sind, können SieCTRL
+C
drücken, um den Befehlrunserver
zu stoppen. Dadurch kehren Sie zu Ihrer Programmierumgebung zurück.
Wenn Sie bereit sind, Ihre Python-Umgebung zu verlassen, können Sie den Befehldeactivate
ausführen:
deactivate
Wenn Sie Ihre Programmierumgebung deaktivieren, kehren Sie zur Eingabeaufforderung des Terminals zurück.
Fazit
In diesem Tutorial haben Sie erfolgreich eine Django-Anwendung erstellt, die Dateien von DigitalOcean Spaces bereitstellt. Dabei haben Sie Informationen zu statischen Dateien, zum Verwalten statischer Dateien und zum Bereitstellen dieser Dateien über einen Cloud-Dienst erhalten.
Sie können mit Python und Django weiter über die Webentwicklung lernen, indem Sie unsere Tutorial-Reihe zuDjango Development lesen.