Smart way to php with atom

PHP 웹 개발에(혹은 그외 웹개발) 있어서 일종의 전형적이고 스마트한 방법이 있어서 정리하고 공유할까 한다. 협업을 할때 팀원들 간에 상이한 개발환경에 문제가 있거나, 개인 개발시에도 테스팅, 배포, 패키징 환경을 정형화 함으로써 개발시간을 줄일수 있기 때문이다.

이 방법에는 다음의 오픈소스 소프트웨어를 사용한다.

기본 셋팅 환경은 Xcode가 인스톨 된 Mac OSX 환경이다.

0. PHP, NodeJS, Composer (My Desktop)

# after install homebrew
brew --version
brew update
brew install nodejs php56 php56-mcrypt php56-xdebug
brew list

php를 설치후 composer를 설치한다.

curl -sS https://getcomposer.org/installer | php
mkdir bin
chmod 755 composer.phar && mv composer.phar bin/composer
composer selfupdate
composer --version
echo 'export PATH="~/bin:~/.composer/vendor/bin:vendor/bin:$PATH"' >> ~/.profile

homestead에 사용할 개인키를 만든다.

ssh-keygen -t rsa -C "your@email.com"
mkdir key
mv ~/.ssh/id_rsa ~/key/your-151007.pem
mv ~/.ssh/id_rsa.pub ~/key/your-151007.pub 

1. VirtualBox (My Desktop)

Virtaul Box는 오픈소스 가상머신 관리툴이다. 다음 링크를 이용해 OS에 맞게 설치한다.

VirtualBox --help

2. Install Vagrant (My Desktop)

vagrant 는 가상머신에 command-line 명령어로 간단히 VM을 띄울수 있는 툴이다. 다음 링크를 이용해서 OS에 맞게 설치한다.

vagrant --version

테스트로 Ubuntu 14.04 LTS 를 설치해 보도록하자. 터미널에서 다음과 같은 순서로 폴더를 만들고 명령어를 실행하면 간단히 VM이 만들어진다.

vagrant box add ubuntu/trusty64
vagrant box list
mkdir ubuntu_trusty64
cd ubuntu_trusty64
vagrant init ubuntu/trusty64
vagrant up --provider=virtualbox

만들어진 VM에 다음과 같은 방법으로 간단히 서버 접근 가능하다.

vagrant ssh

vagrant 기반의 VM은 Vargrantfile이 있는 폴더 중심으로 작동하게 된다. VM의 상태는 해당 폴더위치에서 status 명령어로 상태를 볼수 있고, 전체 띄어져있는 VM 상태는 global-status를 이용해서 볼 수 있다. destroy 명령어로 간단히 VM을 삭제할 수 있다.

vagrant status
vagrant global-status
vagrant destroy

혹여나 Virtualbox 의 이미지가 지워지지 않거나 문제가 있을때에는 다음의 명령어를 이용해 VM을 지우거나 리셋한다.

VBoxManage list runningvms
VBoxManage controlvm <uuid> poweroff
VBoxManage unregistervm <uuid>

3. Atom (My Desktop)

Atom 에디터는 오픈소스 기반이고, Windows, Mac OSX, Linux등에 설치 운영이 가능하며, 패키지, 테마등이 많은 개발자들의 자발적인 참여로 이뤄진다. 첫 페이지의 설치 파일 다운로드를 해서 설치한다.

에디터 설치 후 ‘메뉴 Atom’ → ‘Install Shell Commands’ 로 쉘 커멘드도 설치한다.
apm 명령어로 기본적인 php, javascript linter 를 설치한다.

composer global require squizlabs/php_codesniffer # for phpcs
phpcs --version

npm -g install jshint csslint
jshint --version
csslint --version

