さくらのVPS借りてみたので使ってみる【一日目】

さくらインターネットのVPSを借りてみた。

第一回目の今回は、初期状態からウェブサーバーを立ち上げるまで。

久しぶりに、(ほぼ)空のLinuxサーバーをいじるので悪戦苦闘です(笑)
VPSのいいところは、コンパネから簡単にOSの再インストールが出来るところですね。コンパネからrootパスワードを設定したら、ものの数分で初期状態のサーバーが立ち上がります。これは、便利!

ではでは私がやってみた手順をババッと

SSHにrootでアクセスしない

SSHにrootでログインできるようにしておくとセキュリティ上、マズイのでSSHログイン用のユーザーをつくります。

ここから、しばらくは「VPSコントロールパネル」のリモートコンソールから作業します。

# useradd –m USERNAME
# passwd USERNAME

※USERNAME…新しく作るユーザー名に置き換えてください。

そしたら、今作ったユーザー名でSSHログインできるか確認します。問題なくログインが出来れば、次にrootのSSHログインを停止する作業です。

/etc/ssh/sshd_config ファイルを編集します。

PermitRootLogin no

既にコメントアウトされた PermitRootLogin yes の行があると思いますので、その近くに記述しておけばいいでしょう。

さらにSSHで使用するポートの変更もすれば、セキュリティ的には少し安心かもしれません。

Port 10022

例)SSHポートを 10022 にする設定(初期値は 22 )

SSHを再起動!

/etc/init.d/sshd restart

SSHを再起動したら、設定が反映されているか確認します。rootでSSHログインできなくなっているか?(ポートを変更した場合)変更したポートでSSHログインできるか?などなど。

パケットフィルタの設定

さくらのVPSは初期状態で、「全開」状態になってます。
まあ、公開用サーバーとして使うので、そんなに気にしなくてもいいのかもしれませんが、気持ち悪い感じがするかもなので必要なパケット以外はフィルタしちゃいます。

今回は、WWW(80)、FTP(20)、SSH(22)、それとDNS(53)を許可する設定にします。

適当なところに、iptables 設定用のスクリプトを書いておきます。
コマンドラインから、1行ずつ実行しちゃダメですよ。コマンドでやってると最初の INPUT DROP の後から、何もできなくなっちゃいます!

vi /home/USERNAME/IPTABLES_SH

#!/bin/sh
iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp -m udp –sport 53 -j ACCEPT
iptables -A INPUT -p udp -m tcp –sport 53 -j ACCEPT

service iptables save
service iptables restart

ip6tables -F
ip6tables -P INPUT DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD DROP

service ip6tables save
service ip6tables restart

スクリプトの説明をブロックごとに簡単に…

  1. 最初のブロックで iptables に関する設定をクリア(初期化)します。
  2. 出力(OUTPUT)を許可(ACCEPT)し、入力(INPUT)とパケット転送(FORWARD)を破棄(DROP)する。
  3. ローカルの出力と入力をともに許可します。
  4. 宛先ポート(–dport)ごとに許可するパケットを指定します。
  5. セッション確立したパケットは許可します。
  6. DNS(53)はudpを使うので、5の許可では通信できないので別途指定します。
  7. ここまでの設定を保存(save)し、iptables を再起動(restart)します。
  8. 8,9番目のブロックは、IPv6に関する設定ですが、今回は特に使用しないで、出力以外は破棄(DROP)にしておきます。

スクリプトの記述ができましたら、パーミッションを変更して実行します。

# chmod 744 /home/USERNAME/IPTABLES_SH

# /home/USERNAME/IPTABLES_SH

ウェブサーバーパッケージのインストール

ウェブサーバーに必要なパッケージは、とりあえず、httpd、php、mysqlくらいでしょうか、必要になったらあとで追加しましょう。

ちゃちゃっとやってしまいたいので yum で簡単にインストールしちゃいます。

# yum install httpd http-devel
# yum install php php-mbstring php-mysql php-gd php-pear
# yum install mysql mysql-devel mysql-server

それぞれ、実行するとインストールするパッケージの一覧と(y/n)表示されますので、 y を押してインストールを完了します。(-y オプションをつけてやっちゃっていいかも)

自動起動スクリプトをつくる

「つくる」とか言っちゃってますが、シンボリックリンクを作成するだけです。

