vagrantで開発環境構築

vagrantで開発環境構築の手順
■前提
Ubuntu14にて実施
すでに、
VirtualBox
Vagrant
がインストール済み

■環境構築
ターミナルに入る
作成エリア(ディレクトリィ例:ubunt12)を作成

mkdir ubunt12
cd ubunt12

イメージファイルをダウンロード

wget https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box

イメージファイルを作成

vagrant box add ubunt12 ./trusty-server-cloudimg-i386-vagrant-disk1.box

初期化を実施

vagrant init ubunt12

設定を変更
Gestの内容をHostから操作できるように
ポートの設定を変更する

vim Vagrantfile
config.vm.network :forwarded_port, guest: 80, host: 8880
config.vm.network :forwarded_port, guest: 3131, host: 13131
config.vm.network :forwarded_port, guest: 4200, host: 14200

vagrantを起動する

vagrant up

エラーになった場合
VirtualBoxを立ち上げ
設定>システム>アクセラレーション
VT-x/AMD-Vを有効化のチェックを外す
再度
vagrant up
sshで入ってみる

vagrant ssh

入れれば、完了
■Cloud9をインストール
Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

apt-getを最新にする

sudo apt-get update

必要なラブラリィをインストールする

sudo apt-get install -y build-essential g++ curl libssl-dev apache2-utils git libxml2-dev

不要なnodejsを削除する

sudo apt-get remove nodejs

nvmを読み込みインストールする

git clone git://github.com/creationix/nvm.git ~/nvm
echo '. ~/nvm/nvm.sh' >> ~/.bashrc && . ~/.bashrc
nvm install v0.8.25
nvm use v0.8.25

cloud9を読み込みインストールする

git clone git://github.com/ajaxorg/cloud9.git
cd cloud9/
npm install

必要なライブラリィーを追加する

npm install jsDAV socket.io asyncjs vfs-nodefs-adapter v8debug amd-loader async sourcemint-loader-js ace treehugger vfs-architect

起動する

nvm use v0.8.25
cd ../
./cloud9/bin/cloud9.sh -l 0.0.0.0

ホスト側から動作を確認する

http://localhost:13131

画面が表示されれば、完了
■Xampp(Lammp)をインストール
Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

ソースをダウンロードする

wget http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/1.8.0/xampp-linux-1.8.0.tar.gz

解凍する

tar xzvf xampp-linux-1.8.0.tar.gz

設置する

sudo mv lampp /opt/lampp

Apacheでのユーザをvagrantに変更を行う
設定ファイル
/opt/lampp/etc/httpd.conf
の、(173行)
User nobody  ->vagrant
Group nogroup ->vagrant
に変更する

vim /opt/lampp/etc/httpd.conf
User vagrant
Group vagrant
#User nobody
#Group nogroup

権限の設定を行う

sudo chmod -R 777 /opt/lampp
sudo chmod 644 /opt/lampp/etc/my.cnf
sudo chmod 755 /opt/lampp/phpmyadmin/config.inc.php

起動する

sudo /opt/lampp/lampp restart

ホスト側から動作を確認する

http://localhost:8880

Xamppの画面が出れば、完了です
■Xamppの初期設定をする
セキュリィテーの設定を行う
ホスト側からトップ画面を起動する

http://localhost:8880

セキュリテーを確認する
未設定になっているはず
下部にあるURLを起動する

sudo /opt/lampp/lampp security

設定のYes/Noに全てYesとして、パスワードを設定する
設定したパスワードは忘れないように(例:lampp)
Xamppを再起動する

sudo /opt/lampp/lampp restart

ホスト側から動作を確認する

http://localhost:8880

ユーザとパスワードを聞かれるので
設定したものを入力する
user:lampp
pass:lampp
トップ画面から
セキュリティを確認します
設定されていることを確認
■Xamppから、phpMySqlAdminを確認
ホスト側からトップ画面を表示

http://localhost:8880

phpMySqlAdminを選択

(./config.inc.php)is not readable
エラーが、出た場合

sudo chmod 755 /opt/lampp/phpmyadmin/config.inc.php

開始画面になったら
セキュリティーで設定したパスワードを入力
ユーザ:root
パスワード:lampp
phpMySqlAdmin画面になれば完了
■shellinaboxをインスツール
Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

