CentOS7.5にpython3.6(SCL)、Django2の環境を構築する

投稿者: | ↻ : 2020年4月22日

はじめに

2020年4月時点で、CentOS7系の最終バージョンとなるCentOS7.7ならば、標準のリポジトリから、python 3.6.8をインストールできます。なので、何らかの理由で古いバージョンの環境を構築する時のための記録となりました。

色々な環境で利用できるようになったpythonを、paizaの問題を解きながら基本的な構文は理解できたので、パズルより実用寄りの部分を理解するためにpython製のフレームワークであるDjangoを利用して何か作ることにします。

環境

  • CentOS 7.5.1804 (Vagrant 2.1.1、VirtualBox 5.2.12r122591)
  • Python3.6.2
  • Django 2.0.6

環境構築

Vagrantで作成したCentOS7に、SCL(Software Collection)パッケージからpython3をインストールします。最新バージョンと少しズレますが、元々インストールされているpython2の環境を壊さず残しておけるのでSCLを利用します。

仮想マシン作成

仮想マシンを作成する時に使用したVagrantfile

# vim: set ft=ruby :

Vagrant.configure("2") do |config|
    config.vm.box = "centos/7"
    config.vm.box_version = "1802.01"

    config.vm.network "private_network", ip:"192.168.201.201"

    config.vm.provider "virtualbox" do |vb|
        # 仮想マシンに割り当てるメモリ容量(MiB)
        vb.memory = 4096  # 4GiB
    end
end

python3のインストール

# SCLリポジトリの登録
[vagrant@localhost ~]$ sudo yum -y install centos-release-scl
# 色々更新
[vagrant@localhost ~]$ sudo yum -y update
# SCLパッケージのpython3(3.6)をインストール
[vagrant@localhost ~]$ sudo yum -y install rh-python36

SCLでインストールしたpython3を有効化

[vagrant@localhost ~]$ echo ". scl_source enable rh-python36" >> ~/.bash_profile
[vagrant@localhost ~]$ . ./bash_profile

Djangoのインストール

Djangoの公式サイトに従ってpipによりインストールを行います。

pipでインストールする際に、ファイルの書き込みで管理者権限が必要になります。しかし、sudoだけでは一部の環境変数が引き継がれないので、sudo後の環境でSCLの有効化します。

[vagrant@localhost ~]$ sudo sh -c ". scl_source enable rh-python36; pip install django"
[vagrant@localhost ~]$ python -m django --version
2.0.6

Djangoプロジェクト(雛形)の作成

[vagrant@localhost]$ django-admin startproject mysite
[vagrant@localhost]$ cd mysite
[vagrant@localhost mysite]$ tree .
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

データベースの準備(マイグレーション)

初期状態でデータベースにSQLite3を利用するように設定されています。プロジェクトのルートにあるmanage.pyにコマンドを渡してマイグレーションを行います。

[vagrant@localhost mysite]$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK

開発用サーバーでの実行

オプションを指定しない場合はhttp://127.0.0.1:8000/で接続要求を待ち受けます。このままでは仮想マシン内からしか接続できません。

[vagrant@localhost mysite]$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
June 22, 2018 - 07:05:04
Django version 2.0.6, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

0:8000オプションを指定して、ホストマシンのブラウザから接続を行えるようにします。

[vagrant@localhost mysite]$ python manage.py runserver 0:8000
Performing system checks...

System check identified no issues (0 silenced).
June 22, 2018 - 07:18:17
Django version 2.0.6, using settings 'mysite.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

これで、開発用サーバーには接続できすがアクセス許可が無いためにエラーとなります(画面1)。エラーページにはALLOWED_HOSTSに設定を追加するように書かれています。このALLOWED_HOSTS{projectルート}/mysite/settings.pyにあります。

画面1

初期状態ではリストに何も設定されていないので、"192.168.201.201"を追加します。

...省略
ALLOWED_HOSTS = ["192.168.201.201"]
...省略

ALLOWED_HOSTSを追加後、開発用サーバーを再起動すれば、ホストマシンのブラウザから雛形のトップページにアクセスできます(画面2)。

画面2

まとめ

まだ、さわり程度だけどRailsやCakePHPなどより、躓く箇所が少なく環境の構築が行えました。このまま順調に進むといいのですが、はてさて。

それとは別に、ESP32やmicro:bitなどの制御にもpython(MicroPython)が使えるようになって、なかなか面白い状態で試すことがいっぱいです。