Django環境構築 Linux CentOS 編 その2 Vagrantの操作

前回の続きedtech.hatenadiary.jp

いよいよ、CUI側でvagrantでバーチャル環境を構築していきます。 ちなみに、Vagrantとは何ぞやについてや、Vagrantについてもっと知りたい方は こちらを読んでみると良いです。Vagrant入門 – Vagrantとは? なぜ Vagrant なのか? | WEB ARCH LABO

Vagrantではまず、Boxを作ります。Boxを一からつくるより、すでに作られたBOXを 持ってくる方が簡単です。すでに作られたBOXを検索するのは、こちらから辿ってください。

A list of base boxes for Vagrant - Vagrantbox.es

詳しくは、下記URLの記事を参照ください。 Mac OS X 版Vagrantを利用して仮想マシンを操作してみよう | WEB ARCH LABO 簡単に説明すると、vagrant boxを追加する上で、Box名は好きに作れます。
Box名を{name}の部分に、下記、その後に上のURLから辿ってほしいOSのバージョンのURLをコピーしたものを{url}の部分に貼り付けます。
vagrant box add {name} {url}

今回はCentOS 7をインストールしたいと思います。 が、ここでいきなり打ち込む前に少しした準備をしておきたいと思います。 管理しやすいようにフォルダを作成しておきます。

mkdir MyVagrant && cd MyVagrant mkdir mycentos7 && cd mycentos7

mkdirはフォルダ作成コマンドです。 mkdir {フォルダ名} cdはフォルダへの移動をします。cd MyVagrantとする事で、MyVagrantフォルダに移動しています。 &&は2つのコマンドをつなげて1行で実行する時に使います。

Linuxのコマンドを詳しく知りたい人は下記URLも参考にしてください。 Linux コマンドリファレンス

何の為にこんな事をしているかというと、この後に行う、Vagrant環境構築で、vagrantofileというものができます。で、今回はCentOSを追加しますが、Ubuntuなども追加したい場合や、他のバージョンのCentOSの環境を作ろうといった場合に、フォルダを分けて作成するのですが、その場所をMyVagrantフォルダで管理しようとしています。

それでは、次の場所に移動したら、MyVagrant/mycentos7/ vagrant boxを追加していきましょう。

vagrant box add mycentos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box

としました。 f:id:kuniwoomou:20150427170044p:plain

インストールができているかを確認するためにvagrant box listと打ちます。

f:id:kuniwoomou:20150427170301p:plain listに今回追加したmycentos7 (virtualbox,0)と出て来れば成功です。

次に仮想マシンの初期化をします。 vagrant init mycentos7

f:id:kuniwoomou:20150427170651p:plain

初期化がすんだので、仮想マシンを早速立ち上げます。 起動のコマンドは、vagrant upとなります。

成功していれば、エラーでないのですが、今回はエラーがでちゃいました。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

という事で、対処方法を探すとここにあった。 Vagrantの仮想マシンにphpMyAdminをインストール - one by one

早速、実行

$ vagrant ssh
$ sudo /etc/init.d/vboxadd setup
$ exit
$ vagrant halt
$ vagrant up

ちなみに、vagrant sshで、一度CentOS7にアクセスしてからルート権限で、vboxaddをセットアップして、 その後一度、仮想環境を終了して、再度、起動をしている。

/etc/init.d/vboxaddが何するファイルか気になったので、再びログインしてviエディタで中を覗きにいったら、 カーネルモジュールと書かれていた。ちなみに、カーネルモジュールについて知りたい方はこちら Linuxキーワード - カーネル・モジュール:ITpro

さて、深追いしたおかけげ、何しているのかが若干もやっと理解できたが、その部分はまた今度違う時に書きます。ここで書くと横道それすぎちゃうので。

vagrant upの後に、あらためて、

vagrant ssh

CentOSバージョン7の環境に入ります。

これで、CentOSの仮想環境立ち上げが終わりました。 次回からは、実際にCentOS7にDjangoの環境を構築していきます。

ちなみに、ここまでやってよくわからないけどエラーでてしまったとか、どこまでやったかわからなくなって 最初からやり直したいなんて場合は、

vagrant sshでログインできていれば、exitで抜けてから、vagrant haltで終了させて、vagrant destroyで 環境を壊して、再度やり直してみてください。

vagrantのコマンドは以下を参考ください。 コマンドライン | Vagrant日本語ドキュメント

Django環境構築 Linux CentOS編 その1

