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

バーチャルボックスをインストールして、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も立ててみようかと。

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