AWS EC2 Amazon Linux2 にPhalcon3.4+MariaDB環境をセットアップ


#AWS EC2 までは起動できているとします。
Amazon Linux2は、インストール済み

## Nginx + PHP + PHP-FPM + MariaDBをインストール

```
amazon-linux-extras list

sudo su -
amazon-linux-extras install nginx1

systemctl enable nginx

# パッケージ更新
# yum update -y

# タイムゾーン設定・確認
# timedatectl status
# timedatectl set-timezone Asia/Tokyo

# timedatectl status

# ロケール、キーボードレイアウト設定・確認
# localectl status
# localectl set-locale LANG=ja_JP.UTF-8
# localectl set-keymap jp106
# localectl status


```



## mariadb 

```
# インストール　CentOSなど # Amazon Linuxはスクリプトに対応してない

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash


```

### amazon linux2 の場合は、リポジトリのインストールができないのでリポジトリを定義する。
下記サイトに手順があるのでそのとおりに行うこと。
AmazonLinux2 は、centos7ベースなのでそれを選択。 Amazon Linux2でも、arm選択したらNGですよ。x64じゃないとmariadbパッケージインストールは無理です。ソースからコンパイル・インストールしか方法はないです。今の時代、ソースからインストールってアップデートも面倒なんでやんないですよねー

https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-amd64--centos7&mirror=weppel&version=10.4

```
# vi /etc/yum.repos.d/mariadb.repo
# MariaDB 10.4 CentOS repository list - created 2020-03-31 10:03 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

-----------
# yum install MariaDB-server MariaDB-client
```

```
$ 

## 起動
# systemctl start mariadb

# 有効化
# systemctl enable mariadb
# systemctl is-enabled mariadb

## セキュリティ設定　rootのパスワード等を設定します。全部Yでもいいかなと思っています。
# mysql_secure_installation

Enter current password for root (enter for none):  # 空Enter（パスワードは初期設定はされてないので）

Switch to unix_socket authentication [Y/n] # n を入力（なぜYではなく、nなのか。ほとんどの人は、id/pwでDBにログインしてると思う。それはsocketではないから。unix_socket接続ってことはunixローカルユーザで接続するということを理解しておくこと

Set root password? [Y/n] # Y 
Remove anonymous users? [Y/n] # Y
Disallow root login remotely? [Y/n] # Y
Remove test database and access to it? [Y/n]  # Y
Reload privilege tables now? [Y/n] # Y
 ...
Thanks for using MariaDB!
```

###接続テスト

```
mysql -u root -p
Enter password : 
```


/etc/my.cnf.d/server.cnf 
[mariadb]
character-set-server=utf8mb4


## PHP とphalconの関連を確認
phalcon3を使いたい。phalcon3のPHPバージョンを確認

```


リポジトリのインストール
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm


確認するコマンド
# yum --enablerepo=remi-php73 list | grep phalcon


```
   php73-php-phalcon3.x86_64   
これを確認ってことは、php7.4ではだめ。php7.3である必要があるとわかる。

## php 7.3と phalconをインストール

phpコマンドを[php]で実行したい場合は、php-xxxxという名前のyum install をする必要がある。

```
amazon-linux-extras install php7.3

yum --enablerepo=remi-php73 install php-phalcon3

```

## php7.4 はこっちだけど、phalconがphp7.3までなので要注意
amazon-linux-extras install php7.4

### mbstringは必須なので以下も。phpをインストールしているとそのバージョンのmbstringがインストールされるので、-yをつけずに確認してからインストールすること。


```
yum install php-mbstring php-xml
```

以下の場合は、phpではなく、php73をインストールした場合のだめな場合のメモ

phpを複数バージョン入れる場合はphp73とバージョン番号付きでインストール可能だが、本番サーバーでは１つでいいので。

```
php73-php-mbstring
php73-php-xml

yum --enablerepo=remi-php73 install php73-php-mbstring php73-php-xml php73-php-phalcon3
```

## php-fpm

```
# systemctl enable php-fpm
# systemctl start php-fpm
```

phalconは以下にインストールされる
ztsは、zend Thread Safeといってマルチスレッドで動くバージョン。phpはシングルスレッドなのでztsは使わない。

```
/usr/lib64/php/modules/phalcon.so
/usr/lib64/php-zts/modules/phalcon.so
```

/etc/php.ini 追加するのではなく、
/etc/php.d/50-phalcon.ini　たぶん、ある。これが。なければ作る。

```
extension=/usr/lib64/php/modules/phalcon.so
```

--- jsonライブラリのあとでなければならないため。50-phalcon.iniの50は若い順に読み込まれるので




ｐｈｐ−ｆｐｍの実行ユーザがapacheになっているので、nginxに変更

```
/etc/php-fpm.d/www.conf 

user nginx
group nginx
```

nginx 
php-fpm
をリスタート

```
systemctl restart nginx
systemctl restart php-fpm
```


phpのセッションは以下のディレクトリ似て管理しているので、オーナーを変更しておく

```
chown -R nginx /var/lib/php/session
```

composer は、以下サイトにいくとトップに書いてあるコマンドを実行
https://getcomposer.org/download/

ついでにどこでもcomposerが使えるように、
/usr/local/bin/にいれておきたい。じつは、３行目にあるコマンドでdir指定ができる。
さらに、ファイル名も、composer.pharじゃなくて、composerコマンドにしたいので.pharを除去したファイル名にしたい場合は以下。


```
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
```


できなかったら自分でやればよい。

```
mv composer.phar /usr/local/bin/.
cd /usr/local/bin
ln -s ./composer.phar composer
```




### nginx config test syntax check

```
nginx -t
```


## php-fpm ソケット接続設定 設定を確認だけ
/etc/php-fpm.d/www.conf

```
listen = /run/php-fpm/www.sock
```



## とりあえず、php-cliだけどphalconの確認を行う

```
php -i | grep phalcon

phalcon => enabled
```
enabledを確認できればOK


##おまけ
###wordpressのnginx設定

/etc/nginx/conf.d/【あなたのサーバのホスト名】.conf

```
server {
        listen 80;
        server_name 【あなたのサーバのホスト名】;
        index index.php ;
        root /var/www/wordpress ;
        location ~* /wp-config.php {
             deny all;
        }
        location ~ \.php$ {
           
             # ソケット接続にする。 /etc/php-fpm.d/www.confを確認
             fastcgi_pass   unix:/run/php-fpm/www.sock;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }
    }


```



```
        # for PHP
        location ~ \.php$ {
                fastcgi_pass  unix:/run/php-fpm/www.sock;
                fastcgi_index /index.php;

                include fastcgi_params;
                fastcgi_split_path_info       ^(.+\.php)(/.+)$;
                fastcgi_param PATH_INFO       $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                sendfile on;
                client_max_body_size 512M;
                fastcgi_buffering off;
                fastcgi_read_timeout 600;
        }
        location / {
                try_files $uri $uri/ /index.php?_url=$uri&$args;
                # Basic認証するときは以下を
                #        auth_basic "Restricted";
                #        auth_basic_user_file /var/www/html/.htpasswd;
        }