yumでインストールしたパッケージの起動スクリプトが /etc/rc.d/init.d 以下に保存されていますので、そこから必要なパッケージをランレベル3( /etc/rc.d/rc3.d )にシンボリックリンクを作成します。

# cd /etc/rc.d/rc3.d
# ln –s ../init.d/httpd S40httpd
# ln –s ../init.d/mysqld S41mysqld

できたら、おもむろに reboot してみましょう。

そして起動したらブラウザでサーバーにアクセスしてみます。
Apacheのテストページが表示されれば、セットアップ完了です。

とりあえず、今日はここまで。

【次回予告】FTP、バーチャルホストの設定 の予定

開発者向けAPIツールを作ってみているよ

週末を利用してAPIツールみたいなものを制作中。

一応、簡単なユーザー登録制にして、簡単に利用できるようにしようと考えている。

できる事(できるようにしたい事)

  • Yomi-Searchなどの相互リンク登録フォームに「リンク設置確認」機能
  • 任意の画像に任意のテキストを画像合成した「クーポン」などの発行機能
  • 任意のスクリプトにPageRank機能
  • etc…

無料のスクリプトや、CGIに、「こんな機能があれば」というのを”3行以内の記述”で実装できるものを検討中。

今週は、ユーザー登録ページを作成してみた。
次回は、登録ユーザーに対して、使用するAPIの承認プロセスを作成予定。

APIごとに使用の許可ができるようにする。
イメージとしては、「NINJA TOOLS」みたいな感じになるかな。

有料化するかどうかは、今後の検討案件。

顧客からの相談、メールサポートを今から準備しておく

ECサイトのみならず、さまざまな業種で使えると思うメールトラッキングシステム。

メールトラッキングシステムとは

問い合わせ内容をメールで送りつつ、ウェブにアーカイブしておき、全体の問い合わせ案件を一元管理できるシステム。

これを入れると、従来のメールだけのシステムでありがちな「担当者によって対応が違う」「過去の応答を参考にしにくい」などと行った事がすくなるなる(と思う)

ようは、メール送受信機能が付いた「プライベート掲示板」みたいなシステム。

スタッフは、管理ページにログインして新しくきている案件や、担当している案件の返信をこなし、マネージャーは自分の部署の案件全体を管理し、対応状況の確認やノウハウを蓄積、整理していく。
そしてまたスタッフは整理されたノウハウ情報を基に、さらに高度なサポートにも対応できるようになっていく。

そんなシステム。

osTicket が使いやすそうだったんだ・・

PHP + MySQL 環境で簡単に利用できてカスタマイズしやすそうな osTicket を選んだんです。

osTicket は、表示言語をソース(テンプレート)にハードコーディングしてあって、日本語環境にするには、全ソースの書き換え&メール送信関数の修正が必要。

なもんで、どうせ全ファイルをいじるんだから言語パックみたいな仕様を組み込んじゃえー。
って思い切って、japanese.lang.php なるファイルを作成して日本語環境にしてみたんですね。

だいたい出来上がって(アドミンページを残すのみ)、ネットをブラリとしていたら、

osTicket は eTicketになってたのね。知らなかった

なんて記事を見つけてしまった・・・orz

eTicket は lang.php がデフォでついてます

やっちまった感がいっぱいです。

eTicket のポイント

  • 投稿時に Captcha で画像認証できる
    (osTicket には実装されていない)
  • トップページが新規問い合わせフォーム+ログインフォームの構成になっている
    (osTicket は新規ページへボタンでリンク)
  • theme ディレクトリでテーマ変更も簡単(みたい)
    (osTicket は、テーマ変更の概念が無い)

ん~。どっちで進めるべきか悩む。

ま、とりあえず最初のサイトはせっかくなので osTicket でいっています。
基本的なオペレーションは変わらないみたいなので。

MOONGIFT: » 必見!怖くなるくらい優秀なCMS「concrete5」:オープンソースを 毎日紹介

よさげなCMSツールの紹介。

まだインストールもしてないので、公式デモをちょいいじってみただけ。

日本語に関しては、問題なく通るみたいなので、そのまま使用可能のようです。

ちょうど一緒にデモサイトにアクセスしている人がいるみたいで、テストページが追加されたりしていますが、デモサイトのコンテンツは毎時間リセットされるとのこと。