ソースをダウンロードする

wget http://archive.ubuntu.com/ubuntu/pool/universe/s/shellinabox/shellinabox_2.14-1_i386.deb

インストールを行う

sudo dpkg -i shellinabox_2.14-1_i386.deb

ホストから入ってみる
ホスト側から動作を確認する

http://localhost:14200

ログイン画面でユーザとパスワードを入力する
ユーザ:vagrant
パスワード:vagrant
ログインできれば完了です
サービスの状態の確認と起動と停止は

sudo service shellinabox status
sudo service shellinabox start
sudo service shellinabox stop

となります
■candyをインストール
Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

ソースをダウンロードする

wget https://github.com/yandod/candycane/archive/v0.9.3.tar.gz
tar xzvf v0.9.3.tar.gz
mv candycane-0.9.3 candycane
mv candycane /opt/lampp/htdocs/candycane

データベースを作成する
phpmysqladmin
にアクセスする

データベースを新規作成する
データベース名
candycane
utf8_general_ci

作成ボタン
candycane
を選択
特権を選択
ユーザを追加

ユーザ名:candycane
ホスト名:localhost
パスワード:candycane
データベース candycane に全ての特権を与える

Xamppの画面が出れば、ユーザ作成完了です

コマンドで行う場合には

/opt/lampp/bin/mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON candycane.* TO candycane@localhost IDENTIFIED BY 'candycane';
mysql> FLUSH PRIVILEGES;
mysql> create database candycane character set utf8;

となります

インストーラを起動
http://localhost:8880/candycane

■netcomonsをインストール
Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

ソースをダウンロードする

http://www.netcommons.org/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/%E3%82%B3%E3%82%A2%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8/

ダウンロード

cd ~/
nvm use v0.8.25
./cloud9/bin/cloud9.sh -l 0.0.0.0 -w /opt/lampp/htdocs

ホストブラウザより

http://localhost:13131/

cloud9アップロード
ドラッグアンドドロップ

cd /opt/lampp/htdocs/
ls
tar xzvf NetCommons-2.4.2.0.tar.gz 
mv NetCommons-2.4.2.0 NetCommons

データベース作成
データベースを作成する
phpmysqladmin
にアクセスする

データベースを新規作成する
データベース名
netcom
utf8_general_ci

作成ボタン
netcom
を選択
特権を選択
ユーザを追加

ユーザ名:netcom
ホスト名:localhost
パスワード:netcom
データベース netcom に全ての特権を与える

Xamppの画面が出れば、ユーザ作成完了です

コマンドで行う場合には

cd ~/
/opt/lampp/bin/mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON netcom.* TO netcom@localhost IDENTIFIED BY 'netcom';
mysql> FLUSH PRIVILEGES;
mysql> create database netcom character set utf8;

となります

インストーラを起動
http://localhost:8880/NetCommons/html/

データベースを
netcom
に設定して、インスツール完了です

■Wordpressをインストール

wget http://ja.wordpress.org/wordpress-3.9.2-ja.tar.gz
tar xzvf wordpress-3.9.2-ja.tar.gz
mv wordpress-3.9.2-ja.tar.gz wordpress
mv wordpress /opt/lampp/htdocs/wordpress

データベースを作成する

データベース名
wordpress
utf8_general_ci

作成ボタン
データベースを選択する
ユーザを作成する
wordpress

コマンドで行う場合には

/opt/lampp/bin/mysql -u root -p
mysql> /opt/lampp/bin/mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'wordpress';
mysql> FLUSH PRIVILEGES;
mysql> create database wordpress character set utf8;
mysql> exit

となります
インストーラを起動する
localhost:8880/wordpress/

指示にしたがい入力する
完了
■CakePHPをインストールする

Vagrantよりログインする
Vgrantが起動していないときは

cd ubunt12
vagrant up

sshで入ってみる

vagrant ssh

CakePHPをダウンロードし
展開する
「cakephp」
に、名前を変更し
htdocsの下に移動する

wget http://github.com/cakephp/cakephp/archive/2.5.3.tar.gz
tar xzvf 2.5.3.tar.gz
mv cakephp-2.5.3 cakephp
mv cakephp /opt/lampp/htdocs/cakephp

