WEBの勉強ノート
Loading

Apache,PHP,MySQLテストサーバー構築手順(beta)

2010 年 2 月 28 日 日曜日

テストサーバーを作り直したので、メモを残します。テストサーバーは Vmware Server 上に仮想サーバーとして作成しました。物理環境でも手順は変わらないはず。手早く構築するために手順は最低限にしています。

テスト環境構築フロー

- Vmware イメージ作成
- CentOS5.4 インストール
- ネットワーク設定
- セキュリティ関係停止
- ユーザー作成
- FTP インストール
- Apache インストール
- Bind インストール
- PHPインストール
- MySQL インストール
- Virtual ホスト設定
- phpMyadmin インストール

Vmware ゲストOS作成

使用している Vmware Server は 1.x 系。2.x 系が使いづらかったのと、職場の環境が VMware Workstion とほぼ同じインターフェースなので。普通にゲスト OSを作成。

- Guset oprating system : Linux で
- Version : Red Hat Enterprise Linux 4
- ネットワークは bridge でも NAT でも用途に合わせて
- サイズは適当に10から20GB程度

スナップショットを利用すると、後から仮想ディスクの容量を増やすことができなくなるため、多めに。

- Allocate all disk now :

ここにチェックを入れてしまうと、作成に時間がかかるのと、指定したサイズ分物理ディスクを使ってしまう。上で指定した10-20GB使われると困るので、オフにする。

CentOS インストール

GUI インストールで全てデフォルト。ネットワークも後で設定するのでそのまま。

ネットワーク設定

IP を変えると SSH などの接続も切れてしまうので、VMware のコンソールで直接操作。VMware のネットワーク設定を NAT にしている場合は、[Host] → [Virtual Network Settings] → [NAT] タブから、所属しているネットワーク、ゲートウェイ、サブネットマスクを確認。

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.16.10
NETMASK=255.255.255.0
GATEWAY=192.168.16.2

適用させるために、サービス再起動。

[root@localhost ~]# service network restart

セキュリティ関係停止

開発の時に邪魔になるセキュリティ関連の機能を停止します。

iptables の停止

[root@localhost ~]# service iptables status

ステータスを確認して、なんかいっぱい出てきたら動いてる。動いてたら停止。

[root@localhost ~]# service iptables stop
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中
[root@localhost ~]# chkconfig iptables off
[root@localhost ~]# chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

SElinux の停止

getenforce が SELinux の状態確認で、Permisive が停止状態。自動起動の停止は sysconfig の selinux を編集する。

