2016年10月28日金曜日

awsにおけるcakephpの設定

git cloneであるcakephp2のプロジェクトをawsのweb rootに追加したが、top以外のところにアクセスできない。以下のメッセージがでてきている。

URL rewriting is not properly configured on your server.

とりあえずcakephpのマニュアルを参照、httpd.conf(/etc/httpd/confの下)を一行修正したところ、上記メッセージが消えてないが、アクセスできるようになった


<Directory "/var/www/html">
    AllowOverride All #none->All
</Directory>

2016年10月27日木曜日

AWS Amazon Liunx上phpmyadminをインストール

1)composerをインストール
sudo curl -sS https://getcomposer.org/installer | sudo php
sudo mv composer.phar /usr/local/bin/composer
sudo ln -s /usr/local/bin/composer /usr/bin/composer

2)phpmyadminをdownload
composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev

chmod -R 0755 phpmyadmin

3)Apacheを設定
sudo vi /etc/httpd/conf.d/phpmyadmin.conf

Alias /phpmyadmin "/var/www/phpmyadmin" #phpmyadminの場所
<Directory "/var/www/phpmyadmin" >
Order allow,deny
Allow from all #すべてのipからアクセスできる
</Directory>

4)apacheを再起動
sudo service httpd restart
sudo service mysqld restart

5)http://{ipaddress}/phpmyadmin/にアクセスしてもな
sudo less /etc/httpd/logs/error_log でエラーを調べたところ、

PHP Fatal error:  Uncaught Error: Call to undefined function mb_detect_encoding() in /var/www/phpmyadmin/libraries/php-gettext/gettext.inc ......

以下のパッケージをインスタール
sudo yum install php70-mbstring

6)再度httpdを再起動した、OK
sudo service httpd restart

Amazon Linux への LAMPインストール

1)すべてのソフトウェアパッケージが最新の状態に
sudo yum update -y

2)インストール
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

3)Apache ウェブサーバーを起動
sudo service httpd start

4)システムがブートするたびに Apache ウェブサーバーが起動するように設定
sudo chkconfig httpd on

確認するには、
chkconfig --list httpd

5)awsのインスタンスにHTTPルールをセキュリティグループに追加


6)インスタンスのパブリック DNS アドレス(またはパブリック IP アドレス)を入力すると、Apache テストページが表示される

7) Apache ドキュメントルート/var/www/htmlをwww グループに所有権を与える
sudo groupadd www
sudo usermod -a -G www {username}

再ログインし、グループを確認
groups

/var/ とそのコンテンツのグループ所有権を www グループに変更
sudo chown -R root:www /var/www


8)よく分からないが、公式マニュアル通り、以下を実行した
「/var/www およびそのサブディレクトリのディレクトリ許可を変更してグループの書き込み許可を設定し、将来のサブディレクトリにグループ ID を設定します。」
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;

「/var/www およびそのサブディレクトリのファイル許可を繰り返し変更してグループの書き込み許可を追加します。」
find /var/www -type f -exec sudo chmod 0664 {} \;

9)mysqlサーバーを起動、mysql rootのパスワードを設定
sudo service mysqld start
sudo mysql_secure_installation

10)ブート時にMySQL サーバーを起動させる
sudo chkconfig mysqld on

【参考ページ】
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html

AWS上仮想マシーンの作成と初期設定

1)仮想マシーンを作成
AWSの無料アカウントを取得したあと、EC2仮想マシーンを作成し、sshでログインためのpublic keyを生成します。
SUSE Linuxのインスタンスを作成し、うまくログインできなかったため、Amazon Linuxのインスタンスを作成した。

2)sshでログイン
Amazon Linuxのdefault userは「ec2-user」で、作成したpublic keyでログインできた。

3)rootパスワードの設定
sudo passwdで設定できた。

4)password方式でsshログイン
key方式は面倒のため、passwordでもsshログインできるように、rootになってから

vi /etc/ssh/sshd_config

「PasswordAuthentication yes」にして、sshdを再起動

/etc/init.d/sshd restart

5)新しいユーザーを追加、パスワードを設定
useradd {username}
passwd {username}

6)新しいユーザーがsudoを使えるように設定
visudo

2016年10月24日月曜日

cakephp2におけるHABTM関係要素の検索


ProjectとSkill, AreaはHABTMの関係となっています。Skill, AreaでProjectを検索するには、条件には「joins」を定義してあげないと、SQLがエラーになります。hasOne/hasMany/belongsToなら、不要ですが。

if ($this->request->is('post')) {
            $areas = $this->request['data']['area'];
            $skills = $this->request['data']['Project']['Skill'];
            $industries = $this->request['data']['Project']['Industry'];//IndustryはhasMany Project

            $opt_area = array('OR' => array('Area.id' => $areas));//OR条件検索
            $opt_skill = array('OR' => array('Skill.id' => $skills));
            $opt_industry = array('OR' => array('Industry.id' => $industries));

            $opt = array($opt_area, $opt_skill, $opt_industry);//default AND条件検索

$this->Paginator->settings = array(
                'conditions' => $opt,
                'recursive' => 1,
                'group' => array('Project.id'),
                'joins' => array(
                    array('table' => 'areas_projects',
                        'alias' => 'AreasProject',
                        'type' => 'inner',
                        'conditions' => array(
                            'Project.id = AreasProject.project_id',
                        )
                    ),
                    array(
                        'table' => 'areas',
                        'alias' => 'Area',
                        'type' => 'inner',
                        'conditions' => array(
                            'AreasProject.area_id = Area.id',
                        ),
                    ),
                     array('table' => 'skills_projects',
                         'alias' => 'SkillsProject',
                         'type' => 'inner',
                         'conditions' => array(
                             'Project.id = SkillsProject.project_id',
                         )
                     ),
                    array(
                        'table' => 'skills',
                        'alias' => 'Skill',
                        'type' => 'inner',
                        'conditions' => array(
                            'SkillsProject.skill_id = Skill.id',
                        ),
                    ),

$projects = $this->Paginator->paginate('Project');

2016年10月14日金曜日

cloud9でmysql/phpmyadminの使用

シェルで
mysql-ctl start
phpmyadmin-ctl install

https://{app_address}/phpmyadmin  にアクセス