DjangoでDigitalOcean SpacesでPython Decoupleを使用する方法

前書き

Python Decoupleは、開発者がコードから構成設定を簡単に分離できるようにすることを目的としたPythonライブラリです。 元々はDjango向けに設計されていましたが、現在はパラメーターを保存し、コードとは別に定数値を定義するための汎用Pythonツールです。

このチュートリアルでは、Python Decoupleのインストール方法と、DigitalOceanのオブジェクトストレージソリューションであるSpacesを利用した基本的なDjangoアプリケーションでの使用方法について説明します。

前提条件

このチュートリアルを適切に準備するには、次のものが必要です。

  • UbuntuまたはDebian Linuxサーバーに設定された `+ sudo +`権限を持つ非ルートユーザーアカウント。 これをまだ設定していない場合は、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04の初期サーバーセットアップ]またはhttpsに従ってください。 //www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8[Debian]チュートリアル。

  • DigitalOcean Spaceと生成されたAPIキー。 これに関するガイダンスについては、https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key [tutorial]に従って、スペースを作成し、 APIキー]。

サーバーの初期設定とDigitalOcean SpaceおよびAPIキーがあれば、すぐに使用を開始できます。

ステップ1-仮想環境のセットアップ

始める前に、まだ行っていない場合は、今がサーバーを更新およびアップグレードする良い機会です。

sudo apt-get update && sudo apt-get -y upgrade

サーバーにはPython 3が付属しているはずです。 次のコマンドを実行して、インストールされていることを確認します。

sudo apt-get install python3

次に、Pythonのパッケージマネージャーpipをインストールしましょう。

sudo apt-get install -y python3-pip

最後に、プログラミング環境をセットアップできるように、* virtualenv *モジュールをインストールする必要があります。

sudo pip3 install virtualenv

プログラミング環境のセットアップと利用に関する詳細なガイダンスと情報については、https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-aでこのチュートリアルを確認してください。 -program-environment-on-an-ubuntu-16-04-server [仮想環境のセットアップ]。

これで、Pythonプログラミング環境に移行する準備が整いました。

ステップ2-Djangoアプリの作成と依存関係のインストール

DigitalOcean SpacesとPython Decoupleを利用するには、次にDjangoアプリを作成し、必要な依存関係をインストールする必要があります。

サーバーのホームディレクトリにいる間に、Djangoアプリケーションを含むディレクトリを作成する必要があります。 次のコマンドを実行して、というディレクトリまたは任意の別の名前を作成します。 次に、ディレクトリに移動します。

mkdir
cd

ディレクトリ内で、仮想環境を作成します。 それを呼び出しましょう。

virtualenv

ここで、次のコマンドを使用して仮想環境をアクティブ化します。

. env/bin/activate

プレフィックスがに変更されるとアクティブになります。現在のディレクトリに応じて、次のようになります。

環境内で、pipを使用してDjangoパッケージをインストールします。 Djangoをインストールすると、Djangoアプリケーションを作成して実行できます。 Djangoの詳細については、https://www.digitalocean.com/community/tutorial_series/django-development [Django Development]のチュートリアルシリーズをご覧ください。

pip install django

次のコマンドを使用して呼び出されるDjangoプロジェクトを作成しましょう。

django-admin startproject

次に、Python用AWS SDKであるhttps://boto3.readthedocs.io/en/latest/[Boto 3]をインストールする必要があります。これにより、DigitalOcean SpacesなどのオブジェクトストレージソリューションをDjangoアプリケーションに統合できます。

執筆時点で、Boto 3はS3と明示的に互換性があります。 SpacesとS3の相互運用性により、SpacesはBoto 3とも互換性があります。 Amazon S3とDigitalOcean Spacesオブジェクトストレージの比較の詳細については、https://developers.digitalocean.com/documentation/spaces/ [Spaces docs]をご覧ください。

次のコマンドを実行して、Boto 3をインストールします。

pip install boto3

また、Djangoおよび* boto3 用のカスタムストレージバックエンドのコレクションである https://django-storages.readthedocs.io/en/latest/ [django-storages] *もインストールする必要があります。

pip install django-storages

最後に、Python Decouple **をインストールしましょう。

pip install python-decouple

Djangoアプリの環境内で依存関係をセットアップし、静的ディレクトリとテンプレートディレクトリをセットアップする準備ができました。

ステップ3-ディレクトリとアセットを追加する

すべての依存関係を設定した環境で、 `+ mysite / mysite +`ディレクトリに切り替えることができます。

cd ~/django-apps/mysite/mysite

`+ mysite / mysite +`ディレクトリ内で、次のコマンドを実行して静的ディレクトリとテンプレートディレクトリを作成します。

