trybeetle

take it slow!!

UbuntuでDjangoの環境を整える


Posted on Feb. 7, 2018, 9:28 a.m.



はじめに

今回は下記の構成で環境を整えていきます。

Ubuntu + MySQL + Nginx + Gunicocrn + Django


パッケージのインストール

まず、必要なaptパッケージをインストールしていきます。


  sudo apt-get update
  sudo apt-get install python3-pip python3-dev libpq-dev mysql nginx

MySQLの初期設定

MySQLにログイン


  mysql -u username -p

今回のdjangoプロジェクト用のdatabaseを作成


  create database myproject;

userの作成


  create user username@localhost identified by password;

パーミッション設定


  grant all on myproject.* to username@localhost identified by password

文字コードの設定。utf-8にする。/etc/my.cnfを編集する。


  [mysqld]
  ......
  character-set-server=utf8

  [client]
  default-character-set=utf8

timezoneの設定。/etc/my.cnfを編集する。


  [mysqld]
  default-time-zone = 'Asia/Tokyo'

設定変更後mysqlを再起動


  /etc/init.d/mysqld restart

設定が反映されていることを確認


  mysql -u username -p
  show variables llike "chara%";

仮装環境の設定

プロジェクト用に仮想環境を用意する。virtualenvを利用する。

まず始めに、pipをアップグレードし、パッケージをインストールする。


  sudo -H pip3 install --upgrade pip
  sudo -H pip3 install virtualenv

プロジェクト用のディレクトリ作成・移動


  mkdir myproject
  cd myproject

プロジェクト用ディレクトリ内で、下記コマンドで仮想環境作成


  virtualenv myprojectenv

作成した仮想環境を起動させ、仮想環境内に入る


  source myprojectenv/bin/activate

仮装環境内で、pipをつかいdjango、gunicorn、PyMySQLをインストールする。


  pip install django gunicorn psycopg2

Djangoプロジェクトの新規作成

まず、Djangoプロジェクトの作成


  django-admin.py startproject myproject

settings.pyの編集

先ほど作成されたDjangoプロジェクトパッケージ内のsettings.pyを編集する


  nano myproject/settings.py

ALLOWED_HOSTSに追加。ドメイン名の前にピリオド.を置くことで、サブドメインにも対応するよう


  ALLOWED_HOSTS = ['domain_or_IP', 'domain_or_IP', ......]

Database欄をデフォルトのsqliteからMySQLに変更


  DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'myproject',
          'USER': 'usesrname',
          'PASSWORD': 'password',
          'HOST': 'localhost',
          'PORT': '',
      }
  }

manage.pyファイル内に下記追加する。


  import pymysql
  pymysql.install_as_MySQLdb()

static_rootの設定。下記を追加する。


  STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Databaseへの反映

では、初期のDatabaseスキーマをMySQLに反映させます。


  python manage.py makemigrations
  python manage.py migrate

Djangoプロジェクトのsuperuserを作成します。


  python manage.py createsuperuser

staticファイルを集約させる。


  python manage.py collectstatic

サーバー起動確認

まず、ポート8000番を許可する。


  sudo ufw allow 8000

サーバーを起動させる。


  python manage.py runserver 0.0.0.0:8000

webブラウザを開き、http://IP_address:8000を入力し開く。問題なく開ければOK

続いて、adminページにもアクセスできるか確認する。http://IP_address:8000/adminにアクセスし、作成したsuperuserのuser/passを入力


gunicornの設定

gunicornのsystemdサービスファイルを作成する


  sudo nano /etc/systemd/system/gunicorn.service

下記の内容を記載する。
[unit]セクションには、metadataとdependencies [service]セクションには、user/groupについて [install]セクションには、サービスのlink先


  [Unit]
  Description=gunicorn daemon
  After=network.target

  [Service]
  User=username
  Group=www-data
  WorkingDirectory=/home/username/myproject
  ExecStart=/home/username/myproject/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/username/myproject/myproject.sock myproject.wsgi:application

  [Install]
  WantedBy=multi-user.target

gunicornの起動と登録


  sudo systemctl start gunicorn
  sudo systemctl enable gunicorn

socketファイルを確認。myproject.sockがあればOK


  ls -la /home/username/myproject

nginxからgunicornへのプロキシパスの設定

sites-availableにnginxの設定ファイルを追加


  sudo nano /etc/nginx/sites-available/myproject

下記の様な形で記載


  server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/username/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/userename/myproject/myproject.sock;
    }
  }

sites-enableにシンボリックリンクを張る


  sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

nginxの設定に問題がないか確認


  sudo nginx -t

nginxの再起動


  sudo systemctl restart nginx

ufwの設定


  sudo ufw delete allow 8000
  sudo ufw allow 'Nginx Full'

最後に、Webブラウザを開き、http://IP_addressでアクセス可能か確認する


以上で、Ubuntu + MySQL + Nginx + Gunicocrn + Djangoの設定完了です。


Category:django
Tag: django
Feb. 7, 2018, 9:28 a.m.

Comments