ラック
Home > ブログ > 記事 > 2016年10月 > CentOS7ベーシックWebサーバをインストールしてAjentiを入れるまで

CentOS7ベーシックWebサーバをインストールしてAjentiを入れるまで

カテゴリ: サーバ

CentOS7最小限構成にLAMPとAjenti入れるまでが途中で頓挫したので、それのリベンジです。AjentiがPythonで動いていることを知らずに、競合しないように最小限構成から始めたのですが…結果としては、それでやることが増えて頓挫したので、今回は素直にWebサーバ構成で行きます。

インストール画面

  1. 「Install CentOS7」でエンター
  2. WELCOME TO CENTOS 7.
    言語選択
    日本語(Japanese)、日本語
    [続行]
  3. インストールの概要
    • 地域設定
      日付と時刻
      アジア/東京 タイムゾーン
      キーボード
      日本語
      言語サポート
      日本語
    • ソフトウェア
      インストールソース
      ローカルメディア
      ソフトウェアの選択
      ベーシックWebサーバのインストール
      オプション
      • PHPサポート
      • Perl – Web向け
      • Python
    • システム
      インストール先
      ディスクの選択→自動パーティションの構成
      KDUMP
      有効
      ネットワークとホスト名
      カードのオン/オフ、ホスト名、IPを設定
    • rootパスワード設定
    • ユーザ作成(not管理者)
  4. インストール完了後、再起動

パッケージのアップデート


# yum update

暫く待つべし。

Firewallの無効化


# systemctl list-unit-files | grep firewall
firewalld.service                           enabled

有効になっていることを確認。


# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

鎮まり給へ。


# systemctl list-unit-files | grep firewall
firewalld.service                           disabled

disableになったことを確認。


# systemctl list-unit-files | grep firewall
firewalld.service                           disabled

rebootで再起動した後でもdisableのままか確認。OK。

SELinux死すべし。慈悲はない。


# getenforce
Enforcing

状態確認。


# setenforce 0

鎮まり給へ。


# getenforce
Permissive

# vi /etc/sysconfig/selinux
SELINUX=enforcing
#下記に変更
SELINUX=disabled

黙らせる。


# getenforce
Disabled

rebootで再起動して確認。OK。

 

anacron=サン、ハイクを詠め


# cat /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

cronに何もない。


# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

anacronに設定がある。


# yum install cronie-noanacron

# yum remove cronie-anacron

依存関係の都合、nonanacronインストール後にanacron削除。鎮まり給へ。


# cat /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

# run-parts
02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly

上記run-parts以下をcrontabに追加。

Ajenti


# curl https://raw.githubusercontent.com/ajenti/ajenti/1.x/scripts/install-rhel7.sh | sh

...
(略)
...

:: Adding EPEL repo
http://download.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-1.noarch.rpm を取得中
curl: (22) The requested URL returned error: 404 Not Found
エラー: http://download.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-1.noarch.rpm をスキップします - 転送に失敗しました
:: Adding Ajenti repo
http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm を取得中
準備しています...              ################################# [100%]
:: Installing package
読み込んだプラグイン:fastestmirror
ajenti                                                   | 2.5 kB     00:00
ajenti/7/x86_64/primary_db                                 |  30 kB   00:00

...
(略)
...

---> パッケージ pyOpenSSL.x86_64 0:0.13.1-3.el7 を インストール
---> パッケージ python-tempita.noarch 0:0.5.1-6.el7 を インストール
--> 依存性解決を終了しました。
エラー: パッケージ: ajenti-1.2.22.13-1.noarch (ajenti)
             要求: python-passlib
エラー: パッケージ: ajenti-1.2.22.13-1.noarch (ajenti)
             要求: python-daemon
エラー: パッケージ: ajenti-1.2.22.13-1.noarch (ajenti)
             要求: python-psutil >= 0.6.0
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
:: Done! Open https://<address>:8000 in browser

pythonのモジュールで足らないものがあるらしいので、これらを先にインストールしなければならない(最小限構成、というわけでもないらしい。Python入れたにも関わらず出たので)。


# yum install --enablerepo=epel python-daemon python-psutil python-passlib
読み込んだプラグイン:fastestmirror


Error getting repository data for epel, repository not found

EPELリポジトリが登録されていないと怒られた。


# yum install epel-release

# yum update

これでEPELリポジトリを追加&アップデート。


# yum install --enablerepo=epel python-daemon python-psutil python-passlib

...
(略)
...

完了しました!

今度はOK。これでAjentiも入ってくれるはず。


# curl https://raw.githubusercontent.com/ajenti/ajenti/1.x/scripts/install-rhel7.sh | sh

...
(略)
...

完了しました!
:: Done! Open https://<address>:8000 in browser

インストール完了。しかし、CentOS7.2ではSSL有効だとダメ、という話を聞いたのでもうちょっと設定。


# vi /etc/ajenti/config.json

"ssl": {
        "enable": false,
}

SSLのenableをデフォルト値のtrueからfalseに変更。

  • 一般設定
    言語設定
    ja_JP
  • パスワード
    管理者パスワード変更

 

Chrony