mkdir static && mkdir templates

次に、画像とCSSのサブディレクトリを作成して、 `+ static +`ディレクトリ内に配置します。

mkdir static/img && mkdir static/css

ディレクトリを作成したら、テストファイルをダウンロードし、最終的にオブジェクトストレージに追加します。 画像をダウンロードするので、 `+ img +`ディレクトリに切り替えます。

cd ~/django-apps/mysite/mysite/static/img

このディレクトリ内で、Wgetの「+ wget +」コマンドを使用してDigitalOceanロゴ画像をダウンロードします。 これは、Ubuntuディストリビューションにプリインストールされ、Webサーバーからコンテンツを取得するためによく使用されるGNUプログラムです。

wget http://assets.digitalocean.com/logos/DO_Logo_icon_blue.png

「+ ENTER +」を押すと、次のような出力が表示されます。

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]

この時点で、コマンド「+ ls 」を実行すると、「 DO_Logo_icon_blue.png 」という名前の画像が「 static / img / +」ディレクトリに存在することがわかります。

これらのディレクトリを設定し、サーバーにダウンロードした画像を保存したら、Djangoアプリに関連付けられたファイルの編集に進むことができます。

ステップ4-CSSおよびHTMLファイルの編集

まず、スタイルシートを編集します。 Webアプリの基本的なスタイルシートを追加できるように、 `+ css +`ディレクトリに移動する必要があります。

cd ~/django-apps/mysite/mysite/static/css

nano、または選択した別のテキストエディターを使用して、ドキュメントを編集します。

nano app.css

ファイルが開いたら、次のCSSを追加します。

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;
}

終了したら、ファイルを保存して閉じることができます。

ここから、 `+ templates`ディレクトリに移動します。

cd ~/django-apps/mysite/mysite/templates

`+ home.html +`というファイルを開いて、基本的なWebアプリの表示方法に合わせてHTMLを追加する必要があります。 nanoを使用してファイルを開き、編集の準備をします。

nano home.html

ドキュメント内に、次を追加します。

home.html

{% load static %}
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Spaces + Django Tutorial</title>
 <link rel="stylesheet" type="text/css" href="{% static 'css/app.css' %}">
</head>
<body>
 <center>
 <header>
   <h1>Spaces + Django Tutorial</h1>
 </header>
 <main>
   <img src="{% static 'img/DO_Logo_icon_blue.png' %}">
   <h2>Congratulations, you’re using Spaces!</h2>
 </main>
 </center>
</body>
</html>

ファイルを保存して閉じます。 最後に更新するファイルは `+ urls.py `ファイルで、新しく作成された ` home.html +`ファイルを指すようにします。 次のディレクトリに移動する必要があります。

cd ~/django-apps/mysite/mysite

nanoを使用してurls.pyファイルを編集します。

nano urls.py

ファイル内のすべてを削除してから、次を追加できます。

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'),
]

これらのファイルを設定したら、次にオブジェクトストレージと統合するための設定の構成に取り組むことができます。

ステップ5-Python Decoupleを使用してスペース認証情報を抽象化する

仮想環境内で、 `+ settings.py `ファイルの場所に移動します。 これは、資格情報を個別に保存するための ` settings.ini +`ファイルを作成する場所です。

cd ~/django-apps/mysite/mysite

`+ touch `を使用して ` settings.ini +`ファイルを作成します。これは、呼び出し元のディレクトリに新しい空のファイルを作成するLinuxコマンドです。

touch settings.ini

作成される設定ファイルにはファイル拡張子が付きます。 このファイルは、設定データのためにPython Decoupleによって調べられ、設定ファイルがAPIキーを参照する場所でもあります。 の代替拡張子として使用することもできます。

次に、nanoなどのお気に入りのテキストエディターを使用してファイルを開きます。

nano settings.ini

このドキュメントでは、Python Decoupleで必要なセクションヘッダー `+ [settings] +`を用意し、それらをhttps://www.digitalocean.com/community/tutorials/howに割り当てることでSpaces資格情報を追加します。 -to-use-variables-in-python-3 [変数]。 完全なファイルは次のようになります。

settings.ini

[settings]
SPACES_ACCESS_KEY=
SPACES_SECRET_ACCESS_KEY=

これらの認証情報にアクセスするには、 `+ settings.py `ファイルから ` settings.ini +`ファイルを参照する必要があります。

次のステップでは、 `+ settings.py +`ファイルを完全に設定します。

ステップ6-設定の更新

ここで、設定ファイルをSpacesの資格情報で更新し、セットアップしたページを利用して画像を表示できるようにします。

設定ファイルにアクセスするための正しい場所にいることを確認してください。

