Pythonインストール前に必要なパッケージをインストール
$ sudo yum groupinstall "Development tools" $ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
SQLite更新の必要性
ページ下の方にも記載しておきますが、SQliteのバージョンが古いとエラーになるので、事前にバージョンアップしておきます。
SQLiteのバージョンアップは下記のページが参考になります。
Django2.2で開発サーバー起動時にSQLite3のエラーが出た場合の対応
共通のライブラリにパスを渡すを忘れずに。
「vi ~/.bashrc」で「export LD_LIBRARY_PATH=”/usr/local/lib”」を追加。
これだけではすぐに実行されないので、下記コマンドで実行する
「source ~/.bashrc」
再起動時にも実行されるように
「vi ~/.bash_profile」でファイルを開き、「source ~/.bashrc」を追加する。
その他
「/etc/ld.so.conf」に「export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH」を追加。
pyenvのインストール
gitからpyenvをインストールします。gitコマンドを使います。
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
Pathを通す
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ source .bash_profile
pyenvのバージョン確認
# pyenv --version pyenv 1.2.17-2-ga8ca63f
Python3のインストール
$ pyenv install --list
ここに長いリストが出てくるので、インストールしたいバージョンを選びます。
バージョンを指定してインストール。
$ pyenv install 3.8.2
バージョン切替
まずは現状を確認してみます。
]# pyenv versions * system (set by /root/.pyenv/version) 3.8.2
* のついている行が現在のデフォルトです。システムにインストールされているものがデフォルトになっているのでCentOS7の場合、python2になります。
インストールしたpython3のバージョンを指定して切り替えます。
$ pyenv global 3.8.2
* の位置がpython3に変わりました。
# pyenv versions system * 3.8.2 (set by /root/.pyenv/version)
yumでpython3をインストールすると、yumが使えなくなるという現象がでます。CentOSのyumはpython2を使っているため。pyenvでインストールするとyumはそのまま使えました。
python3の起動
# python Python 3.8.2 (default, Mar 20 2020, 14:19:33) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
pipのインストール
# cd /usr/local/src
# wget wget https://bootstrap.pypa.io/get-pip.py --2020-03-15 16:12:57-- http://wget/ wget (wget) をDNSに問いあわせています... 失敗しました: 名前またはサービスが不明です. wget: ホストアドレス `wget' を解決できませんでした。 --2020-03-15 16:12:57-- https://bootstrap.pypa.io/get-pip.py bootstrap.pypa.io (bootstrap.pypa.io) をDNSに問いあわせています... bootstrap.pypa.io (bootstrap.pypa.io)に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 1807342 (1.7M) [text/x-python] `get-pip.py' に保存中 100%[=======================================================================================================>] 1,807,342 9.86MB/s 時間 0.2s 2020-03-15 16:12:57 (9.86 MB/s) - `get-pip.py' へ保存完了 [1807342/1807342] 終了しました --2020-03-15 16:12:57-- 経過時間: 0.3s ダウンロード完了: 1 ファイル、1.7M バイトを 0.2s で取得 (9.86 MB/s)
# python get-pip.py Collecting pip Downloading pip-20.0.2-py2.py3-none-any.whl (1.4 MB) |████████████████████████████████| 1.4 MB 8.2 MB/s Collecting wheel Downloading wheel-0.34.2-py2.py3-none-any.whl (26 kB) Installing collected packages: pip, wheel Attempting uninstall: pip Found existing installation: pip 9.0.3 Uninstalling pip-9.0.3: Successfully uninstalled pip-9.0.3 Successfully installed pip-20.0.2 wheel-0.34.2
Djangoのインストール
# pip install django Collecting django Downloading Django-3.0.4-py3-none-any.whl (7.5 MB) |████████████████████████████████| 7.5 MB 8.8 MB/s Collecting pytz Downloading pytz-2019.3-py2.py3-none-any.whl (509 kB) |████████████████████████████████| 509 kB 11.6 MB/s Collecting asgiref~=3.2 Downloading asgiref-3.2.5-py2.py3-none-any.whl (19 kB) Collecting sqlparse>=0.2.2 Downloading sqlparse-0.3.1-py2.py3-none-any.whl (40 kB) |████████████████████████████████| 40 kB 7.3 MB/s Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.2.5 django-3.0.4 pytz-2019.3 sqlparse-0.3.1
Djangoのバージョン確認
# python >>> import django >>> print(django.get_version()) 3.0.4
Djangoのプロジェクト作成
アプリケーションを作成したいディレクトリで以下を実行
# django-admin startproject mysite
マイグレーションの実行
「python3.6 manage.py runserver xxx:xxx:xxx:xxx:8000」で起動してみます。python3.6の部分は自分のpythonのバージョンに合わせて変更。ポートは80にすると既に使われているとエラーが出ました。サーバーで事前にポート8000を開放しておきます。
起動してみると途中に赤い文字でエラーが出ており、ウェブに接続するとページが表示されません。
# python3.8 manage.py runserver xxx:xxx:xxx:xxx:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. March 19, 2020 - 15:52:40 Django version 3.0.4, using settings 'mysite.settings' Starting development server at http://xxx.xxx.xxxx.xxxx:8000/ Quit the server with CONTROL-C.
「Run ‘python manage.py migrate’ to apply them.」と記載してあるので、マイグレーションを実行してみます。
# 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 admin.0003_logentry_add_action_flag_choices... 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 auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
これでマイグレーション実行が完了しました。
ここでもう一度 runserverを実行してみます。
サーバーの起動
# python3.8 manage.py runserver xxx.xxx.xxx.xxx:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). March 19, 2020 - 15:55:14 Django version 3.0.4, using settings 'mysite.settings' Starting development server at http://xxx.xxx.xxx.xxx:8000/ Quit the server with CONTROL-C. [19/Mar/2020 15:55:23] "GET / HTTP/1.1" 200 16351 [19/Mar/2020 15:55:23] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423 [19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184 [19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876 [19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692 Not Found: /favicon.ico [19/Mar/2020 15:55:23] "GET /favicon.ico HTTP/1.1" 404 1978 [19/Mar/2020 15:57:34] "GET / HTTP/1.1" 200 16351
今度はエラーメッセージが無く、無事起動したようなメッセージになっています。
ブラウザで「http://xxx.xxx.xxx.xxx:8000/」にアクセスしてみます。
このように「The install worked successfully! Congratulations!」とDjangoのロゴが表示されたら起動成功です。
Djangoサーバー停止
netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 2 0 XXX.XXX.XXX.XXX.204:8000 0.0.0.0:* LISTEN 697/python3.8 tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 381/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/init tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 379/httpd tcp6 0 0 :::21 :::* LISTEN 382/vsftpd tcp6 0 0 :::33060 :::* LISTEN 405/mysqld tcp6 0 0 :::3306 :::* LISTEN 405/mysqld tcp6 0 0 :::111 :::* LISTEN 112/rpcbind
]# kill -9 697
kill -9 の後ろにPID番号を入れて実行します。
起動でエラーが出たときの対処方法
起動するとDisallowdHostエラーが出ました。setting.pyに以下の変更を加えると直ります。
ALLOWED_HOSTS = ['*']