Djangoの環境を構築。色々なブログの些細な走り書きを読みながら進めても、ちっとも 頭の中が整理されないので、本筋はDjangoの公式のインストールドキュメントから始めようと 思います。

で、クイックインストールではなく、詳細インストールの方を進めて、自分で構築したい環境を作る 事を実現できるようになるのが私の目的!

まずは、Django のインストール — Django 1.4 documentationこちらを読み進めて、 初心者には知らない単語やその意味などをを調べて追記しながら行きたいです。(ちなみに、ここでいう初心者は私の事です。)

当然、初心者なので、環境構築して壊してを頻繁に繰り返すだろう事から、仮想環境に構築していく 手順を追加していきます。

目指すべき環境構築は、Mac OSX上にVirtualBoxVagrant をインストールして、Linux環境を実現して、そこにpython2.7.9(2系の最新版かつ、DjangoはPython3系では動かない為)をインストールして、Djangoをインストール。また、ゆくゆくはWebサービス化したいので、 Apache と mod_wsgiをインストールして環境を構築していきます。 ちなみに、Pythonには2系と3系の2種類のバージョンが現存しています。2系は、2020年にサポート終了予定となり、2系はVer2.7.9以降は正式リリースされないようです。

まず、Djangoを動かす為に必要なPythonの環境を構築したいと思います。

最初に、Virtualboxを下記よりダウンロードします。(私はMac OSXなので、dmgファイルをインストールして、そのまま普通にGUI側のインストーラーでインストールします。) Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle

続いて、Vagrantをインストールします。これも、下記からインストールしてください。 ここでは、mac版をインストールしています。これも特に難しい事なくインストールできると思います。 Download Vagrant - Vagrant

両方ともインストールしたら、ここからターミナルを使って作業していきます。 ターミナルを起動しましょう。念のため、ターミナルの場所をUPしておきます。 Launchpadのその他の中にあります。黒い四角いアイコンです。 f:id:kuniwoomou:20150427144059p:plain

それでは、まずはじめに、Vagrantが無事にインストールされているかを確認してみます。 ターミナルの表示は、f:id:kuniwoomou:20150427144624p:plainこのように、 ほにゃらら、$ となっています。ほにゃららの所は、各個人によって違うと思います。

このほにゃららの より先の$の次からコマンドを書いていきます。 次のように打ってみてください。

$ vagrant -v

f:id:kuniwoomou:20150427145009p:plain

バージョン1.7.2というのがわかったかと思います。これで、無事にインストールされている事がわかりました。

次回は、この続きから設定していきます。

開発独学メモ 環境構築 仮想サーバー構築(最初の失敗)

バーチャルボックスをインストールして、Vagrantをインストール。

その後、Vagrantのboxを作成して、ubuntuサーバーをインストール 仮想環境のubuntuサーバー上に、Djangoの環境構築し、Webサーバーを立てて、 クライアント上にあるフォルダと繋げる。

