【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…

最新の投稿

SQL整形ツールを作成した
特徴 使い方 FW/ライブラリ等 nuxt sql-formatter-plus Monaco Editor おまけ ソース SQL整形ツールを作成しました。 URLはこちらです。 SQL…

ファイルの1行目を表示 Linuxコマンド head
head コマンド例 headコマンドでファイルの 1行目もしくは指定した行数だけ表示する方法。 head 利用できるオプション コマンド例 の 1行目だけを表示 の 5行目までを表示 カレントディレクトリ以下の全てのtxtファイルの1行目を表示

Amazon S3 と ローカルファイルのチェックサムの比較
s3apiでEtagを取得 検証 マルチアップロード時の注意点 Amazon S3 の Etagを使ってファイルの整合性チェックをする。 s3apiでEtagを取得 S3 APIを利用するとEtagを取得します。この値はmd5のハッシュ値になります。 検証 MD…

github.io / gitlab.ioで公開されている質の高い技術ドキュメント
AWSによるクラウド入門 Pythonプログラミング入門 普通の人が資産運用で99点をとる方法とその考え方 2018年の段階で私が知らないこと github.io / gitlab.io で無料で公開されている興味深いドキュメントのmemo AWS…

10進数から2進数 2進数から10進数への変換 JavaScript
10進数から2進数 2進数から10進数 テスト 10進数から2進数、2進数から10進数への変換を行うJavaScriptのコードの紹介。 JSの場合、10進数から2進数への変換はメソッド。2進数から1…

JavaScriptの配列ショートハンド (AtCoder用)

JavaScriptでワーシャルフロイド法を実装
AtCoder ABC012 D問題 D - バスと避けられない運命 解説 実装 AtCoder ABC012 の D問題でワーシャルフロイド法が利用できる問題が出てきたので、 JavaScriptで実装しました。 AtCoder ABC012 D問題 D…

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

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

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

Tags

Dates

© 2020   404 motivation not found