1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

django✖️ubutnu✖️aws✖️apahce2でdjangoアプリケーションのデプロイ環境を整える

Posted at

手順としては

  1. awsで仮想環境(ubuntu)を立てる(今回は.sshで手動ログイン)
  2. awsの仮想環境にdjango,apache2,posgresqlを入れる
  3. djangoのデプロイに必要なプラグインを入れる(mod_wsgi)を含むリモート環境で動かすために必要なプラグイン
  4. 入れたプラグインの設定を組み込みサーバーの環境に合わせるために設定をいじる。
  5. エラーがなければデプロイ完了のはずです。

今回はこのように進めていきます。

#1. awsで仮想環境(ubuntu)を立てる(今回は.sshで手動ログイン)

まずaws ec2 でインスタンスを取得します。
クラウドならアマゾン ウェブ サービス 【AWS 公式】を参考にして

今回使っていくosとしてubuntu18.04
を使用していきます

そしてapacheを今回は使うのですが、ポートの80番を開放しないとapacheに接続できないので

セキュリティ→インバウンドから80番ポート(httpプロトコル)、443番ポート(httpsプロトコル)を開放しておいて下さい。

ssh [インスタンスのキーペアのパス] ubuntu:[インスタンスのパブリックdns]

またこれを書くのが面倒な場合は

/.ssh/config

Host aws
    HostName [パブリックdns]
    User ubuntu
    IdentityFile [キーペアのパス]
    Port 22
    TCPKeepAlive yes
    IdentitiesOnly yes 

と記載してやれば

$ ssh aws

で動くと思います

2. awsの仮想環境にdjango(python),apache2,posgresqlを入れる

無事クラウドで作った仮想環境に入ることができたら
linuxの
ユーザー名@ホスト名の箇所に ubuntu@ip-パブリックipアドレスと表示されると思います。
確認が取れたら

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt update
$ sudo apt upgrade

をまず最初に打って apt,apt-getをアップデートしてください。その後

$ sudo apt install python3-pip
$ pip3 install --upgrade pip
$ pip3 install django
$ apt install python-django-common
$ django-admin --version

またこのコマンド群が動かない場合は

$ sudo su

でrootユーザーでコマンドを打つと正常にダウンロードしてくれました。

これでdjangoとpythonのインストールは終わりました。

次はapache2を入れていきます。

$ sudo apt-get update
$ sudo apt-get install apache2
$ apt-get install apache2-dev
$ service apache2 start

これで、apache2の導入と起動が完了しました。

$ sudo apt-get install postgresql

これで postgresqlのインストールも完了すると思います。

3. djangoのデプロイに必要なプラグインを入れる(mod_wsgi)を含むリモート環境で動かすために必要なプラグイン

まず、

$ pip3 install mod_wsgi
$ sudo apt-get install python-psycopg2
$ sudo apt-get install libapache2-mod-wsgi-py3

と打ってmod_wsgiとpsycopg2を入れます。

次に自分のデプロイしたいdjangoアプリケーションをこのクラウド仮想サーバーに持っていきます。

$ git clone <githubに保存してあるurl>.git

その後、デプロイしたいアプリケーションのホームディレクトリに戻って、

$ python3 manage.py runserver 

と打ちます。

ここでエラーが出たら、それを対処していきます。
ここでエラーが出ているとデプロイできないので、エラーが出なくなるまでチューニングして下さい。

4. 入れたプラグインの設定を組み込みサーバーの環境に合わせるために設定をいじる。

先にpostgresqlの設定を 決めていきますが、その前に

$ sudo su
# useradd -m <ユーザー名>
# passwd ubuntu
# passwd <ユーザー名>
# passwd postgres

で自分の作ったユーザーとubuntuユーザーとpostgresユーザーにpasswdを決めておくと楽に運用できます。

またこれからはデプロイしたいdjangoのアプリケーションのadminファイルと設定もしていかないので
このようなディレクトリの構成で考えていきます。

home/ubuntu/django -- djangoadmin   ------ __pycache__
                    |                  |___ settings.py
                    |                  |___ urls.py
                    |                  |___ wsgi.py
                    |                  |___ ___init__.py
                    |
                    |_ djangpapp___ templates
                                 |___ static
                              <以下略>      

ではここまで確認ができたとこで、psqlの設定を触っていきます

$ sudo -u postgres psql
# create user <ユーザー名> PASSWORD '<PASSWORD>';
# ALTER ROLE <ユーザー名> with SUPERUSER;
# create database django;

これで、仮想サーバに作ったユーザーと同名のユーザーをpostgresqlのユーザーの部分に作ることができました。

$ sudo vim django/djangoadmin/settings.py

settings.py

   ~~~~~~~~以下略~~~~~~~~~~ 
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    ~~~~~~~~以下略~~~~~~~~~~

これを

    ~~~~~~~~以下略~~~~~~~~~~
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'django',
            'USER': '<ユーザー名>',
            'PASSWORD': '<PASSWORD>',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
    ~~~~~~~~以下略~~~~~~~~~~

このように書き換えます。

これで動くようになります。

また

FATAL: Peer authentication 

とエラーが出ている場合は

$ sudo find / -name pg_hba.conf

コマンドを使ってpg_hba.conf のパスを見つけて、

pg_hba.conf

local  all    all   peer

local  all    all   md5

に書き換えると動きます。

apache2の設定方法。

$ sudo vim /etc/apache2/sites-available/django.conf
/etc/apache2/sites-available/django.conf
LoadModule wsgi_module <wsgiモジュールまでのパス>

<VirtualHost *:80>
  ServerName  dnsかipアドレス(ドメイン名)
  DocumentRoot /home/ubuntu/django/

  WSGIDaemonProcess [パブリックdns] user=ubuntu threads=5  python-path=/home/ubuntu/.local/lib/python3.6/site-packages:home/ubuntu/django 
  WSGIProcessGroup [パブリックdns]
  WSGIScriptAlias /<djangoapp> /home/ubuntu/django/djangoadmin/wsgi.py

   Alias /static/ /home/ubuntu/django/djangoapp/static/
  <DIrectory /var/www/Django/Django-slackmyapp/static>
    Require all granted
  </Directory>

  <Directory /home/ubuntu/django/djangoadmin/>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>

</VirtualHost>

python-pathは絶対パスからsite-packagesまでのpathを書いていきます。
site-pakeagesまでのパスがわからなかったら
$ sudo find / -name site-pakeages 

で確認できます。

最後に

$ sudo vim /etc/apache2/apache2.conf
/etc/apache2/apache2.conf
<Directory /var/www/>
        Require all granted
</Directory>
$ sudo a2dissite 000-default
$ sudo a2ensite django
$ sudo systemctl restart apache2
$ sudo systemctl enable apache2

で正常に動くと思います。

リロードコマンド

$ sudo service apache2 restart

エラー確認コマンド

$ cat /var/log/apache2/error.log
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?