CentOS7.8 + Python3.68 + Django3.0.5 + PostgreSql9.2.24 + Vagrant + VirtualBox + Windows10 の開発環境構築
最速で開発環境を構築する
ネットを検索して、本番環境を作成しようとした時、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