VineLinux6.2でWebサーバを構築する覚書
社内で使っているWebサーバがそろそろ入れ替えかな、という話になり、だったら!だったらわたしにやらせてくださいー!と、今までほとんどWindowsしか触ったことのないわたしが、Linuxをさわってみた記録というかメモというか。
目次
- はじめに
- マシンにVineLinuxをインストール
- ログイン・システム更新
- Apache2(Webサーバ)の構築
- ProFTPd(FTPサーバ)の構築
- PHPのインストール
- Samba(ファイルサーバ)の構築
- 日本語入力可能にする
- MySQL(データベースサーバ)の構築
- phpMyAdminでDB操作
- あとがき
ひとつの記事にまとめてしまったことを後悔するほど長いです…_(:3 」∠)_
1.はじめに
ローカルネットワーク内で使うWebサーバを構築するのが目的です。FTPでファイル送ったり、LAN内のWindowsサーバを読み込んだり、PHPやMySQLを入れてWordPressが動くようにしていきます。
現時点(2014年5月)で最新のVineLinux6.2、32bit(そちらのほうが互換性がいいんじゃないか、と上司sの薦めにて)をインストールした、わたし個人の環境で起きたことをメモっていきます。
Linuxは学生時代にちょこっとだけ触ったものの、ほぼ初めてな気持ちでやっておりますので、コマンドラインで出来る操作も、フォルダを開いて、該当ファイルをテキストエディタで編集して、みたいなことも多々やっておりますので、同じく初めての方などのご参考になれたらと思います。
2.マシンにVineLinuxをインストール
マシンを用意
社内のPCをWinXPからWin7へ入れ替えした際、もともとXPが入っていて余ったの(スペックはそこそこいいやつ)をひとつもらいました。Linuxインストールの際にHDD初期化してくれるとのことで、XPが入ったままのものをスタンバイ。
メディアの準備
こちらの公式サイトから、VineLinux6.2/32bit のISOイメージファイルをDL。容量大きいのでけっこう時間かかります。それをDVDに焼きました。(USBメモリでもいけるみたいですね。)
インストール
手順はこちらがすっごく分かりやすいです。
用意したディスクをマシンに入れて、再起動するとインストールメニューが表示されるので、「Install – default」を選択して、インストール開始。
個人的な備忘録としては、インストールの種類は「すべて」にしました。使うマシンにWinXPが残っていたので自動パーティションでドライブの初期化を行い、ネットワーク設定で社内で割り振った固定IP・ゲートウェイ・DNSなどをそれぞれ設定。ファイアウォールは有効で、使う目的のWebサーバ(HTTP,HTTPS)とファイル転送(FTP)を許可。リモートログイン(SSH)もあったほうが便利だったかも。
あとはRoot(管理者権限)パスワードと一般アカウントのユーザ名(フルネームは空欄でもOKだった)とパスワードをそれぞれ設定。
3.ログイン・システム更新
そのままではrootログイン出来ない
よっしゃインストール終わったぜー!再起動後のログイン画面で、一般アカウントのユーザ名が表示されてるけど、とりあえずrootで入りたい。「その他」を選んで、ユーザ名を「root」にし、rootパスワードを入れて…
ログインできない。
こちらによると、どうもデフォルトではrootログインできないとのこと。そうだったのか…。参考に従い、先ほど設定した一般アカウントでログイン。
デスクトップに出ている [コンピュータ] というアイコンをクリックし、 [ファイルシステム] → etc → pam.d 内の gdm というファイルを編集する。
さて、この gdm というファイル。管理者権限がないと編集できないファイルらしいので、右クリック、[管理者として開く] を選択して、rootパス…。
怒られた…orz
ここでハマる。まだ何も出来てないところでハマる。最終的には何故か一般アカウントのパスワードで通るという良くわからないことに…。どこのサイトを見てもここはrootパスのはずなのに未だに謎…。しかしとりあえず通ったので次に進む。
/etc/pam.d/gdmの編集
管理者として開けたので、2行目の頭に # をつけてコメントアウト。
#auth required pam_succeed_if.so user != root quiet
保存して再起動すると、[その他] からrootでログインできるようになりました!
システム更新
やっとrootで入れたところで、まずはシステムの更新をしてみる。
先ほども参考にさせて頂いたこちらのサイトの一番下の通りにやってみようと…、うん、えっと、あのコードを打ち込む黒い画面(コマンドライン端末)はどこから…?
調べました。ここをクリックすると出てきます!もしくは左上の [アプリケーション] → [アクセサリ] → [端末] でも。
apt-get update apt-get upgrade
こちらを1行ずつEnterを押すと実行されます。
隠しファイルを表示しておく
ファイルを編集するとバックアップファイルなどが自動で作成されるんですが、デフォルトだと見えない設定です。個人的には見えてるほうが分かりやすいので、出しておきます。(デスクトップ画面上のタスクバー内の)システム → 設定 → ユーザ向け → ファイル管理 をクリックして、
ここにチェック。
4.Apache2(Webサーバ)の構築
ではまずWebサーバといえば有名なApacheから。Apache2というものが既にインストールされているはず。
コマンドライン端末にて起動
/etc/rc.d/init.d/apache2 start
Apache2を起動してみる。
chkconfig apache2 on
Linux起動時に自動的にapache2が起動するように設定。
動作確認
デフォルトでは /var/www/html がドキュメントフォルダとのことなので、この中に index.html ファイルを作ってみる。右クリック → ドキュメントの生成 → 空のファイル にて、ファイル名を index.html にして、テキストエディタで中身を編集。
<html> <head></head> <body>test</body> </html>
中身は適当に、こんな感じ。で、ブラウザで見てみる…。ブラウザはどこだw
ここだった。で、このLinuxのIPを http://192.168.xx.xx/ と叩いてみると…、
でたー!(*゚Д゚*)
たったこれだけなのにすごいなぁ!LAN内のWindowsマシンのブラウザからでも見れました。
設定ファイルの編集
設定ファイル /etc/apache2/conf/httpd.conf をテキストエディタで開いてみる。だいたいデフォルトで良いような予感…とりあえずPHPは使いたいので390行目あたりの
DirectoryIndex index.html index.html.var
を、
DirectoryIndex index.html index.htm index.shtml index.php index.cgi
へ変更しておく。
/etc/rc.d/init.d/apache2 restart
書き換えた場合は要再起動。
5.ProFTPd(FTPサーバ)の構築
今度は、LAN内のWinマシンからFTPソフトを使ってファイルをアップロードできるようにしたい。
コマンドライン端末にて起動
今回も既にインストールされているので、
service proftpd start
起動して、
chkconfig proftpd on
Linux起動時に自動的に起動するように設定。
chown -R ユーザ名:グループ名 /var/www/html
rootではFTPサーバーにログインできないので、一般ユーザに権限を与える。グループ名は、(デスクトップ画面上のタスクバー内の)システム → システム管理 → ユーザーとグループから確認できる。
別マシンからFTPソフトで動作確認
LAN内のWin7マシンにFFFTPを入れて、上記の一般ユーザでログイン。無事ファイルのやりとりができました!
6.PHPのインストール
WordPressも目的のひとつではありますが、それ以外にもPHPを使って動的なページを組みたいので、PHPは不可欠。
コマンドライン端末にてインストール
apt-get install php5 php5-apache php5-mysql
インストールはこれで終了。Linuxでのソフトインストールって未だに慣れなくてドキドキするw
ApacheのMPMを切り替え
どうもこのままでは動かないらしい。
Apacheは2.0から、起動時にMPM(Multi-Processing Modules)という基本モジュールが選択できるように設計されています。
とのことで、workerモードではPHP拡張機能が使えないらしく、PHPを動かすサーバではpreforkを選択するのが望ましいと。なるほど…、では切り替えを。コマンドライン端末にて、
update-alternatives --config apache2
と、入力すると
2 プログラムがあり 'apache2' を提供します。 選択 コマンド ----------------------------------------------- + 1 /usr/sbin/apache2.worker * 2 /usr/sbin/apache2.prefork Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
デフォルトではworkerになってるので、preforkにするために、「2」を押してEnter。
/etc/rc.d/init.d/apache2 restart
そしてApacheを再起動。
動作確認
ドキュメントルート(デフォルトでは /var/www/html )に test.php というファイルを作成、中身は
<?php phpinfo(); ?>
とだけ。ブラウザから http://自身のIP/test.php を見てみて、
こういう画面が現れたら成功!PHP動いたー(*´∀`*)
日本語の文字化けを直す
設定ファイル /etc/php5/php.ini をテキストエディタで開いて見てみる。各セクションにそれぞれ設定項目があるみたいだけど、末尾の [VINE] というところでまとめて書くことも出来る、という感じでしょうか。
[Vine] date.timezone=Asia/Tokyo output_buffering = Off expose_php = Off memory_limit = 32M variables_order = "GPCS" default_charset = UTF-8 extension_dir = /usr/lib/php5 allow_url_include = Off sendmail_path = /usr/sbin/sendmail -t -i session.save_path = "/var/php5/session" session.use_only_cookies = On session.use_strict_mode = On session.entropy_file = /dev/urandom session.entropy_length = 32 session.hash_function = 1 mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = pass mbstring.encoding_translation = On max_input_time = 30 max_input_nesting_level = 64 max_input_vars = 1000 mysql.default_port = 3306 mysql.default_socket = /var/lib/mysql/mysql.sock mysqli.default_socket = /var/lib/mysql/mysql.sock pdo_mysql.default_socket= /var/lib/mysql/mysql.sock
デフォルトでこんな感じ。これが、ひっじょーーーに、ハマりました…。かなりあれこれ試したんですが、最終的にとりあえず日本語の文字化けを直すだけなら、わたしの環境ではこのハイライト部分を、
;default_charset = UTF-8
「;」をつけてコメントアウトする。という…。。
/etc/rc.d/init.d/apache2 restart
コマンドラインにてApacheを再起動(そうしないと反映されない)すると、日本語表示ができました。
ううむ、こちらを見るに、
default_charsetとは 出力時にHTTPヘッダとして送信する文字コード名 のこと。
(中略)
ただし、自動でやってくれる機能を除去したので、手動でheader関数でContent-typeを打ち込むこと。それからHTMLにはmetaで文字コードを指定する。(xhtmlなら先頭行も)
とのことなので、php.ini で default_charset を指定しない場合は手動で指定してやれば大丈夫、かな。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>タイトル</title> </head> <body> <p>サンプルテキスト</p> </body> </html>
一応、わたしの環境ではこんな感じで header.php などに分割して include して、化けずに動いてます。php.ini は他にも開発環境のために設定したほうが良いところもあるかもしれないので、随時勉強してかなきゃ。
7.Samba(ファイルサーバ)の構築
同じLAN内にあるWindowsファイルサーバの検索を、PHPを使ってブラウザで行いたいという野望があります。調べてみると、Sambaというもので共有フォルダをLinuxにマウントすれば良いとのこと。で、Sambaも既にインストール済とのこと。すごいな!(たぶん、一番最初のLinuxのインストール時に「すべて」を選んだからですよね。)
ユーザ登録
Linuxの一般アカウントと同じユーザ名とパスワードで登録してみます。コマンドラインにて、
smbpasswd -a ユーザ名
パスワードを2回要求されるので、それぞれ入力。
サービスを起動
smb というサービスの他に、nmb という名前からIPアドレスをたどってくれる名前解決サービスもあるらしいです。IPのみで指定するなら smb だけでも良いみたいですが、今後のことも考えて両方起動しておきます。
/etc/rc.d/init.d/smb start /etc/rc.d/init.d/nmb start
コマンドラインから、起動。
chkconfig smb on chkconfig nmb on
例のごとく、Linux起動時に自動的にサービス起動するように設定。
/etc/samba/smb.conf を編集
今回、ワークグループ名がデフォルトのWORKGROUPじゃなかったので、設定ファイルをテキストエディタで開いて、90行目あたりの
workgroup = WORKGROUP
というところを修正。
/etc/rc.d/init.d/smb reload /etc/rc.d/init.d/smb restart
コマンドラインにて、設定を読み込み直して、再起動。
マウントポイントを作っておく
Linux上のどこにマウントするか決めて、そこにマウント用のディレクトリを作ります。 /mnt の下に作るのが一般的なのかなーと思ったので、今回は /mnt/win というディレクトリにしてみました。
コマンドラインからも出来ると思いますが、わたしはWin操作みたいな感覚で、ディレクトリを開いて右クリックから [フォルダの生成] で作りました。
コマンドラインからマウントする
mount.cifs //192.168.xx.xx/フォルダ名 /mnt/win -o username=***,password=***
マウントしたい対象のWindowsファイルサーバのIP/フォルダ名と、Linuxのマウントポイントを指定して、オプションにはWinファイルサーバへアクセスする為のユーザ名とパスワードを入れます。何も返答がなければ成功。/mnt/win の中を見てみると入ってる!すごい!
mount.cifs //192.168.xx.xx/フォルダ名 /mnt/win -ro username=***,password=***
ちなみに、読み取り専用でマウントするにはオプションを -o じゃなくて -ro で。
umount /mnt/win
アンマウント(マウント解除)は、マウントポイントを指定してこのように。
Linux起動時に自動でマウントさせる
手動では出来たので、今度は自動的にいつもマウントしておきたい。起動時の自動マウントは、/etc/fstab を編集するとのこと。
テキストエディタで開いて、最終行に追記。
//192.168.xx.xx/フォルダ名 /mnt/win cifs username=***,password=***,ro 0 0
マウント対象、マウントポイント、オプション、の順番。今回は読み取り専用にしたかったのでオプションに ro も入れとく。最後の 0 0 は、dumpとfsckチェックの有無だそうで、両方 0 (不要)にしておきました。
動作確認のため再起動してディレクトリを見てみたら、マウントされてる!できたーヽ(*´∀`)ノ
8.日本語入力可能にする
よし、今度はこっちのフォルダをマウントしちゃうぞー!と、Win側の日本語フォルダをマウントしようとしたら、日本語が打てない…!ここまできて初めて気がつく。Linuxは…ソフトをインストールしてやらないと日本語入力できないんですね…!
apt-get install anthy scim-anthy scim anthy-el
コマンドラインからインストール後、/etc/X11/xinit/xinitrc.d/ というディレクトリ上で右クリック → ドキュメントの生成 → 空のファイル にて、ファイル名を scim にして、テキストエディタで中身を編集。
scim -d &
と書いて、scimを有効に。
chmod 755 /etc/X11/xinit/xinitrc.d/scim
コマンドラインにて実行権限を変更。
今度は /etc/bashrc というファイルをテキストエディタで開いて、最後の行に
XMODIFIERS=@im=SCIM GTK_IM_MODULE=scim export XMODIFIERS GTK_IM_MODULE export USE_XOPENIM=t
と追記。これでいいのかな…?でも何も変わらないぞ…?と、ごねごね。途中で気がつく。( ゚д゚)ハッ! こういうときは再起動かッ…!
再起動後、コマンドラインを開いて、[半角/全角] キー( [Ctrl+Space] でもいいみたい)を押してみたら
右下にこんなものが現れた!なにこのAnthyの王冠アイコン!かわいい!!そして日本語入力できた!
うおおおお!linux日本語入力できた!!anthyっていうのか!金髪美少女に脳内変換されて可愛い((└(:3」┌)┘))
— *you (@ateitexe) 2014, 4月 22
日本語が堪能な、金髪美少女アンシー。やばいかわいい。
— *you (@ateitexe) 2014, 4月 22
興奮のあまり妄想を繰り広げた様子がこちらになります。クリスタ(進撃の巨人)みたいなの。結婚したい。それは置いといて、これで日本語フォルダもマウントできるようになりました!
9.MySQL(データベースサーバ)の構築
お次はDB!WordPressも入れたいし、それ以外でもPHPと連携させていろいろ作りたいです!
apt-get install MySQL-server MySQL-client
コマンドラインから、インストール。
mysql -u root
Mysqlに接続して、
mysql> select user,host,password from mysql.user;
ユーザ情報を表示してみると、
+------+-----------------------+----------+ | user | host | password | +------+-----------------------+----------+ | root | localhost | | | root | xxxxxxxxx.xxxxxxxxxxx | | | root | 127.0.0.1 | | | | localhost | | | | xxxxxxxxx.xxxxxxxxxxx | | +------+-----------------------+----------+ 5 rows in set (0.00 sec)
こういうのが出ます。xxxのところは、インストール時に設定したホスト名が出ました。パスワードが設定されていないので、設定します。
mysql> set password for root@localhost=password('***'); mysql> set password for root@xxxxxxxxx.xxxxxxxxxxxt=password('***'); mysql> set password for root@127.0.0.1=password('***'); mysql> delete from mysql.user where user='';
1行ずつ実行していきます。rootのパスワード(3つとも同じ)を打って、匿名ユーザも削除。これでもう一度ユーザ情報を表示するコマンドを打ってみると、ちゃんと設定されているはず。
mysql> exit
終わったらMysqlを切断しておく。
10.phpMyAdminでDB操作
MySQLは入ったものの、使い慣れてるphpMyAdminで操作したい…!
インストール
まず、こちらから最新verをDL、zipファイルを右クリック → [展開] して、phpMyAdmin-4.1.13-all-languages というフォルダ(数字はバージョン)を phpmyadmin という名前へ変更。(zipファイルは削除。)
こいつをApache2のドキュメントフォルダ( /var/www/html )へフォルダごと移動して、ブラウザで http://自身のIP/phpmyadmin/ を叩く。
おおー!よし、ではrootで、さっき設定したパスワードで…
#2002 MySQL サーバにログインできません
入れないorz どうやら /etc/php5/php.ini の設定っぽい。
mysql.default_socket = /var/lib/mysql/mysql.sock mysqli.default_socket = /var/lib/mysql/mysql.sock pdo_mysql.default_socket= /var/lib/mysql/mysql.sock
これがなきゃいけないみたいだけど…どっかで見たなこれ。と、思ったら、末尾の [VINE] にあった!PHP5をインストールしたときにいじり過ぎてコメントアウト(頭に「;」)してた!!ので、「;」を削除。
/etc/rc.d/init.d/apache2 restart
コマンドラインにてApacheを再起動したら、ログイン出来たー!
警告が出てるので直していく
「設定ファイルが秘密のパスフレーズ (blowfish_secret) を必要とするようになりました」
/var/www/html/phpmyadmin/config.sample.php をコピーして config.inc.php という名前にして、
$cfg['blowfish_secret'] = '***'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
17行目あたりのこの記述にパスワードを設定したら、phpMyAdminにログインし直せばOK。
phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。
create_tables.sql というファイルが必要みたいなので探す。ところでこれに限った話じゃないのですが、環境やバージョンの違いなどで、参考サイトに載っている情報とファイルの場所が違うことが結構あるなぁと感じました。そんな名前のディレクトリないんだけど…!ってなったときは、
右上のアイコンクリック → 欲しいファイル名を入れて、
出てきたら右クリック → プロパティ
ここで場所を確認すれば、わたしみたいなLinux初心者さんでも見つけられるかも!(アドレスが長くて「…」って省略になっちゃっているときは、ウィンドウの端っこ掴むと伸ばせました)
脱線しましたが、お目当てのファイルはphpMyAdminをインストールした場所の example というディレクトリの中(わたしの環境では /var/www/html/phpmyadmin/example/create_tables.sql )にあったので、ブラウザ上のphpMyAdminの [インポート] から、該当ファイルを実行。
さっき作成した /var/www/html/phpmyadmin/config.inc.php をテキストエディタで開いて、
/* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding;
この部分の頭の「//」を削除して、コメントアウトを解除。(ver4.1.13)
「mcrypt 拡張がありません。PHP の設定をチェックしてみてください。」
apt-get install php5-mcrypt
mcryptがないとのことなので、インストールして
/etc/init.d/apache2 restart
apacheを再起動すればOK。
一般ユーザを作っておく
無事phpMyAdminが使えるようになったら、ユーザがrootしかいないのも良くなさそうなので、一般ユーザを作っておく。今後WordPressなどDBを操作したいときの設定はこの一般ユーザを使う。
ちなみにWPを入れなくてもこの時点で、PHPからMySQLに読み書きするページは作れるようになりました。
11.あとがき
長くてすみません(;´Д`)!!!ここまで読んでくださった方がどれだけいるかわからないですが…w
今後としては、ひとつのディレクトリに画像ファイルを突っ込んだらそれを全部読み込んでギャラリー的なhtmlを出力してくれるPHPを書きたいと思ってます。(WordPressでやればいいかなーと思ったものの、わざわざDB使うほどでもないし、逆に管理がめんどくさくなりそうだなぁと。)
とはいえ、お知らせをブログ的に書きたいという要望があるためWordPressは入れるつもりなので、WPはそれに専念してもらって、テンプレも外部から読み込むようにしようかなと。そちらも記事に出来たらいいなと思ってます。
2件のコメント
サーバー再構築で大変参考になりました。
apache2起動とFTPサーバー構築を行いました。
こんなに簡単だったのか^^
ありがとうございます。
これからcgi設定します。
次はsambaに挑戦します。
これからもよろしくお願いします。
高木さん、コメントありがとうございます。
結構昔に書いたもので、現在とはいろいろバージョンとか違っちゃってるかと思うのですが、それでもお役に立てて光栄です! こんな記事自分以外に誰が読むんだと思っていましたがw 残しておいて良かったですー!(*´∀`*)
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。