[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vi /etc/sysconfig/selinux
SELINUX=disabled

yum-updatesd の削除

centossrv.com によると、「デフォルトで1時間ごとにアップデートチェックを行うようになっており、手動によるパッケージインストールと競合するとインストールが失敗する」 とのことなので、早々に削除。

[root@localhost ~]# /etc/rc.d/init.d/yum-updatesd stop
yum-updates 停止中:                                      [  OK  ]
[root@localhost ~]# yum -y remove yum-updatesd

ユーザー作成

作業用に root 以外のユーザーを作成。ユーザーの作成には、useradd コマンドを使用。passwd コマンドでパスワードを加えることで初めて使用できるようになる。

[root@centos ~]# useradd centos
[root@centos ~]# passwd centosChanging password for user centos.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

FTP – vsftpd

[root@centos ~]# yum -y install vsftpd

設定は、アスキーモードでの転送と、ディレクトリの削除を可能にするだけ。

[root@centos ~]# vi /etc/vsftpd/vsftpd.conf
ascii_upload_enable=YES
ascii_download_enable=YES
ls_recurse_enable=YES

起動、自動起動の設定。終わったら、FTPクライアントから接続してみる。

[root@centos ~]# /etc/rc.d/init.d/vsftpd start
[root@centos ~]# chkconfig vsftpd on
[root@localhost ~]# chkconfig --list vsftpd
vsftpd          0:off   1:off   2:off   3:off   4:off   5:off   6:off

Apache

[root@centos ~]# yum -y install httpd

設定は、CGI、SSI、.htaccess の許可のみ。Virtual host の設定は後から。

[root@centos ~]# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options Includes ExecCGI FollowSymLinks
AllowOverride All

テストページの削除。

[root@centos ~]# rm -f /etc/httpd/conf.d/welcome.conf
[root@centos ~]# rm -f /var/www/error/noindex.html

ドキュメントルートの所有者を作業用ユーザーに変更。

[root@localhost ~]# chown centos:centos /var/www/html

起動、自動起動の設定。

[root@localhost ~]# service httpd start
httpd を起動中:                                            [  OK  ]
[root@centos ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

テストしてみる。以下を実行して、ブラウザからサーバーのIPにアクセス。

[root@centos ~]# echo test >> /var/www/html/index.html

BIND

BIND インストールと設定

PHPとMySQLとphpMyadminのインストール

CentOS5.4 に MySQL5.1,PHP5.3とphpMyAdmin

CentOS5.4 に MySQL5.1,PHP5.3とphpMyAdmin

2010 年 2 月 28 日 日曜日

MySQL、PHP、phpMyAdminのインストールから、Wordpress用のデータベース作成まで。

最新版を入れるため、yumのリポジトリをインストールして変更する。依存関係を解消しながらインストールするより、yum を使った方がずっと楽。

インストール

[root@localhost ~]# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
[root@localhost ~]# wget http://rpms.famillecollet.com/el5.i386/remi-release-5-6.el5.remi.noarch.rpm
[root@localhost ~]# rpm -Uvh epel-release-5* remi-release-5*

[root@localhost ~]# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[root@localhost ~]# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

インストールする。

[root@localhost ~]# yum --enablerepo=remi,epel,rpmforge update php* mysql*
[root@localhost ~]# yum --enablerepo=remi,epel,rpmforge install php php-gd php-mbstring php-mysql php-odbc php-pdo php-pear mysql-server mysql-bench

phpMyadmin のインストール。

# yum --enablerepo=remi,epel,rpmforge install phpMyAdmin

PHPの動作確認

apacheの再起動

[root@localhost ~]# service httpd restart

phpinfo を表示してみる。一緒にインストールしたモジュールの項目が表示されていることを確認。

[root@centos ~]# vi /var/www/html/test.php

MySQL 設定

設定は文字コードのみ。

[root@centos ~]# vi /etc/my.cnf
[mysqld]
default-character-set = utf8
[mysql]
default-character-set = utf8

起動、自動起動設定

[root@centos ~]# service mysqld start
[root@centos ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

mysql の root にパスワードを設定する。OS自体のユーザーとは別もの。まずは、パスワードを設定するユーザーを確認。

[root@centos ~]# mysql -u root
mysql> select user,host,password from mysql.user;
+-------------+-----------------------+-------------------------------------------+
| user        | host                  | password                                  |
+-------------+-----------------------+-------------------------------------------+
| root        | localhost             |                                           |
| root        | localhost.localdomain |                                           |
| root        | 127.0.0.1             |                                           |
|             | localhost             |                                           |
|             | localhost.localdomain |                                           |
+-------------+-----------------------+-------------------------------------------+

root にパスワードを設定。

mysql> set password for root@localhost=password('パスワード');
mysql> set password for root@localhost.localdomain=password('パスワード');
mysql> set password for root@127.0.0.1=password('パスワード');

mysql のrootにパスワードが設定されたことを確認。

mysql> select user,host,password from mysql.user;
+-------------+-----------------------+-------------------------------------------+
| user        | host                  | password                                  |
+-------------+-----------------------+-------------------------------------------+
| root        | localhost             | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
| root        | localhost.localdomain | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
| root        | 127.0.0.1             | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
+-------------+-----------------------+-------------------------------------------+

サンプルデータベース削除。

[root@centos ~]# mysql -u root -p
mysql> show databases;
mysql> drop database test;
mysql> show databases;

wordpress 用のデータベース作成

[root@centos ~]# mysql -u root -p
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to wordpress@localhost identified by 'パスワード';

phpMyAdmin を使う

yum でインストールした phpMyadmin は以下にインストールされる。

/usr/share/phpMyAdmin

設定はデフォルトのままで使用可能。ただし、ドキュメントルート外にインストールされるので、そのままではアクセスできない。http://phpmyadmin.localhost.com/ でアクセスするため、bind のレコード追加と、Virtual hostの設定をしてみた。

Bind 設定

[root@localhost ~]# cat /var/named/chroot/var/named/localhost.com.db
$TTL    86400
@       IN      SOA     localhost.com.  root.localhost.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    localhost.com.
        IN MX 10 localhost.com.
@       IN A     192.168.0.250
phpmyadmin      IN A    192.168.0.250
*       IN A     192.168.0.250

Virtual host の設定

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin root@localhost.com
    DocumentRoot /usr/share/phpMyAdmin/
    ServerName phpmyadmin.localhost.com
  <Directory "/usr/share/phpMyAdmin">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
参考記事
CentOS 5.3 に php-5.2.9, mysql-5.1.35 をインストール
データベースサーバー構築(MySQL)

BIND インストールと設定

2010 年 2 月 28 日 日曜日

テストサーバーを構築した時のメモ。CentOS5.4 。公開サーバーではないので、外部向けの設定は行っていません。

インストール

[root@centos ~]# yum -y install bind bind-chroot caching-nameserver

BIND設定ファイル所有グループ変更。

[root@centos ~]# chgrp named /var/named/chroot/etc/named.conf

色を付けた所を追加。

[root@localhost ~]# vi /var/named/chroot/etc/named.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
        # listen-on port 53 { 127.0.0.1; };
        # listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        // Those options should be used carefully because they disable port
        // randomization
        // query-source    port 53;
        // query-source-v6 port 53;

        allow-query     { localhost; localnets; };
        allow-query-cache { localhost; localnets; };

        forwarders{
                192.168.0.1;
        };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { localhost; };
        match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
        include "/etc/named.localhost.com.zone";
};
view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
        include "/etc/named.localhost.com.zone";
};

ゾーンファイル作成。

[root@localhost ~]# vi /var/named/chroot/etc/named.localhost.com.zone
zone "localhost.com" {
        type master;
        file "localhost.com.db";
};
zone "0.168.192.in-addr.arpa" {
        type master;
        file "0.168.192.in-addr.arpa.db";
};

内部向け正引き用ファイル作成。

[root@localhost ~]# vi /var/named/chroot/var/named/localhost.com.db
$TTL    86400
@       IN      SOA     localhost.com.  root.localhost.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    localhost.com.
        IN MX 10 localhost.com.
@       IN A     192.168.0.250
*       IN A     192.168.0.250

内部向け逆引き用ファイル作成

[root@localhost ~]# vi /var/named/chroot/var/named/0.168.192.in-addr.arpa.db
$TTL    86400
@       IN      SOA     localhost.com.  root.localhost.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    localhost.com.
250           IN      PTR   localhost.com.

起動、自動起動設定

[root@localhost ~]# service named start
named を起動中:                                            [  OK  ]
[root@centos ~]# chkconfig named on
[root@localhost ~]# chkconfig --list named
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off

nslookup などで、正引き、逆引きを確認。 複数のレコードを設定するときは、ゾーンファイルに zone{} を追加して、参照先のレコードを書いたファイルを作成。

会員専用ページに、Apache の Basic 認証を使う

2010 年 1 月 13 日 水曜日

ほとんどのレンタルサーバーでは Basic 認証を GUI で設定できるツールを用意されていると思いますが、そういった
ツールがない環境で設定する機会があったので、メモしておきます。作業はssh で接続して行いました。

設定方法

.htaccess ファイルの作成

[centos@localhost temp]$ vi .htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/www/html/temp/.htpasswd
Require user test

.htpasswd ファイル(パスワードファイル)の作成

[centos@localhost temp]$ htpasswd -c /var/www/html/temp/.htpasswd test
New password:
Re-type new password:
Adding password for user test

以上の手順だけで、ドキュメントルート以下の temp ディレクトリに Basic 認証をかけることができました。

Basic 認証を昨日させているモジュール

Apache 2.1 より前のバージョンでは、mod_auth によって Basic 認証機能が実装されている模様。そのため、Basic 認証を使うには、httpd.conf で mod_auth.so が読み込まれていることが必要。

LoadModule auth_module modules/mod_auth.so

Apahe 2.1 以降では、mod_auth_basic モジュールで実装されているようです。今回は Apache 2.0 を使っているので、こちらは確認していません。モジュールのインストールから始める必要のある環境は、通常の WEB サーバーであれば、ほとんどないのではないかと。

その他必要な設定

Basic 認証の設定を書き込む場所は、Apache の設定ファイルである httpd.conf に直接書くか、該当のディレクトリに .htaccess ファイルを設置する方法の 2通り。.htaccess を使う場合は、httpd.conf に以下の設定が必要です。

AllowOverride AuthConfig

もちろん、AllowOverride All でも。 普段は、httpd.conf を触ることはしないので、.htaccess を設置しました。 httpd.conf で設定を行う場合でも、設定項目は同じです。

使用したディレクティブ

AuthType : ユーザ認証の種類を指定。BasicかDigestを指定。
AuthName : ここで AuthName に指定した文字列が、大部分のブラウザのパスワードダイアログに表示される。
AuthUserFile : 認証に使用するユーザとパスワードの一覧が格納されている、テキストファイルの名前を設定。
Require : 認証に使用するユーザー名を指定。

htpasswd コマンド

パスワードファイルの作成に必要なコマンド。Apache に付属します。以下の構文で実行します。

htpasswd -c Filename username

書式が分かれば手入力でも作成はできるが、通常はこのコマンドを使う。主なオプションは、 以下の通り。

-c : 新しいパスワードファイルを作成。同名のパスワードファイルがすでに存在する場合は、既存の内容が上書きされる。
-n : テスト実行用のオプション。他のオプションなどの構文エラーがないかなどの確認に用いる。-c と一緒に使うことはできない。
-m : パスワードをファイルに書き込む際、MD5 でハッシュした値を書き込みます。
-d : パスワードをファイルに書き込む際、CRYPT でハッシュします(デフォルト)。
-p : パスワードをファイルに書き込む際、ハッシュせずに、プレーンなテキストで書き込みます。
-s : パスワードをファイルに書き込む際、SHA でハッシュします。
-D : ユーザーを削除します。

MySQLで「mysqladmin: connect to server at ‘localhost’ failed error: ‘Access denied for user ‘root’@'localhost’ (using password: NO)’」

2010 年 1 月 1 日 金曜日

インストール後、初期設定や動作確認で以下のメッセージが発生する場合がある。たとえば、mysqladmin version などの実行の際。

[root@localhost bin]# mysqladmin version
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)' 

