田舎で働くウェブ屋のメモ帳

仕事中のメモなどなど。

ConoHaのVPSにLEMP環境を構築するまでのメモ2 (Ubuntu14.04)

LEMP環境構築の続き。
ConoHaのVPSで、Ubuntu Server 14.04、Nginx、HHVM、MariaDBで構築中。

MySQLの初期設定

  • 設定ファイルのコピーをとっておきます。
    cd /etc/mysql
    sudo cp my.cnf my.org

  • 設定ファイルの該当セクションに以下を追記します。
    sudo vi my.cnf

[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
  • 初期設定の開始。
    色々聞かれるので、環境に合わせて答えてください。
    sudo mysql_secure_installation

参考 : CentOS7 + php7 + nginx + php-fpm環境にwordpressインストール | server-memo.net

/usr/bin/mysql_secure_installation: 379: /usr/bin/mysql_secure_installation: find_mysql_client: not found

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
  • 設定終わったら、MariaDBを再起動しておきましょう。
    sudo service mysql restart

WordPress用のデータベースと管理ユーザーを作る

WordPressでとりあえず使うので、
WordPress用のデータベースと、それ用のユーザーを作成します。

  • MariaDBにrootでログインします。 mysql -u root -p
    Enter password:

  • データベースを作成。
    MariaDB[]> CREATE DATABASE %DATABASE_NAME%;

  • ユーザーを作成。
    MariaDB[]> GRANT ALL PRIVILEGES ON %DATABASE_NAME%.* TO "%USERNAME%"@"localhost" IDENTIFIED BY "%PASSWORD%";

  • 情報を反映します。
    MariaDB[]> FLUSH PRIVILEGES;

HHVMの設定を変更する

HHVMの実行ユーザーがデフォルトだとwww-dataとかになってて、
あとあと面倒なことになるので、WEBサーバーと揃えておきます。
WEBサーバー側を変える手もアリ。

  • HHVMの設定ファイルを書き換えて、実行ユーザーを変更します。
    sudo vi /etc/hhvm/server.ini
hhvm.server.user = nginx
  • 起動ファイルも変更しないと、上手くいかないみたいです。
    僕はここでハマった。
    sudo vi /etc/init.d/hhvm
RUN_AS_USER="nginx"
RUN_AS_GROUP="nginx"
  • サーバーごと再起動して反映します。
    sudo reboot

あとはnginxの設定ファイルを書き換えてやればいいんですが、 さらにややこしいので、また。

ConoHaのVPSにLEMP環境を構築するまでのメモ (Ubuntu14.04)

ConoHaのVPSにLEMP環境を構築したときのメモ。

LAMPLinuxApacheMySQLPHP)じゃなくて、
LEMPLinux+Nginx+MySQLPHP)を使ってます。速いらしいので。

あと、MySQLの代わりにMariaDBを、PHPの代わりにHHVMを入れてます。


www.xyxon.co.jp

MariaDBは、MySQLから派生したオープンソースリレーショナルデータベース管理システムです。 MariaDBの開発は、MySQLのオリジナルコード作者であるMichael “Monty” Widenius氏らによって行われており、MySQLとの互換性を保ちつつ、性能や頑健性を高めるための独自機能を備えています。 その開発精度の高さや緻密さが世界中のエンジニアから評価され、ダウンロード数が急増していると同時に、検索エンジン最大手「Google」のシステムに採用されたり、「Fedora(19以降)」や「Red Hat Enterprise Linux(7以降)」をはじめとする代表的なLinuxディストリビューションにおいても、MySQLに代わってMariaDBが標準データベースになったりと、現在急速な普及を遂げています。

qiita.com

HHVM(HipHop Virtual Machine)とは、Facebookが開発・公開しているC++で実装されたPHP実行環境(JITコンパイラ)の一つです。PHPのコードをJITコンパイルし、高速で動作させることを目的としています。先日公開された「HHMV 3.0.0」ではPHPの他にPHPとシームレスに連携できる新しいプログラミング言語の「Hack」も動作させることができます。


nginxのインストー

  • 基本的には公式のドキュメント通りに進めていきます。
    nginx: Linux packages

  • 公開鍵のインストール。
    wget http://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key

  • パッケージリストにnginxを追加。
    sudo vi /etc/apt/sources.list

deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx

上の「codename」には使ってるOSのバージョンに対応したコードネームを入れてください。
(例 : 14.04なら「trusty」とか。詳しくはドキュメント参照。)

  • インストー
    sudo apt-get update
    sudo apt-get install nginx
    nginx -v
    nginx version: nginx/1.9.15
    今は1.11ぐらいになってるはず…。

HHVMのインストー

  • 基本的には公式のドキュメント通りに進めます。(nginxとほぼ一緒)
    Installation: Linux
    sudo apt-get install software-properties-common
    sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
    sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"

  • 僕の環境では、最新版(執筆時は3.13)を入れると何故か不具合が出たので、
    LTS版(3.12)を入れるようにソースリストを書き換えます。
    参考 : インストールするhhvmのLTSのバージョンを指定する
    sudo vi /etc/apt/sources.list
    deb http://dl.hhvm.com/ubuntu trusty maindeb http://dl.hhvm.com/ubuntu trusty-lts-3.12 main

  • パッケージリストを更新してインストー
    sudo apt-get update
    sudo apt-get install hhvm
    php -v
    HipHop VM 3.12.1 (rel)

