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

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

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

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

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

nginx

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

7540閲覧

Django, gunicorn, nginx : Server Error (500)となる

退会済みユーザー

退会済みユーザー

総合スコア0

Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

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

nginx

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/13 08:53

編集2019/05/14 15:07

#環境
現在デプロイを行なっているところです。
Python3.7
Django2.1
centOS7
PostgreSQL
gunicorn
nginx

#状況
ブラウザで nginxの起動ができ、guniconの起動( IPアドレスに接続)を行おうとしたところ、

<h1>Server Error (500)</h1>

がでます。

自分で調べた中だと、<h1>でエラーが出るのはDjangoからの応答であり、そこを直さないといけないこと(らしい)です。
ここを見ました

そこでどこをいじればいいのか分からないので質問しました。

加えて、このようにエラーが出た時は「どこを確認すればよい」というものはありますでしょうか?
先日から質問を多くしてしまっているので、自分でどうにかできればと思うのですが・・・。

-----追記-------
settings/prod.py

from .common import * # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOWED_HOSTS = ['*', ] INSTALLED_APPS += ( 'gunicorn', ) # Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'myapp', 'USER': 'myapp', 'PASSWORD': 'myapp', 'HOST': 'localhost', 'POST': '', } }

nginx.conf

include /etc/nginx/conf.d/*.conf; upstream myapp-master { server unix:/var/run/myapp.sock fail_timeout=0; } server { listen 80 default_server; listen [::]:80 default_server; server_name 【ここにIPアドレス】; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location /static { alias /opt/django/myapp/myapp/static; } location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; fastcgi_param HTTP_PROXY ""; proxy_pass http://myapp-master; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }

gunicorn.conf.py

bind = 'unix:/var/run/myapp.sock' workers = 2 worker_connections = 1000 max_requests = 1000 debug = False daemon = True pidfile = '/var/run/myapp.pid' user = 'nginx' group = 'nginx' errorlog = '/var/log/gunicorn/myapp-error.log' accesslog = '/var/log/gunicorn/myapp-access.log' loglevel = 'info' proc_name = 'myapp'

------追記2(5/14 12:00)--------
その後、自身で調査しながら、試行錯誤しています。
Django と nginx を独立させた動作確認がわからなかったので、一つずつ確認しながらもう一度設定を見てみました。
nginxとgunicornはactiveになっていて、
gunicorn -c gunicorn.conf.py myapp.wsgi
からIPアドレスへアクセスすると、同じく500。
ただ、IPアドレス/admin へアクセスするとDjangoのadminサイトへアクセスできます。
ログインを行い、想定通りにオブジェクトの追加も行えました。

そして、python manage.py runserver
こちらも同じくadminサイトへアクセスできます。
その他のページは500です。

------追記3(5/14 16:30)--------
アプリケーションサーバーの起動コマンドは
gunicorn -c gunicorn.conf.py myapp.wsgi
その時のDjangoのエラーログは
"GET / HTTP/1.1" 500 27
gunicornのエラーログファイルにはエラーなし
[INFO] Starting gunicorn 19.9.0が羅列。
nginxについてもエラーログファイルを確認。
同じくエラーなし(正確には、記述されていたが日付が昨日で、追記2の作業をしたのが今日だったためなしと判断)

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

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

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

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

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

yamato_user

2019/05/13 09:20

まず、Nginx単体とDjango単体の接続確認は行っていますか? ・全ての設定ファイルの該当箇所を追記してください。 ・ターミナルにエラー内容が出ているはずなので追記してください。
退会済みユーザー

退会済みユーザー

2019/05/13 09:44

該当箇所の追記をしました。 Nginx単体とDjango単体の接続確認はどう行えばよいですか? また、ターミナルにエラーは出ていません。
yamato_user

2019/05/13 09:54

単体の接続確認って言っているのは、NginxとDjangoを連携させず、それぞれでサーバーを立てられているかの確認という意味です。 また、ターミナルにエラーが出ていないということですが、バックグラウンドで回していたりしますか? *Djangoはバックグラウンドで回していなかったら、ログをターミナルに吐きます。
退会済みユーザー

退会済みユーザー

2019/05/13 10:26 編集

>単体の接続確認 初めてのデプロイで調べながら行なっているので、どうなっているのか完全にはわかっていませんが、 `nginx -t`で構文エラーは出ず(OKと出力)、`systemctl restart nginx`に対しても特にエラーは出ません。 >バックグラウンドで回していたりしますか? migrateは行えるので、そのようになっていると考えています。(あっていますか?) 探りながらやっていますので、的外れな答えでしたらすみません。
yamato_user

2019/05/14 06:09

単体起動の確認はできたようですね。 エラー内容がわからないと答えようがありません。(レスポンス500の原因は様々なので) 下記教えてください ・サーバー起動コマンドは? ・Nginxのエラーログ ・Djangoエラーログ
退会済みユーザー

退会済みユーザー

2019/05/14 07:49

ありがとうございます。追記しました
guest

回答2

0

とりあえず、nginxのログが見れれば、何かアドバイスできるかも知れません。

投稿2019/06/05 14:24

DaiTakahashi

総合スコア63

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

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

0

初めてのデプロイで調べながら行なっている

いきなり難しいことしてはいけません。まずは、サーバーをまっさらな状態にして、Djangoの環境だけ整えてみましょう。そして、python manage.py runserver [ipアドレス:ポート番号]でDjangoサーバーを起動後、ipアドレス:ポート番号にアクセスできるか確かめます。その後、また、サーバーをまっさらな状態にして、Nginx環境だけ整えてみましょう。sudo service nginx startなどでNginxサーバーを起動させ、port8080にアクセスできるか確かめます。そこまでしてから、再度この質問内容をもう一度実行してください。まずは、NginxとDjangoに対する基本的な理解を整えることが先決です

投稿2019/05/13 12:33

yamato_user

総合スコア2321

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問