プログラムが動くための下拵え

# Vagrantでの開発環境構築

## はじめに
システム開発と言ってもピンキリで、幅の広い分野。
自分は今までPGとかDBでSQLと戯れたり、いろいろやってきたけれど
動いているプログラムの土台部分は全然わからないときたもんでして。

勉強のためにとりあえず土台を作ってみようということです。

以下備忘録というか四苦八苦のメモ書きです。

## 構築予定の環境
CentOS 7
Apache
MySQL5.7
PHP

## 必要なものをMacにインストール

* ~~VirtualBox(CentOS)をダウロード~~
~~https://www.virtualbox.org/wiki/Linux_Downloads~~
~~「VirtualBox 5.2.12 for Linux」のところを探して・・・~~

* インストールしたいOSではなく、自分のOSだった
https://www.virtualbox.org/wiki/Downloads
macで開発なので、OS Xhostsをインストールする
こちらすでにインストール済みでした

* Vagrantをインストール
インストール済み

## 仮想環境の初期準備
* 起動するOSを決めて以下よりURLを探す
    * CentOSにも種類がいっぱいあるらしい
    * 困ったぞ。どれにしようか。とりあえず最新っぽいやつでいいかな。

http://www.vagrantbox.es/

```
-- 仮想環境を作成するフォルダを作成
mkdir [フォルダ名]
cd [フォルダ名]

-- この呪文で仮想環境が出来上がるらしい
vagrant box add [Box名] [URL]

-- 上記で決めたURLからvagrantのboxをaddするのかな？
-- コマンドの利用方法は記載いろいろあるけど、そもそも何がどうなっているのかはわからない

-- 初期設定ファイルの作成
vagrant init [Box名]

```

## VagrantFile設定

* 開発用途だけの利用目的なので以下を有効にする

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

* 他に使えそうな部分
    * config.vm.synced_folder
        * フォルダ同期
        * こっちは業務で使っているのでなんとなくわかる
    * vb.memory = "1024"
        * 仮想環境に割りあてるメモリーだと思う
        * 時間があったら要調査

## Vagrantの起動！
* 魔法の呪文 vagrant up
   * 同期関係でエラーが出ていた

```
vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

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

よくわかわないのが残念。
後日調べたい

起動自体は出来ている

## .ssh権限変更

```
chmod 0700 /home/vagrant/.ssh
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh
```

## yum update
* yum update 経由でインストールしているパッケージのバージョンアップを行っている

## Apacheインストール
```
sudo yum -y install httpd // Apacheのインストール（apache = httpd）

sudo service httpd start // Apacheの起動

sudo chkconfig httpd on // システム起動時に自動的にApacheを起動する設定
```

## mysqlインストール
* CentOS7を選択したためデフォルトでMariaDBがはいってる？

```
// 確認
rpm -qa | grep maria
mariadb-libs-5.5.50-1.el7_2.x86_64

// 削除
yum remove mariadb-libs
rm -rf /var/lib/mysql/
```

```
// インストール
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities

// 確認
rpm -qa | grep mysql
mysqld --version
```

```
-- mysqlの初期化
mysqld --user=mysql --initialize
```

```
// 自動起動設定
systemctl enable mysqld.service
```

* 本番にあげる場合はセキュリティ設定をするべき
   * mysql_secure_installation
       * 今回は本番じゃないので割愛

## PHPのインストール
* リポジトリの追加
    * リポジトリとはなんぞや。
    * 後日調査したい

``` 
yum -y install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

PHPのインストール

```
yum -y install --enablerepo=remi,epel,remi-php70 php php-devel php-intl php-mbstring php-pdo php-gd php-mysqlnd
```


## ひととおりの準備完了

早速アクセスしてみた。。。

ダメでした。
つながらない。

firewalldというものがなんか関係あるっぽいので無効にする

```
-- firewalld　を止める
systemctl stop firewalld

```

再度アクセス
apacheの画面が出たのでとりあえずできたみたい

## その後Vagrant再起動したら繋がらなくなった

firewalldがまた生き返ったようでした。

```
-- 状態の確認
systemctl is-enabled firewalld

-- 常時起動の無効化
systemctl disable firewalld
```

## 振り返り
プログラムが動くまでにはいろいろ用意が必要なわけでして、
ただ実装するだけじゃダメなんですね。