Serversman

MySQLとバーチャルホストディレクトリのバックアップ

バックアップシェル

$ vim /root/backup.sh

#!/bin/sh

# 何日分保存するか
period=3
# バックアップしたいディレクトリ(バーチャルホストディレクトリ)
wwwdir=/home
# バックアップ保存先ディレクトリ
dirpath=/root/backup
# 今日のバックアップを保存するディレクトリ
todaydir=`date '+%Y%m%d'`
# DBユーザー
dbuser=user
# DBパスワード
dbpassword=xxxxxxxx

# 今日のバックアップを保存するディレクトリを作成
mkdir $dirpath/$todaydir

# MySQLバックアップ
for i in `mysql -u$dbuser -p$dbpassword -e "show databases"`
do
    if [ $i == "Database" ]; then
        continue
    fi;
    mysqldump --single-transaction $i -u$dbuser -p$dbpassword --opt | gzip > $dirpath/$todaydir/mysql.$i.sql.tar.gz
done;

# ディレクトリバックアップ
for i in `ls $wwwdir`
do
   tar cvfz $dirpath/$todaydir/www.$i.tar.gz $wwwdir/$i
done
tar cvfz $dirpath/$todaydir/www.$i.tar.gz /var/www


olddir=`date -d "$period days ago" '+%Y%m%d'`
rm -rf $dirpath/$olddir

実行

$ chmod 0700 /root/backup.sh
$ /root/backup.sh

$ ll /root/backup
合計 4
drwxr-xr-x 2 root root 4096 12月 31 01:17 20131231

cron追加

$ crontab -e

0 4 * * * /root/backup.sh 1> /dev/null

Serversman@vpsにてSSLを設定する方法

このブログはServersman@vpsのCentOS上で動いています。
ブログの他にもいくつかサイトが有って、SSLの必要が出てきたので設定した方法を書きます。
また、証明書は独自の証明書(オレオレ証明書)を使います。

目次

  • mod_sslインストール
  • Makefileで証明書(.crt)ファイルの作成
  • Apache(mod_ssl)の設定

mod_sslインストール

[root@suusuke ~]# yum -y install mod_ssl

Makefileで証明書(.crt)ファイルの作成

[root@suusuke ~]# cd /etc/pki/tls/certs/
[root@suusuke certs]# make server.crt
umask 77 ; \
	/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
.....++++++
.................................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
	/usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Miyagi
Locality Name (eg, city) [Newbury]:Sendai
Organization Name (eg, company) [My Company Ltd]:suusuke
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Keisuke Suzuki
Email Address []:k.suke.suzuki@gmail.com

Apache(mod_ssl)の設定

バーチャルホストにて、複数サイトを運用しているので、バーチャルホスト毎に、httpd-vhosts-[サイト名]-ssl.confという設定ファイルにして個別に設定する。
まずは、ssl.confの<VirtualHost _default_:443\></VirtualHost>をコピーしてコメントアウトする。

[root@suusuke certs]# vi /etc/httpd/conf.d/ssl.conf 

#<VirtualHost _default_:443>
...
この間の設定を全部コピーしてコメントアウト
...
#</VirtualHost>

すでに、httpd-vhosts-[サイト名].confという名前でバーチャルホストを設定しているので、その設定ファイルをコピーしてhttpd-vhosts-[サイト名]-ssl.confという名前の設定ファイルを作成する。
また、ssl.confでコピーしたものを追記する。

[root@suusuke ~]# cp /etc/httpd/conf.d/httpd-vhosts.conf /etc/httpd/conf.d/httpd-vhosts-ssl.conf
[root@suusuke ~]# vi /etc/httpd/conf.d/httpd-vhosts-ssl.conf 

<VirtualHost *:443> ←ポート変更
    ServerName suusuke.info
    DocumentRoot /var/www/html
    ErrorLog logs/suusuke.info-error_log
    CustomLog logs/suusuke.info-access_log combined env=!no_log
    <Directory "/var/www/html">
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    #ここから-----------------------------------------------------------------------
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/pki/tls/certs/server.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/server.key
    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    #ここまで-----------------------------------------------------------------------
</VirtualHost>

Apache再起動

[root@suusuke ~]# /etc/rc.d/init.d/httpd restart

https://suusuke.infoにアクセスしてsslでアクセスできることを確認してオーケー!

サーバー設定変更メモ @ServersMan

不要なポートを閉じる

設定確認してたら、mysqlとsshのデフォルト22番ポートが解放されてたので閉じた。

netstatで確認してたらmysqlとssh(22)のポート開いてるorz.