gem install pep8
apm install linter linter-php linter-phpcs linter-jshint linter-csslint linter-pep8
vi ~/.atom/config.cson

  "linter-csslint":
    executablePath: "/usr/local/bin/csslint"
  "linter-jshint":
    executablePath: "/usr/local/bin/jshint"
    lintInlineJavaScript: false
  "linter-phpcs":
    codeStandardOrConfigFile: "PSR2"
    executablePath: "/usr/local/bin/phpcs"
  "linter-pep8":
    pep8ExecutablePath: "/usr/local/bin/pep8"
  • Remote-FTP : 원격 에디팅 SFTP, SFTP
  • file-icons : TreeView의 아이콘 지원
  • minimap : 에디터 우측 미니맵
  • open-recent : 최근 수정 파일 / 디렉토리
  • pretty-json
  • highlight-selected
  • todo-show
  • editconfig
  • terminal-plus : 에디터내 console 창 지원
  • auto-detect-indentation : 자동 indent 지원
apm install Remote-FTP file-icons hide-files minimap open-recent pretty-json highlight-selected todo-show editconfig terminal-plus auto-detect-indentation

4. Homestead (My Desktop)

vagrant box add laravel/homestead
composer global require laravel/homestead=~2 laravel/installer
# show installed-package
vagrant box list
composer global show -i
homestead --version

homestead 를 초기화 시키면 ~/.homestead/Homestead.yaml 파일 생성된다. 그리고 VM과 코드 공유를 할 기본 디렉토리는 ~/Sites/homestead

mkdir -p ~/Sites/homestead
homestead init
atom ~/.homestead/Homestead.yaml

Homestead.yaml 파일을 다음과 같이 수정한다.

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/key/your-151007.pub

keys:
    - ~/key/your-151007.pem

folders:
    - map: ~/Sites/homestead
      to: /home/vagrant/homestead

sites:
    - map: homestead.app
      to: /home/vagrant/homestead/homestead/public

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

그리고 파일 하나 더 수정해주는데 VM이 설치될때 provisioning을 하는 것이다.

atom ~/.homestead/after.sh

다음의 구문은 git 버젼을 최신으로 바꾸고, zip, colordiff, git을 새로 까는 스크립트다.

apt-get purge -y -qq git
add-apt-repository ppa:git-core/ppa -y
apt-get update
apt-get upgrade -y -qq
apt-get install -y -qq zip colordiff git

그리고 Homestead 2.1.8의 경우 에러가 나는 부분이 있어서 다음을 추가/수정한다. 혹은 자신만의 셋팅이 있다면 추가해도 된다.

atom ~/.homestead/aliases
alias serve=serve-laravel

function serve-laravel() {
    if [[ "$1" && "$2" ]]
    then
        sudo dos2unix /vagrant/scripts/serve-laravel.sh
        sudo bash /vagrant/scripts/serve-laravel.sh "$1" "$2" 80
    else
        echo "Error: missing required parameters."
        echo "Usage: "
        echo "  serve-laravel domain path"
    fi
}

파일을 저장하고 다음과 같은 명령어로 VM을 띄우고, VM에 접근한다.

homestead up
homestead ssh

Homestead VM

homestead ssh로 VM 서버에 접근했으면 ~/Sites/homestead/test 를 웹서버에 연결한다.

mkdir ~/homestead/test
echo '<?php
phpinfo();' > ~/homestead/test/index.php

serve test.app ~/homestead/test

My Desktop의 hosts 파일을 수정한다.

atom /etc/hosts

~/Sites/homestead/ 폴더 안의 폴더대로 .app를 도메인에 붙여서 각각 서비스 하도록 한다.

192.168.10.10 homestead.app test.app

http://test.app URL에 브라우저로 확인하면 제대로 웹 개발 환경이 셋팅 된 것을 확인 할 수 있다.

vagrant + vbox 조합은 shared folder가 워낙 느려서 vagrant-vbguest 플러그인을 깔아서 쓰도록 한다.

reference : https://github.com/dotless-de/vagrant-vbguest

vagrant plugin install vagrant-vbguest

# after vagrant up
vagrant vbguest --status