樱花VPS标准操作系统环境设置(4) MariaDB和PHP的安装

上次

樱花VPS标准操作系统环境配置(3)Web服务器设置

安装和配置MariaDB

这次,我们将安装MariaDB数据库。
MariaDB是由MySQL的原始代码作者Michael “Monty” Widenius先生发起的项目开发的,是一个与MySQL兼容的开源关系数据库管理系统(RDBMS)。

添加仓库并安装

我們將手動添加yum倉庫。

rpm –import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB && \
vi /etc/yum.repos.d/mariadb.repo can be paraphrased as:

使用rpm -import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB命令导入密钥,并编辑/etc/yum.repos.d/mariadb.repo文件。

+ [mariadb]
+ name = MariaDB
+ baseurl = http://yum.mariadb.org/10.1.6/centos6-amd64
+ enabled=0
+ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
+ gpgcheck=1

如果可以添加存储库,可以使用yum命令安装MariaDB。

安装命令–enablerepo=mariadb MariaDB-devel MariaDB-client MariaDB-server

MariaDB的初始配置

暂时启动MariaDB。

开启mysql服务

Starting MySQL. SUCCESS!

执行MariaDB的初始设置。

mysql_secure_installation 安全安装命令

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): <- 空Enter
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] <- 空Enter
New password: <- パスワードを入力
Re-enter new password: <- パスワードを再入力
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] <- 空Enter
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] <- 空Enter
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] <- 空Enter
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] <- 空Enter
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

暂停MariaDB。

停止mysql服务

Shutting down MySQL... SUCCESS! 

数据库设置和优化

将中型基本设置文件my-medium.cnf复制到my.cnf。

将/usr/share/mysql/my-medium.cnf复制到/etc/my.cnf.d/my.cnf。

添加自定义设置。
备份原始server.cnf文件,并创建新的server.cnf文件。

将/etc/my.cnf.d/server.cnf重命名为/etc/my.cnf.d/server.cnf.orig,然后使用vi编辑器打开/etc/my.cnf.d/server.cnf。

+ [mysqld]
+ datadir=/var/lib/mysql
+ character-set-server=utf8
+ symbolic-links=0
+ innodb_buffer_pool_size=64M
+ innodb_log_file_size=16M
+ innodb_flush_method=O_DIRECT
+ query_cache_size=128M
+ query_cache_limit=2M
+ query_cache_min_res_unit=4k
+ query_cache_type=1
+ tmp_table_size=128M
+ max_heap_table_size=128M
+ table_open_cache=1024
+ max_allowed_packet=1M
+ sort_buffer=256K
+ read_buffer_size=256K
+ read_rnd_buffer_size=256K
+ join_buffer_size=256K
+ key_buffer_size=16M
+ max_connections=256
+ thread_cache=256
+ wait_timeout=60
+ plugin-load = handlersocket.so

当设置完成后,启动MariaDB。

启动MySQL服务

当MariaDB启动后,我们将使用MySQL Tuner对数据库进行调优。
下载mysqltuner.pl,授予执行权限并运行。
请在ROOT_PASSWORD中输入您在初始设置中设置的root密码。

cd ~/ && \
wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl && \
chmod +x mysqltuner.pl && \
./mysqltuner.pl -user root -pass ROOT_PASSWORD

前往主目录 && \
下载 https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl && \
添加可执行权限到 mysqltuner.pl && \
运行 ./mysqltuner.pl 命令, 用户名为 root,密码为 ROOT_PASSWORD。

构建和配置PHP

为了能够快速切换PHP的版本,我们决定使用phpenv进行管理。同时,为了避免与其他\*env系列发生冲突,我们将通过anyenv来安装phpenv。

安装anyenv

我从GitHub克隆下来。

将”https://github.com/riywo/anyenv”克隆到”~/.anyenv”。

Initialized empty Git repository in /root/.anyenv/.git/
remote: Counting objects: 172, done.
remote: Total 172 (delta 0), reused 0 (delta 0), pack-reused 172
Receiving objects: 100% (172/172), 26.63 KiB, done.
Resolving deltas: 100% (57/57), done.

将`anyenv`的PATH设置为通用环境。

编辑 .bashrc 文件

+ # anyenv
+ if [ -d ~/.anyenv ]; then
+     export PATH=$PATH:$HOME/.anyenv/bin
+     eval "$(anyenv init -)"
+ fi

保存设置后,使用source命令执行一次设置文件。

将~/.bashrc文件添加到源中