その初期段階で、一旦独自のbox化しておく。ここまでをやる。

  1. BOXをダウンロード
    vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

  2. BOXが無事にダウンロードされているか確認
    vagrant box list

  3. boxをイニシャライズする
    vagrant init ubuntu14.04

  4. boxを起動する。
    vagrant up

  5. 立ち上がった仮想環境にsshで入る。
    vagrant ssh

  6. 仮想サーバーのubuntusshで接続している状態からのログアウト
    exit

  7. 再度、vagrantで仮想サーバーubuntuを立ち上げる。
    vagrant up

  8. 再びsshでログイン
    vagrant ssh

  9. ubuntuPythonが入っているか確認
    python --version

  10. パッケージ情報を最新化する。
    sudo apt-get update sudo apt-get upgrade

  11. Heroku にデプロイするための Heroku Toolbelt をインストールする。
    wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

  12. 無事にインストールされているか確認する。
    heroku version

  13. DjangoやHerokuデプロイに必要なライブラリをインストールする。
    sudo apt-get install python-pip python-virtualenv libpq-dev

  14. pipのバージョンを確認する。
    (pipとは、Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムでRubyのJemのようなもの)
    pip --version

  15. Djangoの環境構築
    任意のフォルダをつくって、作ったフォルダに移動する。
    mkdir フォルダ名 cd フォルダ名
    mkdir potfolio && cd portfolio

  16. virtualenvでpythonの仮想環境を実行する
    ※そもそも、Virtualboxで仮想環境のサーバー立ててるのに、その中でさらにpython のバージョン違いを共存させる為のVirtualenvを入れているのか?については、とりあえず勉強の為に入れているので、自分でもまだ用途がわかってない。という事で、virtualenvとは、Python の様々なバージョンの環境を仮想的に提供することができるもので、ディレクトリ毎に使用するPythonを変更できる。ここでは、venvというディレクトリを作成し、そのディレクトリ環境にDjango環境を構築する。 virtualenv venv

  17. 作成したvenvのディレクトリにパスを通す。アクティベートする。
    パスを通さないと、グローバルのPythonが実行されるので。
    source venv/bin/activate

  18. ubuntuにpycongをインストールする為にビルドに必要なライブラリをインストール。
    sudo apt-get install python-dev libpq-dev

  19. easy_installを使ってインストールする為、easy_installが入っているsetuptoolsをインストール。
    sudo apt-get install python-setuptools

  20. psycopg2をインストール
    sudo easy_install psycopg2

  21. Django開発関連をインストールする。
    pip install django-toolbelt

  22. ちゃんとインストールされているかを確認する。
    pip list
    下記が入っていれば成功。
    argparse (1.2.1)
    dj-database-url (0.3.0)
    dj-static (0.0.6)
    Django (1.8)
    django-toolbelt (0.0.1)
    gunicorn (19.3.0)
    pip (1.5.4)
    psycopg2 (2.6)
    setuptools (2.2)
    static3 (0.5.1)
    wsgiref (0.1.2)

  23. Djangoのプロジェクトファイルを作成
    django-admin.py startproject さっき作った任意のファイル名 . django-admin.py startproject portofolio .
    最後の「 . 」ドットを忘れずに!

  24. manage.pyができている事を確認する。
    ls -l

  25. Heroku の実行プロセスにある Dynos に渡す実行パラメータを Procfile というテキストファイルに記述する。
    echo 'web: gunicorn portofolio.wsgi --log-file -' | tee Procfile web: gunicorn portofolio.wsgi --log-file -

  26. 開発サーバーを立ち上げてみる。
    foreman start
    ※一応立ち上がるが、HTMLの返却が確認できない。仮想サーバー上だからか?とりあえず、今の段階ではスルー しておく。

  27. デプロイする為の準備をする。
    pip freeze > requirements.txt ブラウザで、下のURLで無事にできているか確認
    https://[app-name].herokuapp.com/
    残念。エラー状態。という事で、ここは一旦スルー

  28. 仮想サーバーのubuntu上にWebサーバーをインストール
    * yumでインストールするので、yumをインストール。
    sudo apt-get install yum
    これで色々と頑張っていたが、うまくいかない。で調べてみると、 権限を与える必要があるようで、色々と検索すると、 ubuntu yumリポジトリを追加をする必要がありそうという事がわかった。 さらに調べていくと、Debian系のLinuxではapt-getを使っていて、 RedHat系のLinuxでは、yumを使っているという事らしい。なので、CentoOSではyum,Ubuntuではaptという事。じゃあ、わざわざyumでインストールしないで、apt-getでいいじゃん。と思い、apt-getでインストール事に。
    ここで、もう一つの罠。yum では、yum install httpdと書くので
    apt-get install httpdとすると間違い。下記でインストールできる。
    apt-get install apache2

  29. Apache 用の Python WSGI アダプタモジュールをインストールする。 sudo apt-get install libapache2-mod-wsgi

  30. Pythonで使うツールをインストール
    sudo apt-get install python-setuptools

  31. mysqlをインストール
    sudo apt-get install mysql-server python-mysqldb

  32. apache2のバージョン確認
    apache2 -v

  33. srvフォルダにwwwフォルダを作成する。
    現在は、home/vagrant/portfolioにいるので、絶対パスsrvフォルダにwwwフォルダを作成する。
    sudo mkdir srv/www
    wwwフォルダに移動する。
    cd /srv/www
    で、ここで先に作った、virtualenvの環境を移動させようかと思ったけど、まだあんまり理解してないし、 そもそも、Herokuにデプロイしてうまくいってない環境を移動してもしょうがないので、あらためて作る事に。

  34. virtualenvの環境から抜ける。抜けずにやろうとしたけどなんかうまくいかず。 virtualenvの環境から抜けるには以下。 deactivate ちなみに、再度入る時はcdでvenvに戻って以下(あってるかわからないが、これで入れる) source venv/bin/activate

  35. virtualenvの環境にdjangoをインストールしていたが、通常の環境にはいれてないので、再度インストール
    sudo pip install django

  36. あらためて、Djangoのプロジェクトを作成する。
    sudo django-admin.py startproject portfolio .

  37. WSGIの設定をする為の事前準備
    cd /srv/www/portfolio
    sudo mkdir apache
    cd apache
    sudo vi django.wsgi

