ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2015年4月2日木曜日

dockerで開発環境を構築

dockerで開発環境を構築したのでメモを残しておきます。
久しぶりに日本語で記事を書きます。なぜなら言語がPHPだからさ!
フレームワークはこれまた日本人に人気のcakeを使います。

環境

  • Mac Yosemite
  • docker version 1.5.0(using boot2docker)
  • nginx
  • php-fpm
  • php
  • cake php
  • composor
  • suppervisor

dockerファイルの作成

まずはdockerファイルを作成します。dockerファイルを知らないって人は、公式サイトでチュートリアルを勉強してからまた来てください。チュートリアルは理解している前提で進みます。


        cd {projectfolder}
        // 環境構築用のbranchを作成
        git branch env_develop develop
        // プッシュ
        git push origin env_develop
        // Dockerfileを作成
        touch Dockerfile

Dockerfile


FROM centos:6.6
MAINTAINER edy

# yum update
RUN yum -y update

# install nginx
RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
RUN yum -y install nginx

# nginx setting
ADD default.conf   /etc/nginx/conf.d/default.conf
ADD www.conf   /etc/php-fpm.d/www.conf

# install php
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum install -y http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
RUN yum install -y --enablerepo=remi-php55 php php-mbstring php-mcrypt php-devel php-fpm php-cli php-curl php-mysql

# php setting
ADD php.ini   /etc/php.ini

# supervisor
RUN yum install -y python-setuptools
RUN easy_install supervisor

# supervisor setting
ADD supervisord.conf /etc/supervisord.conf

# Expose ports.
EXPOSE 80

# launch nginx
# ENTRYPOINT ["nginx"]
# ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
CMD ["/usr/bin/supervisord"]

nginxとphp-fpmを同じコンテナで動作させるために、supervisorを利用しています。他は特に変わった点はありません。
まず最初にnginxの設定を行います。

default.conf


