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

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

新規登録して質問してみよう
ただいま回答率
85.51%
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日にリリースされました。

Q&A

解決済

1回答

978閲覧

gunicornでDjangoプロジェクトが起動できない

arron

総合スコア34

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日にリリースされました。

0グッド

0クリップ

投稿2022/09/07 13:34

編集2022/09/13 22:24

前提

ローカルで作ったDjangoのプロジェクトをVPSサーバーに保存したあと、gunicornとnginxを使ってVPSサーバーからDjangoのプロジェクトが起動しようとしていますが、立ち上がりません。
エラーメッセージに転記したターミナルのコメントのを見ると、どうもgunicornがワークしていないようです。
user名やパスワードはgunicornとDjangoのsettings.pyで同じものを指定しています。

実現したいこと

VPSサーバーからのDjangoプロジェクト起動できるようにしたいです。

発生している問題・エラーメッセージ

#ブラウザに表示されるエラーメッセージです。 ERROR The requested URL could not be retrieved The following error was encountered while trying to retrieve the URL: http://"VPSサーバーのアドレス"/"プロジェクトのpath"/ Connection to "VPSサーバーのアドレス" failed. The system returned: (110) Connection timed out The remote host or network may be down. Please try the request again. Your cache administrator is root. #gunicornのステータスメッセージです。 (todoenv) root@ik1-413-38954:~/todoproject# sudo systemctl status gunicorn × gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Mon 2022-09-05 21:32:25 JST; 2 days ago TriggeredBy: ● gunicorn.socket Process: 202174 ExecStart=/home/ryota/todoproject/todoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock todoproject.wsgi:application (code=exited, status=217/USER) Main PID: 202174 (code=exited, status=217/USER) CPU: 1ms Sep 05 21:32:25 ik1-413-38954 systemd[1]: Started gunicorn daemon. Sep 05 21:32:25 ik1-413-38954 systemd[202174]: gunicorn.service: Failed to determine user credentials: No such process Sep 05 21:32:25 ik1-413-38954 systemd[202174]: gunicorn.service: Failed at step USER spawning /home/ryota/todoproject/todoenv/bin/gunicorn: No such process Sep 05 21:32:25 ik1-413-38954 systemd[1]: gunicorn.service: Main process exited, code=exited, status=217/USER Sep 05 21:32:25 ik1-413-38954 systemd[1]: gunicorn.service: Failed with result 'exit-code'. (todoenv) root@ik1-413-38954:~/todoproject#

該当のソースコード

ubuntu

1※基本的にUdemyの講座でベースとしているwebサイトの通りに入力しています。 2"How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 18.04" 3https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04 4 5#pip、PostgreSQL、Nginxのインストール 6sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl 7 8#データベーステーブルの作成 9sudo -u postgres psql 10CREATE DATABASE myproject; 11CREATE USER myprojectuser WITH PASSWORD 'password'; 12ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; 13ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; 14ALTER ROLE myprojectuser SET timezone TO 'UTC'; 15GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser; 16\q 17 18#リポジトリのclone 19#仮想環境の構築 20 21#Djangoとgnicornのインストール 22pip install django gunicorn psycopg2-binary 23 24#settings.pyの設定 25vim ~/todoproject/todoproject/settings.py 26ALLOWED_HOSTS = ['VPSのIP', ‘localhost’’] 27DATABASES = { 28 'default': { 29 'ENGINE': 'django.db.backends.postgresql_psycopg2', 30 'NAME': 'myproject', 31 'USER': 'myprojectuser', 32 'PASSWORD': 'password', 33 'HOST': 'localhost', 34 'PORT': '', 35 } 36} 37STATIC_ROOT = os.path.join(BASE_DIR, 'static/') 38:wq 39 40#migration等のコマンドの実行 41manage.py makemigrations 42manege.py migrate 43manage.py collectstatic 44manage.py createsuperuser 45 46#gunicornの起動確認 47sudo ufw allow 8000 48gunicorn --bind 0.0.0.0:8000 todoproject.wsgi 49 50#ブラウザでDjangoプロジェクトの確認 51'VPSのIP':8000/'projectのurl' 52 53※この段階で上記の"ブラウザに表示されるエラーメッセージ"が出てきます。 54 Udemyの講座でベースとしているwebサイトでいうとStep6の段階で先に進めなくなっています。 55

試したこと

1.'sudo -u postgres psql'を実行したときに、'could not change directory to "/root": Permission denied'と表示が出るのが気になったので、"PostgreSQL Bugs"というサイトのアドバイスをもとに以下を試しました。
https://granicus.if.org/pgbugs/16915

So, your problem is that you run sudo as the root user, and the root home
directory is more protected than other directories.

If you, for example run sudo -u postgres psql as another user, you will not
have the same (and only cosmetic) issue:

create user

useradd -m arne

give the user sudo rights

cat<<EOT >> /etc/sudoers
arne ALL=(ALL:ALL) NOPASSWD: ALL
EOT

root@c376851a8443:~# su - arne
$ sudo -u postgres psql
psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.

postgres=#
Or, you just run psql as postgres without using sudo when you are root.

root@c376851a8443:~# su - postgres -c psql
psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.

postgres=#
Or, you just ignore the error message and just run sudo -u postgres psql.

In a Postgres 12 container:

docker run -d --rm --name=postgres_12 -e POSTGRES_PASSWORD=password
postgres:12
docker exec -it postgres_12 bash

