.htaccessを使えるようにする。

.htaccessを有効にする。
ubuntu公開サーバで.htaccessを有効にするには、モジュールを読み込む必要がある。
「.htaccess」ファイルを有効にする方法 – No:570 – Linuxで自宅サーバ構築(新森からの雑記)
より
現在使っているモジュールを確認する。

$ sudo apache2ctl -M
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)
userdir_module (shared)
Syntax OK

rewriteのモジュールがないので、a2enmodで読み込む。

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

有効にするにはapacheを再起動する必要がある。

$ sudo service apache2 restart
* Restarting web server apache2 ... waiting [ OK ]

確認する。

$ sudo apache2ctl -M | grep rewrite
Syntax OK
rewrite_module (shared)

javascriptが動かない。

htmlへ埋め込むときに、<script type="javascript">と書くと、読み込まない。
<script type="text/javascript">と書くか、<script>だけなら動く。
mimeタイプを書く場合は正しく記述する必要がある。
HTML5/HTML5の基本/MIMEタイプ - TAG index Webサイト


この人の失敗(の気づき)のおかげで私も気づくことができた。ありがとう。
javascriptが動かない理由が・・・ | Your Way, My Way, Any Way

apacheを設定する。

先日インストールしたLAMP環境を設定していく。

Ubuntu で apache の設定。まとめ。 - freefielder.jp
を参考に進めていく。
webブラウザで「http://IPアドレス/」にアクセスしてapacheが動作しているのを確認する。

ユーザディレクトリにディレクトリを作って公開用に設定する。

$mkdir public_html //公開用のpublic_htmlディレクトリを作成する。
$sudo chmod 755 -R public_html/ //作成したディレクトリのパーミッションを設定する。
$sudo a2enmod userdir //ユーザディレクトリを公開可能にする。

で誰でもアクセスできるようにする。

さらに、このディレクトリでphpファイルを実行させるために、以下の設定ファイルを修正する。

$sudo vi /etc/apache2/mods-available/php5.conf
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
#            php_admin_value engine Off ←この行をコメントアウト
        </Directory>
    </IfModule>

設定を有効にするには、apacheを再起動する。

$ sudo service apache2 restart

public_html以下に入れたファイルは

http://サーバのIPやドメイン/~ユーザ名/以下のディレクトリ

でアクセスできる。

VPSサーバを契約して、設定する。

DTI serversMan@VPS

まずDTIのserversman@VPSに安さに引かれて申し込みをする。一月は無料というのにも引かれて。
共用サーバではなくVPSにしたのは、おもしろそうだったから。後で自爆することになるかもしれない。でも、ドットインストールの動画は確認したし、自宅でもファイルサーバでdebian使っているから大丈夫。(きっと、多分…)
選んだOSはubuntu 10.10。少し古いのが気になる。
terminalから

ssh -p 3843 root@(メールでもらったIPアドレス)

でログインする。(パスワードもメールで届く)
まず、パッケージのアップデート。

apt-get update
apt-get upgrade

で、upgrade-managerをインストールして、ubuntuのバージョンを上げる。
ちなみに現在は

root@dti-vps-srv88:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"

である。(一応確認)

apt-get install update-manager

でupdate-managerをインストールして、

export LANG=C
do-release-upgrade

で一つ上にバージョンアップする。export LANG=Cで英語表示にしているが、そのままだとインストール中のメッセージが日本語文字化けで表示されるための対策。

時間はかかるが、時々出ているダイアログに対応しつつ(大抵は設定ファイルを上書きするかどうかの問い)、インストールは完了する。
でapt-get upgradeすると、kernelが古くて対応するいくつかのパッケージが古いままになっているとメッセージが出る。

DTIのserversMan@VPS仮想マシンの運用にOpenVZを使っていて、kernelはメインマシンと共有するためVPSユーザはバージョンアップできない。
一部バージョンアップできないままでも問題なく運用しているのは分かるけれどもdebianの現在の安定版(7.0 wheezy)やubuntuの長期サポート版(12.04LTS)をちゃんと入れられないというのは少し不安が残る。
ということで、さくらのVPSを申し込む。

さくらのVPS

申し込みとインストール

