tasukentのブログ

Objective-c、PHP、Javaとか色々試してアウトプットしていきます。

Cordovaを用いてハイブリットアプリを開発をはじめた

ゴール

Cordovaを用いたハイブリットアプリの開発環境を整える

Cordovaとは?

  • 一言でまとめると
    • Apache Cordova is a platform for building native mobile applications using HTML, CSS and JavaScript
  • About Apache Cordova™から要点を抜き出すと
    • web technologies are used, and they are hosted in the app itself locally
    • Cordova provides a set of uniform JavaScript libraries that can be invoked, with device-specific native backing code for those JavaScript libraries
  • 歴史的には

下準備

  1. AndroidStudioをインストール
  2. JVMのインスール
    • JVMがない場合、AndroidStudioを開いたときにインスールしてね!とメッセージが出るのでそこからインストールするのが早い。
  3. ADT Pluginをインストール
    • AndroidStudioの初回起動で言われた通りに進めれば入る
  4. node.jsをインストール
  5. 確認
$ java -version
  java version "1.6.0_65"
  Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
  Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)  
$ node -v
  v0.10.25
$ git --version
  git version 2.3.2 (Apple Git-55)
  1. パーミッション変更
sudo chown -R $(whoami) /usr/local

Cordovaの準備

  • Cordovaのインストール
    • 以下コマンドを実行(git必要)
$ sudo npm install -g cordova

シンボリックリンクはここに貼られている感じ

  /usr/local/bin/cordova ->/usr/local/lib/node_modules/cordova/bin/cordova
  • 環境変数PATHを追加
    • AndroidSDKのtoolsとplatform-toolsにPATHを通す必要性があるので.bash_profileに追加。以下をわすれずにー。
$ source ~/.bash_profile

確認は以下で

$ android -h

       Usage:
       android [global options] action [action options]
       Global options:
  -h --help       : Help on a specific command.
$ adb version
Android Debug Bridge version 1.0.32

プロジェクトを作成する

  • git管理かのディレクトリで以下コマンドでcordovaプロジェクトを作成。
cordova create timer_demo  com.nifty.timer_demo TimerDemo -d

「timer_demoディレクトリを作りその配下にcom.nifty.timer_demoというアプリ識別子をもつTimerDemoという名前のアプリのプロジェクトを作成する」という感じ。

$ cordova platform add android
Adding android project...
Creating Cordova project for the Android platform:
    Path: platforms/android
    Package: com.nifty.timer_demo
    Name: TimerDemo
    Activity: MainActivity
    Android target: android-22
Copying template files...
$ cordova platform add ios
Adding ios project...
iOS project created with cordova-ios@3.8.0
Installing "cordova-plugin-whitelist" for ios

実行してみる

$ cordova emulate android
$ cordova emulate ios
ios-sim was not found. Please download, build and install version 3.0.0 or greater from https://github.com/phonegap/ios-sim into your path. Or 'npm install -g ios-sim' using node.js: http://nodejs.org
Error: /Users/OKD/sandbox/ffa500.github.io/sandbox/timer_demo/platforms/ios/cordova/run: Command failed with exit code 2

エミュレーターがないよ!と言われるので言われた通りにインストールする。 せっかくnodeがあるので以下で。emulateを再実行すれば起動確認できる。

$ npm install -g ios-sim

エミュレーターで確認完了

Atom + Git + Monaca LocalKit + Monacaデバッガーでチーム開発を始める人へ

ゴール

Atom + Git + Monaca LocalKit + Monacaデバッガーで開発できる状態を整える

Atomを準備

Atomを利用するメリット

  • ブラウザベースなのでHTML、JS、CSSの開発に最適
  • HTML+CSSのライブプレビューができるのでMonacaでの開発と相性がいい
  • プラグインを入れなくても高機能

