俺の開発大作戦

Linux, Mac, Windows10 で 迷走する1開発を進めていく備忘録5

Ubuntu16.04LTS に MySQL5.7 をインストール

LAMP環境(*)構築の仕上げにMYSQLをインストールする。併せて、PHPとMySQLを連携させたり、MySQL管理ツールのphpMyAdminを利用するために必要なモジュール群をインストールしていく。

(*)Linux, Apache, MySQL, PHP を組み合わせたWebアプリケーションの開発・実行環境のこと。それぞれの頭文字をとって、LAMP環境。

1. MySQL5.7をインストール

確認したところ、PPA無しの公式aptリポジトリで最新版の5.7がインストールできるようなので、早速実行。

% sudo apt-get install mysql-server

冒頭、MySQLのrootパスワード設定を求められる。適当に設定すると後で面倒そうなので、きちんと設定。設定後、もう一度パスワードの入力を求められるので、再度入力する。

これでMySQLのインストールは終了になる。コマンドでインストールされたバージョンを確認しておく。

% mysql --version
mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper

2. 必要なPHPモジュール群をインストール

PHPとMySQLの接続モジュールをインストールする。

% sudo apt-get install php5.6-mysql

phpMyAdminの設定ファイル等で必要とするphp-mcryptをインストールしておく。

% sudo apt-get install php5.6-mcrypt

日本語などのマルチバイト文字利用のための拡張モジュールもインストールしておく。

% sudo apt-get install php5.6-mbstring

ついでに、'php.ini'でマルチバイト文字利用のための設定を行う。

% vim /etc/php/5.6/apache2/php.ini

PHP公式サイトを参考に次のように設定。

extension=php_mbstring.dll ;行先頭のコメントアウトは外す→後日、エラーログをチェックしたところ、 'No such file or directory' と警告が出ており、また別で代替のモジュールとなる 'mbstring.so' を読み込んでいたので、コメントアウトを戻した。

mbstring.language = Japanese
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.encoding_translation = Off
mbstring.strict_detection = Off

default_charset = "UTF-8"

zend.multibyte = On
zend.script_encoding = "UTF-8"

3. 定番管理ツールのphpMyAdminをインストール

公式レポジトリからインストール開始。

% sudo apt-get install phpmyadmin

途中、オプションの選択について聞かれるが、必要無いので「いいえ」を選択。

更に、webサーバの選択について聞かれるので、「apache2」を選択。

インストール終了後、apacheサーバを再起動。

% sudo service apache2 reload

2.で実施したマルチバイト文字利用の設定が無事完了していれば、'http://localhost/phpmyadmin'を開くと、次のようにphpMyAdminのログインページが現れる。

4. 'my.cnf'へ言語設定の記述を追記

最後に、MySQLの設定ファイル'my.cnf'を編集して、デフォルトの言語を'latin1'から'UTF-8'に変更するための記述を追加。

% sudo vim /etc/mysql/my.cnf
[mysqld]
character_set_server=utf8
skip-character-set-client-handshake

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

MySQLを再起動し、言語設定が反映されているのを確認して終了。

% sudo systemctl restart mysql
[ ok ] Restarting mysql (via systemctl): mysql.service.
% mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

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

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper

*
*
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
*
*

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

<追記1>MySQLの停止・開始や状態確認のコマンド

% sudo systemctl stop mysql
% sudo systemctl start mysql
% sudo systemctl restart mysql
% sudo systemctl status mysql

<追記2>自動起動の開始および停止

% sudo systemctl disable mysql
% sudo systemctl enable mysql

Ubuntu16.04LTS に PHP5.6 をインストール

さて、PHPのインストールであるが、いきなりPHPのバージョン選択に悩むことになる。

というのも、PHP7系はまだ利用されている実績が少なく感じる一方で、安定版と思う5.6系もアクティブサポートは既に終了し、セキュリティサポートも2018年末までとなっているからだ。('PHP: Supported Versions'を参照

少々悩んだ挙句、ここは手堅く安定志向に拠り5.6系を選択。

1. PPAをインストール後に、PHP5.6をインストール

Ubuntuの公式レポジトリではバージョンを選択することができず、7.0が自動的に選択され導入されてしまう。

% sudo apt show php

Package: php
Version: 1:7.0+35ubuntu6
Priority: optional
Section: php
Source: php-defaults (35ubuntu6)
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PHP Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0
Supported: 5y
Download-Size: 2,832 B
APT-Sources: http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
 PHP (PHP: Hypertext Preprocessor の再帰的頭字語) は広く使われているオープン
 ソースな汎用スクリプト言語で、特にウェブ開発に適しており、HTML に組み込むこ とができます。
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).

そこで、まず最初にOndřej Surý氏のPPAをインストールする。これで、バージョンを5.6, 7.0, 7.1から選択してインストールできるようになる。

% sudo add-apt-repository ppa:ondrej/php
% sudo apt-get update
% sudo apt-get upgrade

*PPAとは'パーソナル・パッケージ・アーカイブ'の略で、Ubuntuユーザーのチームや個人がそれぞれ管理している非公式のレポジトリとなる。Ubuntuでは公式レポジトリですぐ対応できないケースでも、ユーザがパッケージを用意して公式と同じ振る舞いで配布できる仕組みが用意されている。そして、ユーザが多いUbuntuコミュニティはこうした有志のPPAに強力に支えられている。

なお、'add-apt-repository'で'command not found'が返る場合は、事前にsoftware-properties-commonとpython-software-propertiesを入れてやり直す。

% sudo apt-get install software-properties-common python-software-properties
% sudo apt-get update
% sudo apt-get upgrade

また、追加したPPAを削除する場合は、以下のとおり。

sudo add-apt-repository --remove ppa:ondrej/php

この後、晴れて5.6をインストールする。

% sudo apt-get install php5.6

2. apache2でPHPモジュール読み込みを確認。

phpinfo()の実行ファイルをapache2のルートディレクトリに作成する。

% vim phpinfo.php
<?php
phpinfo();
?>

上のように記述してファイルを保存。続いて、ブラウザで'http://localhost/phpinfo.php'を開き、以下のようにPHPの環境設定情報が出力されていればPHPが正常に動作しているということで終了。

Ubuntu16.04LTS に apache2 をインストール

慣れ親しんだLAMP環境(*)でCMSとか色々作りたいので、早速apacheから入れていく。Xamppとかインストールすれば一発で開発環境が全て整って楽なんだけど、各サーバーの最新の導入仕様をきちんと手を動かし確認しながら進めたいので、急がば回れで一つ一つ導入していく。

(*)Linux, Apache, MySQL, PHP を組み合わせたWebアプリケーションの開発・実行環境のこと。それぞれの頭文字をとって、LAMP環境。

1. apache2のインストール

apt-get からインストール

% sudo apt-get update
% sudo apt-get install apache2

2. セキュリティ設定

security.conf を編集

% cd /etc/apache2/conf-available
% sudo vim security.conf

デフォルトでは、ServerTokensは「OS」になっている。

  ServerTokens OS

この状態だと、http://サーバーのアドレス/にアクセスすると、レスポンスヘッダーのServerのところに、OS名やApacheのバージョンが表示されてしまう。

セキュリティ上好ましくないので、ServerTokensを「Prod」に変更する。

  ServerTokens Prod

*ServerTokensを「Prod」に変更すると、サーバのプロダクト名(すなわち、「Apache」)だけの表示となる。ちなみに、「Full」にすると、デフォルト以上に詳細な情報が表示されるようになる。

なお、この設定はサーバ全体に適用され、バーチャルホスト上で有効にしたり 無効にしたりはできない。

次にSignatureの設定を確認。

  ServerSignature On

Signatureもデフォルトの「On」のままだとサーバが生成するドキュメント (エラーメッセージ、mod_proxy における FTP のディレクトリリスト、 mod_info の出力、等々) のフッターに、ポート番号など様々な情報が表示されてしまうので変更が必要。

  ServerSignature Off

「Off」に変えるとフッターそのものを非表示にできる。

3. バーチャルホストの設定

デフォルト以外の設定を行う場合は次の手順で行う。

(1)/etc/apache2/site-available/ のディレクトリ内にあるデフォルトの設定ファイル"000-default.conf"を元に、設定ファイル"[任意のファイル名].conf"を複製して追加し、ServerName や DocumentRoot などの項目を必要に応じて編集し保存する。

% cd /etc/apache2/sites-available/
% sudo cp -i 000-default.conf [任意のファイル名].conf
% sudo vim [任意のファイル名].conf

なお、使用しているドメイン間でそれぞれ設定を変えたい場合は、ドメイン毎にconfファイルを作成する。(ファイル内の ServerName の欄でドメイン名を指定し、その他の設定を書いていく。)

  ServerName ドメイン名
  DocumentRoot ドキュメントルートまでのパス

以下、その他の追記例。

  # 制御するディレクトリ
  <Directory ドキュメントルートまでのパス>
    # オプション
    Options FollowSymLinks
    # .htaccessの許可
    AllowOverride all
    # アクセス許可
    Require all granted
  </Directory>

  # エラーログ
  ErrorLog ${APACHE_LOG_DIR}/error.ドメイン名.log
  # エラーログを記録するレベル
  LogLevel warn
  # アクセスログ
  CustomLog ${APACHE_LOG_DIR}/access.ドメイン名.log combined

(2)上で作成したファイルのシンボリックリンクを /etc/apache2/sites-enabled のディレクトリ内に保存してapacheを再起動すれば設定が有効になる。(サーバ起動時に、httpd.conf が sites-enabled のディレクトリ内にシンボリックリンクがある全てのconfファイルを読み込む仕組み。)

シンボリックリンク作成の際は、「a2ensite」というコマンドを利用する。(作成した場所から sites-enabled へ簡単にシンボリックリンクが作成できる。)

% sudo a2ensite [任意のファイル名].conf

新しくバーチャルホストを設定した場合、デフォルトの設定ファイルへのシンボリックリンクは、特に必要なければ原則削除する。削除の場合は、「a2dissite」というコマンドを使用。

% sudo a2dissite 000-default.conf

最後にサーバを再起動して終了。

% sudo service apache2 reload

なお、サーバを段階的に停止→スタートする場合は以下のとおり。

  sudo service apache2 stop
  sudo service apache2 start

・・・

<後日追記>
アクセスのあったURLを、正規表現で書き換えてから処理する機能 'mod_rewrite' が初期状態では無効になっているために、少々苦戦したので追記。なんでも Ubuntuのリポジトリから取得出来るApache2はオリジナルのApache2とはディレクトリの構成や設定の方法が違うらしい・・・。当方は、この仕様のために仮想パスで指定した URL がアクセス先でことごとく '404 not found' になって表示不可になってしまい、数時間嵌った・・・。

まずはmod_rewriteが利用可能となっているかを確認

% cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

上のとおり、利用可能なことを確認したら、以下のコマンドで有効化しよう。

% sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

上記メッセージのとおり、apache サーバを再起動すると設定が有効になる。

なお、Ubuntu で Apache2 のモジュールを有効にするには a2enmod を使用する。逆に無効化する場合は、同じ書式で a2dismod を使用する。

% sudo a2enmod [module]
% sudo a2dismod [module]

有効・無効化できるモジュールは /etc/apache2/mods-available/ にあるため、各々のファイル名を拡張子なしで指定する。

俺: 小林康典(KOBACHAN)

▼プロフィール畳む

▶プロフィール見る

時はネットが産声をあげた前世紀末、東京大手町に本社がある元国営の通信事業会社に新卒入社し、以降およそ10年間勤務して、インターネット系の新規事業立ち上げに複数携わる。

その後、退職して、ITベンチャーのスタートアップ参画を皮切りに、複数のIT/Web企業でプロダクトマネージャーを務めた後、縁あって現在の会員制ホテル&医療系事業会社へjoin。

元来、エンジニアばかりの環境で過ごしてきたが、ここは一般の非IT系事業会社でIT関連は全て外注。内製中心のアジャイル開発を企てるも、実際に技術がわかり手も動かせるIT担当者の存在はほぼ皆無で、参加直後から周囲の理解が得られず孤立無援の大ピンチ。

幾たびの紆余曲折を経て、技術やデザインに素養がある仲間を一人一人見つけアジャイル開発の世界に勧誘しては、知識・ノウハウを提供して地道に自律的な成長を促し、小規模ながらなんとか内製開発できるチームの形を整える。

現在、業務改善系ITプロダクトの企画およびシステム開発、ビッグデータ分析やAIビジネス転化への試行錯誤など、マルチに行い奮闘中。
(最近は、サイボウズ社のSaasサービス「キントーン」関連の開発多め。)

E-mail: contact@kobachan.biz

カテゴリー
月別アーカイブ
  • 2020 (1)
  • 2019 (2)
  • 2018 (5)
  • 2017 (6)