cd ~/django-apps/mysite/mysite

nanoまたは別のテキストエディターで編集するためにファイルを開きます。

nano settings.py

ファイルの先頭に、https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 [+ import + statement]を順番に追加する必要がありますDecoupleの構成モジュールを使用します。

settings.py

...
import os

...

ファイル内で許可されたホストに移動し、サーバーIPを追加します。

settings.py

...
ALLOWED_HOSTS = ['']
...

次に、このチュートリアルでは使用しないため、設定ファイルのインストール済みアプリセクションに「+ storages 」を追加し、「 django.contrib.admin +」を削除します。 次のようになります。

settings.py

...
# Application definition

INSTALLED_APPS = [
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',

]
...

強調表示されたテキストを置き換えて、設定ファイルの「+ TEMPLATE」セクションに追加し、プロジェクトが「+ home.html」ファイルの場所を認識できるようにします。

settings.py

...
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',
           ],
       },
   },
]
...

最後に、ファイルの下部で設定を更新しましょう。 `+#Static files +`セクションの下に以下を追加します。 最初の2行はファイルへの参照を追加し、構成パラメーターを取得できるようにします。

その下に、必ず独自のバケット名を追加してください。 執筆時点では、NYC3は現在Spacesが存在する唯一の地域であるため、エンドポイントURLとして渡されています。

端末の場所については、ファイルをインポートするディレクトリを追加します。 Spacesインターフェースのブラウザーでディレクトリを追加できます。

settings.py

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

AWS_ACCESS_KEY_ID = config('SPACES_ACCESS_KEY')
AWS_SECRET_ACCESS_KEY = config('SPACES_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = ''
AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {
   'CacheControl': 'max-age=86400',
}
AWS_LOCATION = ''

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'

これで、SpacesクレデンシャルをPythonコードから抽出し、設定ファイルでDjangoアプリとオブジェクトストレージを統合する準備が整いました。

Django Webアプリケーションを実行して、すべてが正しくセットアップされたことを確認しましょう。

ステップ7-静的ファイルを収集する

「+ collectstatic +」を実行すると、静的ディレクトリに保存した画像を含むファイルが転送されていることがわかります。 設定ファイルで特定したSpacesの場所に転送されます。

これを達成するために、 `+〜/ django-apps / mysite / +`に移動しましょう:

cd ~/django-apps/mysite

ディレクトリ内で、次のコマンドを実行します。

python manage.py collectstatic

次の出力が表示され、プロンプトが表示されたら「+ yes +」と応答するはずです。

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:

その後、ファイルがSpacesにコピーされたことを示す出力がさらに表示されます。

OutputCopying '/root/django-apps/mysite/mysite/static/css/app.css'

1 static file copied, 1 unmodified.

この時点で、DigitalOcean Cloudアカウントからバケットに戻ると、 + css +`および `+ img +`ディレクトリがそれらをポイントしたフォルダーに追加され、 `+ app.css +`が ` + css + `ディレクトリ、および + img + ディレクトリ内の + DO-Logo_icon_blue-.png + `画像。

ステップ8-アプリケーションを実行する

UFWファイアウォールを設定している場合は、まず次のコマンドを発行して、着信トラフィックがポート8000​​を通過できるようにします。

sudo ufw allow 8000

仮想環境がまだアクティブになっている状態で、次のコマンドを使用してファイルの場所に移動し、アプリケーションを実行しましょう。

cd ~/django-apps/mysite
python manage.py runserver <your-server-ip>:8000

Webブラウザーでhttp://:8000に移動して、作成したDjangoアプリケーションの結果を確認します。 ブラウザに次の出力が表示されます。

image:https://assets.digitalocean.com/articles/eng_python/django/python-decouple-spaces.png [DigitalOcean Spaces DjangoとPython Decoupleサンプルアプリ]

アプリのテストが完了したら、 + CTRL + + `+ C `を押して ` runserver +`コマンドを停止できます。 これにより、プログラミング環境に戻ります。

Python環境を離れる準備ができたら、 `+ deactivate +`コマンドを実行できます:

deactivate

プログラミング環境を非アクティブ化すると、ターミナルコマンドプロンプトに戻ります。

結論

このチュートリアルでは、PythonコードからSpacesクレデンシャルを抽象化しながら、DigitalOcean Spacesからファイルを提供するDjangoアプリケーションを作成しました。 静的ファイル、静的ファイルの管理方法、クラウドサービスから静的ファイルを提供する方法、Python設定ファイルから構成パラメーターを分離する方法について学びました。

Django Developmentのチュートリアルシリーズを読むことで、PythonとDjangoを使用したWeb開発について引き続き学習できます。

Related