申し込んでからサポートの情報を見つつインストールを行う。
インストール用のVNCターミナルはjavaで動いているのだけど、メインで使っているubuntuではうまく動かせなかった。windows 7 を立ち上げて、その中でインストール作業を進める。(ここ(pdf)の情報によれば、icedtea6-plugin パッケージを入れてあれば動作するとのこと。)

サポート情報の通りに進めていくとOSのインストールは終了する。
インストール終了後、パッケージのアップデートをしておく。

sudo apt-get update
sudo apt-get upgrade

OSのインストールが終了すれば、あとはターミナルからアクセスできる。
以下はドットインストールの講座を基に、作業を進める。
日本語化は不要。
ユーザ追加はインストール時にやったので不要。sudoも。ubuntuはrootではログインせずsudoを使う。

公開鍵を設定する。

ユーザのホームディレクトリに.sshディレクトリを作成する。パーミッションを変更しておく。

chmod 700 ~/.ssh

ローカルマシン上で鍵を作成する。
鍵の作成コマンドは

ssh-keygen -t rsa -v

鍵の名前、パスフレーズなどはデフォルトのままでOK
公開鍵のパーミッションを変更しておく

chmod 600 .ssh/id_rsa.pub

転送するにはscpを使う

scp ~/.ssh/id_rsa.pub ユーザ名@ipアドレス:~/.ssh/authorized_keys

名前はauthorized_keysに変える。
複数のPCから鍵認証でログインするには、ログインしたいPCで作成した公開鍵のファイルの中身をauthorized_keysファイルに追記していく。

鍵認証でのログインは

ssh -i  ~/.ssh/id_rsa ユーザ名@ipアドレス

デフォルトで作成している場合は

ssh -i  ユーザ名@ipアドレス

でつながる。

sshの設定の変更

ポート番号の変更
まず、サーバのユーザ権限から
sudo -sでスーパーユーザになる。
/etc/ssh/sshd_configを修正する。(あらかじめバックアップをとっておくとよい)
Port 22
を別の数字に設定する。(コメントアウトされているときは解除する)1024-65535
パスワードログインの禁止
PasswordAuthで検索して、yesをnoに変更する。
rootログインの禁止
PermitRootで検索して、yesをnoに変更する。(コメントアウトされているときは解除する)

修正が終了したら

service ssh restart

ポートを指定してsshをつなぐ場合は、

ssh -p ポート番号 ユーザ名@ipアドレス
firewall の設定をする。

ubuntuの場合はufwを使う。ubuntu公式wikiの記事はこちら
Linux Salad: ufwでファイアーウォールを設定より。

sudo ufw enable

で、起動する。

sudo ufw allow ssh

としておけば、sshは開放できる。
状況は

sudo ufw status

で確認できる。

LAMP環境のインストール

インストールされているパッケージを調べるには(ここ)より

dpkg --get-selections

を行う。特定のパッケージについて調べたいときはパイプでつないでgrepで検索する。

dpkg --get-selections | grep php

apachemysqlphpもインストールされていない。
LAMP環境の構築は

sudo apt-get install lamp-server^

の一行で終了する。
インストールの途中でMySQLのrootパスワードを聞いてくるので設定しておく。

サービスの起動・停止、あるいは自動起動について

Debian(Ubuntu)で サービスの起動、停止を管理するツールを調べてみた(chkconfigのかわりになるもの) | レンタルサーバー・自宅サーバー設定・構築のヒントより
ubuntuではupstartを使うのが標準らしい。
Upstart - なんなんなん行く?より

パッケージをインストールした時点で、自動起動は設定されるらしい。

mysql -u root -p

MySQLの動作確認。ちゃんと動いていた。

apacheを公開しておく。

sudo ufw allow apache

ブラウザにVPSIPアドレスを入れると、"It works!"とちゃんと出てくる。


ビデオでやっていたRuby on RailsPython、MongoDBは省略。

レスポンシブデザイン

素材をもらって、レスポンシブデザインの練習をする。

Media Queries

Media QueriesはMedia Typeの拡張で、同じソースからウィンドウサイズの違いに合わせて見やすく最適化できるようにする仕組み。割り当てるCSS自体を切り替える方法と、CSSの中に場合分けしてサイズごとの設定を記述する方法とがある。

/* 共通設定およびスマートフォン向けのスタイル */
....
/* タブレット向けのスタイル:481px 〜 768px */
@media only screen and (min-width: 481px) {
...
}
/*  PC向けのスタイル:769px〜960px */
@media only screen and (min-width: 769px) {
...
}

