ubutu

ubuntuの操作メモ

2201 views

はじめに

djangoで作ったお遊びWEBアプリケーションを、AWSで稼働させていましたが、2019年8月23日のAWSがダウンにより死んでしまいました。
AWSが復旧したら直るものかと期待していたのですが、AWSが復旧した後も、EC2インスタンスが動き出すことはありませんでした。
バックアップも何も取っていなかったので、どうやら環境を再構築しなくてはならないようです。
djangoはnginxで稼働させていたのですが、このnginxの設定、初心者にはハードルが高く、また、構築し直しというのは、結構心が折れそうでした。
ググるとガセ設定もあるみたいで・・・。
というわけで、nginxの設定備忘録として本記事を投稿することにしました。

対象読者

nginxが苦手な人。
httpsじゃなくて、まずはhttp環境を立てれるようにしたい人。
socketじゃなくてよい人。

環境

  • AWS ubuntu18.04
  • python3

やりたいこと

作り直す環境は以下の図のとおりです。
EC2インスタンスで稼働するnginxはポート80番でブラウザからの要求を受け付け、8001番で待ち受けるuwsgiに転送します。
8001番で要求を受け付けたuwsgiは、djangoアプリで処理を行います。

環境構築の流れ

作業の流れは以下です。
1. nginxのインストール
2. djangoアプリのインストール
3. uwsgiのインストール
4. nginxとuwsgiの設定
5. uwsgiの自動起動の設定

nginxのインストール

以下のコマンドを叩くだけです。

sudo apt-get update
sudo apt-get install nginx -y
sudo systemctl enable nginx.service

djangoアプリのインストール

djangoのアプリは、自分が作った簡易BLOG用のアプリ(pyarticle)を使用します。gitからダウンロードできるのでよかったら使ってください。といっても、まだまだ直す箇所が多いので、品質などの突っ込みはご勘弁を…。ゆくゆくは記事を電子書籍として出力できるようにする予定です。特に興味のない方はこの章は飛ばしてください。python3で動作します。

コマンドのインストール

sqlite3で動作しますので、sqlite3コマンドをインストールしておきます。

sudo apt install sqlite3

pyarticleで必要なライブラリをインストールするためのpip3コマンドをインストールします。

必要なライブラリのインストール

pyarticleで必要なライブラリをインストールします。

pip3 install django
pip3 install Pillow==6.1.0
pip3 install markdown
pip3 install ebooklib
pip3 install pymdown-extensions

ソースコードのクローン

クローンは、/home/ubuntuで行う前提です。

cd 
git clone https://github.com/koni0626/pyarticle.git

起動の確認

ひとまず、デバッグでpyarticleが起動するか確認します。以下のコマンドを実行してください。

cd pyarticle/mysite
python3 manage.py migrate
python3 manage.py createsuperuser
sqlite3 db.sqlite3 < pyarticle/sql/siteparams.sql
python3 manage.py runserver 0.0.0.0:8000

ブラウザから以下のURLにアクセスします。

http://URL:8000/pyarticle

以下の画面画面が起動したらうまく動作しています。

CTRL+Cでpython3 manage.py runserver 0.0.0.0:8000で実行したコマンドを停止してください。

uwsgiのインストール

ここからが本題です。まずは、uwsgiと連携してpyarticleが動作するようにします。
uwsgiはpip3でインストールします。

sudo pip3 install uswgi

次にuwsgiコマンドに渡す引数などをuwsgi.iniファイルに記述します。
ファイルは/home/ubuntu/pyarticle/mysite/uwsgi.iniにviエディタなどで作成します。

[uwsgi]
module = index
master = true
wsgi-file = /home/ubuntu/pyarticle/mysite/mysite/wsgi.py
pidfile = /home/ubuntu/pyarticle/mysite/mysite/uwsgi.pid
logto = /home/ubuntu/pyarticle/mysite/mysite/uwsgi.log

次のコマンドを実行してuwsgi経由でpyarticleが起動するか確認します。

cd /home/ubuntu/pyarticle/mysite
uwsgi --http :8000 --ini uwsgi.ini

ブラウザから以下のURLにアクセスします。

http://URL:8000/pyarticle

先ほどと同じ画面が確認できたらOKです。

nginxとuwsgiの設定

nginxが持っているuwsgi_paramsファイルをpyarticleにコピーします。

cp /etc/nginx/uwsgi_params /home/ubuntu/pyarticle/mysite

/etc/nginx/conf.dにpyarticle.confをviエディタなどで作成します。

cd /etc/nginx/conf.d

pyarticle.confに以下を記述します。

server {
    listen  80;
    server_name     127.0.0.1;

    location /static {
        alias /home/ubuntu/pyarticle/mysite/pyarticle/static;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
    }
}

location / はnginxの80番ポートに通知がきたら、ローカルホストの8001に転送するという意味です。
ここで、勇気が必要な操作があります。
/etc/nginx/conf.dの下にあるdefaultと/etc/nginx/sites-enabledの下にあるdefaultを削除してください。(お仕事でやる場合は、先輩などに確認してからやりましょう)

sudo rm /etc/nginx/conf.d/default
sudo rm /etc/nginx/sites-enabled/default

defaultも、80番ポートの受付を行う設定が行われているので、defaultが残ったままだとnginxのデフォルト画面が表示されて8001番ポートに転送されません。

消せばpyarticle.confが反映されるようになりますが、他にうまいやり方がわからなかったので、ご存知でしたら教えてくださいm(_ _)m

ここまで設定したら、nginx↔uwsgiで通信できるようになっているはずです。
次のコマンドを実行してブラウザからhttp://URLを指定して動作しているか確認してみましょう。
まず、uwsgiを起動します。

cd /home/ubuntu/pyarticle/mysite
uwsgi --http :8001 --ini uwsgi.ini

次にnginxを再起動します。

sudo service nginx restart

ブラウザからポート番号を指定せずにアクセスしてみましょう(デフォルトで80番ポート)。
pyarticleの画面が表示されたら成功です。

確認出来たら、uwsgiをCTRL+Cなどで停止します。

uwsgiの自動起動の設定

このままだと、uwsgiコマンドを毎回ターミナルから起動しなくてはならないので、サーバとして使えません。
systemctlに登録して、自動起動の設定を行います。
/etc/systemd/system/uwsgi.serviceファイルをviエディタなどで作成し、以下の内容を記述します。

[Unit]
Description = uWSGI
After = syslog.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/pyarticle/mysite
ExecStart = /usr/local/bin/uwsgi --http :8001 --ini /home/ubuntu/pyarticle/mysite/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

登録したサービスを起動します。

sudo systemctl daemon-reload
sudo systemctl enable uwsgi

起動時にエラーになる場合、uwsgiコマンドのパスを確認してください。
ExecStart = /usr/local/bin/uwsgiが人によっては /home/ubuntu/.local/bin/uwsgiに変更する必要があります。uwsgiコマンドのパスは以下で確認できます。

which uwsgi

以上。

Page 3 of 9.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626