viエディタで以下を記入する。

import os
import sys

#path = '/srv/www'
#if path not in sys.path:
#    sys.path.insert(0, '/srv/www')
sys.path.append('/srv/www')
sys.path.append('/srv/www/portfolio')

os.environ['DJANGO_SETTINGS_MODULE'] = 'portfolio.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

38.Apachの設定 sudo vi /etc/apache2/sites-available/portfolio.conf

<VirtualHost *:80>

    ServerName 192.168.33.10
    DocumentRoot /srv/www/portfolio

    <Directory /srv/www/portfolio>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess portfolio.djangoserver processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup portfolio.djangoserver

    WSGIScriptAlias / /srv/www/portfolio/apache/django.wsgi

</VirtualHost>

ここで、一旦、IPアドレスが必要になったので、新規ウィンドウでターミナルをたてて、 Vagrantfileをviでひらいて、 IPアドレスで接続できるように編集する。

# config.vm.network "private_network", ip: "192.168.33.10"
 config.vm.network "private_network", ip: "192.168.33.10"

39.設定を有効化する。

sudo a2ensite portfolio
sudo /etc/init.d/apache2 restart

とここまでやったが、うまくいかず。原因は、複数あるので特定が難しく再チャレンジする事に、 現在わかっているのは、設定ファイル名とプロジェクトのファイル名でスペルミスがあったという事。

ただ、だいぶ意味がわかってきたので。 次回、もっとコンパクトに最初から再チャレンジしようと思います。 いらない作業が結構あったのと、学習目的としてと環境構築として必要な構成を共存させてしまっていたので、 その辺りは、次回はBox別に構築しようかと思います。

また、ubuntuとは別にCentOSも立ててみようかと。

今回の学習で参考にしたサイト以下

Django開発環境構築

Django開発環境構築メモ

色々調べた結果、下記のブログが非常に分かりやすかったので、その通りに実行することに。 Ubuntu 14.04 で Django アプリケーションを Heroku にデプロイする手順 | dreamin'up4u

で、pip install django-toolbeltを実行した時点で、エラーが返ってきた。

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
#include <Python.h>
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1"

psycopgが無いと言われているので、psycopgのインストールをする事に。

インストール方法は下記ブログに記載されている。

H2 Database EngineにPythonから接続する(psycopg使用) - Symfoware

で無事に解決した。

Django 環境構築メモをしながらRuby on RalisとDjangoの初学者における敷居について考えた

とりあえず、これはあの時何やったっけ?ってよくなるので、環境構築時のメモですが、 構築しながら、プログラムが初心者にとってハードルになる部分について思ったことを つらつら書いています。

あまり、人の役に立つのかわかりません。そのうち、ちゃんと理解できるようになったら、丁寧に書きたいと思います。(希望)

まず、はじめに何がしたいか? PythonでのWebアプリケーションの開発。何を作りたいか?ポートフォリオシステムを作る。(できるだけシンプルな)

そこで、Pythonで開発環境を構築しようとしている。←今ここ。

で色々調べていると、DjangoやらVartialBOXやら、Vagrantなどのキーワードが出てきて、調べながら実施。

Python3系で開発、Djangoフレームワークを使って開発。それを、仮想OS上で実装、Vagrantつかって、Ubuntuに構築?という解釈でよいのか?

調べていて思ったのは、Ruby on RailsとPaythonのDjangoどちらも初学者の私にとって、それでもPaythonを利用する選択肢をしているのは、解析系を主にしたいからだが、Ruby on Railsの方が初学者にまだ敷居が低いと感じるのは、優秀なチュートリアルというコンテンツがあるからだと思う。

もう、PaythonのDjangoチュートリアルコンテンツは、最初の時点ですでにDjangoはインストール済みとして進めますとあるように、前提がそもそも、敷居が少し上を対象に書かれているのに対し、Ruby on Railsは全くの開発初心者含めたチュートリアルになっていて、変な端折りがない。丁寧な作りだからだと感じた。

ただし、おしいのは、あのコンテンツができてから時間がたち、バージョン違いによる問題から初心者に少し、敷居があがっている。(Ruby on Railsチュートリアル内においても、その問題にはふれており、検索して開発者は問題を解決するものだということで、その方法にも触れられている点が良い)