root@cd3b256e5e0b:/# sudo -u postgres psql
psql (12.5 (Debian 12.5-1.pgdg100+1))
Type "help" for help.

postgres=#

2.SakuraのVPSではデフォルトでユーザーがubuntuになっているので、"【Linux】SSHでログイン後にsuでrootになれない主な原因3選"というサイトを参考にして、rootに変更してみましたが結果は変わりませんでした。
https://ses-blog.net/archives/tshoot/1286.html

補足情報(FW/ツールのバージョンなど)

VPS:さくらのVPS
Ubuntu:Ubuntu 20.04.4 LTS \n \l
IDE:PyCharm 2022.2.1 (Community Edition)

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

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

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

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

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

quickquip

2022/09/08 02:47

一番必要な gunicorn をどうセットアップしたのか? の情報がないように思います。 (私は一般ユーザで実行したことがないので私から回答できることはありませんが)
arron

2022/09/08 12:13

大変失礼いたしました。 該当のソースコードが抜けていました。 早速追記させていただきました。
arron

2022/09/09 01:00

度々すみません。ありがとうございます。 Step6で止まっている状況です。 /etc/systemd/system/gunicorn.service は、Step6までの作業に入っていないので特に編集した記憶ないです。
quickquip

2022/09/09 05:20

発生している問題のところで systemctl status gunicorn をしてたので7.が終わったところかと思って混乱しました。すみません。 gunicornをコマンド実行していてこの状態でと、コードは関係なくてVPSの方の状況/設定でアクセスを弾かれている気がします。
arron

2022/09/09 05:34

ありがとうございます! やっぱりVPNでしょうか。。 サポセンへの質問はちょっと緊張しますが、頑張って確認してみます。
arron

2022/09/09 07:31

サポセンに確認したところ、「弊社ではお客様のご利用いただく仮想サーバ内のシステム状況の把握や調査、トラブルシューティング等の技術的なサポートは承っておりません。」ということでした。(泣泣泣 VPSの設定については全く???なので、もし原因となっていそうなキーワード、ログの確認方法等手がかりがありましたら教えていただけますと、大変助かります。
quickquip

2022/09/09 08:14

個別の話ではなく「8000番ポートが許可されていますか?」みたいな聞き方でないといけなさそうですね。 https://vps.sakura.ad.jp/feature/packetfilter.html などで8000番の許可を明示的にするとかしてみたらどうでしょう。
arron

2022/09/09 08:35

サーバーのスペックを見たら、接続可能ポート“TCP 22”となっていました。 8000番のポートアクセスするにはどうしたら良いか、聞いてみれば良いということですね。 ありがとうございました。
arron

2022/09/09 12:56

サポセンからはゼロ回答ですが、マニュアルを参照してVPSのサーバーの設定でポートの解放を行いました。 その後、同じ内容でセットアップしましたが、やはりアクセスできませんでした。 このサイトにアクセスできませんwww.google.com からの応答時間が長すぎます。 次をお試しください 接続を確認する プロキシとファイアウォールを確認する Windows ネットワーク診断ツールを実行する ERR_CONNECTION_TIMED_OUT
arron

2022/09/09 13:11

追記 gunicornのエラーが解決されていませんでした。 × gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Fri 2022-09-09 21:45:18 JST; 23min ago TriggeredBy: × gunicorn.socket Process: 251739 ExecStart=/home/ryota/todoproject/todoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock todoproject.wsgi:application (code=exited, status=217/USER) Main PID: 251739 (code=exited, status=217/USER) CPU: 1ms Sep 09 21:45:18 ik1-413-38954 systemd[1]: Started gunicorn daemon. Sep 09 21:45:18 ik1-413-38954 systemd[251739]: gunicorn.service: Failed to determine user credentials: No such process Sep 09 21:45:18 ik1-413-38954 systemd[251739]: gunicorn.service: Failed at step USER spawning /home/ryota/todoproject/todoenv/bin/gunicorn: No such process Sep 09 21:45:18 ik1-413-38954 systemd[1]: gunicorn.service: Main process exited, code=exited, status=217/USER Sep 09 21:45:18 ik1-413-38954 systemd[1]: gunicorn.service: Failed with result 'exit-code'. Sep 09 21:45:18 ik1-413-38954 systemd[1]: gunicorn.service: Start request repeated too quickly. Sep 09 21:45:18 ik1-413-38954 systemd[1]: gunicorn.service: Failed with result 'exit-code'. Sep 09 21:45:18 ik1-413-38954 systemd[1]: Failed to start gunicorn daemon.
guest

回答1

0

自己解決

Ubuntu22.04、Django4.1.1.のバージョン違いが原因だったようです。
現在の私の環境で、以下のサイトの通り設定したら、VPSからDjangoプロジェクトが起動できました。
”How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 22.04”
https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04

一方、Udemyの講座では、Ubuntu18.04、Django2.1.7.でした。
Djangoプロジェクトのsettings.pyの内容が微妙に違っていたので、ようやく原因が分かりました。

初心者でこれまであまりバージョン違いを意識したことがなかったのですが、改めて全く挙動が変わることをようやく理解しました。
これからはよく注意したいと思います。
めちゃくちゃ回り道して時間もかかりましたが、良い勉強になりました。

投稿2022/09/13 13:24

arron

総合スコア34

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問