CentOS7.8 + Python3.68 + Django3.0.5 + PostgreSql9.2.24 + Vagrant + VirtualBox + Windows10 の開発環境構築

2020年5月12日

最速で開発環境を構築する

ネットを検索して、本番環境を作成しようとした時、Python関連のインストールエラーのため開発環境すら構築するのに手間取ったため、ブログにしたいと思いました。バージョンが違えばネットの情報はそのまま利用できないことが多く、非常につらかったです。今時点(2020/05/02)、最速だと思います。(Javaはこんなことない様な...進歩が遅いからかな)※実際、実行したソースを張り付けたのですが、文字が変換されているため、そのまま利用した場合、エラーが発生します。「’」、「–」の部分等、ごめんなさい。→そのまま、コピーできるのを本番想定のブログにアップしました。そちらもご参考に!

Linux環境(CentOS)の開発環境構築

Vagrant + VirtualBox でLinux(CentOS)環境を構築します。ドットインストールを参考にインストール作業を実施しました。まず、C:\dev\CentOS7を作成してください。以降はpowerShellで実施しました。

cd C:\dev\CentOS7

vagrant init centos/7 ※https://app.vagrantup.com/boxes/search から選択します。

CentOS7以下にVagrantfileが作成されるので、「config.vm.network “private_network”, ip: “192.168.33.10”」 のコメントを解除してください。この仮想環境に接続するIPはこちらになります。

vagrant up

しばらくすると、処理が完了し、Tera Termで接続できる様になります。ホストは”192.168.33.10″です。ユーザー名は”vagrant”です。選択したイメージによりますが、上記の通り実施した場合、RSA/DSA鍵を選択し、CentOS7\01_DjangoPsql.vagrant\machines\default\virtualbox\private_key をファイル選択してください。これで接続できると思います。

Linux(CentOS)への各種インストール

それでは、CentOSの設定をしていきましょう。すべてroot(su -)で実施します。初期設定の場合、rootパスワードは”vagrant”です。一部、不要な箇所もありますが、実施した手順の通り、メモします。

★最新化
yum -y update

★リポジトリ追加
yum -y install epel-release
yum -y install https://centos7.iuscommunity.org/ius-release.rpm

★apacheインストール
yum -y install httpd
systemctl start httpd
systemctl enable httpd
cd /var/www
chown apache:vagrant html
chmod 775 html

★postgresqlインストール
yum -y install postgresql-server
postgresql-setup initdb
systemctl restart postgresql.service
sudo -u postgres psql

★DB・ユーザー作成 その他
CREATE DATABASE myapp;
CREATE USER myapp_u WITH PASSWORD ‘myapp_p’;
ALTER ROLE myapp_u SET client_encoding TO ‘utf8’;
ALTER ROLE myapp_u SET default_transaction_isolation TO ‘read committed’;
ALTER ROLE myapp_u SET timezone TO ‘Asia/Tokyo’;
GRANT ALL PRIVILEGES ON DATABASE myapp TO myapp_u;

★DBからログアウトして設定ファイルを修正(パスワードでログインできる様に変更)
cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.org
vi /var/lib/pgsql/data/pg_hba.conf

# TYPE DATABASE USER ADDRESS METHOD
# “local” is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident

★ログインの確認
systemctl restart postgresql.service
sudo -u postgres psql -d myapp -U myapp_u
myapp_p ←これはパスワード

★python3インストール
yum -y install python36u
yum -y install python36u-pip python36u-devel
python3.6 -V

★python3仮想実行 もともとpython2で動いているので、仮想環境のみpython3で動作する様にする。仮想環境の情報とWEBアプリの場所を分ける
python3.6 -m venv /home/vagrant/web_app
source /home/vagrant/web_app/bin/activate
mkdir /var/www/html/web_app
cd /var/www/html/web_app

★pip自体の最新化
pip install –upgrade pip

★djangoのインストール
pip install django
python
import django
print(django.get_version())

★postgresql接続モジュールのインストール
pip install psycopg2-binary

★djangoプロジェクトの作成
django-admin startproject mysite

★djangoプロジェクトの設定変更
cd mysite/
vi mysite/settings.py
ALLOWED_HOSTS = [“*”]
‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’,
‘NAME’: ‘myapp’,
‘USER’: ‘myapp_u’,
‘PASSWORD’: ‘myapp_p’,
‘HOST’: ‘localhost’,
‘PORT’: ”,

★djangoのDB設定
python manage.py makemigrations
python manage.py migrate

★簡易サーバ実行
python manage.py runserver 192.168.33.10:8000

★ブラウザで接続 / ロケットの絵が表示されていると思います。
http://192.168.33.10:8000/

まとめ

dockerなど他にも色々が技術がありますが、今回はPythonの仮想を除き、できるだけシンプルに構築したかったので、上記の通りになりました。単にDjangoの本番環境を構築しようとしたのですが、Linuxの種類、Linuxバージョン、リポジトリ、Pythonのバージョン、PostgreSQLとの接続モジュールのバージョン等、様々な技術的な要素をバージョンを意識して組み合わせる必要があり、環境構築が非常に手間であることを認識しました。んー、これではど素人(私)には浸透しないなーと思いつつ、本番環境の作成に取り掛かろうと思います。まずは原点を知った上で、もっと楽にできる?と思われるAWSでDjangoを動かせる様にしていきたいと思います。 どうもです。

参考にしたサイト
全体の流れ
https://unisia-se.com/detail/17/
https://www.codeflow.site/ja/article/how-to-use-postgresql-with-your-django-application-on-centos-7

Vagrant + VirtualBox のcentos7を選択するための参考
https://qiita.com/ozawan/items/160728f7c6b10c73b97e

sshログインについて ユーザー名:パスワードでログインできなかった場合
https://qiita.com/FKSM/items/789f8d8c71f0e9dc420a

DjangoにPostgreSQLを適用
https://qiita.com/shigechioyo/items/9b5a03ceead6e5ec87ec

psycopg2のエラー対応
https://teratail.com/questions/131603