こちらはCSSファイルに記述する。まず共通する設定とスマートフォン用の設定を記述した後、それぞれのスクリーンサイズへの記述を加えてサイズごとにCSS設定が上書きされるようにする。

<link rel="stylesheet" href="style-s.css">
<link rel="stylesheet" href="style-m.css" media="only screen and (min-width:600px) and (max-width:979px)">
<link rel="stylesheet" href="style-l.css" media="only screen and (min-width:980px)">

こちらはhtmlのheadに記述する。まずstyle-s.cssを読み込んでから、mediaのスクリーンサイズによってstyle-m.cssかstyle-l.cssかを追加で読み込む。

viewport

スマートフォン用のmetaタグを記述する。

<meta name="viewport" content="width=device-width">

PC向けサイトをスマートフォン対応にするときにとりあえずやりたい3つのこと | 【スマホ×HTML5】Web&ハイブリッドアプリ開発者ブログに細かく書いてあった。width=device-widthだけ設定しておけば充分みたい。

clearfix

clearfixを使うとfloatを多用する場面で楽になる。
使い方はfloatを使うブロック要素にあらかじめclass=cfを設定しておく。

以下の記述をCSSに入れておけば、floatの解除に悩まされずに済む。(簡単なレイアウトなら使わずに済むこともある)

/* clearfix */
.cf { zoom: 1; }
.cf:before, .cf:after { content: ""; display: table; }
.cf:after { clear: both; }
Web Font

ここではGoogle APIからMaven Proフォントを読み出している。

<link href='http://fonts.googleapis.com/css?family=Maven+Pro:400,900' rel='stylesheet' type='text/css'>

ここでの数字指定はfont weight(フォントの太さ)を表している。かつてあったマルチプルマスターフォントに由来する数字とのこと。
マルチプルマスターフォントについては非常に興味深い話がありそう(こことかこことか)だけれども、現在ではほとんど使われていない模様。
上記のソースはGoogle Fontから自動生成されたlinkタグ。Maven Proフォントの400(normal)と900(Ultra Bold)を使うために読み込みをしている。

岡村企画製版サイトのSEO対策(続き)

岡村企画製版
http://okamura.ninja-web.net/

検索の1ページ目に出るようになったが、もう少し上に表示させたい。
まず、titleを「岡村企画製版です。」から「岡村企画製版」と体言止めにする。
あと、文書構造でulの中のpタグをいくつかh4に変えてみる。
見栄えは全く変えていない。
これでさらに様子見する。

自宅サーバのNAS、Raid5のHDDがダウン。(続き)

HDD交換して無事RAIDが再構成された翌日、ディスクの状況を再確認したら前日にトラブっていた/dev/sdbが止まっていた。/dev/sdcを追加して再構成が終わっていたのが幸いだった。業務用なら何も言わずに交換だけれども、3TBで容量もあるのでフォーマットし直して再利用する。ただ動作には注意が必要だろう。

まず状態を確認する。

# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md2 : active raid5 sdc2[4] sda2[2] sdd2[1]
2930254440 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/3] [UUU_]

md1 : active raid5 sda1[4] sdd1[3] sdc1[6]
2930279016 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/3] [U_UU]

unused devices: <none>

念のため、/dev/sdbのパーティションを確認する。

# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print 
Model: ATA ST3000DM001-1CH1 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags

(parted) quit 

/dev/sdcのパーティションをMB単位で調べる。

# parted /dev/sdc
GNU Parted 2.3
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit MB 
(parted) print 
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sdc: 3000593MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 1.05MB 1000204MB 1000203MB md1
2 1000204MB 2000399MB 1000195MB md2

(parted) quit 

/dev/sdbのパーティション分けとRAID追加。

# parted -s /dev/sdb mklabel gpt
# parted -s /dev/sdb mkpart md1 2048s 1000204MB
# parted -s /dev/sdb mkpart md2 1000GB 2000399MB
# mdadm --add /dev/md1 /dev/sdb1
mdadm: added /dev/sdb1
# mdadm --add /dev/md2 /dev/sdb2
mdadm: added /dev/sdb2

RAIDの状態を確認する。(表示は再構築中のもの)

# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md2 : active raid5 sdb2[5] sdc2[4] sda2[2] sdd2[1]
2930254440 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/3] [UUU_]
resync=DELAYED