これは、MySQL の root ユーザーにパスワードを設定した場合に発生する。mysqladmin -u root password ‘new-password’ の実行など。mysqladmin の実行時には、ユーザー名 root を付加し、パスワードを入力することで実効することができる。

[root@localhost bin]# mysqladmin version -u root -p
Enter password:
mysqladmin  Ver 8.42 Distrib 5.1.42, for pc-linux-gnu on i686
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license


Server version          5.1.42-community
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 11 min 31 sec
Threads: 1  Questions: 6  Slow queries: 0  Opens: 15  Flush tables: 1  Open tables: 8  Queries per second avg: 0.8

さくらインターネット + 独自ドメインのサブドメインを設定

2009 年 9 月 29 日 火曜日

若干迷ったので記録しておきます。状況としては、さくらインターネットのスタンダードと、Valueドメインで取得した独自ドメインを使用しています。

  • サーバコントロールパネル
  • 左のメニューの「ドメイン設定」
  • 「新しいドメインの追加」
  • 「4. 他社で取得、または他社で管理中のドメインを移して使う」の「上記以外のドメインの場合」
  • 「この項目は非推奨と、、」のメッセージが出るけどそのまま進む
  • 他社で取得された独自ドメインへのサブドメインの追加

あとは、画面通りにディレクトリの指定などをして完了です。登録したサブドメインは 10分もしないくらいでアクセス可能でした。早いですね。