安装phpenv

如果anyenv的路径被添加,就会安装phpenv从anyenv中安装phpenv,这将自动安装用于构建PHP的插件php-build。

安装 phpenv 的 anyenv

/tmp/phpenv.20150831090000.1979 ~
Cloning https://github.com/laprasdrum/phpenv.git...
Initialized empty Git repository in /tmp/phpenv.20150831090000.1979/phpenv/.git/
remote: Counting objects: 92, done.
remote: Compressing objects: 100% (61/61), done.
remote: Total 92 (delta 27), reused 92 (delta 27), pack-reused 0
Unpacking objects: 100% (92/92), done.
~
~/.anyenv/envs/phpenv/plugins ~
Cloning https://github.com/CHH/php-build.git...
Initialized empty Git repository in /root/.anyenv/envs/phpenv/plugins/php-build/.git/
remote: Counting objects: 3417, done.
remote: Total 3417 (delta 0), reused 0 (delta 0), pack-reused 3417
Receiving objects: 100% (3417/3417), 500.39 KiB | 267 KiB/s, done.
Resolving deltas: 100% (2012/2012), done.
~

Install phpenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

完成安装phpenv后,请按照消息中的指示运行以下命令。

执行 $SHELL -l

如果没有显示”phpenv:command not found”,则表示phpenv已经成功安装。

任何环境版本

phpenv: system (set by /root/.anyenv/envs/phpenv/version)

安装PHP编译所需的依赖包。

将PHP构建所需的依赖包一次性安装。

yum –enablerepo=epel 安装 re2c libmcrypt libmcrypt-devel && \
yum 安装 libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel enchant-devel libXpm libXpm-devel freetype-devel t1lib t1lib-devel gmp-devel libc-client-devel libicu-devel oniguruma-devel net-snmp net-snmp-devel bzip2-devel

安装ImageMagick

为了应对于2016年5月3日左右公开的ImageMagick漏洞(CVE-2016-3714等),安装最新版本的ImageMagick。

在中国境内,只需要提供一种选择:

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install –enablerepo=remi,epel ImageMagick-last ImageMagick-last-devel ImageMagick-last-libs

更改构建选项

将构建选项追加到default_configure_options。

为了能够使用PECL,将–without-pear更改为–with-pear。此外,为了启用各个选项,我们会进行适当的补充。

编辑~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options文件。

- --without-pear
+ --with-pear
:
+ --with-apxs2=/usr/bin/apxs
+ --enable-fileinfo
+ --enable-hash
+ --enable-json
+ --enable-sysvmsg
+ --with-bz2
+ --enable-ctype
+ --with-iconv
+ --enable-ftp
+ --with-gettext
+ --enable-mbstring
+ --with-onig=/usr
+ --with-pcre-regex
+ --with-mysql-sock=/var/lib/mysql/mysql.sock
+ --enable-phar
+ --enable-shmop
+ --enable-sockets
+ --enable-simplexml
+ --enable-dom
+ --with-libxml-dir=/usr
+ --enable-tokenizer
+ --with-kerberos=/usr
+ --with-openssl=/usr
+ --enable-zip
+ --with-mhash=yes
+ --without-mm
+ --with-enchant=/usr
+ --enable-gd-native-ttf
+ --with-gmp=/usr
+ --with-xpm-dir=/usr/X11R6
+ --with-freetype-dir=/usr
+ --with-imap=/usr
+ --with-imap-ssl
+ --enable-intl
+ --with-t1lib=/usr
+ --with-snmp=/usr

在安装phpenv时,您还可以通过CONFIGURE_OPTS进行临时的附加指定来设置构建选项。

実行例
CONFIGURE_OPTS=”–with-pear –disable-fpm –with-apxs2=/usr/bin/apxs” phpenv 安装 5.x.x

确认可构建的PHP版本列表

使用当前的php-build,输出可以构建的PHP版本的列表。

使用 phpenv 安装 -l

Available versions:
  5.2.17
  5.3.2
  5.3.3
  : (省略)
  7.0.5
  7.0snapshot
  master

更新可用的 PHP 版本列表。

更新php-build的可构建PHP版本列表。

cd ~/.anyenv/envs/phpenv/plugins/php-build/ && \
git pull

进入 ~/.anyenv/envs/phpenv/plugins/php-build/ 并进行 git 拉取操作。

将PHP进行编译

我将执行PHP的构建。
这次我将安装写作时的最新版本5.6.20。

