CentOS8 + nginx1.18 + php-fpm7.4 + MariaDB10.5 + CodeIgniter4 的开发环境准备备忘录
概述
为了构建具有所述环境信息(版本等)的开发环境,于2020年9月27日进行了环境准备,并将此留作备忘录。
环境信息(版本等)
-
- CentOS 8.2.2004 (Core)
-
- Nginx 1.18.0
-
- php-fpm 7.4
-
- MariaDB Ver 15.1 Distrib 10.5.5-MariaDB
-
- Composer version 1.10.13 2020-09-09 11:46:34
- CodeIgniter 4.0.4
各种设置文件路径的备忘录 (Gè de
CentOS的其他各种设置
# timedatectl set-timezone Asia/Tokyo
# localectl set-locale LANG=ja_JP.UTF-8
# source /etc/locale.conf
# dnf install -y langpacks-ja
# dnf install -y vim
# dnf install -y elfutils-libelf-devel
# dnf -y update
# vim /etc/selinux/config
SELINUX=disable ← disableに設定
Nginx的安装配置
使用dnf命令来安装Nginx。
# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
在上述网站上,列出了以下的安装步骤和定义,但与上述设置不同的是,安装的是稍旧版本。(上述:1.18,下述:1.14,截至2020年09月26日)
https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
# dnf -y install nginx
确认Nginx安装已完成
# nginx -v
nginx version: nginx/1.18.0
# systemctl enable nginx
# systemctl start nginx
只需一個選項,將以下原文轉為中文:
如果可以在以下網址訪問 nginx 的畫面(歡迎來到 nginx!),就表示一切正常:
http://192.168.33.10
安装php-fpm7.4
新增存储库
在CentOS 8的标准仓库中,截至2020年09月26日,php-fpm的版本为7.2.24。
由于7.4是最新版本,所以我想尽量使用7.4。
因此,我会添加额外的仓库进行设置和安装。
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module enable php:remi-7.4
安装php-fpm7.4
根据开发需求的要求,需要根据以下网站进行参考并安装必要的PHP扩展模块进行适当的修改。
https://www.php.net/manual/ja/extensions.php
# dnf module install php:remi-7.4
メタデータの期限切れの最終確認: 0:32:40 時間前の 2020年09月26日 19時39分36秒 に実施しました。
依存関係が解決しました。
========================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
========================================================================================================================================
group/module パッケージをインストール中:
php-cli x86_64 7.4.10-1.el8.remi remi-modular 4.6 M
php-common x86_64 7.4.10-1.el8.remi remi-modular 1.2 M
php-fpm x86_64 7.4.10-1.el8.remi remi-modular 1.6 M
php-mbstring x86_64 7.4.10-1.el8.remi remi-modular 527 k
php-xml x86_64 7.4.10-1.el8.remi remi-modular 214 k
依存関係のインストール中:
httpd-filesystem noarch 2.4.37-21.module_el8.2.0+494+1df74eae AppStream 36 k
oniguruma5php x86_64 6.9.5+rev1-2.el8.remi remi-safe 206 k
php-json x86_64 7.4.10-1.el8.remi remi-modular 75 k
弱い依存関係のインストール中:
nginx-filesystem noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 24 k
モジュールプロファイルのインストール中:
php/common
モジュールストリームの有効化中:
httpd 2.4
nginx 1.14
php remi-7.4
トランザクションの概要
========================================================================================================================================
インストール 9 パッケージ
确认PHP-FPM的安装已经完成。
# php -v
PHP 7.4.10 (cli) (built: Sep 1 2020 13:58:08) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
# php-fpm -v
PHP 7.4.10 (fpm-fcgi) (built: Sep 1 2020 13:58:08)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
请确认一下php.ini文件的位置
# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
修改php.ini的設置
修改php.ini文件的内容
; デフォルト文字コード
default_charset = UTF-8
;HTTPのレスポンスにPHPのバージョン情報を出力するX-Powered-Byヘッダを含めない
expose_php = Off
;メモリ使用量の上限
memory_limit = 256M
;POSTリクエストのデータの最大サイズ
post_max_size = 128M
;ファイルをアップロードする際のアップロードファイルの最大サイズ
upload_max_filesize = 100M
; エラーログ
error_log = /var/log/php_error.log
; エラーを出力
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
; エラー表示(開発中は便利なので)
display_errors = On
display_startup_errors = On
[Date]
date.timezone = Asia/Tokyo
[mbstring]
; mbstringのデフォルトの言語
mbstring.language = Japanese
; HTTP入力文字のエンコーディングを内部文字のエンコーディングに自動変換しない
mbstring.encoding_translation = Off
; 文字コードを自動検出する際の優先順位
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
配置与配置nginx一起使用的php-fpm。
# cp -p /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
# ドキュメントルートの設定(apacheなどの標準的なドキュメントルートと同じ場所を設定)
root /var/www/html;
index index.php index.html index.htm;
location / {
# 指定された順序でfileやdirの存在を確認し、最初に見つかったものを返却する。
# いずれも無かった場合は、最後に指定されたパスに遷移する。
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# 1台のサーバーでnginx+php-fpmを動作させる場合、Unixソケットの方が高速に動作する。
# www.sockの場所は、/etc/nginx/conf.d/php-fpm.confの設定と合わせる。
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
更改配置以便vagrant用户能够执行nginx和php-fpm相关操作。
# 以下をvagrantに変更
user vagrant;
# 以下をvagrantに変更
user = vagrant
group = vagrant
# コメントを解除してvagrantに変更
listen.owner = vagrant
listen.group = vagrant
listen.mode = 0660
# listen.ownerとlisten.groupを指定するため以下をコメントアウト
;listen.acl_users = apache,nginx
为了使更改生效,重新启动服务。
# systemctl restart php-fpm
# systemctl restart nginx
使用phpinfo()函数进行操作确认。
准备一个执行phpinfo的示例程序,以确认nginx+php-fpm的配合是否有效。
<?php
phpinfo();
如果通过以下URL访问并显示出phpinfo()的内容,则表示nginx和php-fpm的协作配置已经完成。
MariaDB的安装设置
添加存储库
我想在CentOS 8的软件仓库中安装的MariaDB版本是10.3,但目前最新版本是10.5,所以我也想安装最新版本。
# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# dnf info MariaDB-server MariaDB-devel --disablerepo=* --enablerepo=mariadb
由于确认在上述操作中成功添加了存储库,现在进行实际的安装。
使用dnf来安装MariaDB。
# dnf instal MariaDB-server MariaDB-devel --disablerepo=* --enablerepo=mariadb
エラー:
問題: cannot install the best candidate for the job
- nothing provides libaio.so.1()(64bit) needed by MariaDB-server-10.5.5-1.el8.x86_64
- nothing provides libaio.so.1(LIBAIO_0.1)(64bit) needed by MariaDB-server-10.5.5-1.el8.x86_64
- nothing provides libaio.so.1(LIBAIO_0.4)(64bit) needed by MariaDB-server-10.5.5-1.el8.x86_64
- nothing provides lsof needed by MariaDB-server-10.5.5-1.el8.x86_64
- nothing provides perl(DBI) needed by MariaDB-server-10.5.5-1.el8.x86_64
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
看起来出现了一些错误。
错误的原因似乎是需要在MariaDB安装中安装libaio,lsof和perl-DBI。
因此,安装这三个相关的软件。
# dnf install libaio
# dnf install lsof
# dnf install perl-DBI
因为被指摘的三个问题已经安装好了,所以我们将重新尝试。
# dnf install MariaDB-server MariaDB-devel --disablerepo=* --enablerepo=mariadb
メタデータの期限切れの最終確認: 0:10:24 時間前の 2020年09月27日 07時09分32秒 に実施しました。
エラー:
問題: package MariaDB-server-10.5.5-1.el8.x86_64 requires galera-4, but none of the providers can be installed
- cannot install the best candidate for the job
- nothing provides libboost_program_options.so.1.66.0()(64bit) needed by galera-4-26.4.3-1.rhel8.0.el8.x86_64
- nothing provides libboost_program_options.so.1.66.0()(64bit) needed by galera-4-26.4.4-1.rhel8.0.el8.x86_64
- nothing provides libboost_program_options.so.1.66.0()(64bit) needed by galera-4-26.4.5-1.el8.x86_64
- nothing provides socat needed by galera-4-26.4.5-1.el8.x86_64
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
还不可以吗。
由于缺少libboost_program_options,所以会报错,需要安装boost-program-options。
# dnf install boost-program-options
第三次挑战,终于成功开始安装。
# dnf install MariaDB-server MariaDB-devel --disablerepo=* --enablerepo=mariadb
确认MariaDB安装
# mysql -V
mariadb Ver 15.1 Distrib 10.5.5-MariaDB, for Linux (x86_64) using readline 5.1
设置MariaDB的自动启动。
# systemctl start mariadb
# systemctl enable mariadb
# systemctl status mariadb
通过mysql_secure_installation进行初始设置。
# mysql_secure_installation
# MariaDBのrootアカウントの現在のパスワードを入力して?
Enter current password for root (enter for none): Enter
# unix_socketを使った認証に変更する?
# unix_socketとは、CentOSのログインユーザー名と、MariaDB側のユーザー名が同名の場合、
# ID/PASSを用いずに認証しましょうという仕組み。(MariaDB 10.4から追加となった?)
Switch to unix_socket authentication [Y/n] : n
# MariaDBのrootアカウントのパスワードを変更する?
Change the root password? [Y/n] : Y
New password: Hoge1234
Re-enter new password: Hoge1234
# 匿名ユーザーを削除する?
Remove anonymous users? [Y/n] Y
# リモートからのMariaDBのrootアカウントでログインを禁止する?
Disallow root login remotely? [Y/n] Y
# だれでもアクセス可能な「test」データベースがあるけど消しとく?
Remove test database and access to it? [Y/n] Y
# 権限テーブルを再読み込みすると、ここまでのすべての変更をすぐに反映させることができるけどやる?
Reload privilege tables now? [Y/n] Y
驗證MariaDB的初始設定。
因为使用了上述配置,已经设置了MariaDB的root账户密码,所以要确保使用该密码能够正确访问。
# mysql -u root -p
Enter password: Hoge1234
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.5.5-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)
MariaDB [(none)]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)
好的。
※如果从vagrant用户使用sudo su -命令切换到root用户,那么无论输入什么密码,在mysql -u root -p命令中都可以成功登录。(我不知道这个。。。)
由于MariaDB的配置已经完成,现在将创建用于MariaDB的用户和数据库。
(虽然这只是一个开发环境,但为了以防万一,我们可以一直使用root用户。)
为了能够在MariaDB中无问题地处理日语,需要进行以下设置。
为了处理日语,将字符编码更改为utf8mb4。
[mariadb]
character-set-server = utf8mb4
[client-mariadb]
default-character-set = utf8mb4
请确认已设置为utf8mb4。
# systemctl restart mariadb
# mysql -u root -p
MariaDB [(none)]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.002 sec)
创建数据库和用户
创建数据库和创建用户
# mysql -u root -p
MariaDB [(none)]> create database yudb;
全てのホストからアクセス可能なユーザー「yu」の作成
MariaDB [(none)]> create user yu;
MariaDB [(none)]> set password for yu@'%'=password('yupass');
MariaDB [(none)]> select user, host from mysql.user;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| yu | % |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
4 rows in set (0.004 sec)
全てのホストから「yu」ユーザーでアクセスした際、「yudb」データベースに対してcrudができるように権限を付与
MariaDB [(none)]> grant select,insert,update,delete ON yudb.* TO yu@'%';
権限を反映
MariaDB [(none)]> flush privileges;
从PHP程序测试连接到MariaDB
为了对index.php程序进行MySQLi数据库访问的操作确认,我们将修改为MariaDB并进行连接确认。
<?php
$server = 'localhost';
$user = 'yu';
$pass = 'yupass';
$dbname = 'yudb';
$my = new MySQLi($server, $user, $pass, $dbname);
$my->set_charset('utf8mb4');
$sql = 'select now() as n from dual';
$result = $my->query($sql);
// データベースの中身を取得
while($row = $result->fetch_assoc() ){
var_dump($row);
}
// DB接続を閉じる
$my->close();
致命错误:在/var/www/html/index.php中找不到 ‘MySQLi’ 类,错误发生在第8行。堆栈跟踪:#0 {main},抛出异常。
由于缺少安装mysqli扩展的PHP扩展模块,所以出现了一个错误,表示找不到。因此,需要使用以下命令进行安装。
# dnf -y install php-mysqlnd
http://192.168.33.10/ 如果再次访问,您可以确认成功连接到MariaDB的结果。
数组(1) { [“n”]=> string(19) “2020-09-27 15:11:27” }
转化为中文的表达为:{“n”: “2020-09-27 15:11:27”}
准备CodeIgniter的环境
从作曲家的准备开始
我们将准备CodeIgniter的开发环境。
由于使用composer,首先准备composer。
# cd /usr/local/src
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# 以下のハッシュは Latest: v1.10.13 のものです。
# ターゲットとなるバージョンが異なる場合には https://getcomposer.org/download/ を参考にして下さい。
# php -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
# composer -V
Composer version 1.10.13 2020-09-09 11:46:34
使用composer创建一个全新的CodeIgniter4项目。
使用composer来创建CodeIgniter4项目。
# cd /var/www/html
# composer create-project codeigniter4/appstarter codeigniter4
由于出现了以下问题,我们将删除之前创建的codeigniter4项目,并重新安装所需的扩展模块,然后重新创建项目。
Your requirements could not be resolved to an installable set of packages.
Problem 1
- codeigniter4/framework v4.0.4 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- codeigniter4/framework v4.0.3 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- codeigniter4/framework v4.0.2 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- codeigniter4/framework v4.0.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- codeigniter4/framework 4.0.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- Installation request for codeigniter4/framework ^4 -> satisfiable by codeigniter4/framework[4.0.0, v4.0.1, v4.0.2, v4.0.3, v4.0.4].
# dnf install php-intl
再次执行composer create-project命令时会产生警告,但问题已经解决,所以可以先完成操作。
根据CodeIgniter 4项目的需要,修改Nginx的文档根目录设置。
看起来,位于{project-name}/public/目录下的文件将成为通过composer安装的codeigniter4的文档根目录。
因此,需要更改nginx的文档根目录。
root /var/www/html/codeigniter4/public;
如果在上述更改之后重新启动nginx,则可以通过以下URL访问codeigniter4项目。
http://192.168.33.10
CodeIgniter的环境设置
有一个名为env的环境变量设置文件,但是不能直接使用。
我们将复制到名为.env的文件中并开始使用。
# cd /var/www/html/codeigniter4
# cp -p env .env
# 開発中のエラー情報などを確認するための設定
CI_ENVIRONMENT = development
# config.phpのbase_urlで設定していたやつ
app.baseURL = 'http://192.168.33.10/'
# MySQLデータベースへの接続情報
database.default.hostname = localhost
database.default.database = yudb
database.default.username = yu
database.default.password = yupass
database.default.DBDriver = MySQLi
database.default.charset = utf8mb4