localhost:8880/cakephp
で起動する

sudo /opt/lampp/lampp restart

ホスト側から

http://localhost:8880/cakephp

・core.phpの変更
cakephp/app/Config/core.php

Security.salt
Security.cipherSeed
の設定文字を変更(225行、230行)

vim /opt/lampp/htdocs/cakephp/app/Config/core.php

/**
* A random string used in security hashing methods.
*/
Configure::write(‘Security.salt’, ‘DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi’);

/**
* A random numeric string (digits only) used to encrypt/decrypt strings.
*/
Configure::write(‘Security.cipherSeed’, ‘76859309657453542496749683645’);
適当な値に変更する

・cakephp用のデータベースを作成
データベース名:cakephp
ユーザ名:cakephp
パスワード:cakephp
を作成してみます

/opt/lampp/bin/mysql -u root -p
(パスワード:lampp)
mysql> /opt/lampp/bin/mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON cakephp.* TO cakephp@localhost IDENTIFIED BY 'cakephp';
mysql> FLUSH PRIVILEGES;
mysql> create database cakephp character set utf8;
mysql> exit

・databaseの設定
cakephp/app/Config
にある
database.php.default
を、database.phpに変更(複写)

cp /opt/lampp/htdocs/cakephp/app/Config/database.php.default /opt/lampp/htdocs/cakephp/app/Config/database.php

作成したデータベースの内容
データベース名:cakephp
ユーザ名:cakephp
パスワード:cakephp
に、
database.php
を変更する
TEST用データベースは削除する

vim /opt/lampp/htdocs/cakephp/app/Config/database.php 

以下に変更

public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'cakephp',
                'password' => 'cakephp',
                'database' => 'cakephp',
                'prefix' => '',
                'encoding' => 'utf8',
        );

localhost:8880/cakephp
で起動する

DebugKit is not installed.

を消すために

git clone git://github.com/cakephp/debug_kit.git
mv debug_kit /opt/lampp/htdocs/cakephp/app/Plugin/DebugKit

app/Config/bootstrap.phpにCakePlugin::load(‘DebugKit’);を追加する。

vim /opt/lampp/htdocs/cakephp/app/Config/bootstrap.php

もう一度
localhost:8880/cakephp
で起動してみましょう
エラーがなくなっているはずです

■ファイルをホストとゲストで共有する
ゲストとデータとホストのデータを共有することで
ホスト側から手軽にゲスト側のデータを編集できるように
してみましょう

mv /opt/lampp/htdocs /vagrant/htdocs
ln -fs /vagrant/htdocs /opt/lampp/htdocs

これで、ホスト側から編集が可能になります

■CakePHPでプログラムを作ってみる
Firstと表示されるプログラムを作ってみます
まず、

http://localhost:8880/cakephp/First

にアクセスする

Missing Controller
Error: FirstController could not be found.
Error: Create the class FirstController below in file: app/Controller/FirstController.php
<?php
class FirstController extends AppController {
}

とのエラーになるので、メッセージに従い、プログラムを作る

vim /opt/lampp/htdocs/cakephp/app/Controller/FirstController.php 

でファイルを作り

<?php
class FirstController extends AppController {

}

を、挿入し(挿入はi)、終了する(終了は「Esc」:wq!)

http://localhost:8880/cakephp/First

にアクセスする

Missing Method in FirstController
Error: The action index is not defined in controller FirstController
Error: Create FirstController::index() in file: app/Controller/FirstController.php.
<?php
class FirstController extends AppController {


	public function index() {

	}

}

とのエラーになるので、メッセージに従い、プログラムを修正する

vim /opt/lampp/htdocs/cakephp/app/Controller/FirstController.php 

でファイルを開き

<?php
class FirstController extends AppController {


	public function index() {

	}

}

に修正する

http://localhost:8880/cakephp/First

にアクセスする

Missing View
Error: The view for FirstController::index() was not found.
Error: Confirm you have created the file: /vagrant/htdocs/cakephp/app/View/First/index.ctp

とのエラーになるので、メッセージに従い、プログラムを作成する
プログラムには、FirstGood
と記述してみる

mkdir /opt/lampp/htdocs/cakephp/app/View/First
vim /opt/lampp/htdocs/cakephp/app/View/First/index.ctp