手順

  1. Atomエディタのインストール
  2. プラグインパッケージの追加
    • Atom > Preferences を選択
    • SettingsのInstallを選択して以下のパッケージをインストール
      • file-icons
        • ファイルの横にファイルアイコンをつけてくれる
      • Term2
        • ターミナルをatomエディタ内で開いてくれる。gitを使うときに便利だが、日本語が入力できないことが難点。途中で使わなくなるかも
      • Script
        • atom上でScriptを実行してくれる
      • highlight Tips
        • 全角スペースを◽︎で表示してくれる
      • project-manager
        • 開いているプロジェクトを保存して次回起動時に呼び出したりできる
      • Japanese Wrap
        • ウィンドウのサイズによって日本語の折り返しなどをよしなにしてくれる
      • atom-html-preview
        • atomではデフォルトでHTMLのライブプレビュー機能が利用できる(control + Shift + m)が、デフォルトだとHTML上で読み込んでいるCSSは読み込んでくれない

MonacaデバッガーとMonaca LocalKitを準備

手順

  1. Monaca LocalKitをインストール
    • OSのバージョンによって開発者が不明となり開けないので環境設定>セキュリティとプライバシー>一般からダウンロードしたアプリケーションの実行を許可してあげる(体験版で30日しかフル機能を利用できないらしいが問題なさそう)
  2. リモートIDEからプロジェクトをインポート
    • Monaca LocalKitを開くとプロジェクト一覧には何も表示されていない状態なので、+ > インポート > クラウドIDEからインポートを選択しサンプルプロジェクトをインポートする
    • プロジェクトを選択し、作業ディレクトリを指定して「インポート」[^1]
  3. 実機(Monaca デバッガー)とペアリングをする
    • iPnoneをPCと同じWifiに接続する
    • Monaca デバッガーを起動する
      • 「新しいコンピーターが見つかりました」のアラートビューが出るのでペアリングを選択
    • ペアリング完了
  4. ファイル編集
    • インポートしたローカルのプロジェクトを好きなエディタで開いて編集
    • エディタ上で保存するとSyncしているMonaca デバッガーがリスタートされ即時実機に反映される

ペアリングできないとき

  1. Monaca デバッガーのスタートメニューを起動
  2. メニュー > ローカルコンピューターを選択
  3. 「コンピューターを手動追加する」を選択
  4. PCのローカルIPアドレス調べる
    • ターミナルでifconfig en0 と打ってEthernet(en0)のinet(IPv4アドレス)を確認
    • 上記で確認したIPアドレスを入力
    • portはMonaca LocalKitでMonaca LocalKit>設定で待ち受けポートで入力されているポートを入力する
    • Pairを選択してペアリング確認

Gitを準備

  1. GitHubリポジトリを作る
  2. .git/configで設定を変更してローカルのディレクトリと同期する

Monacaのプロジェクトを作成

  1. MonacaLocalKitでCommand + nでMonacaプロジェクト作成
  2. 作業ディレクトリをGitの準備で作成した配下に設定し、テンプレートはOnsen UI Master-Detailにする(Git管理下のrootディレクトリだと作成できなかった...)

参考

新米エンジニアが押させえておくべきデータベースのいろは

ゴール

  1. DBの種類と特徴を抑える
  2. 用途に応じてDBを考えられるようになる

データベースとデータベース管理システム

「データベース」とは

複数の応用目的で共有を意図して組織的かつ永続的に格納されたデータ群」のことを指す。すこし崩すと、対象とする実世界の状態や構造を表現すべくデータを「体系的」に「組織化」したものがデータベース

「データベース管理システム(DBMS)」とは

データ群を管理し利用しやすくするためのソフトウェアをデータベース管理システム(Database management system,DBMS)と呼ぶ ぶっちゃけDBMSとかもDBに包含して使っていたりするがそっちの方が伝わるのでいいかなと

DBSの発端

DBMSDBMSで管理されるデータベースを一体として捉えたものがデータベースシステム(DBS) 大量のデータを永続化する手段としてはOSより提供されているファイルシステムがあるが以下が問題点となりDBSが開発された模様

  1. データとアプリケーションの相互依存
    • ファイルシステムだとデータの格納やアクセス方法をアプリケーションを意識しないといけない
  2. 整合性維持機能の欠如
    • データの整合性を保つ制約を認識させる機能がない。アプリケーション任せ
  3. 不十分な機密保護
    • ファイルのアクセス権限は付けられるが、そのファイルの中の一部のデータに権限管理することはできない
  4. 複数ユーザの同時アクセス
    • 同時に書き込んだらおかしなことになる。回避する機能は提供されているが、アプリケーション任せ
  5. 不十分な障害時データ保護

DBMSの種類