md1 : active raid5 sdb1[5] sda1[4] sdd1[3] sdc1[6]
2930279016 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/3] [U_UU]
[>....................] recovery = 0.1% (1040008/976759672) finish=250.1min speed=65000K/sec

unused devices: <none>

/dev/sdcと/dev/sdbは1TBづつ余っているので、その領域を使ってRAID1を構築する。
まず、空き領域を確認する。

# parted -s /dev/sdc print free
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
17.4kB 1049kB 1031kB Free Space
1 1049kB 1000GB 1000GB md1
2 1000GB 2000GB 1000GB md2
2000GB 3001GB 1000GB Free Space

# parted -s /dev/sdb print free
Model: ATA ST3000DM001-1CH1 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
17.4kB 1049kB 1031kB Free Space
1 1049kB 1000GB 1000GB md1
2 1000GB 2000GB 1000GB md2
2000GB 3001GB 1000GB Free Space

それぞれの空き領域にパーティションを設定して、RAID1を構築する。

# parted -s /dev/sdb mkpart md3 2000GB 3000GB
# parted -s /dev/sdc mkpart md3 2000GB 3000GB
# mdadm --create --assume-clean /dev/md3 --level=1 --metadata=1 --raid-device=2 /dev/sdb3 /dev/sdc3
mdadm: array /dev/md3 started.

それぞれのRAIDはLVMを使って1つのディスクとして扱えるようにしている。その論理ディスクに作成したRAIDを追加する。

# pvcreate -Z y -M2 /dev/md3
Writing physical volume data to disk "/dev/md3"
Physical volume "/dev/md3" successfully created
# vgextend Storage /dev/md3
Volume group "Storage" successfully extended
# vgdisplay Storage | grep Free
Free PE / Size 238432 / 931.38 GiB
# lvextend -l +238432 /dev/Storage/lvol0
Extending logical volume lvol0 to 6.37 TiB
Logical volume lvol0 successfully resized
# resize2fs /dev/Storage/lvol0
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/Storage/lvol0 is mounted on /Storage; on-line resizing required
old_desc_blocks = 350, new_desc_blocks = 408

再起動してからLVMデバイスをアンマウントして、まずディスクチェックをする。

# umount /Storage
# e2fsck -f /dev/mapper/Storage-lvol0 
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/Storage-lvol0: 574820/5723264 files (3.3% non-contiguous), 1147927269/1465133056 blocks

問題ないのを確認したら、LVMデバイスのリサイズをする。

# resize2fs /dev/mapper/Storage-lvol0
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/mapper/Storage-lvol0 to 1709287424 (4k) blocks.
The filesystem on /dev/mapper/Storage-lvol0 is now 1709287424 blocks long.

終わったらマウントする。

# mount /Storage

最後に状態確認をする。

# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 4.1G 439M 3.5G 12% /
udev 10M 0 10M 0% /dev
tmpfs 801M 476K 801M 1% /run
/dev/disk/by-uuid/4f838fa1-f5d4-46d0-95f4-bb7d15000ece 4.1G 439M 3.5G 12% /
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.7G 0 1.7G 0% /run/shm
/dev/sde3 3.7G 1.6G 2.0G 45% /usr
/dev/sde4 6.7G 1.4G 5.1G 21% /var
/dev/mapper/Storage-lvol0 6.4T 4.3T 1.8T 71% /Storage
# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4] [raid1] 
md3 : active raid1 sdb3[0] sdc3[1]
976620352 blocks super 1.2 [2/2] [UU]

md2 : active raid5 sdc2[4] sdb2[5] sda2[2] sdd2[1]
2930254440 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/4] [UUUU]

md1 : active raid5 sda1[4] sdd1[3] sdc1[6] sdb1[5]
2930279016 blocks super 1.2 level 5, 8k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>
# parted -s /dev/sdb print

freeModel: ATA ST3000DM001-1CH1 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
17.4kB 1049kB 1031kB Free Space
1 1049kB 1000GB 1000GB md1
2 1000GB 2000GB 1000GB md2
3 2000GB 3001GB 1000GB md3
3001GB 3001GB 466kB Free Space

ストレージの空きが1TB増えて、それぞれのHDDは正常運転。/dev/sdbも正しくパーティションが確認できる。