cloud9環境でconcrete5サイト制作① -導入- 

concrete5を手っ取り早く体験するために、cloud9を利用しようという試みです。
※勉強しながらの執筆のため、多々至らない点があるかと思いますのでご了承ください。

1. cloud9でconcrete5用のworkspaceを作成
-----
まず、cloud9のページにアクセスし、自身のアカウントでログインする。次に「Create a new workspace」をクリックします。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/a80f0504-1af7-4d35-f6b1-2f3117c5ab18.png width=400>


作成画面では、下記の例のように好みのWorkspace名を記載します。「Public」を選択するとインターネット上に公開されてしまいますので、公開せずに使用したい場合は「Private」を選択します。（ただし、「Private」は無料使用の場合は1アカウントにつき1つまでしか作成できません）また、concrete5はCloud9では公式サポートされていないため、自分で環境を構築します。なので、templateでは「Blank」を選択しています。
全ての入力が完了したら、「Create workspace」ボタンをクリックします。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/cdbd8223-2319-1c06-3ca1-433f6a4e2767.png width=400>

2. Mysqlの設定
-----
concrete5ではMysqlを使用するので、下記のコマンドをターミナルから入力します。

Mysqlを起動し、バージョンが表示されることを確認します。

```bash:cloud9
mysql-ctl start
mysql -u <youruser> -D mysql -e "SELECT version()"
```

次に、concrete5用の「ユーザ」「パスワード」「DB」を作成します。
ここではそれぞれ「c5user」「c5password」「c5」として作成しています。
※あくまで例ですので、パスワードについてはより複雑なものを設定することをお勧めします

```bash:cloud9
mysql -u <youruser>
GRANT ALL PRIVILEGES ON *.* TO c5user@localhost IDENTIFIED BY 'c5password' WITH GRANT OPTION;
\q
mysql -u c5user -p
create database c5 character set utf8;
show databases;
\q
```

show databasesの結果に「c5」が表示されていれば成功です。

3. concrete5のダウンロード
-----
下記コマンドでconcrete5をダウンロードし、適切に配置していきます。

```bash:cloud9
wget http://concrete5-
japan.org/index.php/download_file/view/2080/45/
unzip ./index.html
```

※index.htmlがダウンロードされますが、名前が違うだけでconcrete5本体をDLできています。

4. php.iniの作成
-----
concrete5の文字コードはUTF-8であるため、サーバで使用する文字コードにもUTF-8を指定します。
まず、下図のように「concrete5.7.5.7」ディレクトリに右クリックし、「New File」を選択して「php.ini」を作成してください。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/45dfa96c-a94e-1808-226f-8ed9560965e1.png width=400>

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/689493fa-42b4-e9fa-c355-d4a6f248ed90.png width=400>

ファイルの作成が完了したら、php.iniには下記のようなコードを書いて、保存してください。

```ini:php.ini
default_charset = UTF-8
mbstring.language = neutral
mbstring.internal_encoding = UTF-8
```

4. concrete5のインストール
-----
「Run」>「Run with」>「Apache httpd(PHP, HTML)」でapacheを起動します。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/667f9be5-d54b-ee19-3f84-888b47334445.png width=400>

起動が完了したら、下記URLにアクセスしてください。
http://concrete5-project-your-username.c9users.io/concrete5.7.5.7/index.php/

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/667f9be5-d54b-ee19-3f84-888b47334445.png width=400>

対話式のインストーラーが起動するので、「Japanese(Japan)」を選択して、「Choose Language」ボタンをクリックする。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/ca32e4dc-4dd0-47ad-c896-0c2eb76612b3.png width=400>

ここでは「インストールを続ける」ボタンをクリックします。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/4ba585e8-bbc7-d754-aefa-7d61cb9849b0.png width=400>

任意のサイト名、メールアドレス、パスワードを入力しましょう。（データベース情報には2. Mysqlの設定 で設定した情報を入力します）
入力が完了したら「concrete5のインストール」ボタンをクリックします。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/a5e1a834-09d6-75df-0a65-91d8d1de5ab7.png width=400>

無事インストールが完了したら、「サイトを開く」ボタンをクリックしましょう。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/0a26c4eb-4473-2afc-96be-c10ac6715d8a.png width=400>

下図のような画面が表示されれば成功です…

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/77a7bada-aef2-d358-4b99-5349ca13e5ea.png width=400>

5. まだ終わりではなかった
-----
下記ログインフォームにアクセスして、ログインしてみましょう。
デフォルトだとユーザIDは「admin」、パスワードは管理者情報で設定したものでログイン可能です。

http://concrete5-project-your-username.c9users.io/concrete5.7.5.7/index.php/login

ログイン成功！

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/0b326db9-1fe6-fbab-5061-262d20a5607a.png width=400>

あれ、アクセス拒否？なんだこれは。。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/f563f070-31eb-dc19-01cd-bb8611586ce8.png width=400>

6. なぜうまくいかないのか
-----
[こんな記事](https://concrete5.co.jp/blog/cloud9-concrete5)がありました。

>またDNSで引いた時と実IPが違う構造になっているため、ロードバランサーかリバースプロキシ的なものが入っている可能性があり、設定を変えて concrete5 のログイン状態が保持され続ける設定を行います。

どうやら「/home/ubuntu/workspace/concrete5.7.5.7/application/config/」配下にconcrete.phpを新規作成し、下記コードを書けばいいようです。

<img src=https://qiita-image-store.s3.amazonaws.com/0/91976/2316f6fc-4e5d-1191-6dd7-4d8ef492dccb.png width=400>

```php:concrete.php
<?php
/**
 * Always trust incoming request.
 * 
 * For more detail, see: http://symfony.com/doc/current/cookbook/request/load_balancer_reverse_proxy.html
 */
// Get remote address
$remoteIp = $_SERVER['REMOTE_ADDR'];
return array(
    'security' => array(
        'trusted_proxies' => array(
            'ips' => array($remoteIp),
        ),
    ),
);
```

引用：[Cloud9 で concrete5 開発環境を作る](https://concrete5.co.jp/blog/cloud9-concrete5)