仮想マシンにCentOS7をインストールしてApache2.4とDjango2.0をセットアップする
vmware workstationにCentOS7 minimal をインストールして、Apache2.4でDjango2.0を動かしてみます。 さくらVPSの練習です。
仮想マシンのハードウェアは、ストレージを20GBに、メモリを512MBにし、ネットワークアダプタをブリッジに設定します。
さくらインターネットの チュートリアル:CentOS 7(さくらのVPS)サーバ作成直後に設定しておくべき初期セキュリティ設定 に従って設定を進めていきます。
ただし、VPSと仮想マシンでそもそも前提が異なるところがありますので、そのあたりは仮想マシンにあわせていきます。
目次
- ネットワークアダプタの設定
- 一般ユーザーの作成
- 公開鍵認証の設定
- sudoの設定
- nanoのインストール
- SSH接続時にrootでのログインを禁止
- SSH接続時にパスワード認証を禁止
- SSHのポート番号の変更
- アップデート
- 日本語環境への変更
- Apacheのインストール
- Python3をyumでインストール
- 開発ツールのインストール
- mod_wsgiのインストール
- Djangoのインストール
- その他のPythonのパッケージのインストール
ネットワークアダプタの設定
仮想マシンは初期にはネットワークにつながっていませんので、最初にネットワークアダプタの設定をします。
ネットワークアダプタの名前の確認
ネットワークアダプタの名前を確認します。
# nmcli d
ens33ですね。
ipアドレスの固定
キャラクタベースのGUIでipアドレスの設定ができます。
# nmtui
ens33を選択してEditを選択すると、詳細のメニューに入ります。 そこで、ip v4アドレスの設定をして、Automatically connectにチェックをしてOKします。
ネットワークを再起動します。
# systemctl restart network.service
ipアドレスを確認してみましょう。
# ip addr
一般ユーザーの作成
vmwareのコンソールからrootでログインします。 useraddで一般ユーザーを作成し、作成したユーザーのパスワードを変更します。
# useradd hogehoge
# passwd hogehoge
公開鍵認証の設定
仮想マシンはファイアウォールの中に作りましたので、この設定はとばします。 VPSでは確実に必要な設定です。
sudoの設定
作成した一般ユーザーをwheelグループに加えます。そうすると、その一般ユーザーがsudoを使えるようになります。
# usermod -G wheel hogehoge
nanoのインストール
以降、設定ファイルの書き換えの作業が出てきます。 私は堕落した人間なので、nanoをインストールします。
# yum install nano
viも使えるようになった方が良いのかもしれないけど、別に普段サーバー管理とかしてるわけじゃないんで。
SSH接続時にrootでのログインを禁止
ルーター越しに仮想マシンに進入される可能性は低いと思いますが、自分がrootで入らないように禁止しておきます。sshd_configにPermitRootLoginという項目がありますので、行頭の#を取ってnoに変更します。
# nano /etc/ssh/sshd_config
PermitRootLogin no
SSHを再起動します。
# systemctl restart sshd.service
SSH接続時にパスワード認証を禁止
仮想マシンはファイアウォールの中に作りましたので、この設定はとばします。 VPSでは確実に必要な設定です。これをする前に、公開鍵認証の設定をする必要があります。
SSHのポート番号の変更
とりあえずポート22を狙ってくる人もいるらしいので、ポート番号を変更します。
sshd_configにPortの項目があるので、行頭の#を取って番号を変更します。
# nano /etc/ssh/sshd_config
Port 10022
仮想マシンにインストールしたCentOS7の方はSELinuxが有効になっているため、sshd_configのポート番号を変更してsshdを再起動するとエラーが出ます。 というわけで、SELinuxの設定を変更します。 さくらのVPSでは初期設定でSELinuxが無効になってるって聞いたけど、本当ですかね。
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 10022
# semanage port -l | grep ssh
# systemctl restart sshd.service
次にファイアウォールの設定をします。 ssh.xmlをコピーしたalt-ssh.xmlの中にportの設定項目があるので、その番号を書き換えます。
# cp /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/alt-ssh.xml
# nano /usr/lib/firewalld/services/alt-ssh.xml
ファイアウォールにサービスを追加してリロードします。
# firewall-cmd --add-service=alt-ssh
# firewall-cmd --add-service=alt-ssh --permanent
# firewall-cmd --reload
追加したポートからSSHでログインできるか試してみます。
SSHでログインできたら、22番ポートをファイアウォールでブロックします。
# firewall-cmd --remove-service=ssh --permanent
# firewall-cmd --reload
そうしたら、22番ポートからSSHでログインできないかどうか試してみます。
コンソールからログアウトして、以降はSSHでログインして作業をします。
# exit
アップデート
$ sudo yum update -y
日本語環境への変更
仮想マシンの場合はインストールの時点でユーザーは日本語環境になっていますので、作業不要です。 VPSの方は英語環境のようです。
# localectl set-locale LANG=ja_JP.utf8
# localectl
Apacheのインストール
yumでhttpdをインストールします。
$ sudo yum install httpd -y
日本語のファイルを扱えるようにするためにhttpdの設定をLANG=CからLANG=ja_JP.utf8に書き換えます。
$ sudo nano /etc/sysconfig/httpd
AddDefaultCharset UTF-8をコメントアウト(行頭に#を追加)します。
$ sudo nano /etc/httpd/conf/httpd.conf
ファイアウォールの設定をします。 ネコでもわかる!さくらのVPS講座 ~第三回「Apacheをインストールしよう」 を参考にします。
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --add-service=https --zone=public --permanent
$ sudo firewall-cmd --reload
上から順に、ファイアウォールへのhttpの設定、httpsの設定、ファイアウォールのリロードです。
Apacheを起動します。startが起動、enableでシステム起動時に自動的にApacheが起動するようになります。statusは作動状態の表示です。activeと表示されるはずです。
$ sudo systemctl start httpd.service
$ sudo systemctl enable httpd.service
$ sudo systemctl status httpd.service
ブラウザに仮想マシンのアドレスを入れてアクセスすると、Apacheの初期画面が表示されます。
Python3をyumでインストール
yumでPython3.6をインストールします。
公式レポジトリにはPython3.6が無いので、レポジトリを追加します。
$ sudo yum install -y https://centos7.iuscommuity.org/ius-release.rpm
Python3.6とパッケージをいくつかインストールします。
$ sudo yum install -y python36u python36u-devel python36u-libs python36u-pip python36u-setuptools python36u-tools python36u-tkinter
バージョンを確認してみます。
$ which python
/usr/bin/python
$ python -V
Python 2.7.5
$ which python3.6
/usr/bin/python3.6
$ python3.6 -V
Python 3.6.4
$ which pip3.6
/usr/bin/pip3.6
$ pip3.6 -V
pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6)
最初に入っているPythonは2.7.5で、yumで入れたPythonは3.6.4です。pipはPython 2.7.5の方には入っていません。
開発ツールのインストール
使うかどうかは別にして、いくつかツールをインストールしておきます。
$ sudo yum install -y wget
$ sudo yum groupinstall "Development Tools"
$ sudo yum install -y httpd-devel
$ sudo yum install -y openssl-devel
$ sudo yum install -y sqlite-devel
$ sudo yum install -y tree
mod_wsgiのインストール
mod_wsgiをyumでインストールするとPython2用のものがインストールされます。 そこで、pipでインストールします。
$ sudo pip3.6 install mod_wsgi
mod_wsgiのインストール場所を探します。 今回はここでした。
/usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
mod_wsgiの設定をします。
$ sudo cat /etc/httpd/conf.d/wsgi.conf
ファイルの内容は下記のようにしました。
LoadModule wsgi_module /usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIDaemonProcess myapp user=hogehoge group=hogehoge
WSGIProcessGroup myapp
WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias /hello /home/hogehoge/www/wsgi/hello.py
<Directory /home/hogehoge/www/wsgi/>
Options ExecCGI MultiViews Indexes
MultiViewsMatch Handlers
AddHandler wsgi-script .py
AddHandler wsgi-script .wsgi
DirectoryIndex index.html index.py myapp.wsgi
Require all granted
</Directory>
プログラム(hello.py)を/home/hogehoge/www/wsgi/に置くことにします。 ディレクトリを作って、ディレクトリの権限を755にします。apacheが読めるようにするためです。
SELinux用のコンテキストを付けます。
$ sudo chcon -R -t httpd_sys_content_t /home/hogehoge/www/wsgi
$ ls -alZ /home/hogehoge/www
drwxr-xr-x. hogehoge hogehoge unconfined_u:object_r:httpd_user_content_t:s0 .
drwxr-xr-x. hogehoge hogehoge unconfined_u:object_r:user_home_dir_t:s0 ..
drwxr-xr-x. hogehoge hogehoge unconfined_u:object_r:httpd_sys_content_t:s0 wsgi
こんな感じにhttpd_sys_content_tが付いているか確認します。 chconは一時的なものなもで、うまくいったらsemanageで設定します。
下記のようなスクリプトを作ります。
$ nano /home/hogehoge/www/wsgi/hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain')])
return [b'hello world']
ブラウザでアクセスすると、こんな感じに表示されます。
エラーが出る場合は、apacheのエラーログを見てみてください。
$ sudo cat /var/log/httpd/error_log
SELinuxのログは下記のようにして確認します。
$ sudo ausearch -m avc
Djangoのインストール
pipでdjangoをインストールします。
$ sudo pip3.6 install django
プロジェクトを作ってみます。
$ cd ~/www/wsgi
$ django-admin startproject mysite
~/www/wsgi/mysite/mysite/wsgi.pyというファイルができているはずです。
apacheのmod_wsgiの設定を変更します。
$sudo nano /etc/httpd/conf.d/wsgi.conf
LoadModule wsgi_module /usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIDaemonProcess myapp user=hogehoge group=hogehoge python-path=/home/hogehoge/www/wsgi/mysite:/usr/lib64/python3.6/site-packages
WSGIProcessGroup myapp
WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias /mysite /home/hogehoge/www/wsgi/mysite/mysite/wsgi.py process-group=myapp
<Directory /home/hogehoge/www/wsgi/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ファイルを変更したら、apacheを再起動します。
$ sudo systemctl restart httpd.service
ブラウザでアクセスすると、このようなエラーが出ます。
djangoがエラーを返してますね。
~/www/wsgi/mysite/mysite/settings.pyの中にALLOWED_HOSTSという項目があります。そこに、サーバーのアドレスを設定します。
ALLOWED_HOSTS['192.168.*.*']
Djangoのアプリケーションを作ってみます。 今回はtestappという名前にします。
$ cd ~/www/wsgi/mysite
$ python3.6 manage.py startapp testapp
~/www/wsgi/mysite/mysite/settings.py のINSTALLED_APPSにtestappを追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testapp',
]
~/www/wsgi/mysite/mysite/urls.py にアプリケーションのurls.pyを読み込むように設定します。 includeのimportの追加と、urlpatternsへの読み込み指示の追加です。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('testapp/', include('testapp.urls')),
path('admin/', admin.site.urls),
]
~/www/wsgi/mysite/testapp/urls.py というファイルを作って、中に下記のように書き込みます。 view.pyのindexを呼び出せという指示ですね。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
~/www/wsgi/mysite/testapp/views.py を下記のように書き換えます。 Hello, world.と返すだけですね。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.")
そうしたら、ブラウザでアクセスしてみます。
Djangoのアプリケーションが動きました。
その他のPythonのパッケージのインストール
Pythonのパッケージをインストールします。
$ sudo pip3.6 install scipy
$ sudo pip3.6 install numpy
$ sudo pip3.6 install matplotlib
scipyをインストールしたら、numpyも一緒にインストールされました。
公開日
広告
設定カテゴリの投稿
- Apache2.4で行ったセキュリティ関係の設定
- CentOS7にgitをインストールする
- CentOS7にsamba 4.8をインストールする
- CentOS7のApacheでDjangoを動かしてみた
- Gitでバージョン管理をしてみた
- LogWatchでログを確認する
- Python3のCGIで日本語を出力する
- Raspberry Piにgitをインストールする
- サイトマップを作る
- プログラムのCPU使用を制限する
- 仮想マシンにCentOS7をインストールしてApache2.4とDjango2.0をセットアップする
- 仮想マシンのCentOS7にLaTeXとGhostScriptとImageMagickをインストール
- 自宅サーバーのGitをリモートリポジトリにする