でファイルを作り

FirstGood

と記述する

http://localhost:8880/cakephp/First

にアクセスする
無事表示されました
■CakePHPでデータベースの表示
CakePHPで、データベースの内容を表示してみます
データを作成します

CREATE TABLE posts (
    id INT not null AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);
INSERT INTO posts (title,body,created)
    VALUES ('タイトル1', '記事1', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトル2', '記事2', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトル3', '記事3', NOW());

データベースに接続します

sudo /opt/lampp/lampp restart
/opt/lampp/bin/mysql -u root -p
(パスワード:lampp)
mysql> USE cakephp;
mysql> (ここに書き込む)
mysql> exit

モデルを作ります

vim /opt/lampp/htdocs/cakephp/app/Model/Post.php

<?php
class Post extends AppModel {
}

コントローラの作成します

vim /opt/lampp/htdocs/cakephp/app/Controller/PostController.php

<?php
class PostsController extends AppController {
    public $helpers = array('Html', 'Form');

    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }
    public function view($id = null) {
        if (!$id) {
            throw new NotFoundException(('Not post'));
        }

        $post = $this->Post->findById($id);
        if (!$post) {
            throw new NotFoundException(('Not post'));
        }
        $this->set('post', $post);
    }
}

ビューの作成します

mkdir /opt/lampp/htdocs/cakephp/app/View/Posts
vim /opt/lampp/htdocs/cakephp/app/View/Posts/index.ctp

<h1>posts</h1>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Created</th>
    </tr>
    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td>
            <?php echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?>
        </td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
    <?php unset($post); ?>
</table>

詳細用のビューを作る

vim /opt/lampp/htdocs/cakephp/app/View/Posts/view.ctp

<p>タイトル:<?php echo h($post['Post']['title']); ?></p>
<p>内容:<?php echo h($post['Post']['body']); ?></p>
<p>作成日: <?php echo $post['Post']['created']; ?></p>

アクセスしてみます
localhost:8880/cakephp/posts

■Jenkinsを組み込みます
GestOSに、Jenkinsをインスツールしてみます
まず、Vagrantを立ち上げる前に
ポートを追加します
ホスト側にて

vim Vagrantfile

で、設定ファイルを開き

config.vm.network :forwarded_port, guest: 8080, host: 8888

を追加します

vagrant up

で起動します
起動後

vagrant ssh

で、ゲストOSに入ります
以下を実行

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -

/etc/apt/sources.listに
deb http://pkg.jenkins-ci.org/debian binary/
を追加します

sudo vim /etc/apt/sources.list

にて

deb http://pkg.jenkins-ci.org/debian binary/

を、追加します

sudo apt-get update

で、アップデートし

sudo apt-get install jenkins

にて、jenkinsをインストールします
完了したら
HOST側のブラウザから
localhost:8888
でアクセスすることで、接続できます

■Phing、Phpunutを組み込む

composerにより、Jenkinsで使用するライブラリィーを
インストールする

sudo apt-get install php5-cli
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

設定用ファイルを作成する

vim composer.json

新規で作成する

{
        "require-dev": {
        "phing/phing": "*",
        "squizlabs/php_codesniffer": "*"
        "phpunit/phpunit": "*",
        "phpmd/phpmd": "*",
        "pear/pear_exception": "dev-master",
        "sebastian/phpcpd": "*",
        "phpunit/phpunit-skeleton-generator": "*"
    },
    "config": {
        "bin-dir" : "/usr/local/bin/"
    }
}

アップグレードにて組み込みする

composer update

組み込み完了を確認

ls /usr/local/bin
phing -v

xdebugをインスツールします

sudo apt-get install php5-xdebug
sudo apt-get install php5-xsl

サンプルプログラムを作ってみます

vim Sample.php

簡単なプログラム

<?php
class Sample
{
    public function getMessage()
    {
        return "hello world";
    }
}
?>
phpunit-skelgen generate-test Sample Sample.php

■Jenkinsのタイムゾーンの変更
/etc/defaults/jenkins に
JAVA_ARGS=”-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Tokyo”
を追加します

sudo vim /etc/defaults/jenkins

i(挿入)貼り付け「ECS」:wq(終了)

JAVA_ARGS=”-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Tokyo”