安装phpenv 5.6.20

[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
 : (省略)
[Success]: Built 5.6.20 successfully.

在构建完成后,必须将生成的libphp5.so移动到构建版本的目录中。

将 /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp5.so 移动到 ~/.anyenv/envs/phpenv/versions/5.6.20/libexec/libphp5.so。

为了避免 libphp5.so 在每次构建时被覆盖,必须进行备份。
这样一来,在 httpd.conf 中切换版本也更加方便。

将CLI侧的PHP切换

在成功构建PHP之后,CLI会切换到读取的PHP版本。

将当前环境中的php版本设置为5.6.20。

我来确认一下版本切换是否成功。
如果显示的是已切换的版本,那就表示成功了。

查看anyenv版本并显示PHP版本。

phpenv: 5.6.20 (set by /root/.anyenv/envs/phpenv/version)
PHP 5.6.20 (cli) (built: Sep  1 2015 09:00:00) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

切换Apache端的PHP。

另外,我们需要单独指定Apache读取的PHP版本。
请注意,这需要与CLI(命令行界面)不同的指定方法,并且没有像CLI那样的切换命令。

打开/etc/httpd/conf/httpd.conf文件

每次构建时,php5_module的LoadModule指令将自动添加到httpd.conf下面的以下注释行。如果存在多个LoadModule php5_module指令,会在重新启动Apache时引发错误。在添加或切换第二次及以后的版本时,请记住只保留一行LoadModule php5_module的指令。

  :
  # Example:
  # LoadModule foo_module modules/mod_foo.so
- LoadModule php5_module /root/.anyenv/envs/phpenv/versions/5.6.19/libexec/libphp5.so
+ LoadModule php5_module /root/.anyenv/envs/phpenv/versions/5.6.20/libexec/libphp5.so
  :

请使用PECL安装ImageMagick

安装ImageMagick软件包,用于进行详细的图像处理。

使用PECL安装imagick。

由于PECL安装的extension只能安装当前指定的版本,所以每次需要增加或切换版本时,需要使用pecl install进行安装。

PHP配置

完成ImageMagick的安装后,我们需要编辑php.ini配置文件。

打开路径: ~/.anyenv/envs/phpenv/versions/5.6.20/etc/php.ini

  :
+ extension=imagick.so
  :
- ;date.timezone = 
+ date.timezone = Asia/Tokyo
  :
- post_max_size = 8M
+ post_max_size = 100M
  :
- upload_max_filesize = 2M
+ upload_max_filesize = 100M
  :
- ;mbstring.language = Japanese 
+ mbstring.language = Japanese
  :
- ;mbstring.internal_encoding = 
+ mbstring.internal_encoding = UTF-8
  :
- ;mbstring.detect_order = auto
+ mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
  :
- pdo_mysql.default_socket=
+ pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
  :
- mysql.default_socket =
+ mysql.default_socket = /var/lib/mysql/mysql.sock
  :
- mysqli.default_socket =
+ mysqli.default_socket = /var/lib/mysql/mysql.sock
  :

在PECL上安装APCu

为了加快速度,安装具有数据缓存功能的APCu,将用户数据以KVS(键值存储)的形式缓存在内存中。

安装apcu:
使用pecl命令安装apcu

创建配置文件,并同时设置PHP加速器OPCache的配置,此配置在PHP构建时被嵌入。opcache.blacklist_filename路径应指定为构建版本的/etc/conf.d/目录内。(可能)

打开 `~/.anyenv/envs/phpenv/versions/5.6.21/etc/conf.d/apc.ini` 这个文件。

+ [opcache]
+ opcache.enable = 1
+ opcache.enable_cli = 1
+ opcache.memory_consumption = 128
+ opcache.interned_strings_buffer = 8
+ opcache.max_accelerated_files = 4000
+ opcache.blacklist_filename = /root/.anyenv/envs/phpenv/versions/5.6.21/etc/conf.d/opcache*.blacklist
+ [apcu]
+ extension = apcu.so
+ apc.enabled = 1
+ apc.enable_cli = 1
+ apc.shm_size = 64M
+ apc.mmap_file_mask = /tmp/apc.XXXXXX

重启Apache。

当完成PHP版本的添加、切换以及扩展的添加等操作后,需要重新启动Apache。

重启 httpd24-httpd 服务

下次

樱花VPS:使用Let’s Encrypt开启SSL+HTTP/2的标准操作系统环境搭建。

广告
将在 10 秒后关闭
bannerAds