My Photo

June 14, 2015

CakePHPのインストール

仕事でCakePHPを使うことになった。WEBアプリじゃなくてコンソールアプリだが。
とりあえずCentOSにインストールしてみた。

インストール

composerを使ってインストールした。

/var/www/html の下に example-app というフォルダを作成。そのフォルダに公式サイトの応用インストールというページに書いてある以下の composer.json をまるっとコピーして example-app に置いた。

{
    "name": "example-app",
    "require": {
        "cakephp/cakephp": "2.6.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

そして、"composer install" を実行。

# composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing cakephp/cakephp (2.6.7)
    Downloading: 100%         

Writing lock file
Generating autoload files
#

これでCakePHP 2.6.7のファイルの配置が完了。ディレクトリ構成は大体以下のようになる。
cakephpの下にさらにcakephp。なんか変な気もするが、こういうものなのか?

example-app/
+-composer.json
+-Vender/
  +-bin/
  +-autoload.php
  +-composer/
  +-cakephp/
    +-cakephp/
      +-app/
        +-Config/
        +-Console/
        +-Controller/
        +-Lib/
        +-Locale/
        +-Model/
        +-Plugin/
        +-Test/
        +-Vender/
        +-View/
        +-tmp/
        +-webroot/
      +-lib/

また、CakePHPはApacheのmod_rewriteを利用するが、これは既に使えるようになっていたので特に何かする必要はなかった。

設定

timezoneの設定

デフォルトのtimzoneを設定。これはCakePHPとか関係なく、PHPをインストールした後すぐにやっておかなければならないことだった。
/etc/php.ini で下記のように設定する。
最初、/etc/httpd/conf.d/php.conf に書き込んだらエラーなって悩んでしまった。このApacheのPHPに関する設定ファイルであって、PHPの設定ファイルではなかったorz

date.timezone = Asia/Tokyo
Security.saltとSecurity.cipherSeedの変更

app/Config/core.php に設定されている Security.salt と Security.cipherSeed を修正する。初期値のままだと初期画面に警告がでる。

app/tmpのパーミッション変更

app/tmpディレクトリ以下に一時ファイルが作られるので、パーミッションの設定をする。

chmod -R 777 app/tmp
DB接続の設定

DB接続の設定は app/Config の datababase.php.default を database.php にリネームして行う。デフォルトではMySQL用。PostgreSQLを使う場合は datasource を書き換え、port と schema を加える。encoding はコメントになっていたので有効にする。host、login、password、database は自分の環境に合わせて変更する。

class DATABASE_CONFIG {

	public $default = array(
		'datasource' => 'Database/Postgres',
		'persistent' => false,
		'host' => '192.168.1.11',
		'port' => '5432',
		'login' => 'user',
		'password' => 'pass',
		'database' => 'mydb',
		'schema' => 'public',
		'prefix' => '',
		'encoding' => 'utf8',
	);
…
バーチャルホストの設定、SELinuxの無効化、Apacheの再起動

「Laravelのインストール」を app/webroot をドキュメントルートとしてバーチャルホストの設定し、SELinuxを無効化して、Apacheを再起動。

ここまでやって、設定したバーチャルホストにアクセスすると、CakePHPのデフォルトのページが表示される。
#まだ「DebugKitがインストールされていない」というWarningが出ているが。

参考ページ:
応用インストール — CakePHP Cookbook 2.x ドキュメント
CakePHPのダウンロードとインストール - CakePHPの使い方
AWS EC2にPHP5.5環境でCakePHPを導入 - Qiita
インストール — CakePHP Cookbook 2.x ドキュメント
CakePHPでPostgreSQLを使う - Qiita

参考ページ:Composer
Composerを使ってPHPのパッケージを簡単インストール (2/3):CodeZine

June 09, 2015

PHPからPDOでPostgreSQLに接続する

以下のコードでPHPからPDOでPostgreSQLに接続できること確認しようと思った。

$dsn = 'pgsql:dbname=mydb;host=192.168.1.11;port=5432';
$user = 'user';
$pass = 'pass';

try {
    $dbh = new PDO($dsn, $user, $pass);
    $sql = 'SELECT CURRENT_TIMESTAMP';
    foreach ($dbh->query($sql) as $row) {
        print $row[0] . "\n";
    }
    $dbh = null;
} catch (PDOException $e){
    print('[ERROR] ' . $e->getMessage() . "\n");
    die();
}

繋がらない。以下のメッセージが出た。

[ERROR] could not find driver 

"php -i" で確認。
#"php -i" は phpinfo() を出力するそうだ。

# php -i | grep pdo
/etc/php.d/pdo.ini,
/etc/php.d/pdo_sqlite.ini,
PHP Warning:  《省略》
pdo_sqlite
#

pdo_postgresql とかPostgreSQLと関連ありそうなものが見当たらない。これが「ドライバない」ということか。
"yum list" でパッケージを探すとphp-pgsqlというのがあったのでそれをインストールしてみた。

# yum --enablerepo=remi --enablerepo=remi-php55 list | grep pgsql
apr-util-pgsql.x86_64                     1.3.9-3.el6_0.1             base      
dovecot-pgsql.x86_64                      1:2.0.9-8.el6_6.4           updates   
libdbi-dbd-pgsql.x86_64                   0.8.3-5.1.el6               base      
mod_auth_pgsql.x86_64                     2.0.3-10.1.el6              base      
php-pear-MDB2-Driver-pgsql.noarch         1.5.0-0.7.b4.el6.remi       remi      
php-pgsql.x86_64                          5.5.25-1.el6.remi           remi-php55
php54-php-pgsql.x86_64                    5.4.41-1.el6.remi           remi      
php55-php-pgsql.x86_64                    5.5.25-1.el6.remi           remi      
php56-php-pgsql.x86_64                    5.6.9-1.el6.remi            remi      
rsyslog-pgsql.x86_64                      5.8.10-10.el6_6             updates   
rsyslog7-pgsql.x86_64                     7.4.10-3.el6_6              updates   
uuid-pgsql.x86_64                         1.6.1-10.el6                base      
# yum --enablerepo=remi --enablerepo=remi-php55 install php-pgsql
《省略》
インストール:
  php-pgsql.x86_64 0:5.5.25-1.el6.remi                                          

依存性を更新しました:
  php.x86_64 0:5.5.25-1.el6.remi                                                
  php-cli.x86_64 0:5.5.25-1.el6.remi                                            
  php-common.x86_64 0:5.5.25-1.el6.remi                                         
  php-gd.x86_64 0:5.5.25-1.el6.remi                                             
  php-mbstring.x86_64 0:5.5.25-1.el6.remi                                       
  php-mcrypt.x86_64 0:5.5.25-1.el6.remi                                         
  php-pdo.x86_64 0:5.5.25-1.el6.remi                                            
  php-process.x86_64 0:5.5.25-1.el6.remi                                        
  php-xml.x86_64 0:5.5.25-1.el6.remi                                            

完了しました!
# 

インストール完了。PHP関連が一緒に色々アップデートされた。それから httpd を再起動。
"php -i" を見ると、pdo_pgsqlが入っている。
ちなみに、PHPの拡張モジュールの共有ライブラリ自体のディレクトリは
/usr/lib64/php/modules
設定ファイルのディレクトリは
/etc/php.d

これで最初のプログラムを実行すると、ちゃんと接続できてクエリの結果が返ってきた。

参考ページ:
PHP/PDOを使ってPostgreSQLに接続する - 調べる.db
PHP: PDO - Manual
PHP: PostgreSQL (PDO) - Manual

May 06, 2015

Laravel4のインストール

関連記事:
[CentOS 6.6]PHP5.5のインストール

Laravelに関する本が出たので購入。電子出版による本はすでにあったが、紙媒体では初のLaravel本だと思う。
本に従ってvirtualbox上のCentoOS 6.6 でLaravelプロジェクトを作成してみた。
最初に本の内容に入る前に、Laravelで必須なPHPのmbstringがインストールされていなかったので、以下のようにyumでインストールした。

yum --enablerepo=remi --enablerepo=remi-php55 install php-mbstring

ここから本の内容に従った作業。
現在、Laravelの最新バージョンは5だが、今回はバージョン4の環境を作る。今後、触るかもしれないWEBアプリがバージョン4で作られているので。

Lravelの取得

LaravelのインストールはPHPやPostgreSQLの「インストール」とは違うような気がする。プロジェクトをごとにLaravelの環境を作ると考えた方が合っている?
composerコマンドを下記を実行すると、指定したディレクトリに必要なファイルが用意される。ディレクトリ名はプロジェクトのディレクトリを指定する。絶対でも相対でもよい。

composer create-project laravel/laravel <ディレクトリ名> 4.2.*

今回はディレクトリをドキュメントルートのサブディレクトリ /var/www/html/ltest とした。

# composer create-project laravel/laravel /var/www/html/ltest 4.2.*
Warning: This development build of composer is over 30 days old. It is recommended to update it by running "/usr/local/bin/composer self-update" to get the latest version.
Installing laravel/laravel (v4.2.11)
  - Installing laravel/laravel (v4.2.11)
    Downloading: 100%         

Created project in /var/www/html/ltest
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing symfony/translation (v2.5.11)
    Downloading: 100%         
<中略>
laravel/framework suggests installing doctrine/dbal (Allow renaming columns and dropping SQLite columns.)
Writing lock file
Generating autoload files
Generating optimized class loader
Compiling common classes
Compiling views
Application key [**********************] set successfully.
#

「composerをアップデートしろ」的なワーニングが出たが、コマンドはたぶん正常に完了。
インストールの最後に表示される "Application key" は app/config/app.php が返す配列のキーが "key" という要素の値に保存されている。
プロジェクトのディレクトリは以下のような構成となる。

app
├─commands
├─config
├─controllers
├─database
│  ├─migrations
│  └─seeds
├─lang
├─models
├─start
├─storage
├─tests
└─views
bootstrap
public
vendor

上記のディレクトリの中で app/storage 以下はLaravelがファイルを保存できるように、以下のコマンドでパーミッションを777に変更しておく。

chmod -R 777 storage

プロジェクトのディレクトリをLinuxのユーザのホームディレクトリの配下、例えば /home/hoge/ltest とかにすると、SELinuxのせいで色々と面倒らしい。

バーチャルホストの設定

作成したプロジェクトのディレクトリ配下のpublicディレクトリがドキュメントルートとなるので、ここをドキュメントルートとするバーチャルホストの設定をする。
まず、httpd.conf の以下の2箇所を変更。

変更前: #ServerName www.example.com:80
変更後: ServerName www.into1st.jp:80
変更前: #NameVirtualHost *:80
変更後: NameVirtualHost *:80

ServerNameについてはコメントになってればいいと書いてあるWEB上の記事もあったが、こうしないと以下のようなワーニングが出力された。

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: httpd: Could not reliably determine the server's fully qualified 
domain name, using localhost.localdomain for ServerName
CentOS 6.6のApacheでは設定ファイルは /etc/httpd/conf/httpd.conf である。この設定ファイルの中で /etc/httpd/conf.d/*.conf を読み込むようになっている。よって、バーチャルホストの設定として以下の3ファイルを /etc/httpd/conf.d に作成する。ファイル名は適当に決めた。

virtualhost-undefinedhost.conf は未定義のホスト名でアクセスされた場合にアクセスを拒否するための設定。

<VirtualHost *:80>
    ServerName any
    <Location />
        Require all denied
    </Location>
</VirtualHost>

virtualhost-main.conf はメインのホスト名の設定。/var/www/html をドキュメントルートとする。

<VirtualHost *:80>
    ServerName www.into1st.jp
    DocumentRoot /var/www/html
</VirtualHost>

virtualhost-virtual01.conf はLaravel4のプロジェクト用バーチャルホストの設定。

<VirtualHost *:80>
    ServerName www.ltest.jp
    DocumentRoot /var/www/html/ltest/public
    ErrorLog logs/virtual-error_log
    CustomLog logs/virtual-access_log combined env=!no_log
</VirtualHost>

これで、httpd を再起動すればOK、のはず。しかしまだワーニングが。

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Warning: DocumentRoot [/var/www/html/ltest/public] does not exist

SELinuxが原因らしい。面倒だなSELinux。
ちゃんと対応するなら /var/www/html/ltest/public にSELinuxのラベルの設定を行うらしいのだが、その対応はいつかすることにして、今回は一時的にSELinuxを無効にして再起動。

# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

これでサーバ側の設定は完了。
DNSの設定変更は面倒なので、クライアントPCのhostsファイルにバーチャルホストの設定に記述したドメインを以下のように追記する。

<サーバのIPアドレス> www.into1st.jp www.ltest.jp

これで http://www.ltest.jp/ にアクセスすると "You hava arrived." と表示される。
長かった^^;

参考書籍:

Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!] (Software Design plus)Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!] (Software Design plus)
川瀬 裕久 古川 文生 松尾 大 竹澤 有貴 小山 哲志 新原 雅司

技術評論社 2015-04-21
売り上げランキング : 4108

Amazonで詳しく見る
by G-Tools

参考ページ:Laravelについて
インストール 4.2.0 Laravel
CentOS 6.5 + PHP 5.6 + MySQL 5.6 + laravel4 環境を作る(part 2)|OISのブログ|株式会社オリエンタルインフォーメイションサービス
CentOS 6.6 で Laravel4 を使う準備 - Qiita
CentOS 6.5 + nginx 1.6.1 + Laravel 4.2のインストールメモ - Qiita
PHP - Laravel 4のインストール - Qiita

参考ページ:バーチャルホストについて
バーチャルホスト設定 - CentOSで自宅サーバー構築
11 | 5月 | 2013 | 其未来.com
複数のドメインを運営する (バーチャルホスト) - Linux で自宅サーバ [ Home Server Technical. ]

参考ページ:SELinuxについて
[CentOS][Apache]SELinux有効下でのドキュメントルートの変更 | ごった煮 - tips about programming and building a server
SELinuxを有効にしているときにありがちなpermission denied - kgbu's diary
SELinuxを無効化する | Smart

April 07, 2015

URLリライトの復習その2

関連記事:
UbuntuサーバのApache2でURLリライトを試してみる
URLリライトの復習とIE11のUser-Agent
.htaccessの有効化とサブディレクトリのアクセス制御

CentOSでのURLリライト

以前、URLリライトについての記事を書いた時は動作確認に Ubuntu Server を使っていたが今はCentOS(6.6)を使っているので、URLリライトが使えるか調べてみた。
/etc/httpd/conf/httpd.conf を見ると

LoadModule rewrite_module modules/mod_rewrite.so

という記述があるのでデフォルトでURLリライトが有効になっている。あとは .htaccess を使えるようにすれば .htaccess でURLリライトが可能になる。

サブディレクトリの.htaccessのRewritBaseとRewriteRule

RewriteRuleは書式は以下である。

RewriteRule <Pattern> <Substitution>

いろいろ試してわかったことを以下に箇条書き。

  • パターンと照合される入力値は相対パスである。スラッシュではなく名前から始まる。よって、パターンとして "/○○" では入力値と一致しない。相対パスが一致するようなパターンを考えなければならない。
  • Substitutionは "/" で始まればドキュメントルートからのパス。名前から始まれば相対パスである。
  • パターンに一致して書き換えられた場合、RewriteBaseがあれば書き換えられたURL(のパス名)は "RewriteBaseの値+<Substitution>" が結果となる。

具体例として、以下のようなディレクトリ、ファイル構成を考える。

/(ドキュメントルート)
├abc.html
├sub
│├.htaccess
│├abc.html
・・
・・
・・

/sub/.htaccess(RewriteBaseとRewriteRurleのみ抜き出したもの)とその場合にURLリライトの結果の表を以下に示す。

例1

RewriteBase /sub/
Rewrite ^test\.html$ abc.html
元のURLのパス名 URLリライトへの
入力
URLリライトの
出力
書き換えられた
URLのパス名
/sub/test.html test.html abc.html /sub/abc.html
/sub/sub2/test.html sub2/test.html パターンに
一致しない
-

例2

RewriteBase /sub/
Rewrite ^.*test\.html$ abc.html
元のURLのパス名 URLリライトへの
入力
URLリライトの
出力
書き換えられた
URLのパス名
/sub/test.html test.html abc.html /sub/abc.html
/sub/sub2/test.html sub2/test.html abc.html /sub/abc.html

例3

Rewrite ^test\.html$ /abc.html
元のURLのパス名 URLリライトへの
入力
URLリライトの
出力
書き換えられた
URLのパス名
/sub/test.html test.html /abc.html /abc.html

April 01, 2015

composerのインストール

関連記事:
[CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加)
[CentOS 6.6]PHP5.5のインストール

Laravelはcomposerというパッケージ管理ツールを使ってインストールするとうことなので、まずcomposerをインストールした。

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

Composer successfully installed to: /root/composer.phar
Use it: php composer.phar
[root@localhost ~]# mv composer.phar /usr/local/bin/composer
[root@localhost ~]# which composer
/usr/local/bin/composer

参考ページ:
CentOS 6.5 + PHP 5.6 + MySQL 5.6 + laravel4 環境を作る(part 2)|OISのブログ|株式会社オリエンタルインフォーメイションサービス
CentOS 6.6 で Laravel4 を使う準備 - Qiita

March 29, 2015

PostgreSQLのインストール その2

関連記事:
PostgreSQLのインストール その1

外部から接続できるようにする

前の記事で同じサーバ上でpsqlからPostgreSQLサーバに接続できたが、このままでは他のマシンからは接続できない。
これを接続でいるようにする。
まず、サーバが他のマシンからの接続を受け入れるように /var/lib/pgsql/data ディレクトリにある postgresql.conf の listen_address を有効にして以下のように設定する。

listen_address = '*'

また、接続の詳細な設定を同じディレクトリの pg_hba.conf に以下を追記する。

host    all         all         192.168.3.0/24        password

この設定は左から接続の種類、DB、ユーザ、IPアドレス、認証方式を示す。
上記の設定の場合、次の意味になる。
・host:TCP/IP接続
・all:すべてのDB
・all:すべてのユーザー
・192.168.3.0/24:ネットワークアドレス
・password:平文のパスワードで認証する

postgresql.conf と pg_hba.conf を上記のように変更したらサーバを再起動する。
#reloadでもいけるだろか?

認証方法をパスワードによる認証を設定したのでユーザにパスワードを設定する必要がある。同じマシン上からならpsqlでサーバに接続できるので、以下のようにPostgreSQLのユーザにパスワードを設定する。

# su - postgres
$ psql mydb
psql (8.4.20)
"help" でヘルプを表示します.

mydb=# alter role pguser with password 'pguser';
ALTER ROLE
mydb=# \q

PostgreSQLの設定の他に、iptablesの設定を変更してPostgreSQLが使う5432番ポートを開ける必要がある。
/etc/sysconfig/iptables に以下を追加し、serviceコマンドでiptablesを再起動する。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

これでホストOS(Windows7)のpsqlやpgadmin IIIからゲストOS(CentOS 6.6)上のPostgreSQLに接続することができる。

参考ページ:
他ホストから接続するための設定
Stray Penguin - Linux Memo (PostgreSQL)
pg_hba.confファイル - 設定ファイル - PostgreSQLの使い方
ユーザにパスワードを設定する - ワレココニイル。
PHP CentOSにおいてPHPからPostgreSQLを操作できるようにする | WEB作業メモ
postgresqlを他ホストからもつなげるようにする - Qiita
コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう | OXY NOTES

March 23, 2015

PostgreSQLのインストール その1

関連記事:
yumコマンド
PostgreSQLのコマンドラインクライアントpsql

インストール

PHP 5.3.3 のインストールを参考に、パッケージグループでインストールしてみた。
まず、パッケージグループを調べる。

# yum -v grouplist | grep postgres
   PostgreSQL データベースサーバー (postgresql)
   PostgreSQL データベース接続クライアント (postgresql-client)
# yum groupinfo postgresql
読み込んだプラグイン:downloadonly, fastestmirror, refresh-packagekit
グループ処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp

グループ: PostgreSQL データベースサーバー
 説明: PostgreSQL データベースサーバーと関連パッケージ
 強制的なパッケージ:
   postgresql-server
 標準パッケージ:
   postgresql-docs
 オプション パッケージ:
   postgresql-contrib
   postgresql-plperl
   postgresql-plpython
   postgresql-pltcl
   postgresql-test
   rhdb-utils

とりあえずサーバの方のパッケージグループをインストール。

# yum -y groupinstall postgresql
<中略>
依存性を解決しました

================================================================================
 パッケージ               アーキテクチャ
                                        バージョン            リポジトリー
                                                                           容量
================================================================================
インストールしています:
 postgresql-docs          x86_64        8.4.20-1.el6_5        base        6.9 M
 postgresql-server        x86_64        8.4.20-1.el6_5        base        3.4 M
依存性関連でのインストールをします。:
 postgresql               x86_64        8.4.20-1.el6_5        base        2.6 M
 postgresql-libs          x86_64        8.4.20-1.el6_5        base        201 k
<中略>
インストール:
  postgresql-docs.x86_64 0:8.4.20-1.el6_5                                       
  postgresql-server.x86_64 0:8.4.20-1.el6_5                                     

依存性関連をインストールしました:
  postgresql.x86_64 0:8.4.20-1.el6_5   postgresql-libs.x86_64 0:8.4.20-1.el6_5  

完了しました!
# id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
# which psql
/usr/bin/psql

依存関係からサーバだけでなくクライアント(psql)もインストールされた。
また、postgres というユーザとグループが作成されていた。

サービスの起動

参考ページの「3. PostgreSQL を使ってみる」をやってみた。

まず、Linuxのアカウントを新たに1つ作る。
#意味は考えずに、とりあえず作った。

# useradd pguser

次にサービスを起動しようとしたが、失敗。

# service postgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [失敗]

エラーメッセージの中に書かれている "service postgresql initdb" を実行してみる。すると、空だった /var/lib/pgsql/data/ ディレクトリの中に設定ファイルなどができていた。
そしてサービスの起動を試みると、今度は成功。

# service postgresql initdb
データベースを初期化中:                                    [  OK  ]
# ls /var/lib/pgsql/
backups  data  pgstartup.log
# ls /var/lib/pgsql/data/
PG_VERSION  pg_clog        pg_log        pg_subtrans  pg_xlog
base        pg_hba.conf    pg_multixact  pg_tblspc    postgresql.conf
global      pg_ident.conf  pg_stat_tmp   pg_twophase
# cat /var/lib/pgsql/data/PG_VERSION 
8.4
# service postgresql start
postgresql サービスを開始中:                               [  OK  ]

ロールとDBの作成

Linuxのアカウントを postgres に切り替えて、"psql -l" でDBを確認。初期状態で postgres, template0, template1 の3つのDBがある。
エンコーディングはデフォルトでUTF-8なんだな。SJISじゃなくてよかった。

# su - postgres
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |    
  アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(3 行)

createuserコマンドでPostgreSQLのロールを作成する。ロールとはユーザーだと思えばいいらしい。
ロールの名前は先ほど作ったLinuxのアカウントと同じ pguser として、データベース作成権限を付与。

$ createuser pguser
新しいロールをスーパーユーザとしますか?  (y/n)n
新しいロールにデータベース作成権限を与えますか? (y/n)y
新しいロールにロールを作成する権限を与えますか? (y/n)n

Linuxのアカウントを pguser に切り替えて、createdbコマンドでDBを新規作成。アカウントを切り替えるのはDBの所有者を pguser にするため。
"psql -l" でDBを確認すると、所有者が pguser の新しいDB mydb ができていた。

$ exit
logout
# su - pguser
$ createdb mydb
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |    
  アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 mydb      | pguser   | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)

pguserのままで psql から mydb に接続できた。アカウントが postgres でも接続できたが、root できなかった。

$ psql mydb
psql (8.4.20)
"help" でヘルプを表示します.

mydb=> \du
                ロール一覧
 ロール名 |        属性        | メンバー 
----------+--------------------+----------
 pguser   | DBを作成できる     | {}
 postgres | スーパーユーザ     | {}
          : ロールを作成できる   
          : DBを作成できる       

今回、ロールを作る前に同じ名前のユーザーアカウントをLinuxに作った。こういうのをIdent認証というらしい。
Linuxのアカウントと関係なくロールを作る方法もあると思うので、いずれ調べたい。

ログファイルの設定

ログファイルはデフォルトで /var/lib/pgsql/data/pg_log ディレクトリに
postgresql-<3文字の曜日>.log
という形式のファイル名に記録される。曜日はPostgreSQLを起動した曜日。また、ログの内容にその事象が発生した日時が記載されない。
#ファイル名といい日時が記載されないことといい、変なデフォルト設定だな。
日時はあったほうが良さそうなので、postgresql.conf を修正。
log_line_prefix という項目が # でコメントアウトされているので、# を削除し、下記のように書き換えた。
それから"service postgresql reload" で設定を再読み込みすると、ログに日時が記録されるようになる。

log_line_prefix = '%t %d[%p-%l]'

参考ページ:
CentOS で PostgreSQL を使ってみよう!(1) - Let's Postgres

March 08, 2015

.htaccessの有効化とサブディレクトリのアクセス制御

関連記事:
.htaccessでBASIC認証
BASIC認証の設定のAuthNameとRequire

.htaccessを有効にする

/var/www/html がドキュメントルートの場合、ディレクティブの中のAllowOverrideを All に変更すると、.htaccess が使えるようになる。
ただし All にすると .htaccess で何でも出来てしまうので、.htaccess で許可する内容に応じた値にするべきである(参考ページ3,4)。

<Directory "/var/www/html">

    AllowOverride All

</Directory>

サブディレクトリ・サブディレクトリの特定のファイルのBASIC認証を解除する

あるディレクトリにBASIC認証がかかっていて、サブディレクトリやサブディレクトリ内の特定のファイルは認証なしにしたい場合の例を以下に示す。
以下のディレクトリ構成・ファイル配置で、testディレクトリには .htaccess でBASIC認証がかかっている。

test
├.htaccess
├sub1
│└sub1_1.html
├sub2
│├.htaccess
│└sub2_1.html
├sub3
│├.htaccess
│└sub3_1.html
├sub4
│├.htaccess
│├sub4_1.html
│└sub4_2.html
└sub5
  ├.htaccess
  ├sub5_1.html
  │sub5_2.html
  └sub5_3.html

sub1 は .htaccess がなく、親ディレクトリと同様にBASIC認証がかかる。 sub1以外のtestのサブディレクトリにはそれぞれ .htaccess がある。

test/sub2/.htaccess

Satisfy any
Order Allow,Deny
Allow from all

test/sub2 は認証無しになる。
1行目が "Satisfy any" なので、
・「testディレクトリで設定されているBASIC認証」または「"Satisfy any" の下に記述された条件」
を満たせばアクセスが許可される。
2行目以下ですべてのアクセスを許可しているので、結果として test/sub2 は認証がかからない。

test/sub3/.htaccess

Deny from all

test/sub3 はアクセスが許可されない。
Satisfyディレクティブがないので Satsify all と同じ意味となり、
・「testディレクトリで設定されているBASIC認証」かつ「test/sub3/.htaccess に記述された条件」
を満たせばアクセスが許可される。
test/sub3/.htaccessではすべてのアクセスを拒否しているので、結果として test/sub3 にはアクセス不可となる。

test/sub4/.htaccess

<Files "sub4_1.html">
    Satisfy any
    Order Allow,Deny
    Allow from all
</Files>

test/sub4ディレクトリの sub4_1.html は認証なし、sub4_2.html は認証ありとなる。
<Files>ディレクティブで指定されたファイルに対して内部に書かれたディレクティブが適用される。
この場合、sub4_1.html だけ無条件でアクセス許可となる。

test/sub5/.htaccess

<FilesMatch "sub5_[12]\.html">
    Satisfy any
    Order Allow,Deny
    Allow from all
</FilesMatch>

test/sub5ディレクトリの sub5_1.html と sub5_2.html は認証なし、sub5_3.html は認証ありとなる。
<FilesMatch>ディレクティブは<Files>ディレクティブと同様に適用範囲を制限する。違いは指定に正規表現を使う点である。

参考ページ:
1..htaccessを有効にする-独学!未経験からWebデザイナーになる!!
2.特定のファイル・ディレクトリのアクセスを拒否する-独学!未経験からWebデザイナーになる!!
3.DokuWikiのインストール (CentOS 6.5) : Unix系技術情報備忘録
4.Apacheサーバー構築法 - 第5回 設定を上書きする「.htaccess」:ITpro
5..htaccessでアクセス制限
6.core - Apache HTTP サーバ バージョン 2.2
7.サブディレクトリで特定のファイル以外のBasic認証を解除する - IMPOV::In My Point Of View
8.ミケネコの htaccess リファレンス
9.コンテナ指示子

March 01, 2015

[CentOS 6.6]VirtualBoxのGuest Additionsをアップデート

関連記事:
[CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加)

PHP5.5のインストール

EPEL、REMIリポジトリを追加したのにいよいよインストール。
既存のリポジトリを無効にしなければいけないと書いてあるサイトもあったが、そんなこともなく、以下のようにインストールできた。

# yum --enablerepo=remi --enablerepo=remi-php55 install php php-gd php-pdo php-xml
読み込んだプラグイン:downloadonly, fastestmirror, refresh-packagekit
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * remi: remi.kazukioishi.net
 * remi-php55: remi.kazukioishi.net
 * updates: www.ftp.ne.jp
依存性の解決をしています
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ
                               バージョン                  リポジトリー    容量
================================================================================
インストールしています:
 php                x86_64     5.5.21-1.el6.remi           remi-php55     2.6 M
 php-gd             x86_64     5.5.21-1.el6.remi           remi-php55      72 k
 php-pdo            x86_64     5.5.21-1.el6.remi           remi-php55     112 k
 php-xml            x86_64     5.5.21-1.el6.remi           remi-php55     208 k
依存性関連でのインストールをします。:
 gd-last            x86_64     2.1.1-1.el6.remi            remi           135 k
 libXpm             x86_64     3.5.10-2.el6                base            51 k
 php-cli            x86_64     5.5.21-1.el6.remi           remi-php55     3.7 M
 php-common         x86_64     5.5.21-1.el6.remi           remi-php55     1.0 M
 php-pear           noarch     1:1.9.5-3.el6.remi          remi           375 k
 php-pecl-jsonc     x86_64     1.3.6-1.el6.remi.5.5.1      remi-php55      47 k
 php-pecl-zip       x86_64     1.12.4-1.el6.remi.5.5       remi-php55     269 k
 php-process        x86_64     5.5.21-1.el6.remi           remi-php55      57 k
 t1lib              x86_64     5.1.2-6.el6_2.1             base           160 k

トランザクションの要約
================================================================================
インストール        13 パッケージ
(中略)
完了しました!

とりあえずphp本体の他に php-gd、php-pdo、php-xml をパラメータとして指定した。依存関係からpearなどもインストールされた。

php-mcryptのインストール

Laravelには php-mcrypt が必要というのでインストールしようとしたが、すんなりとはいかなかった。
php本体と同様にインストールしようとしたら、「libmcryptが必要」というエラーが出た。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
エラー: パッケージ: php-mcrypt-5.5.22-1.el6.remi.x86_64 (remi-php55)
             要求: libmcrypt.so.4()(64bit)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

標準のリポジトリやREMIに libmcrypt はなかったが、EPELにあったのでインストール。
何かワーニング出たけどインストールできた。

# yum --enablerepo=epel install libmcrypt.x86_64
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ  バージョン              リポジトリー   容量
================================================================================
インストールしています:
 libmcrypt          x86_64          2.5.8-9.el6             epel           96 k

(中略)
パッケージをダウンロードしています:
libmcrypt-2.5.8-9.el6.x86_64.rpm                         |  96 kB     00:00     
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6) <epel@fedoraproject.org>
 Package: epel-release-6-8.noarch (@extras)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
(中略)
インストール:
  libmcrypt.x86_64 0:2.5.8-9.el6                                                

完了しました!

それからphp-mcryptをインストールする。今度はエラーとならずに完了。同時にphp自体も5.5.21から5.5.22にアップデートされた。
#PHP5.5のインストールは実は先週行ったので、1週間の間に新しいバージョンが出たようだ。
libmcryptのインストール時の警告は気になるが、とりあえずこの状態からlarabelのインストールを目指そう。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
依存性を解決しました

================================================================================
 パッケージ        アーキテクチャ
                                バージョン               リポジトリー      容量
================================================================================
インストールしています:
 php-mcrypt        x86_64       5.5.22-1.el6.remi        remi-php55        43 k
依存性関連での更新をします。:
 php               x86_64       5.5.22-1.el6.remi        remi-php55       2.6 M
 php-cli           x86_64       5.5.22-1.el6.remi        remi-php55       3.7 M
 php-common        x86_64       5.5.22-1.el6.remi        remi-php55       1.0 M
 php-gd            x86_64       5.5.22-1.el6.remi        remi-php55        72 k
 php-pdo           x86_64       5.5.22-1.el6.remi        remi-php55       112 k
 php-process       x86_64       5.5.22-1.el6.remi        remi-php55        57 k
 php-xml           x86_64       5.5.22-1.el6.remi        remi-php55       208 k
(中略)
インストール:
  php-mcrypt.x86_64 0:5.5.22-1.el6.remi                                         

依存性を更新しました:
  php.x86_64 0:5.5.22-1.el6.remi         php-cli.x86_64 0:5.5.22-1.el6.remi     
  php-common.x86_64 0:5.5.22-1.el6.remi  php-gd.x86_64 0:5.5.22-1.el6.remi      
  php-pdo.x86_64 0:5.5.22-1.el6.remi     php-process.x86_64 0:5.5.22-1.el6.remi 
  php-xml.x86_64 0:5.5.22-1.el6.remi    

完了しました!

2015/05/07追記
Laravelにはphp-mbstringも必要だった。php-mbstringをインストールしたときの記事は以下。
Laravelのインストール

参考ページ:
CentOS6.x - CentOS6.6に php5.5をインストールしてみる。 - Qiita
【CentOS, PHP】CentOSへのPHP5.5, MySQL5.6環境の構築 - Qiita
CentOS 6.5 にphp5.5とMySQL5.6をyumでインストールする - Qiita
CentOS6.5にPHP5.5をインストールする - inari blog (@inari111)
CentOS 6.6 LAMPサーバ インストールメモ【CentOS6.6+Apache+MySQL+PHP】 | あぱーブログ
Laravel - The PHP Framework For Web Artisans
CentOSでlibmcryptをインストール | Me-ISM

February 22, 2015

[CentOS 6.6]PHP5.5のインストール

関連記事:
[CentOS 6.6]PHP5.5のインストール準備(EPEL、REMIリポジトリの追加)

PHP5.5のインストール

EPEL、REMIリポジトリを追加したのにいよいよインストール。
既存のリポジトリを無効にしなければいけないと書いてあるサイトもあったが、そんなこともなく、以下のようにインストールできた。

# yum --enablerepo=remi --enablerepo=remi-php55 install php php-gd php-pdo php-xml
読み込んだプラグイン:downloadonly, fastestmirror, refresh-packagekit
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * remi: remi.kazukioishi.net
 * remi-php55: remi.kazukioishi.net
 * updates: www.ftp.ne.jp
依存性の解決をしています
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ
                               バージョン                  リポジトリー    容量
================================================================================
インストールしています:
 php                x86_64     5.5.21-1.el6.remi           remi-php55     2.6 M
 php-gd             x86_64     5.5.21-1.el6.remi           remi-php55      72 k
 php-pdo            x86_64     5.5.21-1.el6.remi           remi-php55     112 k
 php-xml            x86_64     5.5.21-1.el6.remi           remi-php55     208 k
依存性関連でのインストールをします。:
 gd-last            x86_64     2.1.1-1.el6.remi            remi           135 k
 libXpm             x86_64     3.5.10-2.el6                base            51 k
 php-cli            x86_64     5.5.21-1.el6.remi           remi-php55     3.7 M
 php-common         x86_64     5.5.21-1.el6.remi           remi-php55     1.0 M
 php-pear           noarch     1:1.9.5-3.el6.remi          remi           375 k
 php-pecl-jsonc     x86_64     1.3.6-1.el6.remi.5.5.1      remi-php55      47 k
 php-pecl-zip       x86_64     1.12.4-1.el6.remi.5.5       remi-php55     269 k
 php-process        x86_64     5.5.21-1.el6.remi           remi-php55      57 k
 t1lib              x86_64     5.1.2-6.el6_2.1             base           160 k

トランザクションの要約
================================================================================
インストール        13 パッケージ
(中略)
完了しました!

とりあえずphp本体の他に php-gd、php-pdo、php-xml をパラメータとして指定した。依存関係からpearなどもインストールされた。

php-mcryptのインストール

Laravelには php-mcrypt が必要というのでインストールしようとしたが、すんなりとはいかなかった。
php本体と同様にインストールしようとしたら、「libmcryptが必要」というエラーが出た。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
エラー: パッケージ: php-mcrypt-5.5.22-1.el6.remi.x86_64 (remi-php55)
             要求: libmcrypt.so.4()(64bit)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

標準のリポジトリやREMIに libmcrypt はなかったが、EPELにあったのでインストール。
何かワーニング出たけどインストールできた。

# yum --enablerepo=epel install libmcrypt.x86_64
(中略)
依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ  バージョン              リポジトリー   容量
================================================================================
インストールしています:
 libmcrypt          x86_64          2.5.8-9.el6             epel           96 k

(中略)
パッケージをダウンロードしています:
libmcrypt-2.5.8-9.el6.x86_64.rpm                         |  96 kB     00:00     
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6) <epel@fedoraproject.org>
 Package: epel-release-6-8.noarch (@extras)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
(中略)
インストール:
  libmcrypt.x86_64 0:2.5.8-9.el6                                                

完了しました!

それからphp-mcryptをインストールする。今度はエラーとならずに完了。同時にphp自体も5.5.21から5.5.22にアップデートされた。
#PHP5.5のインストールは実は先週行ったので、1週間の間に新しいバージョンが出たようだ。
libmcryptのインストール時の警告は気になるが、とりあえずこの状態からlarabelのインストールを目指そう。

# yum --enablerepo=remi --enablerepo=remi-php55 install php-mcrypt
(中略)
依存性を解決しました

================================================================================
 パッケージ        アーキテクチャ
                                バージョン               リポジトリー      容量
================================================================================
インストールしています:
 php-mcrypt        x86_64       5.5.22-1.el6.remi        remi-php55        43 k
依存性関連での更新をします。:
 php               x86_64       5.5.22-1.el6.remi        remi-php55       2.6 M
 php-cli           x86_64       5.5.22-1.el6.remi        remi-php55       3.7 M
 php-common        x86_64       5.5.22-1.el6.remi        remi-php55       1.0 M
 php-gd            x86_64       5.5.22-1.el6.remi        remi-php55        72 k
 php-pdo           x86_64       5.5.22-1.el6.remi        remi-php55       112 k
 php-process       x86_64       5.5.22-1.el6.remi        remi-php55        57 k
 php-xml           x86_64       5.5.22-1.el6.remi        remi-php55       208 k
(中略)
インストール:
  php-mcrypt.x86_64 0:5.5.22-1.el6.remi                                         

依存性を更新しました:
  php.x86_64 0:5.5.22-1.el6.remi         php-cli.x86_64 0:5.5.22-1.el6.remi     
  php-common.x86_64 0:5.5.22-1.el6.remi  php-gd.x86_64 0:5.5.22-1.el6.remi      
  php-pdo.x86_64 0:5.5.22-1.el6.remi     php-process.x86_64 0:5.5.22-1.el6.remi 
  php-xml.x86_64 0:5.5.22-1.el6.remi    

完了しました!

2015/05/07追記
Laravelにはphp-mbstringも必要だった。php-mbstringをインストールしたときの記事は以下。
Laravelのインストール

参考ページ:
CentOS6.x - CentOS6.6に php5.5をインストールしてみる。 - Qiita
【CentOS, PHP】CentOSへのPHP5.5, MySQL5.6環境の構築 - Qiita
CentOS 6.5 にphp5.5とMySQL5.6をyumでインストールする - Qiita
CentOS6.5にPHP5.5をインストールする - inari blog (@inari111)
CentOS 6.6 LAMPサーバ インストールメモ【CentOS6.6+Apache+MySQL+PHP】 | あぱーブログ
Laravel - The PHP Framework For Web Artisans
CentOSでlibmcryptをインストール | Me-ISM

December 2016
Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof