インストール設定

Ubuntu インストールの途中でサーバーパッケージを選択する部分があるので、以下を選択してインストールします。
  • DNS server ネームサーバーです。felix-labo.orgはこのIPアドレスにありますってことを教えてくれるサーバーです。
  • LAMP server Linux Apache MySQL PHP(Pearl)の頭文字です。サーバーサイドで動くWebサーバーこれでインストールされます。
  • Mail server  メール配信サーバーです。
  • OpenSSH server  暗号化通信SSHの設定です。サーバーを遠隔操作する為に必須です。
  • PostgreSQL database  MySQLでは事足りない場合のオープンソースデータベースです。
$ sudo vi /etc/network/interfaces
ネットワークをStaticに変更。通常、LAN内のパソコンのIPアドレスは、ルーターによってその都度、IPアドレスが振られます。サーバーは、その場所を特定する必要が多いため、IPアドレスを固定に設定します。LAN内のIPアドレスは 192.168.99.・・・ という様になって、最後の数字が順番に振られます。他のパソコンと競合しないために、LAN内のパソコン+2~3以上の数字で設定しましょう。
iface eth0 inet dhcp
ここを以下の様に直します。99 の部分は ご家庭のルーター設定に左右されます。また、一行めの最後の数字は同じルーター内にあるパソコンのそれぞれ振られる番号なので、パソコンの台数等により異なります。ルーターの設定等でご確認くださいませ。
iface eth0 inet static
    address 192.168.99.6
    netmask 255.255.255.0
    network 192.168.99.0
    broadcast 192.168.99.255
    gateway 192.168.99.1
ネットワーク再起動
$ sudo ifdown eth0
$ sudo ifup eth0
これで、ssh でリモート接続できる様になります。リモート側からは、
$ ssh felix@192.168.99.6
の様にアクセスします。(サーバーからキーボードとモニターを外せます。)
Apacheを実行する最低限の権限を有するユーザーを設定
$ sudo adduser flabo
[password]
(名前、部屋番号、等を聴聞してきますので必要に応じて入力します。)

AMPPのインストール

インストール時に選ばなかった場合には、以下の様なパッケージインストールが必要です。
(表示上の関係で複数行で表示していますので、そのままコピーしないでください。)
$ sudo apt-get install php5 libapache2-mod-php5  mysql-server php5-mysql
  php5-sqlite phpmyadmin postgresql php5-pgsql phppgadmin

Apache設定

ウェブページを設置する /virtual 以下のディレクトリを作成します。この /virtual は、最終的にはいくつかのウェブページの バーチャルホストになることを想定しています。
sudo mkdir /virtual
sudo mkdir /virtual/www
sudo mkdir /virtual/log
sudo mkdir /virtual/log/apache2
sudo chown -R flabo:flabo /virtual/*
wwwがapacheのルートになるので、flabo にオーナー変更。また、log は Apacheのログディレクトリになる
$ sudo vi /etc/apache2/sites-enabled/000-default
ここで、以下の様に設定
<VirtualHost *:80>
       ServerAdmin webmaster@localhost

       DocumentRoot /virtual/www/             //ルートに変更
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /virtual/www/>      //ルートに変更
               Options FollowSymLinks MultiViews    //途中のIndexes を削除
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>

       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <Directory "/usr/lib/cgi-bin">
               AllowOverride None
               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
               Order allow,deny
               Allow from all
       </Directory>
       ErrorLog /virtual/log/apache2/error.log        //ログ保存ディレクトリを変更

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog /virtual/log/apache2/access.log combined  //ログ保存ディレクトリを変更
       ServerSignature Off           //エラー時のサーバー情報を非表示

   Alias /doc/ "/usr/share/doc/"
   <Directory "/usr/share/doc/">
       Options MultiViews FollowSymLinks     //途中のIndexes を削除
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>

</VirtualHost>
さらに独自の設定ファイルを作ります。
$ sudo vi /etc/apache2/conf.d/flabo.conf
アパッチ実行ユーザーの設定とサーバー名称を設定します。
User flabo
Group flabo
ServerName felix-labo.org:80
UseCanonicalName On
コンテンツを置く場所が /virtual/www/ で Apacheを起動するのが、そのファイルのオーナーであるflaboということになります。これで、この中のコンテンツの権限は、
$ chmod 700 -R /virtual/www
という様にユーザー以外は何もできないように設定することができます。レンタルサーバーでは決してできない方法ですが、これで、flabo を乗っ取られる以外、内部のファイルを外から変更されることがなくなります。(もちろんrootをとられてしまえば別ですが・・・)加えて万が一flaboを乗っ取られたとしても、flaboは、他のどこにも属さないユーザーなので、重大な設定ファイルが書き換えられることはありません。(不便だからといって、flabo に sudo 権限を与えたりしない様にしましょう。)
テストしてみます。
$ su - flabo
$ cd /virtual/www
$ vi ./index.html
で適当に・・・
Hello felix-labo!
とでも打って
$ logout
$ sudo /etc/init.d/apache2 restart
これで
http://192.168.99.2
などでアクセスするとちゃんと表示されると思います。

LAMP設定

php の設定

php.iniの内容を書き換えます。主にセキュリティ上の観点です。
sudo vi /etc/php5/apache2/php.ini
書き換える内容は以下のとおりです。コメント化をはずすだけのものもあります。
(270行目付近)
memory_limit = -1
(457行目付近)
magic_quotes_gpc = Off
(476行目付近)
default_charset = "UTF-8"
(1157行目付近)
mbstring.language = Japanese
(1167行目付近)
mbstring.internal_encoding = UTF-8
(1189行目付近)
mbstring.substitute_character = none;
反映するにはApacheリスタート
$ sudo /etc/init.d/apache2 restart

MySQL の設定

実行ユーザーの設定を行います。まずはルートユーザーのパスワード設定から
$ mysql -u root -p
[password]
続いて、Webコンテンツ用のデータベース実行ユーザーを設定。上記でつくった最小限ユーザーと同じにします。
mysql> create database webkintai;
(他にも、作りたいDBがあれば、ここでつくります。)
mysql> create user flabo@localhost identified by 'pppppppq';
mysql> grant usage on *.* to flabo@localhost;
mysql> grant all on webkintai.* to flabo@localhost;
(他に作ったDBで権限をもたせたければ、ここで設定します。)
mysql> quit
簡単に解説をすると一行目でウェブページ用のデータベースを作成し、二行目で実行ユーザーを作ります。三行目で作ったユーザーに対するすべての権限を剥奪(usage)します。その後、Webkintai に対してだけすべての権限を付与します。
次に文字化け防止用に、my.cnf の設定を変更します。
$ sudo vi /etc/mysql/my.cnf
[mysqld]の最後に以下の2行を追加します。
default-character-set=utf8
skip-character-set-client-handshake
再起動して設定を有効にします
$ sudo /etc/init.d/mysql restart

phpMyAdmin

PDT環境でやったときに、apt-get のものがうまく作動しないので、自分でインストールします。まず準備。 サーバー端末から、unzipします。unzipはデフォルトでは、インストールされていないので、インストールします。
$ sudo apt-get install unzip
また、mycrypt がないと警告されるのでインストールします。
$ sudo apt-get install php5-mcrypt
$ sudo /etc/init.d/apache2 restart
つづいて、ファイルをおくディレクトリを作成し、解凍します。
$ sudo mkdir /virtual/www/felix-labo.org/
$ sudo mkdir /virtual/www/felix-labo.org/phpmyadmin
$ sudo chown -R flabo:flabo /virtual/www/felix-labo.org
$ sudo chmod 700 /virtual/www/*
つぎに、http://www.phpmyadmin.net/home_page/index.php から、ダウンロードしたものを scp でサーバーへコピーします。(以下は、クライアント端末からのコピー実行)
scp ./phpMyAdmin-3.2.3-all-languages.zip flabo@192.168.99.6:/virtual/www/felix-labo.org/
(flabo のパスワードを入力)
再度サーバー端末に戻って
$ su - flabo
$ cd /virtual/www/felix-labo.org/
$ unzip /phpMyAdmin-3.2.3-all-languages.zip
$ mv ./phpMyAdmin-3.2.3-all-languages ./phpmyadmin
$ cd /phpmyadmin
$ cp -a ./config.sample.inc.php  ./config.inc.php
$ vi ./config.inc.php
以下を最後に(?> の前に)追加
$cfg['blowfish_secret'] = 'hoge-hoge';
LAN内からのアクセスに限定するため、設定を追加します。
$ sudo vi /etc/apaches/conf.d/phpmyadmin.conf
新しいファイルが立ち上がるので、以下の様に記述します。
# phpMyAdmin default Apache configuration
<Directory /virtual/www/felix-labo.org/share/phpmyadmin>
       Options Indexes FollowSymLinks
       DirectoryIndex index.php

       AllowOverride All
       Order deny,allow
       Deny from all
       Allow from 192.168.99
</Directory>
AllowOverride All ・・・からの四行により同じLAN内からしかアクセスできなくなります。LAN内からアクセスするときには
http://192.168.99.6(サーバーIPアドレス)/phpmyadmin/
といった具合になります。

phppgadminの設定

$ sudo apt-get install phppgadmin
ユーザーを追加します。phppgadmin は、postgreSQLの初期ユーザーpostgresを初期状態でログインできない様にしています。このポリシーに合わせて新たなスーパーユーザーを作成したいと思います。
$ sudo passwd postgres
(ここでパスワードを設定します。)
$ su - postgres
(以下で一般的に使用するユーザーを作ります。username を任意の名前にしてください)
postgres@mv1c3e:~$ createuser -P username
(ここでパスワード設定と権限設定をします。特にこだわらなければ、Y でよいと思います。)
postgres@mv1c3e:~$ logout
phpmyadminが、初期設定がフリーアクセスだったのに対し、phppgaminは初期設定で、自分自身しかアクセスできない様になっています。リモートアクセスは出きるようにしたいので、
$ sudo vi /etc/phppgadmin/apache.conf
で、10行目付近を以下の様に変更
order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0 ::1/128
allow from 192.168.99                 //追加
# allow from all
で再起動
$ sudo /etc/init.d/apache2 restart
これで晴れて /192.168.99.2/phppgadmin の様にアクセスできる様になります。

固定IPによるWEB公開

私の場合には固定IPとドメインを独自取得してWebサーバーを公開しています。固定IPは無料で提供しているところもある様ですが、怪しいプロバイダだったり、すぐにサービスが終了したりと、安定していない様です(参考)。そもそも限られたIPアドレスを固定的に振り分ける訳なので、無料というところに無理があるのかもしれません。具体的にはso-netの固定IPを利用しています。料金は、1,260円/月額 です。
ドメインは、bfitで取得しました。こちらも一時期無料の取得がはやっていましたが、これは正確には初年度無料であり、2年目以降お金がかかってくるというのが通常なのだと思います。bfitは、.jp で 8千円/年額 程度で、 .com などは安いです。料金表
といった具合に、独自ドメイン&固定IPは、年間2~3万円が最低でもかかると見た方がよいです。無料を追求するなら、やはりサブドメイン&ダイナミックDNS(定期的なIPアドレスの変化があっても、名前変換(URL→IPアドレス)をしてくれるもの)の活用となるのだと思います。
so-net 個人向け固定IPアドレス+bfitのでドメイン取得した場合で、私が使っているルーター()での設定は、こちら

バーチャルホストの設定

Apacheは、一つのサーバーで、2つ以上のWebサーバーとして働かせることができます。私の場合には
  1. http://felix-labo.org
  2. http://dreambg.game-host.org
という様に2つのウェブサイト用に一つのサーバーを用いています。上は独自ドメインで下はネームサーバー無料サービスhttps://www.dyndns.com/からドメインを取得しています。IPアドレスと各々のネームサーバーの問題を別として、それぞれのURLが呼び出されたときに表示をするサーバー内のディレクトリを設定します。
まず、ディレクトリとユーザーの設定です。いろいろとやり方考えられるのでしょうが、私の場合、新たに 2.http://dreambg.game-host.org のコンテンツを公開するためのディレクトリを持つユーザー dreambg を作りました。また、公開用のMySQLのデータベースも同様に作成し、そのデータベースにだけ権限を付与します。(上記参照くださいませ)
ここで問題になるのが、1.http://felix-labo.org をflabo というユーザーのディレクトリで公開していて、Apacheもflaboが実行しているという点です。実行ユーザーを二つ持つことができないので、2.http://dreambg.game-host.org のコンテンツを公開するためのディレクトリを持つユーザー dreambg のユーザーグループ dreambg にflabo を登録することにしました。dreambg の公開ディレクトリ内の権限は
$ chmod 770 ./*
といった感じでグループユーザー(実際にはApacheを実行しているflaboだけ)にも自由に権限を与える様にします。これでコンテンツは問題なく稼働し、セキュリティ上も安全となる訳です。
ここまでのユーザー登録とグループ登録は、
$ sudo adduser dreambg
(パスワード登録等)
(mysqlのユーザー登録と権限登録は割愛します。上記ご参照ください。)
$ sudo vi /etc/group
で以下の様に dreambg グループに flabo を追加
dreambg:x:1002:flabo
これ以外にも、Apache実行ユーザーを一人だけとして、そのユーザーが両方のコンテンツユーザーになるというやり方もあるでしょう。
前置きが長くなりましたが、バーチャルな複数Webサーバーの設定方法です。
$ sudo vi /etc/apache2/conf.d/virtualhost
という様に、conf.d 下に新たに設定ファイルを作成します。設定内容は
NameVirtualHost 192.168.99.2

<VirtualHost 192.168.99.2>
       ServerAdmin webmaster@felix-labo.org
       DocumentRoot /home/flabo/www/
       ServerName felix-labo.org
       ErrorLog /home/flabo/log/error_logi
       CustomLog /home/flabo/log/access_log combined
</VirtualHost>

<VirtualHost 192.168.99.2>
       ServerAdmin webmaster@dreambg.game-host.org
       DocumentRoot /home/dreambg/www/
       ServerName dreambg.game-host.org
       ErrorLog /home/dreambg/log/orror_logi
       CustomLog /home/dreambg/log/access_log combined
</VirtualHost>
これで、それぞれのURLごとの表示ページを完全に分離して表示できるようになります。