PostgreSQL データベース・テーブルの作成

2009 年 5 月 27 日 水曜日

PostgreSQL は、複数のデータベースを持つことができます。また、各データベースはその中に複数のテーブルを持つことができます。同じデータベース内では、テーブル同士のアクセスができますが、データベースを跨いだアクセスはできません。

image

データベースの作成

データベースの作成には、createdb 権限をもつ postgreSQL のロールが必要です。エンコードオプションを指定しない場合、デフォルトのエンコード(下の例では UTF8 → もしかしたらシステムのエンコード)になるようです。

データベースの作成

以下のコマンドは、psql でなにかしらのデータベースに接続した状態で実行します。

postgres=> CREATE DATABASE sampledb;
CREATE DATABASE

データベースを一覧で表示

作成したデータベースを確認するときなど。

postgres=> l

テーブルの作成

テーブルの作成

テーブルを作成するデータベースに接続してコマンドを実行します。書式は以下の通り

create table テーブル名(列名 データ型, 列名 データ型);

sampledb=> create table test(num int, name varchar(50));
CREATE TABLE

主キーを設定してテーブルを作成

列名 データ型 につづけて primary key を追加します。

test-> create table test
test-> (num int primary key, name varchar(50));

自動採番する列を作成

自動採番する列を含むテーブルを作成するには、自動採番したい列のデータ型を serial に設定します。