server {
    listen       80;
    server_name  localhost;

    charset utf-8;
    #access_log  /var/log/nginx/log/host.access.log  main;
    root /var/www/html/app;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

fastcgi_passを設定しています。nginxとphp-fpm間をunix socketで通信します。続いて、php-fpmの設定です。

www.conf


listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx

上記に記載されているのは変更点のみです。本来は、全て記載する必要があります。listenはnginxのdefault.confで設定したpathと同じになります。listen.ownerとlisten.groupはnginxです。

php.ini


date.timezone = "Asia/Tokyo"

php.iniはタイムゾーンだけ変更します。この変更をしないとcake phpで警告エラーが表示されます。

supervisord.conf


[supervisord]
nodaemon=true

[program:php-fpm]
command=/usr/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true

nginxとphp-fpmのデーモンを切るのがポイントです。この設定はdocker特有です。

上記で準備は終了なので、ビルドします。

build Dockerfile


  // build Dockerfile
  docker build -t development001 .
  // docker launch by /bin/bash. and foldr sync
  docker run -i -t -v {プロジェクトフォルダ}/app:/var/www/html/app --name dev001 4b97a03d4b73 /bin/bash

上記でbashが起動するので、nginx、php等のバージョンを確認しましょう。cakephpでアプリのひな形を作成するので、-vでローカルのフォルダと同期をしておきます。

install composer and create cakephp


  // syncで指定したフォルダに移動
  cd /var/www/html/app
  // install composer
  curl -sS https://getcomposer.org/installer | php
  // touch 
  touch composer.json
  // crate project
  php composer.phar install

普通にcomposerを導入してcakephpのプロジェクトを作成します。syncしていれば、ローカルからソースコードが操作できるので、ソースコードの変更はSublime Textなどを利用して変更していきましょう。


  1. tmp配下フォルダの権限を777
  2. core.phpのCache::configでmask666を設定
  3. CAKE_CORE_INCLUDE_PATHに変更が必要なら変更する

build Dockerfile posting


  docker build -t development0001 .
  // docker launch by contanier. and foldr sync
  docker run -d -i -v /Users/msuzuki/Documents/nec/api/app:/var/www/html/app -p 80:80 -t development0001:latest
  // ブラウザで開く
  http://localhost:3000/

準備が完了したら再ビルドして、portを指定してdockerコンテナを立ち上げましょう。上記の場合は、boot2dockerでlocalhostを見れるようにポートフォワード設定しています。
上記の設定により、ブラウザから画面が確認できるようになります。

以上。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年11月18日火曜日

ruby使いが手を動かして学ぶphp その3

前回の続き。今回はcakephp2と格闘

環境

  • mac Yosemite
  • vagrant1.6.5(centos 6.5)

アプリのパスを設定

アプリを動かすにはapp/Config/bootstrap.phpを修正する必要がある。

編集しなくてはいけない三つの定数は、 ROOT 、 APP_DIR 、 CAKE_CORE_INCLUDE_PATH

  • ROOT には、アプリのフォルダが含まれているディレクトリのパスを設定
  • APP_DIR には、(訳注:相対的な)アプリのフォルダ名を設定
  • CAKE_CORE_INCLUDE_PATH には、CakePHPライブラリフォルダのパスを設定


if (!defined('ROOT')) {
    define('ROOT', DS . 'var' . DS . 'www' . DS . 'html' . DS . 'test');
}

/**
 * The actual directory name for the "app".
 *
 */
if (!defined('APP_DIR')) {
        define('APP_DIR', 'test');
}

define(
    'CAKE_CORE_INCLUDE_PATH',
    ROOT . '/Vendor/cakephp/cakephp/lib'
);

Console/cakeを動作させるための設定


PHP Warning:  include(Cake/Console/ShellDispatcher.php): failed to open stream: No such file or directory in /var/www/html/test/test/Console/cake.php on line 43

上記のエラーが発生。このままでは動かないので、以下の設定を変える。
まずはConsole/cake.phpを修正する必要がある。


        $root = dirname(dirname(dirname(__FILE__)));
        $appDir = basename(dirname(dirname(__FILE__)));


        //$composerInstall = $root . DS . $appDir . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';
  $composerInstall = $root . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib';

$appDirがあるので、これは不要。削除してやると動作する。
でもこのままではまだエラー。

さらに続きます。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年11月17日月曜日

ruby使いが手を動かして学ぶphp2

前回の続き

環境

  • mac Yosemite
  • vagrant1.6.5(centos 6.5)

mysql起動


/etc/init.d/mysqld start

データベース作成


    CREATE DATABASE `cakephp`;

    GRANT ALL ON `cakephp`.* to test@localhost IDENTIFIED BY 'passtest';

    FLUSH PRIVILEGES;

apacheをinstall


// apache install
sudo yum -y install httpd

// launch
sudo /etc/init.d/httpd start

cd /var/www/html/

// を記述
sudo touch phpinfo.php

http://192.168.33.10/phpinfo.phpでアクセスを確認。
しかし、検索するとwindows環境の設定ばかりがひっかかる。開発Linux用のまとめを自分で作成しないと時間の無駄でダメだこりゃ。

プロジェクトをapacheのドキュメントルートに移動

面倒臭くなってきたw。準備が長いって。railsは偉大だ。。。


// プロジェクトフォルダをDocument rootに移動
sudo mv test/ /var/www/html/

http://192.168.33.10/test/test/でアクセス。なんかWarning: strtotime()とかでてる。
php.iniをいじってdate.timezone = Asia/Tokyoにすればいいらしい。


php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d

sudo vi /etc/php.ini

// 変更
date.timezone = Asia/Tokyo

// 再起動
sudo service httpd restart

うまく表示された。でも、まだDebugKit is not installed.とかいう警告がある。プラグインが必要らしい。というわけでさらに続きます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年11月15日土曜日

ruby使いが手を動かして学ぶphp

久しぶりにphpを使わなければいけなくなりました。といっても少しですけど。
普段はjava, objective-c, swift, ruby使いなのですが、phpでCI環境を整えることになったので色々と学習&メモ。

ちなみにぼくが最後にphpで開発したのはverson4の最後の時です。php好きじゃないんだけど、まあ、仕方ないっすねー(棒)。rubyは素晴らしい言語だけど、使える人が本当に少ないのが弱点。結局両方用意しないといけなくなってしまう。(愚痴なので気にしないでくださいw)

せっかくなのでrubyの視点からみたphpの感想もちょこちょこ記載していきたいと思います(怒らないでねw)

環境

  • mac Yosemite
  • vagrant1.6.5

開発はvagrantのcentos6.5で行います。macに入っているphpはext-mcryptとかいうライブラリがなくてシンボリックリンクはったり面倒なんで。

php5.5のinstall

まずはchefを使わないで普通にinstallして基礎から学習します。php久しぶりなんで。
(chefを使った管理は多分あとで書きます。どうせやる必要あるんで)


 // yumを最新にupdate
 sudo yum -y update

 // epelのリポジトリを追加
 sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 // remiのリポジトリを追加
 sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

 // php install
 sudo yum install --enablerepo=remi --enablerepo=remi-php55 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug

 php -v
 PHP 5.5.19 (cli) (built: Nov 13 2014 07:52:05) 

install完了。次。

Composerをinstall

Composer

パッケージ管理ツールです。rubyでいうbundler、javaでいうgradle, movenのようなものです。

install

まずはchefを使わないで普通にinstall。勉強勉強。


curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /Users/{username}/Documents/study/php/test/composer.phar
Use it: php composer.phar

OK、次。php composer.phar install


php composer.phar install
Composer could not find a composer.json file in /Users/{username}/Documents/study/php/test
To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section

composer.jsonというファイルが必要らしい。アプリのフレームワークにはrailsをインスパイアしたフレームワークcakephpを使います。

{
    "name": "example-app",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": ">=2.4.9"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

cakeのサイトの説明をそのまま使います。もう一度実行。


php composer.phar install
Loading composer repositories with package information
Initializing PEAR repository http://pear.cakephp.org
Installing dependencies (including require-dev)
  - Installing cakephp/cakephp (2.5.6)
    Downloading: 100%         

Writing lock file
Generating autoload files

Vendor以下に色々ある。まだよくわからないけど次。

プロジェクト作成

bakeコマンドでプロジェクトを作成。railsコマンドと同じかな。なんでcakeじゃないんだろうか。


Vendor/bin/cake bake project test

// something

warningでてるけどProject baked successfully!だからOKなのかな?無視して次。

testフォルダを発見。中に色々フォルダがある。うまくいったっぽい。でも、設定を変える必要があるらしい。

CAKE_CORE_INCLUDE_PATH を相対パスに変更


define(
    'CAKE_CORE_INCLUDE_PATH',
    ROOT . '/Vendor/cakephp/cakephp/lib'
);

準備完了。DBはmysqlを使います。

Mysql5.6をinstall


rpm -qa | grep mysql

mysql-libs-5.1.73-3.el6_5.x86_64
php-mysqlnd-5.5.19-1.el6.remi.x86_64

// delete mysql5.1
sudo yum remove mysql-libs-5.1.73-3.el6_5.x86_64

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

// install mysql
yum install mysql mysql-devel mysql-server mysql-utilities

mysql --version
mysql  Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using  EditLine wrapper

OK。長すぎるので分割して続きます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...