ローカルにLEMP環境を構築する

Homebrewで一連のアプリケーションをインストールする。

Virtualbox

使用しているPC上に仮想の環境を構築できる仮想化ソフトウェア。

VirtualBox とは?

brew cask install virtualbox

Vagrant

開発環境の構築と共有を簡単に行うためのツール。

開発環境の構築・共有を簡単にするVagrant入門 | Think IT(シンクイット)

brew cask install vagrant

Ansible(アンシブル)

構成管理ツールらしい。オレもなぜこれをインストールする必要があるのか分かってない。

Ansibleをはじめる人に。 - Qiita

brew install ansible

もろもろ事前にbrew updateしておいたほうが良いだろう。


まずは仮想環境を構築・管理ツールであるVagrantを使って仮想環境でVirtualBoxにOSをインストールする。

今回はCentOS6をVirtualBoxにインストール。

vagrant init centos/6

するとこのようなログが出るが、エラーではない。

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

仮想PCをセットアップして起動する

vagrant up

仮想PCにSSHログイン

vagrant ssh

※ここからは仮想PC上での作業になります

PHPのインストール

パッケージ管理ツールyumrpmを使用します。

どちらもrpm形式のパッケージ(.rpm)を使用していますが、コチラの記事を読む限り基本的にはyumを使う方が良さそうです。

yumにEPELリポジトリを追加

sudo yum -y install epel-release
エンタープライズ Linux 用の拡張パッケージ(EPEL) は、 Red Hat Enterprise Linux (RHEL) 向けの高品質なアドオンパッケージであり、CentOS や Scientific Linux (SL) のような RHEL からスピンオフしたディストリビューションと互換性のある、Fedora プロジェクトで有志によって作成されたパッケージになります。Fedora は RHEL のアップストリームであり、EPEL のアドオンパッケージは主に RHEL 向けにビルドされた Fedora リポジトリをソースとしています。

EPEL/ja - FedoraProjectより
このようにEPELとはRHEL向けのパッケージで、CentOSにまだ取り込まれていないものが含まれる。
CentOSに取り込まれる前に使用したい場合はEPELをインストールする。

yumにRemiリポジトリを追加
※rpmコマンドになっているが、yumは内部的にrpmを使用している。

オプションに-yを付けているのは問い合わせに対してすべてyesを選択する事を意味する。

sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Remiも同様基本リピポジ取りでは提供されないパッケージを含んでいる。

PHPとモジュールをインストール

sudo yum -y install --enablerepo=remi,remi-php71 php php-devel php-fpm php-mbstring php-mysqlnd php-pdo

以下のモジュールがインストールされる。

  • php-devel・・・PHP開発で使用する
  • php-fpm・・・FastCGI
  • php-mbstring・・・マルチバイト文字列
  • php-mysqlnd・・・ネイティブドライバ
  • php-pdo・・・PHP Data Objects

yumにMySQLのリポジトリを追加

sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

MySQLインストール

sudo yum -y install mysql-community-server

sudo vi /etc/yum.repos.d/nginx.repo

以下を入力

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Nginxインストール開始

sudo yum -y install nginx

一旦元の環境に戻る

exit

Vagrant設定を変更

vi Vagrantfile

#を外してポート番号をセット

25: # config.vm.network "forwarded_port", guest: 80, host: 8080
↓
25: config.vm.network "forwarded_port", guest: 80, host: 9000

Vagrant設定の反映

vagrant reload

http://localhost:9000にアクセスすると静的ページが開くはず。


PHPのページを開いてみる。

再度仮想環境にログイン

vagrant ssh

PHPのトップページを作成

sudo vi /var/www/index.php

以下を記述。

<?php
phpinfo();
?>

Nginxの設定の修正

sudo vi /etc/nginx/conf.d/default.conf

PHPの設定の修正

sudo vi /etc/php-fpm.d/www.conf

以下のページを参考に修正する。

qiita.com

再度localhost:9000にアクセスすると、PHP情報ページが開くはず。

参考

Vagrant basics - Qiita

私のgitスニペット

まあ、大抵の困った事はSourceTreeで解決できますし、ググれば情報は必ず出てくるんですが自分のスニペットとして。

add

変更点全てをインデックスへ登録
$git add .
一度コミットしてあるものだけをインデックスへ登録
$git add -u
リモートリポジトリから取得(削除情報も)
$git fetch --prune

ブランチ

ローカルブランチリストアップ
$git branch
リモートブランチリストアップ
$git branch --remote
ローカルブランチリストアップ
$git branch
ローカル、リモート全てのブランチリストアップ
$git branch -a

reflog

過去のHEADが指すコミットリストアップ
$git reflog
過去のHEADが指すコミットリストアップ(ブランチ指定)
$git reflog [ブランチ名]

config

configの設定一覧表示
$git config -l
push先のURLを設定する
$git config remote.origin.origin.url [url]
コンソールログに色を付ける
$git config color.ui auto
$git config --global color.ui auto

グローバル設定にする場合は--globalを付ける

コンソールログに色を付けない
$git config color.ui no

その他

各コマンドのhelp表示
$git help [コマンド名]
最新コミット内容を表示
$git show

Rubyのインスタンス生成

Rubyには2種類のインスタンス生成関数が存在する。

  • new
  • allocate
MyLogger.new("foo")

と言う風に書くと Class.newがインスタンス生成。

2つの違いは実行時にinitialize関数が呼ばれるか、呼ばれないかの違いです(だと思っています)。

class MyLogger
    def initialize(name)
    # do something
    end
end

先のnew関数でインスタンスを生成すればinitialize関数が実行されます。生成時に引数を与えたい場合はnewが良いのかなと思います。

MyLogger.new

ちなみにコンストラクタに引数を付けない場合は括弧さえ不要。

MyLogger.allocateの場合はinitializeは呼ばれません。

参考 teratail.com

ref.xaio.jp

Rubyのログ出力ショートコード

#!/usr/bin/env ruby
# coding: utf-8
require 'logger'

class MyLogger
  def initialize(logger = nil)
    @logger = logger || Logger.new(STDERR)
  end
  attr_reader :logger
  def info(arg)
    logger.info arg
  end
  def debug(arg)
    logger.debug arg
  end
end

$log = MyLogger.new
$log.debug("debug")
$log.info("info")

これを実行するとこうなる。

D, [2017-06-14T19:28:44.997339 #76117] DEBUG -- : debug
I, [2017-06-14T19:28:44.997355 #76117]  INFO -- : info

まあ、putsで事は足りる気はしてる。

puts "debug"

printもあるけど、putsの方が改行してくれるのputsの方が良い気はしている。

print "foo"
puts "bar"
puts "piyo"
foobar
piyo

という出力になってしまう。

Rubyを始めました。