test-> create table test
test-> (num serial, name varchar(50));

デフォルト値を設定

デフォルト値を設定すると、レコードの該当列に値を入れなくてもデフォルト値が自動的に入ります。書式は以下のとおりです。

create table テーブル名 (列名 データ型 default デフォルト値, 列名 データ型);

test-> create table test
test-> (num int, name varchar(50) default 'ナメック星人');

その他オプション

主キーの設定と同じように、データ型につづけてオプションを追記します。

オプション 説明
not null NULL (値なし)が許可されない制約
unique 値の重複が許可されない制約

作成したテーブルの確認

テーブルの一覧を表示

test=> \d

テーブル内の列情報を表示する方法。unique などの各種制約オプションも表示されます。

test=> \d users
                                 Table "public.users"
 Column  |         Type          |                      Modifiers
---------+-----------------------+-----------------------------------------------------
 num     | integer               | not null default nextval('users_num_seq'::regclass)
 id      | character varying(20) | not null
 pw      | character varying(20) | not null
 name    | character varying(50) | not null
 authlev | integer               | not null default 0
 env1    | character varying(50) |
 env2    | character varying(50) |
Indexes:
    "users_id_key" UNIQUE, btree (id)
    "users_pw_key" UNIQUE, btree (pw)

PostgreSQL 主キーの設定方法

2009 年 5 月 27 日 水曜日

テーブル作成時に主キーを設定

列名、データ型につづけて、PRIMARY KEY を加えます。

test=> create table test2
test-> (num int primary key, name varchar(50));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test2_pkey" for table "test2"
CREATE TABLE

作成済みのテーブルに主キーを設定

作成済みのテーブルに対して、主キーを設定する方法です。

test=> alter table test add primary key (num);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "test_pkey" for table "test"
ALTER TABLE

PostgreSQL データ型

2009 年 5 月 27 日 水曜日

よく目にするものだけまとめてみようと思ったのですが、すでにまとまっているページがあったので引用しました。より詳細な情報は、PostgreSQL 8.3.7文書 : 第 8章データ型 に載っています。

 

内 容
CHAR(長さ) カッコ内に指定した長さの固定長の文字列
VARCHAR(長さ) カッコ内に指定した長さ以下の可変長の文字列
TEXT 任意の長さの可変長の文字列
INTEGER 通常使用する整数
FLOAT 実数
NUMERIC (整数部分桁数、小数部分桁数) 任意精度の固定小数
DATE 日付
TIME 時刻
TIMESTAMP 日付と時刻
BOOLEAN 論理値。真(’t')または偽(’f')

 http://www.itmedia.co.jp/enterprise/0307/18/epn20_5.html

 


参考にしたサイト

ITmediaエンタープライズ : 第1回 PostgreSQLで学ぶSQLデータベースの操作 (5/15)

Linux でディレクトリ内のファイルをすべて消去

2009 年 5 月 21 日 木曜日

専用のオプションでもあるのかと思いきや、意外と簡単な方法を組み合わせてで
きるのですね。

こんなディレクトリと、ファイルがあったとして、

[root@localhost test]# ls -a
.  ..  test01.text  test02.text  test03.text  test04.text  test05.text

rm -f ./* を実行。「同じディレクトリのすべてのファイルを消去」ですね。

[root@localhost test]# rm -f ./*
[root@localhost test]# ls -a
.  ..