開発独学メモ 環境構築 仮想サーバー構築(最初の失敗)
バーチャルボックスをインストールして、Vagrantをインストール。
その後、Vagrantのboxを作成して、ubuntuサーバーをインストール 仮想環境のubuntuサーバー上に、Djangoの環境構築し、Webサーバーを立てて、 クライアント上にあるフォルダと繋げる。
その初期段階で、一旦独自のbox化しておく。ここまでをやる。
BOXをダウンロード
vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
BOXが無事にダウンロードされているか確認
vagrant box list
boxをイニシャライズする
vagrant init ubuntu14.04
boxを起動する。
vagrant up
立ち上がった仮想環境にsshで入る。
vagrant ssh
再びsshでログイン
vagrant ssh
パッケージ情報を最新化する。
sudo apt-get update sudo apt-get upgrade
Heroku にデプロイするための Heroku Toolbelt をインストールする。
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
無事にインストールされているか確認する。
heroku version
DjangoやHerokuデプロイに必要なライブラリをインストールする。
sudo apt-get install python-pip python-virtualenv libpq-dev
pipのバージョンを確認する。 (pipとは、Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムでRubyのJemのようなもの)
pip --version
Djangoの環境構築 任意のフォルダをつくって、作ったフォルダに移動する。
mkdir フォルダ名 cd フォルダ名
mkdir potfolio && cd portfolio
virtualenvでpythonの仮想環境を実行する ※そもそも、Virtualboxで仮想環境のサーバー立ててるのに、その中でさらにpython のバージョン違いを共存させる為のVirtualenvを入れているのか?については、とりあえず勉強の為に入れているので、自分でもまだ用途がわかってない。という事で、virtualenvとは、Python の様々なバージョンの環境を仮想的に提供することができるもので、ディレクトリ毎に使用するPythonを変更できる。ここでは、venvというディレクトリを作成し、そのディレクトリ環境にDjango環境を構築する。
virtualenv venv
作成したvenvのディレクトリにパスを通す。アクティベートする。 パスを通さないと、グローバルのPythonが実行されるので。
source venv/bin/activate
ubuntuにpycongをインストールする為にビルドに必要なライブラリをインストール。
sudo apt-get install python-dev libpq-dev
easy_installを使ってインストールする為、easy_installが入っているsetuptoolsをインストール。
sudo apt-get install python-setuptools
psycopg2をインストール
sudo easy_install psycopg2
Django開発関連をインストールする。
pip install django-toolbelt
ちゃんとインストールされているかを確認する。
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)
Djangoのプロジェクトファイルを作成
django-admin.py startproject さっき作った任意のファイル名 .
django-admin.py startproject portofolio .
最後の「 . 」ドットを忘れずに!manage.pyができている事を確認する。
ls -l
Heroku の実行プロセスにある Dynos に渡す実行パラメータを Procfile というテキストファイルに記述する。
echo 'web: gunicorn portofolio.wsgi --log-file -' | tee Procfile web: gunicorn portofolio.wsgi --log-file -
開発サーバーを立ち上げてみる。
foreman start
※一応立ち上がるが、HTMLの返却が確認できない。仮想サーバー上だからか?とりあえず、今の段階ではスルー しておく。デプロイする為の準備をする。
pip freeze > requirements.txt
ブラウザで、下のURLで無事にできているか確認https://[app-name].herokuapp.com/
残念。エラー状態。という事で、ここは一旦スルー仮想サーバーのubuntu上にWebサーバーをインストール
* yumでインストールするので、yumをインストール。これで色々と頑張っていたが、うまくいかない。で調べてみると、 権限を与える必要があるようで、色々と検索すると、 ubuntu yum のリポジトリを追加をする必要がありそうという事がわかった。 さらに調べていくと、Debian系のLinuxではapt-getを使っていて、 RedHat系のLinuxでは、yumを使っているという事らしい。なので、CentoOSではyum,Ubuntuではaptという事。じゃあ、わざわざyumでインストールしないで、apt-getでいいじゃん。と思い、apt-getでインストール事に。ここで、もう一つの罠。yum では、sudo apt-get install yum
yum install httpd
と書くのでapt-get install httpd
とすると間違い。下記でインストールできる。apt-get install apache2
Apache 用の Python WSGI アダプタモジュールをインストールする。
sudo apt-get install libapache2-mod-wsgi
mysqlをインストール
sudo apt-get install mysql-server python-mysqldb
apache2のバージョン確認
apache2 -v
srvフォルダにwwwフォルダを作成する。 現在は、home/vagrant/portfolioにいるので、絶対パスでsrvフォルダにwwwフォルダを作成する。
sudo mkdir srv/www
wwwフォルダに移動する。cd /srv/www
で、ここで先に作った、virtualenvの環境を移動させようかと思ったけど、まだあんまり理解してないし、 そもそも、Herokuにデプロイしてうまくいってない環境を移動してもしょうがないので、あらためて作る事に。virtualenvの環境から抜ける。抜けずにやろうとしたけどなんかうまくいかず。 virtualenvの環境から抜けるには以下。
deactivate
ちなみに、再度入る時はcdでvenvに戻って以下(あってるかわからないが、これで入れる)source venv/bin/activate
virtualenvの環境にdjangoをインストールしていたが、通常の環境にはいれてないので、再度インストール
sudo pip install django
あらためて、Djangoのプロジェクトを作成する。
sudo django-admin.py startproject portfolio .
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 14.04 で Django アプリケーションを Heroku にデプロイする手順 | dreamin'up4u
- H2 Database EngineにPythonから接続する(psycopg使用) - Symfoware
- 今日のPython: VIRTUALENV について
- Python - virtualenvとは? - Qiita
- Ubuntu10.10にyum(ヤム)をインストールする - 大人になったら肺呼吸
- Debian系に、パッケージの説明文を見るためだけにyumを入れる。 | smokycat.info
- PYTHONでWEB開発: Django実践チュートリアル(サーバー編)DjangoをUbuntu,Apache, mod_wsgiで動かしてみる
- Debian -- Details of package libapache2-mod-wsgi in sid
- Pythonの仮想環境を構築できるvirtualenvを使ってみる - Qiita
- VirtualBox - MacOS XでVagrantにCentOS入れ、Railsアプリ制作、Heroku公開 vol.04 - Qiita
- Apache2 on ubuntu で a2ensite すると does not exist と言われるときの対処法 - Qiita
- Vagrantで作った仮想マシンを簡単に共有できる「Vagrant Share」を使ってみる - さくらのナレッジ