問題なのは、日本語ドキュメントが少ない点。とくに、最新のバージョンについての環境構築は、これから始める人でなければブログにもUPされないので、これから始める人口が世界にくらべて日本だけを対象にしたら圧倒的に少ない。

当たり前だが、母数がそもそも違うので仕方がない。そのために、英語が読めることが重要。

なんてことを考えていたら、横道それてしまって、環境構築がまだ終わっていない。w

その後、調べたら、Djangoチュートリアルとは別にインストールの記事が見つかった。 分別されてかかれていたのね。(追記)

UnityChanEscapeは諦めた。

Unityちゃんでゲームを作ろうのPart2で、Sample Assetsをインポートでハマっていた。 答えは、Standard Assetsという名前に変わっていたというのが理由だったのだが、

最初に結論から書くと、Unityちゃんでゲームを作ろうのPart2に関しては、飛ばすことにした。 というのも、何とか、Sample Assetsの問題をクリアして、motto2フォルダーにあるステージを 配置してカメラを調整という段になり、説明文を読むと、なんか嫌なことが書かれていた。

今回は事前にステージのプレハブを用意しました。ちなみに、このステージはSample Assetsの部品でできており、ステージ自体はSample Assetsの部品を含まない状態で提供しています。アセットストアからSample Assetsをインポートすることで、ファイルIDを基に参照関係が整理されてステージが再現されます。

勘の良い皆さんならお気づきでしょう。Sample AssetsはStandard Assetsへと名前を変えています。 参照関係ね、ふふん。嫌な予感しかしないぜ。と思って、早速ステージを配置した所、ドンピシャ! はいはい、知ってましたよ。

新しい名前で、関連付けし直さないと多分ダメだろうという事は、予感してましたよ。 という事で、Stageの中を覗くと、platform_prototype_2×1×2というような部品がズラーッと並んでおり、Standard Assetsを覗きに行くと。JoinOutherPrototype02×01×02というような名前がズラーッとしていました。 f:id:kuniwoomou:20150327093002p:plain

で、一個一個、丁寧にドラッグアンドドロップしながら、(これ何かもっと効率的な方法無いのかな?当然、初学者の私は知らない事が多いので、知らないだけで本当はもっと違う方法でできるのでは?)という葛藤をしながら、ひとつひとつ丁寧に入れ。

f:id:kuniwoomou:20150327092916p:plain 全部入れ終えたのですが、?何かが違う。 あきらかに、最初の点線でかかえれていた形になっていない。

という所で、無駄に時間かかりそう。まずは、動くものを早く作って体感したいのが今の目的。 と、割り切ってここはパスする事に。(簡単に言うと、この作業でうまくいかなかったので心が折れたw)

さ、次の2Dやろーっと。

UniytChanEscape Unitychanでゲームを作ろう!でハマってる事。

Unity5がリリースされたら困る初心者の嘆き

Unity5がリリースされたのは良い事なんだろうが、Unity5で説明されている良書が出る前に 購入しているUnity4系で書かれている参考書を片手に学習していると、些細な事でつまづく。

ググっても、圧倒的にUnity4での説明が多いので、これまた些細な事でつまづく。 初心者が学習するのは、少し前のバージョン環境で豊富なドキュメント類(先人の遺産)で 学習した方がいいのだろうが、新しいバージョンが出ているにもかかわらず、少し前の バージョンで環境構築とか、さらに初心者には厳しい。

こういうものの積み重ねが、初心者の入り口を閉ざしているので、独学の厳しい所なんだろう。 と、愚痴からハジまったのは何故かというと。

ハマっているからだ。もう今日は1日中、いろいろな事をして、全ての環境でエラー出まくりで ちっとも面白くない!Unityだけでなく、PythonやらOpencvやらをいじっているのだが、全く うまくいかない。

こういう日は、諦めて他の事しようとUnityを始めた。かつ、もう本に書かれている通り、一旦 素直に学習しようとした矢先、本に書かれている事すらできない始末。

www.amazon.co.jp

これの、Part2でいきなりつまづいた。何でつまづいたかというと、Assets Storeで「Sample Assets (beta)」をダウンロードするように書かれているのだが、その「Sample Assets (beta)」が見つからない。

もう、こんな事で引っかかる。で、ググりまくった結果。 「Standard Assets」Asset Store という名前にかわり、中身も少しだけ変更あるらしい。

しかし、もっと体系的に学びたいんだが、独学で体系的にUnityでのゲーム作り学べる。サイトやら勉強会やらって無料のものは無いのかな。

Ruby on RailsチュートリアルみたいなUnityチュートリアルが欲しい。