最小限だとntpすらなかったが、Webサーバ構成では入っている。


# ps ax | grep chrony
  697 ?        S      0:00 /usr/sbin/chronyd
10161 pts/0    S+     0:00 grep --color=auto chrony
# chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* routerida1.soprano-asm.ne     3   6   377     6   +188us[  -34us] +/-   19ms
^- einzbern.turenar.xyz          3   6   337     8   -552us[ -552us] +/-  106ms
^+ v157-7-235-92.z1d6.static     2   6   277     7   +348us[ +348us] +/-   37ms
^+ nipper.paina.jp               2   6   177    75    -34us[ -243us] +/-   26ms

*が付いている(問い合わせ成功)ものがあるのでOK。

 

Apache

Webサーバ構成なので入っているはず。が、初期状態では自動で起きてこないようなので起こす。


# systemctl start httpd.service

サービスをスタートして、httpでアクセスできることを確認。


# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

# systemctl list-unit-files | grep httpd
httpd.service                               enabled

サービスを自動起動に登録。OK。

PHP7


# php -v
PHP 5.4.16 (cli) (built: Aug 11 2016 21:24:59)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

5.4か…仕方ないので一度消して新しいのを入れ直す。


# yum remove php-*
...
(略)
...

完了しました!

からの、7をインストール。ただしremiリポジトリの追加が必要。


#yum.repos.dの下でwgetすること
yum.repos.d]# wget http://rpms.famillecollet.com/enterprise/remi.repo

# ls
CentOS-Base.repo       CentOS-Media.repo    CentOS-fasttrack.repo  epel.repo
CentOS-CR.repo         CentOS-Sources.repo  ajenti.repo            remi.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo    epel-testing.repo

Remiリポジトリの情報を取得する。remi.repoが/etc/yum.repos.dの下に入ったことを確認。


# yum install --enablerepo=remi,remi-php70 php php-devel php-intl php-mbstring php-pdo php-gd php-mysql

...
(略)
...

完了しました!

