【Python】Django2.0 + Python3 + ApacheでWebアプリケーション構築

2018-05-19
pythondjangoapache
    

目次

概要

Django + Python3 + Apache + wsgi でWebサーバを構築した。 VirtualHost & デーモンモードの条件下で 公式通りに作っていたらいくつかつまづくポイントがあったので、メモ。

環境

Django2.0 Python3.4 Apache2.4

インストール

pipでDjangoとmod_wsgiを入れる

pip3 install mod-wsgi
pip3 install django

Djangoプロジェクト作成

そして公式の手順通りに作成し、 以下のような構成を作った。

/var/www/app1/
app
|-- app
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- polls
    |-- admin.py
    |-- apps.py
    |-- __init__.py
    |-- migrations
    |   `-- __init__.py
    |-- models.py
    |-- tests.py
    |-- urls.py
    `-- views.py

ここで app/url.pyは

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('polls.urls')),
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

polls/url.pyは

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

polls/views.pyは

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

そして、許可するドメインをapp/settings.pyの28行目あたりに追加する。今回はapp1.localhost.comとして設定している。

ALLOWED_HOSTS = [
    'app1.localhost.com'
]

Apacheの設定

Python3を使いたいのでwsgi.confを次のように書き換える。

LoadModule mod_wsgi /usr/local/lib/python3.4/dist-packages/mod_wsgi/server/mod_wsgi-py34.cpython-34m.so

今回の場合、静的コンテンツをプロジェクト内ディレクトリに置きたくなかったので、/var/www/app1/indexに置くことにした。

WSGIDaemonProcessはpython-path=/var/www/app1/appを指定しないと、appモジュールが存在しないとエラーを吐き続けていたので記述した。これが分からず1時間くらい苦労した。

WSGIPythonPathは(デーモンモードの場合)必要がなかった。というかVirtualHost内に記述するとエラーとなった。

WSGIScriptAliasに関しては、もともとXXXX.wsgiしか許可できないようになっているっぽいので、プロジェクトファイル内のwsgi.pyをRequire all grantedとしている。

<VirtualHost *:80>
    ServerName app1.localhost.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/app1/index
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    WSGIScriptReloading On
    WSGIDaemonProcess app1.localhost.com user=www-data group=www-data threads=5 python-path=/var/www/app1/app
    WSGIProcessGroup app1.localhost.com
    WSGIScriptAlias / /var/www/app1/app/app/wsgi.py
    #WSGIPythonPath /var/www/app1/app/

    <Directory /var/www/app1/app/app/>
        <Files wsgi.py>
                Require all granted
        </Files>
    </Directory>

    Alias /static/ /var/www/app1/index/
    <Directory /var/www/app1/index>
        Require all granted
    </Directory>
</VirtualHost>

これで,http://app1.localhost.com/ http://app1.localhost.com/polls http://app1.localhost.com/admin に参照できるようになる。 また、/var/www/app1/index/に置いたファイルに対して、http://app1.localhost.com/static/****で参照できるようになる。 めでたし。

参考

https://torina.top/detail/289/

https://www.yoheim.net/blog.php?q=20170206

https://qiita.com/roy29fuku/items/578de62fbdd65f8ffbaa

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

Selenium + Python でYahooのログインや検索・メールの操作を自動化する。
環境 Selenium環境の構築 Seleniumのインストール 検証 Yahoo検索する Yahooにログイン/ログアウトする Yahooメールの操作〜ゴミ箱を空にする サンプルソース 参考 Selenium + PythonでYahoo…

AWS EC2 + Bitnami で始める WordPress
Bitnami WordPressを使うメリット 個人的に感じた3つのメリット Amimoto AMI と比較して Bitnami AMIについて Bitnami WordPressの構成と設定 サーバの構成 各種設定 MySQL WordPress Apache…

Ubuntu18.04にApache MariaDB PHP7.2 をセットアップ
環境情報 モジュール類の更新 Apacheのインストール PHP7.2のインストール インストール 動作確認 MariaDBのセットアップ MariaDBのインストール データベースと作業用ユーザの作成 参考 AWS の EC2 の Ubuntu18.0…

エンジニアなMacBookのセットアップ 開発環境の構築
ブラウザ関連 Homebrewのインストール ターミナル環境系 Hyper エディタ VSCode typora CLIツール Git 言語系 Python node.js MacBookPro…

JPG画像を圧縮する OpenCV + Python
環境 説明 ソース セットアップ 実験 ブログなどにアップする画像を比較的簡単に圧縮する方法がないか探していたところ、 PythonとOpenCVで簡単に実装出来そうでした。 そこで、Python + OpenCV…

Python + OpenCVで顕著性 (saliecy) マップを実装
顕著性マップ OpenCVに用意されている3つの顕著性検出アルゴリズム Static saliency StaticSaliencySpectralResidual_create() StaticSaliencyFineGrained_create…

Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
サンプル fillPolyと何が違うのか 参考 Python + OpenCVのfillConvexPoly…

Python+OpenCVで任意の画像領域:ROIのみに処理 マスク画像を使って
やりたいこと(やったこと) 実装方法 Python + OpenCVで任意の画像領域のみに処理を加えるサンプルを1つ紹介します。 やりたいこと(やったこと) こんな感じで、任意の画像領域(矩形でなくてもよい)のみをグレースケール、…

OpenCVのチャンネルエラー対処: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'binary_op'
詳細 参考 Python + OpenCVのスクリプトを書いていたところ、タイトルにあるようなエラーが出現しました。 結果的にはnumpyの配列のサイズが異なるのが原因だったようです。 詳細 下記のソースはPython…

顔のランドマーク検出とドロネー分割 Python + OpenCV + dlib
環境 デモ サンプルソース 実行結果 リアルタイムでカメラ画像を利用する場合 説明 dlib Subdiv2D 参考 Python + OpenCV + dlib…

最新の投稿

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Vue.jsで作成された、ちょっと面白くて役立ちそうなサービス
UIコンポーネント VueSocial CKEditor 5 Vue.Draggable Vuetable 2 vuejs-datepicker Kalendar Vue Apexcharts Vue.js Google Charts vue-cart WebIDE…

GitHubのリポジトリをGitLabに同期する GitLabのミラーリング機能
GitLabのミラーリングについて GitHubのリポジトリをGitLabに反映する その他 参考 GitLabのミラーリング機能によりGitHubなどの外部のリポジトリとのミラーリングを行うことができます。 これを使ってGitHub…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

ハイフンとかマイナスとかダッシュとか

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

GolangをCGIとして実行する
環境 golang パッケージ ソースと実行 ビルドとサーバ実行 標準ライブラリのみ Golang を CGIとして実行する際のメモ 環境 golang パッケージ 以下のモジュールを利用しています。 github.com/gorilla/mux…

Tags

Dates

© 2020   404 motivation not found