CMSツールとしては、MODx をおすすめな私ですが、もしかしたらコッチに浮気してしまうかも。

こんど、試してみよう。

MOONGIFT: » 必見!怖くなるくらい優秀なCMS「concrete5」:オープンソースを毎日紹介

ショッピングカートを作ってみる

さて、MODxでカートモジュールを作ってみるとかみないとか、言ってるわけですが、ちょっと頓挫気味。

MODxでセッションを管理するのってPluginが必要みたいだけど、そのへんの情報が、まだまだ未熟です。(言い訳)

というわけで、単独のPHPでショッピングカートを作ってみる。

一部では「PHPはセキュリティが甘いから・・」とか「オープンソースは品質に問題が・・」とかいうシステム屋さんがたまにいますが。

『それは、お前らが責任取りたくねーだけの言い訳だろ!』と言いたい。

では、まずレシピから・・

  1. Linuxサーバー(Apache)
  2. MySQL
  3. PHP
  4. Dreamweaver
  5. テキストエディタ(秀丸推奨)

レシピの1~3は、ホスティングサーバーについてくる物で十分です。(月額400円くらい)

あそうそう、間違っても高価なWindowsサーバープラン(IIS)とか選んじゃダメですよ。

IIS版のPHPは、あくまでエミュレーターみたいな物ですから(最近は良くなった?)

ホスティングサーバーによって、MySQLのバージョン、PHPのバージョンが違う場合があるので、自分の使うサーバーがどのバージョンを使っているかよく確認しておきましょう。

PHPが上手く動かなくて、「PHPのバージョンのせいだ・・」とか、「MySQLの文字コードが・・」とかいう人もいますが、それも言い訳でしか、ありません。

きちんとソースを記述すれば問題ありません。

Dreamweaverを使う利点は、HTMLが簡単に記述できる点と、リモートのMySQLサーバーに接続して「まるでサーバー上で作業しているように」PHPコードを記述できるという2点です。

Dreamweaverのコードエディタについているポップヒントと、補完機能は、本当に便利です。

最後のテキストエディタは、秀丸+PHP強調表示を追加して使用するのがベストですね。

最終的な調整とか、PHPコードのクリーンアップとかに使います。

じゃあ、作ってみます。

ショッピングカートの作り方

ショッピングカートって何かを考えると、要するにメールフォームの一つなんだと思う。

今でも時々、メールフォームだけで、注文を受けているページを見る事があります。商品がひとつだけのお店とかそうですね。

それを多数の商品ラインナップに対応すべく、複数の注文を受けられるようにしたり、注文者情報をフォームに入力して、最後は、注文者とお店にメールを送る。

そう考えれば、ショッピングカートがずっと簡単なものに見えてきますね。

1.メール送信部分を作る。

というわけで、基本の基本、注文者とお店にメールを送信する部分を作ります。

この時にメールの内容を日時とともにMySQLに保存する部分も作ります。
これで、注文履歴を参照する“元”ができるわけですね。

2.購入希望商品を持ちまわるカート部分を作る。

ショッピングサイトでは、サイト内をブラブラといろんな商品を見て回るので、サイト内でカートに入れた商品を持ちまわる機能が必要になります。

これは、SESSION関数を使って簡単にできます。

SESSIONには、商品コードと数量、あと必要ならオプション値(色とかサイズ)を保持しておきます。

SESSIONの追加、削除をきちんとできれば上出来です。

3.注文者情報もSESSIONで持ちまわります。

お客様は、どこで気が変わるかわかりません。

時に、住所を入力して、決定ボタンを押す直前に「あ、あれも買おう」とか思って、商品ページに戻る事もあります。

そんな時に、注文ページでまた、一から、名前、住所などを入力するのは、かったるいですよね。

なので、「一度入力された」データーは、ショッピング終了まで保持するようにします。

4.おまけ機能で、他に差をつける。

他のライバルサイトに無い、機能で買い物の楽しさ、カートの使いやすさをアピールします。

  • 郵便番号→住所 自動補完機能。
  • お届け日時の指定をカレンダーで指定。
  • 商品レビュー。
  • 他のおすすめ商品。
  • ポイント機能。

などなど、流行のAjaxとかいろいろ使ってイケテルカートを目指します。