# php -v
PHP 7.0.12 (cli) (built: Oct 13 2016 18:02:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

Remiリポジトリからphp7をインストール。ついでに必要そうなモジュールもまとめて入れる。

php7が入ったことを確認。


# vi /etc/php.ini

;date.timezone =
date.timezone = "Asia/Tokyo"

;mbstring.language = Japanese
mbstring.language = Japanese

;mbstring.internal_encoding =
mbstring.internal_encoding = UTF-8

;mbstring.http_input =
mbstring.http_input = UTF-8

;mbstring.http_output =
mbstring.http_output = pass

;mbstring.encoding_translation = Off
mbstring.encoding_translation = On

;mbstring.detect_order = auto
mbstring.detect_order = auto

;mbstring.substitute_character = none
mbstring.substitute_charset = none

php.iniの設定を書き換える。

再起動してphpが有効になったら、phpの動作確認をする。


# cd /var/www/html/
# vi info.php

<?php phpinfo(); ?>

これでサーバのIP/info.phpへブラウザでアクセスして、phpinfoの中身が表示されていればOK。


# rm info.php

必要ないのでinfo.phpは削除。

MySQL5.7


# yum remove mariadb-libs

...
(略)
...

完了しました!

MariaDBが入っていたので削除。オプションで選ばなくても最低限は入っているようだ。


# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

# yum info mysql-community-server

...
(略)
...
利用可能なパッケージ
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 5.7.16

...
(略)

# yum -y install mysql-community-server

# mysqld --version
mysqld  Ver 5.7.16 for Linux on x86_64 (MySQL Community Server (GPL))

# systemctl enable mysqld.service
# systemctl start mysqld.service


MySQLのリポジトリを追加し、mysql-community-serverで5.7が利用できることを確認。

インストールしてバージョン確認、再起動時自動で起動するように設定し、起動。


# vi /etc/my.cnf

# 設定値を諸々追加
character_set_server=utf8
skip-character-set-client-handshake
log_timestamps=SYSTEM
default_password_lifetime=0
internal_tmp_disk_storage_engine=MyISAM

デフォルト文字コードなどを設定。設定後、再起動して反映。


# less /var/log/mysqld.log

ログの中から初期パスワードを見つけ出す。


# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : y
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? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL 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? (Press y|Y for Yes, any other key for No) : y
 - 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? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

初期パスワードで認証後、パスワード変更やテストテーブル削除など、セキュリティ周りの設定を変更。

 

phpMyAdmin


# yum install yum-plugin-priorities

Remiリポジトリを使用してインストールをするが、その際に優先度をチェックしたいのでリポジトリの優先度をチェックするプラグインをインストール。


# vi /etc/yum.repos.d/remi.repo

[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/7/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
priority=100
# ↑この行を追加

# 略

[remi-test]
name=Remi's test RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/test/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/7/test/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
priority=100
# ↑この行を追加

# 略

Remiリポジトリは前に追加済みなので、remiとremi-testリポジトリに対する優先度を追記。念のため一度再起動。


# yum-config-manager --enable remi-php70

remiリポジトリのphp70を有効に。…PHP7はリポジトリ指定でyumインストールしたので必要なかった…が、このコマンド実行しないことで、今後うっかりリポジトリ指定なしでインストールかけたりすると嫌なので一応やっておく。


# yum-config-manager --enable remi remi-test

優先順位下げたremiとremi-testを有効に。


# yum install phpMyAdmin

phpMyAdminインストール。


# vi /usr/share/phpMyAdmin/sql/create_tables.sql

-- --------------------------------------------------------

--
-- Privileges
--
-- (activate this statement if necessary)
GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `phpmyadmin`.* TO
  'pma'@localhost;
-- ↑この2行のコメントアウトを外す --

phpMyAdmin用のテーブルを作る準備。


# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>source /usr/share/phpMyAdmin/sql/create_tables.sql
Query OK, 1 row affected (0.02 sec)

Database changed
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
Query OK, 0 rows affected (0.19 sec)

Query OK, 0 rows affected (0.21 sec)

Query OK, 0 rows affected (0.20 sec)

Query OK, 0 rows affected (0.20 sec)

Query OK, 0 rows affected (0.14 sec)

Query OK, 0 rows affected (0.35 sec)

Query OK, 0 rows affected (0.18 sec)

Query OK, 0 rows affected (0.17 sec)

Query OK, 0 rows affected (0.18 sec)

Query OK, 0 rows affected (0.16 sec)

Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.22 sec)

Query OK, 0 rows affected (0.18 sec)

Query OK, 0 rows affected (0.16 sec)

Query OK, 0 rows affected (0.19 sec)

Query OK, 0 rows affected (0.16 sec)

mysql> SET PASSWORD FOR pma@localhost = PASSWORD('pmaのパスワード');
ERROR 1133 (42000): Can't find any matching row in the user table

ん?よく見たら最初の方、GRANTが失敗している。パスワードポリシーで引っかかったっぽい。


# mysql -u root -p
mysql> SET GLOBAL validate_password_length=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

4以下にはできない模様。何度か試すもダメなので、(セキュリティ上良くないが、今回はテストサーバなので)rootで操作することでphpMyAdmin用のユーザを作る・権限を与える・設定する部分を省いた。


# cd /etc/httpd/conf.d/
# vi phpMyAdmin.conf

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require ip XXX.XXX.XXX.XXX #←IP追加
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
     Allow from XXX.XXX.XXX.XXX #←IP追加
#略

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require ip XXX.XXX.XXX.XXX #←IP追加
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
     Allow from XXX.XXX.XXX.XXX #←IP追加
   </IfModule>
</Directory>

phpMyAdmin管理画面のアクセス制限を操作。Apache再起動で管理画面に入れることを確認。

一応、これでphpMyAdminも使える状態となった。

以上、CentOS7(Webサーバ構成)にPHP7とMySQL5.7を入れて(apacheは2.4)、管理画面としてAjentiとphpMyAdminを導入するまで完了。

Apacheの仮想サイト

ついでに仮想ホストも作ってみる。

最初は /home/user/web/ にでも作ろうと思ったが403 Forbiddenが出てしまう。どうもApache2.4はセキュリティが厳しくなったのと、ディレクティブの書き方がずいぶん変わっていることで403をお見舞いされるケースが多いようだ。

そこで代替案として、本来のApacheの管轄内のディレクトリである /var/www/ の下にディレクトリを作って、そこに対して設定することにした。


# mkdir /var/www/hoge
# mkdir /var/www/hoge/piyo

hogeは複数の仮想ホストを突っ込むための親。実際に公開するのはpiyo以下。


<VirtualHost XXX.XXX.XXX.XXX:80>
        DocumentRoot /var/www/hoge/piyo
        ServerName wptest.acs-net.co.jp
        ErrorLog logs/localhost-error_log
        CustomLog logs/localhost-access_log common
        <Directory  /var/www/hoge/piyo >
                AddDefaultCharset utf-8
                AllowOverride All
                Options +Includes +FollowSymLinks
                Require all granted
        </Directory>
</VirtualHost>

Ajenti→ソフトウェア→Apache→main config→httpd.confの末尾に上記ディレクティブを追記して再起動。アクセスできることを確認。

vsftpd


# yum install vsftpd ftp

vsftpdをインストール。


# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP service.
#ここまで、コメント外したり既存の設定を変更

use_localtime=YES
force_dot_files=YES
local_root=/var/www/hoge/
#末尾に追記

設定変更。


# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
# systemctl start vsftpd

自動起動を有効にしてサービススタート。ok。

あとはターゲットディレクトリに権限を付与させたり所有者を変更したりして、ftpクライアントで接続&アップできることを確認。

ついでに

FTPサーバまで立てたので、仮想ホストにWordPressをインストールしてアップデート、記事の投稿ができることを確認。開発用webサーバとして使えることを確認。

各種参考

CentOS

6までとの違い。

 

設定中に参考にしたサイト。

Ajenti

Chrony

Apache

PHP

MySQL

※MySQL5.7でユーザ作らずいきなりGRANTはエラー…phpMyAdminのGRANTが失敗したのはこれが原因か!

phpMyAdmin

vsftpd

タグ: データベース, php, サーバ環境・構築, 手順

 



関連する記事一覧