[root@suusuke ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 *:mysql                      *:*                         LISTEN      
tcp        0      0 *:ssh                      *:*                         LISTEN   

mysql

[root@suusuke ~]# vi /etc/my.cnf 

[mysqld]セクションに skip-networking を追加

[root@suusuke ~]# service mysqld restart
mysqld を停止中:                                           [  OK  ]
mysqld を起動中:                                           [  OK  ]

ssh(22)

[root@suusuke ~]# vi /etc/ssh/sshd_config 

portが2つ(デフォルト:22と別で設定したもの)が設定されてたので22をコメントアウト

[root@suusuke ~]# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

netstatでmysqlとsshが表示されないことを確認!

sshfs が非常に便利 Mac編

以前、Windows編を書きましたが今度はMac編。
もういままで、ローカルで編集してアップとかしてたのが馬鹿らしくなりますね。。。

MacFuseのインストール

こちらから最新版をダウンロードしてインストールする。

MacFUSEは、ファイルシステムをより簡単に拡張できるようにするソフトウェアらしいです。

インストールが完了すると環境設定のMacFUSEの項目が追加されます。

sshfsのインストール

こちらからLeopard用のバイナリをダウンロードする。

解凍後、ファイル名を「sshfs」に変更し実行権限を付与してパスの通ったディレクトリに移動する。

$ mv ~/Desktop/sshfs-static-leopard sshfs
$ chmod +x sshfs
$ sudo mv sshfs /usr/bin/

リモートサーバーのディレクトリをマウントする

マウントするディレクトリを作成し、「sshfs ユーザー名@ホスト名:ディレクトリ名 マウント用ディレクトリ」の書式でマウントする。

$ mkdir ~/mount
$ mkdir ~/mount/serversman
$ sshfs user@suusuke.info:/ ~/mount/serversman

僕はMacでもSCPでファイルアップロードする場合、VMWareにインストールしてるWinSCPでアップしてるのでほんと楽になった。
※理由はいろいろありまして。。。

ちなみに、アンマウントは

$ umount ~/mount/serversman

です!

Host名の変更

ホスト名登録

vi /etc/sysconfig/network

HOSTNAME="example.com"          ←追記

サーバー再起動。
※Servermansのコントロールパネルから[停止]と[起動]

自ホストの正引きアドレス変更

vi /etc/hosts

127.0.0.1 localhost.localdomain localhost              →修正前
127.0.0.1 localhost.localdomain localhost example.com  →修正後

SSHポート変更

SSHポート変更しますよってServermansからメールが来てたので変更される前に変更する。

しかし、久々に自分のサーバー触ってみたらかってが分からず30分くらいあたふた・・・

①suusuke.infoで名前解決できなくなってた
 →これは自分で変更してたの忘れてた・・・
②MySQLが起動してない
 →Why?まあいいや。

って事が有りましたので備忘録かねて設定変更手順を記述

デフォルトで22番ポートになっているので任意に変更
※rootもしくはsudoを使って作業

vi /etc/ssh/sshd_config

#Port 22
Port xxxx

再起動

/etc/rc.d/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

後はmacのsshクライアントの設定も変更しておく

vi ~/.ssh/config

Host suusuke.info
    HostName suusuke.info
    Port xxxx
    User suusuke
    IdentityFile ~/ssh/xxxxx/id_rsa_putty_openssh.ppk
    ServerAliveInterval 60

ssh suusuke.info で接続確認して終了。

Postfixでメールサーバー設定

root宛てのメールをgmailに転送して読めるようにする。

Postfixインストール

yumでインストールする。
※rootもしくはsudoで作業する

yum install postfix

Postfixの設定

main.cfの設定


#取得したドメイン名(DNSで名前解決できるホスト名)
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = example.net


#ドメイン名
#mydomain = domain.tld
mydomain = example.com


# メール送信の設定
# メールの送信元を示す
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $myhostname


#メール受信の設定
#メールを受け取る範囲を指定する。内部からのみ許可。
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = localhost
inet_interfaces = $myhostname, localhost


#自ホストが最終目的地であるドメイン名
#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain


#メールBOXの形式を指定
#home_mailbox = Mailbox
home_mailbox = Maildir/

※メールBOXの形式についてはこちらが参考になりました。

転送設定

	
vi /etc/aliases

# Person who should get root's mail
#root:          marc
#転送先のメールアドレスを指定
root:           example_xxxx@gmail.com

設定を反映させる。

newaliases

サービスを起動する。

/etc/init.d/postfix start

自動起動をonにする。

	
chkconfig postfix on

テスト

testメールを送ってみる。

mail -s "Subject:test-mail" root

Enterを押して、本文を入力

これはテストメールです。
→Ctrl-Dを押す
Cc:
→Enterを押す

gmailにメールが転送されていれば完了。

ServersMan@VPS契約

仕事の方も余裕が出てきたのでServresManのVPSを契約してみました。

http://dream.jp/vps/

導入〜WordPress設定まで

VPS、ドメイン契約

VPSはServersManのスタンダードプランを契約して、ドメインはお名前.comで取得しました。

スタンダードプランで固定IPが2つ使えるので、取り合えず一つはWordPress用(blog.suusuke.info)に割り当ててもう一つは勉強用(www.suusuke.info)に。

お名前.comで「レンタルDNSレコード設定」、「ネームサーバーの変更」して無事ドメインでアクセスできるようになりました。

サーバー初期設定

  1. ユーザー追加、パスワード設定
  2. ssh設定
  3. PHP、MySQLインストール
  4. バーチャルホスト設定

ユーザー追加、パスワード設定

管理ユーザー(suusuke)追加とパスワードの設定。

useradd suusuke // ←管理ユーザー
passwd suusuke // ←パスワード設定
usermod -G wheel suusuke // ←whellに追加

ssh設定

昔はてなで書いた記事そのまま実行して設定

http://d.hatena.ne.jp/suusuke/20080724/1216828604

  • rootでログイン禁止
  • パスワード認証禁止
  • 公開鍵と秘密鍵で認証

あと、macだとOpenSSHなので秘密鍵をOpenSSH用にPuttyGenでコンバートして完了。

PHP、MySQLインストール

ネット探すと沢山情報が載ってるので参考に

リポジトリ追加

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-7.el5.remi.noarch.rpm
rpm -Uvh remi-release-5-7.el5.remi.noarch.rpm epel-release-5-3.noarch.rpm
vi /etc/yum.repos.d/remi.repo
# この行の下に priority=1 を追記
failovermethod=priority
priority=1

PHP インストール

yum --enablerepo=remi install php-devel php-mbstring php-mysql

確認

php -v

phpinfo(); // ←phpinfoで環境確認

MySQLインストール


yum --enablerepo=remi info mysql-server // ←バージョン確認

yum --enablerepo=remi install mysql-server // ←インストール

MySQL設定


vi /etc/my.cnf

[mysql]

default-character-set=utf8

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

default-character-set=utf8

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


chkconfig mysqld on // ←自動起動する場合

WordPress用にDB作成


/etc/init.d/mysqld start // ←mysql起動
mysql> delete from mysql.user where user = ''; // ←不要ユーザー削除

mysql> update mysql.user set password=password('任意のパスワード') where user = 'root'; // ←rootパスワード設定
mysql> create database wp; // ←WordPress用データベース作成
mysql> grant all privileges on wp.* to blog@localhost identified by 'パスワード'; //←WordPress用にユーザー追加(blog)

バーチャルホスト設定

自分ルールとして公開するWEBサイトはサイト毎にユーザー(サーバーの)を追加して


/home/[user名]/public_html/

をバーチャルホストでドキュメントルートにする。

バーチャルホストの設定ファイルは


/etc/httpd/conf.d/

にWEBサイト毎にファイルを作成する。


useradd blog // ←WordPress用にユーザー追加

passwd blog

mkdir ~/public_html

バーチャルホスト設定ファイルを作成する。


vi /etc/httpd/conf.d/httpd-vhosts-blog.conf

<VirtualHost *:80>
ServerName blog.suusuke.info
DocumentRoot /home/blog/public_html
ErrorLog logs/blog.suusuke.info-error_log
CustomLog logs/blog.suusuke.info-access_log combined env=!no_log
<Directory "/home/blog/public_html">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

hostsファイル追記


vi /etc/hosts

182.163.74.64 suusuke.info
182.163.74.66 blog.suusuke.info

WordPressのインストールはファイルダウンロードして、DBの設定ファイル書き換えてアップするだけ。

これでOKだと思ったんだけど、上手く行かなかった。


chown -R apache.apache /home/blog/

WordPress用のディレクトリのオーナーをapacheに変更したら上手く行きました。

(これやんなくても上手く行くと思ったんだけどな・・・)

設定変更後はapache再起動。

取り合えず、ブログ公開まで出来ました。

でも、この記事書くのに3時間くらいかかった。(書いてる途中にWordPressのプラグイン探したりいろいろしすぎ!)

やっぱり書くのは時間かかるです。