MariaDBのインストー

  • 同じく基本的には公式のドキュメント通りに進めます。(nginxとほぼ一緒)
    Installing MariaDB .deb Files
    sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
    sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu trusty main'
    sudo apt-get update
    sudo apt-get install mariadb-server
    mysql --version
    mysql Ver 15.1 Distrib 5.5.49-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

と、インストールは簡単なんですよ……。
設定についてはまた今度やろうかと。

WordPress使うだけなら、本当はKUSANAGIさんとか入れると楽なんですけどね…。

ConoHaのVPSを初期設定してみる(Ubuntu 14.04)

ConoHaVPSを新規で立ち上げ、とりあえず必要なアプリケーションを導入する前までの手順メモ。OSはUbuntu 14.04」をConoHaの初期イメージで入れてます。

以下は、root権限でSSHログインしたところから。
「%」囲みの文字は用途・環境に合わせて変更して下さい。

各種パッケージを最新版にアップデート

  • リポジトリの更新
    apt-get update
  • 最新パッケージへ更新
    apt-get upgrade

日本語環境に変更

  • 日本語パッケージをインストール。
    apt-get install language-pack-ja
  • 言語パッケージを生成・更新。
    dpkg-reconfigure locales
  • デフォルト言語を日本語(UTF-8)に変更。
    update-locale LANG=ja_JP.UTF-8
    SSHでログインし直すと、日本語環境になってるハズです。

時計を合わせる

サーバーの時間がズレてると色々面倒なので、NTPで自動調整させます。

  • NTPの設定ファイルを変更。
    vi /etc/ntp.conf
  • Ubuntuのサーバーが設定されている部分を、日本のサーバーに書き換え。
#server ntp.ubuntu.com
server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp

sysv-rc-confをインストー

  • 入れるだけ。後ほど使います。
    apt-get install sysv-rc-conf

管理用ユーザーの作成

  • adduserを使用してユーザーを作成。
    adduser %USERNAME%
  • パスワードを聞かれるので設定します。
    新しい UNIX パスワードを入力してください: %PASSWORD%
  • 以降の項目は必要なければEnterで飛ばしてOK。
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
  • sudoできるように「sudo」グループに追加します。
    gpasswd -a %USERNAME% sudo

SSHのポートを変更する

  • SSHの設定ファイルを変更します。
    vi /etc/ssh/sshd_config
# What ports, IPs and protocols we listen for
Port %PORT%

# Authentication:
PermitRootLogin no

管理ユーザーでログインするための認証鍵を作るんですが、ここでは面倒なのでrootで使用しているものをコピーしています。
(本番運用の環境ではダメ!ゼッタイ)

  • ホームディレクトリが分からないので一旦管理ユーザーに変身してディレクトリを作成。
    su %USERNAME%
    cd ~/
    mkdir .ssh
    chmod 700 .ssh

  • rootに戻って、鍵をコピーします。
    exit
    cp /root/.ssh/authorized_keys /home/%USERNAME%/.ssh/authorized_keys
    chmod 600 /home/%USERNAME%/.ssh/authorized_keys
    chown %USERNAME%:%USERNAME% /home/%USERNAME%/.ssh/authorized_keys

  • SSHを再起動して、ログインし直します。
    service sshd restart

設定ミスってると入れなくなっちゃうので、再起動する前に別のSSHターミナルから試しに入ってみることをオススメします。

ファイアーウォールの設定

  • 面倒なのでrootに変身。
    sudo su -

  • とりあえず設定ファイルのようなモノを入れるディレクトリを作成。
    mkdir /etc/network/iptables/ cd /etc/network/iptables/

  • スクリプトを書いていきます。
    touch set_iptables.sh
    vi set_iptables.sh

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

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

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

/sbin/iptables -A INPUT -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -s 192.168.0.0/16 -j DROP

/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport %SSH_PORT% -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 123 -j ACCEPT

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

上記の例では、SSHポート、HTTP/HTTPS用の80・443番(TCP)、NTP用の123番(UDP)は外から叩ける、それ以外は全てシャットアウト、中から外向きは全て許可。一旦繋がった通信については全て許可。そんな感じです。

  • 実行権限を付与して実行。
    chmod +x /etc/network/iptables/set_iptables.sh
    /etc/network/iptables/set_iptables.sh

  • iptables-persistent というパッケージで設定を保存。
    apt-get update
    apt-get install iptables-persistent
    保存しないと、再起動したときに消えます。

不要なサービスの停止

  • PPP 設定ユーティリティ
    sysv-rc-conf dns-clean off
  • PPP接続前にresolv.confを再適用
    sysv-rc-conf pppd-dns off

他のサービスについては、以前不具合を起こしたのでとりあえず放置。

不要なコンソールを無効化する

  • 設定ファイルを編集し、start の欄を全てコメントアウト
    vi /etc/init/tty2.conf(6まであります)

再起動

  • 全て終わったら一旦サーバーを再起動します。
    reboot

参考にしたサイト