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パッケージインストールは無理です。ソースからコンパイル・インストールしか方法はないです。今の時代、ソースからインストールってアップデートも面倒なんでやんないですよねー

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とバージョン番号付きでインストール可能だが、本番サーバーでは1つでいいので。

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は若い順に読み込まれるので

php−fpmの実行ユーザが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/にいれておきたい。じつは、3行目にあるコマンドで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;
    }