質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

uWSGI

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

3977閲覧

[Windows環境] Django + uWSGI + Nginx 構成におけるDjangoアプリの呼び出し方について

yuink

総合スコア1

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

uWSGI

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2022/02/01 03:27

Python初学者です。

独学でPython及びDjangoを学習し、ローカル環境で動作するWEBシステムを
構築できたのですが、本番環境として社内公開する方法で四苦八苦しており、
解決策がわからず投稿させて頂きました。

現在WindowsServer2019で Django ⇔ uWSGI ⇔ Nginx ⇔ クライアント というイメージの構成で
社内向けにWebシステムを公開しようとしています。

【環境】

・WindowsServer2019
・Python3
・Django
・Nginx(webサーバ)
・uWSGI(web→python実行アプリ)
・Cygwin(uwsgiのインストール環境+実行環境)
※uWSGIに関してはWindowsが非対応のようだったのでCygwinを使用しています。

Cygwinにて下記コマンドにてテストプログラム hello.py が表示される事までは
確認できました。

[Cygwin]

uwsgi --master --https 127.0.0.1:9090,/etc/pki/Server/server.crt,/etc/pki/Server/server.key --wsgi-file uwsgi/hello.py

[hello.py]

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]

[Nginx.conf]

server { listen 443 ssl http2; server_name localhost; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_ecdh_curve prime256v1; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_certificate C:\cygwin64\etc\pki\Server\server.crt; ssl_certificate_key C:\cygwin64\etc\pki\Server\server.key; keepalive_timeout 70; sendfile on; client_max_body_size 0; root G:\Mysite\Mysite\templates\blog; server_tokens off; charset utf-8; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security "max-age=31536000"; location /uwsgi { include G:\Mysite\Mysite\uwsgi_params; proxy_pass https://127.0.0.1:9090; } }

[クライアント]

https://[サーバのIP]/uwsgi

Hello World


この状態からDjangoのwsgi.pyを呼び出せばいけるのかと考えたのですが
Cygwinで下記コマンドを実行したところ下記の状態でDjangoが見つけられずに
エラーが出てしまいます。

[Cygwin]

uwsgi --ini uwsgi.ini

~~~~省略~~~~
*** Operational MODE: single process ***
Traceback (most recent call last):
File "wsgi.py", line 16, in <module>
from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***

~~~~省略~~~~

[uwsgi.ini]

[uwsgi]
master = true
wsgi-file = wsgi.py
home = G:\mysite\venv
chdir = G:\mysite\mysite\mysite
https = 127.0.0.1:9090,/etc/pki/Server/server.crt,/etc/pki/Server/server.key

[wsgi.py]

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MachineStatusManagementSystem.settings')

application = get_wsgi_application()


from django.core.wsgi import get_wsgi_applicationで
djangoが見つけられないようなのですが、何がダメなのか
検討がつかない状態です。

ご存じの方、ご教示頂ければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしかして、このサイトを見ていますか?
このサイトを見てみましたが、「2.pythonと必要なライブラリをインストールします」は間違っている気がします。

uwsgiをcygwin上でインストールしたならば、使われるpythonの環境はcygwinのpython環境であり、Windowsネイティブのpythonは不要、必要なライブラリ(今回のdjangoも含めて)はcygwin上のpythonに対してインストールしなければならないと思います。

とはいえ、自分も実際にやってみたわけではないので、自分が間違っている可能性もあります。
とりあえず、以下のように hello.py を直して実行してみてください。

python

1import sys 2 3def application(env, start_reponse): 4 start_response('200 OK', [('Content-Type', 'text/html')]) 5 return [b'Hello, world: ' + sys.platform.encode('utf-8')]

これで、platformが「cygwin」と表示されれば、私の考えは当たっていると思われますので、cygwin上でdjangoその他必要なライブラリをインストールしてください。

投稿2022/02/01 14:13

katsuko

総合スコア3536

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuink

2022/02/02 02:25

ご回答ありがとうございます。 仰る通りのサイトを参考にしインストールや設定したものです。 そして、Cygwinの環境に対してdjangoをインストール pip3 install django katsukoさんにご掲示していたpythonコードにhello.py修正実行した結果 「Hello,World cygwin」と表示されました! 今回のアドバイス頂いた事でuWSGIだけCygwinで動作し、Windows上でPython(Django)が 動作するのではなく、Nginx ⇒ Cygwin[uWSGI ⇔ Python(Django)]のように全て Cygwin上で動作するということがわかりました。 後はCygwin上で環境構築してみたいと思います。 とても助かりました!ありがとうございます。 また余談ですが、こういった書き込みをし質問することが 生まれて初めてでしたがご返信頂いて感動しました。 私も精進して他の質問者の方に回答できるよう頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問