RDBMS(Relational DataBase Management System)

データベースをリレーション(関係)の集まりとしてモデル化して管理しており、ACID特性をもつ

  • 特徴
    • トランザクションによりデータの一貫性が保証できる
    • 正規化により更新コストが削減できる
    • データ改ざんなどに対してセキュリティが強固
    • 細かなチューニングが可能
    • ナレッジが多い
    • SQLにより柔軟かつ複雑な検索・変更ができる

NoSQL(Not only SQL

  • 非リレーショナルな分散データベースシステム。RDBMSじゃない方
  • 読み書きが非常に高速で柔軟性がある

代表的なRDBMSとその特徴

MySQL

oracle社が管理しているオープンソース製品

  • 特徴
    • 機能は多くないがその分シンプルで早い
    • マルチユーザ対応でWebアプリケーショントとの親和性が高い
    • マルチスレッド
    • 多様な開発言語のAPIが用意されている
  • ライセンス
    • 非商用利用の場合無償
    • 有償のEnterprise Serverも用意されている

PostgreSQL

BSDライセンスのORDBMS(オブジェクトリレーショナルデータベース管理システム

Oracle Database

oracle社が開発・販売しているRDBMS

  • 特徴
    • 完全な行レベルの占有ロックが可能
    • 読み取り一貫性が保証されている
    • UNDO表領域を使って同時実行性とデータの一貫性を確保している
  • ライセンス
    • 有料(16万〜500万円くらい)

SQLite

パブリックドメインな軽量RDBMS

  • 特徴
    • アプリケーションに組み込んで利用されることを想定している
    • Android端末の標準ライブラリとして採用されている
    • ver3.8.11よりFTS5を利用した全文検索機能が導入された。

その他RDBMS

NoSQLの種類

KVS(Key-Value sotre型)

キーと、格納したいデータを紐付け、キーを指定することでそれに対応したデータを格納/取得する。読み書きが非常に高速だが、複雑な検索処理には向いていない

列指向型(テーブル指向型)

列データをファイルシステム上の連続した位置に格納することによって、大量の行に対する少数の列の集約処理や、同一の値をまとめるデータ圧縮などを効率的に行う。大量のデータを対象とした分析やデータマイニングなど適している

  • DBMS
    • Cassandra
      • Amazon Dynamoの分散ハッシュテーブルと、Google Big Tableの列指向データモデルを取り入れて設計された
      • 導入例:Hulu,Digg,facebook,Twitter
    • HBase
      • 負荷に対して非常に高いスケーラビリティと性能を発揮(Hadoop上に構築する)
      • ランダムアクセス、シーケンシャルアクセス共に低レイテンシで行える
      • write性能を重視している
      • 導入例:Facebook Messages

ドキュメント指向型

XMLJSONなどのように半構造化されたドキュメントデータの格納し、各ドキュメントに一意のキーを割り当てることで管理をする。スケーラビリティが高く、サーバを追加しやすい

グラフ指向型

ノード、エッジ、プロパティから構成されるグラフ構造でデータを格納する。データ同士の複雑な関連性を表現できることに強みがある。頻繁に更新される大量の非構造化データを扱う場合に向いている

2015年8月度DBランキング

TOP10(出典:DB-Engines Ranking)

ここは月一回で更新されるのでウォッチしておくと良いかも

Rank DBMS Database Model Score (Aug 2015) DIFF(Jul 2015)
1. Oracle Relational DBMS 1453.02 -3.70
2. MySQL Relational DBMS 1292.03 +8.69
3. Microsoft SQL Server Relational DBMS 1108.66 +5.60
4. MongoDB Document store 294.65 +7.26
5. PostgreSQL Relational DBMS 281.86 +9.04
6. DB2 Relational DBMS 201.23 +3.12
7. Microsoft Access Relational DBMS 144.20 -0.10
8. Cassandra Wide column store 113.99 +1.28
9. SQLite Relational DBMS 105.82 -0.05
10. Redis Key-value store 98.81 +3.73

参考

サーバーを手に入れたらやるべき5つの初期設定

今回はAPIを作るために、新しくサーバーを立てたので、初めにやるべき初期設定を備忘録としてまとめます。 ミドルウェア等を入れる前のホントの初期設定です。

環境

  • OS:CentOS 6.6 64bit
  • メモリ:512MB
  • CPU:1vCPU

1. rootユーザのパスワード設定

デフォルトはrootにパスワードが設定されていないので今後のためにパスワードを設定します。 passwdコマンドのあとに引数を付けなければrootユーザのパスワードを設定できます。

# passwd
ユーザ root のパスワードを変更。
新しいパスワード:<ここにパスワード>
新しいパスワードを再入力してください:<ここに再度パスワード>
passwd: 全ての認証トークンが正しく更新できました。

2. 新規ユーザの作成

ユーザ作成時のデフォルト設定確認

useraddコマンドに -Dオプションを付ける事でデフォルトの設定を確認できます。

# useradd -D 
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

それぞれの設定項目の説明は以下の通り

設定 説明
GROUP グループIDを100に設定する。Red Hatディストリビューションの場合、 500 から順番に与えられる。
HOME デフォルトのホームディレクトリの場所。この場合、「 /home/ユーザ名 」でホームディレクトリが作成される。
INACTIVE パスワードが無効になった後、そのユーザのアカウントが無効になるまでの期限。「 -1 」は無期限
EXPIRE ユーザアカウントの有効期限。値が無い場合は無期限を意味する
SHELL デフォルトのログインシェル
SKEL 新規ユーザーのホームディレクトリのテンプレート。この場合/etc/skel のコピーが新規ユーザのホームディレクトリに作成される

ユーザを作成して確認する

# useradd <新規作成するユーザ名>
# id -a <新規作成したユーザ名>
uid=500(<新規作成したユーザ名>) gid=500(<新規作成したユーザ名>) 所属グループ=500(<新規作成したユーザ名>)

新規ユーザのパスワード設定

# passwd <新規作成したユーザ名>
ユーザー <新規作成したユーザ名> のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。

wheelグループに追加

ユーザの作成が完了したので追加したユーザの権限を設定する

# usermod -G wheel <新規作成したユーザ名>

sudo許可設定

コレまでの設定で新規ユーザに切り替えて以下のコマンドを打つと

$ sudo ls

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for <新規作成したユーザ> : <新規作成したユーザのパスワード> 
<新規作成したユーザ> は sudoers ファイル内にありません。この事象は記録・報告されます。

ものすごくドキッとするメッセージが返却されます。メッセージ通り、新規に作成したユーザはsudoの権限を持っていません。 なので、sudo権限を付けてあげます。設定するときはvisudoコマンドを使用します。 vi sudo ではなく、visudoです。 visudoコマンドで編集すると保存時にSytaxCheckをしてくれるので、まさかの事態に陥らずに済みます。

# visudo 
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL)       ALL 
# ↑のコメントアウトを外す↓
%wheel ALL=(ALL)       ALL

確認設定画完了したらもう一度sudoを使ってみると、ドキッとするメッセージは表示されません。

$ sudo ls 
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
coffee break①〜そもそもwheelってなに?

WheelグループはSUコマンドでアクセスできるUnixSystemへのコントロール権限をもつスーパーユーザグループのこと。[big wheel]で大物、勢力家、重鎮だとかの意味なのでそれが由来らしいです。新規ユーザを追加したらwheelグループに追加する事で『大物=su権限』を持つ”者”にできるわけですね。 ejje.weblio.jp

3. 公開鍵認証を使って新規ユーザでログインできるようにする

.sshディレクトリ作成

上記まででユーザの設定が完了したのでmacなどのクライアントから新規作成したユーザで接続できるように設定していきます。新規ユーザのホームディレクトリに移動します。デフォルトの設定で作成した場合パスは以下になります。

# pwd
/home/<新規ユーザ名>

上記のディレクト配下に.sshディレクトリを作成してパーミッションを700に設定します。

# mkdir .ssh/
# chmod 700 .ssh/
# ls -la 

公開鍵を配置する

私が利用しているクラウドサービスは初期接続がすでに鍵認証方式のみで、サーバー作成時に公開鍵が設置されます。 秘密鍵は手元にあるものを使い、サーバ側に配置している公開鍵を新規に作成したユーザが使えるように配置します。 サーバー側の公開鍵は以下のディレクトリに配置されていたので、それをコピーして所有者をrootから新規作成したユーザに変更します。

# cp ~/.ssh/authorized_keys /home/<新規作成したユーザ名>/.ssh/
# chown <新規作成したユーザ名> /home/<新規作成したユーザ名>/.ssh/

クライアント側(mac)から接続確認

.ssh/configに設定してもいいですし、コマンドラインで頑張るのもいいと思います。 自分は~/.ssh/configに書きます。

Host <ホスト名をお好きに ():hogehoge >
    Hostname <サーバーのIPアドレスを記述>
    port 22 
    User <新規作成したユーザ> 
    IdentityFile <秘密鍵のフルパス記載>

新規にターミナルを開いて新規に作成したユーザで接続できるか確認する

$ ssh hogehoge 
[<新規作成したユーザ名>@localhost ~]$ 

上記で接続完了。

4.セキュリティを強化する

やるべきこととしては、①rootでのログインを禁止する、②ポートを変更する だけです。パスワード認証はデフォルトで拒否しているので。(してない方は/etc/ssh/sshd_configのPasswordAuthentication noにしてあげてください。※公開鍵でログインできる事が前提です)

rootでのログインを禁止する

rootはユーザ名を必要とせずログインできるので秘密鍵が漏れた際に侵入される危険性が高まります。なので、rootでのログインを禁止します。設定は/etc/ssh/sshd_configに記載されいるので、バックアップを作成後、編集します。 クラウドサービスの場合、デフォルトの設定が弄られていることが多いですが、私の場合以下の様な設定になっていました。

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
PermitRootLogin without-password

以下に変更します。

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
PermitRootLogin no

設定を保存したら、デーモンを再起動させ、設定を反映させます。

# service sshd restart 
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

問題なく再起動できたら、mac等の別ターミナルを開いて『rootでログイン出来ないこと』と『新規作成ユーザでログインできる』ことを確認します。この時サーバーに接続しているターミナルは閉じない方が良いです。新規ユーザで接続出来なかったらrootでもログイン出来ないので。

#以下は接続出来ない。
$ ssh root@hogehoge

#以下は接続できる
$ ssh hogehoge

PermitRootLoginの設定値について

設定 設定値 概要
PermitRootLogin no rootでのログインを禁止する
PermitRootLogin yes rootでのログインを許可する
PermitRootLogin without-password パスワード認証以外でのrootでのログインを禁止する
PermitRootLogin forced-commands-only コマンドオプションが指定されたときのみ、公開鍵認証によるrootでのログインを許可
coffee break②〜sshdや、httpdの"d"ってなに?

httpdは[HyperText Transfer Protocol Daemon]の略で、sshd[Secure Shell daemon]の略なので、DはDaemonのDですね。

デーモン (Daemon) は、UNIXなどのマルチタスクオペレーティングシステム (OS) においてバックグラウンドプロセスとして動作するプログラムを意味する。 ユーザーが直接対話的に制御するプログラムではない。 典型的なデーモンは名前の最後尾に "d" が付く。 例えば、syslogd はシステムログを扱うデーモン、sshd は外からのSSH接続要求を受け付けるデーモンである。

sshのPortを変更する

新規ユーザからの接続が確認できたら、最後にポート番号22番から適当なポートに変更し再起動します。 FWをクラウドサービスで提供されているものを使っている場合、Webコンソールから設定したポートを開ける必要があります。 もちろん、クライアント側の.ssh/configを設定していたらProtの部分を書き換えることもお忘れなく。

#vim /etc/ssh/sshd_config

# Port 22 
Port <適当なポート番号>
# service sshd restart 
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

その他

FWの設定は必須です。必要なポートだけ開けましょう。

5. ホスト名を変更する

初期状態だとターミナルには以下のように表示されていると思います。

[<ユーザ名>@localhost <ディレクトリ>]

これだとターミナルを複数立ち上げて複数のサーバーで作業する際にどのサーバーで作業しているかわからなくなるので変更してあげます。

$ sudo vim /etc/sysconfig/network

NETWORKING=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=<好きなホスト名>.localdomain

編集が完了したらサーバーを再起動して設定を反映させます。

$ sudo reboot 

1分位で再起動が完了するので、接続すると

[<ユーザ名>@<設定したホスト名> <ディレクトリ>]

となっていると思います。

以上で初期設定は完了です! こんなこと設定したほうが良いよ!などありましたら教えて下さい。

参考

kazmax.zpp.jp

changineer.info

Wheel (Unix term) - Wikipedia, the free encyclopedia

sshd の設定(sshd_config)

Nginx+MySQL+PHP+WordpressをCentOS6.4にセットアップ

phpインストール

環境OS:CentOS 6.4 64bit Plain まずはすべてのファイルをアップデートしてPHPをインストールする

$yum update -y
$yum -y install php-mysql php-common php php-cgi php-fpm php-gd php-mbstring

完了したらインストールされているかチェック

$ php -v 
PHP 5.3.3 (cli) (built: Aug 6 2014 05:54:27) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

PHP-FPM(FastCGI Process Manager)の設定

www.confを編集します

$cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.back
$vim /etc/php-fpm.d/www.conf
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache Choosed to be able to access some dir as httpd
;user = apache //nginxに変更
user = nginx
; RPM: Keep a group allowed to write in log dir.
;group = apache //nginxに変更
group = nginx 

mysqlをインストール

完了したらインストールされているか確認

$yum install mysql mysql-server -y
$mysql --version 
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

mysqlデーモンを起動

$/etc/init.d/mysqld start 
MySQL データベースを初期化中: Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

 [ OK ]
mysqld を起動中: [ OK ]

問題がなければ自動起動設定

$chkconfig mysqld on 

mysqlをセットアップ

設定を新規ファイルに書き出す

$ vim ~/work/wordpress.sql
set password for root@localhost=password('ここにrootのパスワード');
insert into user set user="ここに新規ユーザ名", password=password("新規ユーザのパスワード"), host="localhost";
/* wprdpress用にwordpressというデータベースを作る。名前は自由だが、後で使うのでメモる
create database wordpress;
grant all on wordpress.* to ユーザ名;
/* 上で宣言した新規ユーザにデータベースwordpressへの全権限を与える
FLUSH PRIVILEGES;

msysqlに流し込む

$ mysql -u root -D mysql < work/wordpress.sql 

設定が反映されているか確認する。 まず、rootでログインできる事を確認

$ mysql -p
Enter password: 設定したrootのパスワード
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit 
Bye

新規DBヘ新規ユーザでログインできる事を確認

$ mysql -u 新規ユーザ名 -D DB名 -p
Enter password: 新規ユーザのパスワード
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit 
Bye

niginxをインストールする

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

nginxの設定を行う

ドキュメントルートを変更し、phpの設定も追加する

$ vim /etc/nginx/conf.d/default.conf

 location / {
 #root /usr/share/nginx/html;
 root /var/www/html;
 index index.html index.htm;
 }


location ~ \.php$ {
 # root html;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
 include fastcgi_params;
 }

php-fpmのデーモンを起動する

$ /etc/init.d/php-fpm start 
php-fpm を起動中: [ OK ]
nginxのデーモンを起動する

$ /etc/init.d/nginx start 
nginx を起動中: [ OK ]
デーモンを起動し、自動起動設定

$ chkconfig php-fpm on
$ chkconfig nginx on

適当にphpファイルをドキュメントルートに設置して動作確認。 問題なければWordPressをインストールをします。

WordPressをインストール

$ wget http://ja.wordpress.org/wordpress-3.9.2-ja.zip

変更したドキュメントルートへ移動して解凍する。 ドキュメントルートに余計なファイルがあると上手く行かないので削除してから行う方が良い。*1

$ mv wordpress-0.9.2-ja.zip /var/www/html/.
$ cd /var/www/html/
$ unzip -qq wordpress-3.9.2-ja.zip 
$ mv wordpress/* .
$ rm -fR wordpress

あとはブラウザからアクセスして画面上で設定すれば完了。

*1:ログイン画面したのちに403エラー、TOPページも表示されませんでした。DBのテーブルをすべて削除して、ドキュメントルートのファイルをすべて消してからWordPressを再インストールしたら上手くいきました

Laravel5をComposerでCentOS6.6にセットアップする

CentOS6.6にPHPApache+Laravel5の環境を構築したのでその手順をメモ。 サーバを立てた直後からの構築なので事前準備は何もしてません。全てデフォルトのままです。

PHPApache・Composerのインストール

パッケージのインストール

パッケージ管理は使わない方が今後のためかもしれませんが、スピード重視のため使いまくります。 以下のコマンドでApache,PHP,その他依存パッケージをガバっと入れます。

$yum install php 

Composerをインストール

Laravelを導入するにあたり、PHPのパッケージ管理「Composer」を使います。 以下コマンドでインストール済みのPHPにComporserを紐付けてインストールします。

$curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin

PHPのバージョンアップ

現時点でyumリポジトリに用意されているPHPは5.3系でした。 LaravelはPHP5.3系でも動くようですが、致命的な問題が発生してます的な警告がでるのでepelリポジトリとremiリポジトリを追加してアップデートします。

epelリポジトリの追加

$rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 

remiリポジトリの追加

$rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 

php5.5とのインストール

yum list で追加したリポジトリの中にあるPHPパッケージを確認します。 PHP5.5とその他パッケージをインストールします。 不要なもの、必要なものがその他あれば適宜置き換えて下さい。

$yum list --enablerepo=remi --enablerepo=remi-php55 | grep php
$yum install --enablerepo=remi --enablerepo=remi-php55 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug 

Laravel5の構築

laravel5のインストール

先ほどインストールしたComposerを使ってLaravel5をインストールします。 確認はlaravelコマンドで。以下のように表示されればOK。

$composer global require "laravel/installer=~1.1" 
$laravel

Laravel Installer version 1.1

Usage:
[options] command [arguments]

Options:
--help (-h) Display this help message
--quiet (-q) Do not output any message
--verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version (-V) Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
--no-interaction (-n) Do not ask any interactive question

Available commands:
help Displays help for a command
list Lists commands
new Create a new Laravel application.

composer.phar create-project laravel/laravel laravel 

laravelプロジェクトの作成

プロジェクトを作成するディレクトにcdしてlaravelプロジェクトを生成します。 その後、生成したプロジェクト配下のstorageディレクトリのパーミッションを変更します。/var/www/配下で作成した場合は/var/www/laravelProject/storageです。 laravelのstorageディレクトリはキャッシュ用ディレクトリなので読み書き権限の付与が必要らしいです。

$cd /var/www/
$laravel new laravelProject 
$chmod -R 777 laravelProject/storage/

Apacheの設定

ここまででLravel5のセットアップは完了です。 ブラウザでアクセスするとLravel5のディレクトリ構成が丸見え状態になりますが、Apacheの設定を変更すれば大丈夫です。

httpd.confの編集

ドキュメントルートを生成したlaravelProjectのpublicディレクトリにします。(httpd.confのバックアップはお忘れなく) その後、Apacheを再起動してブラウザで確認します。

$vim /etc/httpd/conf/httpd.conf 
# DocumentRootを以下のように書き換えます。
DocumentRoot "/var/www/laravelProject/public" 

$service httpd restart 

以下の画面が表示されればLaravel5のセットアップ完了です

f:id:tasukent:20150215143447p:plain

ついでにセキュリティ強化

現状のままだとHTTPHeaderにApacheのバージョンやPHP情報などが丸見えです。 「バージョンがユーザから見える」=「脆弱性がまるわかり」ということなので隠します。

PHP情報を隠す

$vim /etc/php.ini
#expose_php = On
#↑を下記のように書き換え
expose_php = Off 

Apacheのバージョン情報を隠す

$vim /etc/httpd/conf/httpd.conf
# ServerTokens OS
#↑を下記のように書き換え
ServerTokens ProductOnly 

Apacheを再起動して確認

再起動がすんだらブラウザで確認します。 HTTPHeaderが以下のようになっていると思います。X-Powered-ByとServerの部分が変更されていればOKです。

<変更前>

Cache-Control:no-cache
Connection:close
Content-Length:791
Content-Type:text/html; charset=UTF-8
Server:Apache/2.2.15 (CentOS)
X-Powered-By:PHP/5.5.21

<変更後>

Cache-Control:no-cache
Connection:close
Content-Length:805
Content-Type:text/html; charset=UTF-8
Server:Apache

以上で完了です。 何か間違っているところなどありましたら教えてください。

参考資料

Composer

PHP - CentOS6.4にLaravelをインストールする - Qiita

Laravel - The PHP Framework For Web Artisans