サーバを移転した

closeこれは 1 年 10 ヶ月 9 日 前に投稿されたものです。最新のものではありませんので、間違っているかも知れません。

WordPressや、GitLabなどを詰め込んでいる割には、1000円程度のVPSでも捌けていた本サーバーですが、いろいろボロボロでした。そこで、クリーンな環境で構築し直すことにし、さらにこれを機にConoHaへ移転しました。プランは、最安の1GB(900円/月)です。

この記事では、旧サーバ(移転前)の状況および新サーバに望むことを述べた「移転概要」、旧サーバでの移転準備作業について述べた「移転準備」、新サーバでの作業を述べた「新サーバでの作業」、最後に「感想」を述べます。

移転概要

箇条書きにします。

旧サーバの状況
  • CentOS 6.5で稼働
    • yumが壊れていてヤバイ
  • ゴミみたいな自作スクリプトのプロセスが、cronによって毎日大量に作成される
    • しかも消えずにずっと残る
  • Webサーバが稼働
    • WordPress、GitLab、自作Webアプリをホスティング
    • リクエストはnginxで受ける
      • ただし、横着してPHPで動くサイトは、Apacheに飛ばす
      • nginxは、静的ファイルの配信だけ
      • 1つのサイトに同じような設定を、nginx用とApache用で2度書く必要があった
  • メールサーバも同居
    • まともに動いているんだか分からない
    • 使用頻度は非常に低い
  • DNSについて
    • (あまり旧サーバとは関係ないが)
    • お名前.com(x2)、ゴンベエドメイン、GoDaddyで取得したドメインを持っている
    • レコードは、それぞれのドメインレジストラのおまけ的なDNSサーバを利用していた
    • 管理が大変

これはひどい。

新サーバに望むこと
  • キレイな環境で
  • Webサーバ
    • WordPress、GitLab、自作Webアプリをホスティングさせる
    • nginxだけにやらせたい
  • dokku-altを使いたい
    • 「自作Webアプリ」を簡単にホスティングさせるために
    • dokku-altの検証も兼ねる

こんな感じです。メールサーバのことは忘れます。必要になったら、構築するか、何かを借ります。
ちなみに、DNSについてですが、ConoHaを借りると、DNSサーバが無料で使えるそうなので、それにします。

移転準備

移転準備について述べます。

ただし、WordPressと自作Webアプリの移転についてのみです。
GitLabは、稼働中のバージョンがあまりに古く、移転が大変そうで、自分のリポジトリしかないため、データのバックアップだけ取って終わりとしたため、述べません。
正直、用途を考えると、Bitbucketとか使ったほうが良かったかも知れません。

# WordPress + 自作Webアプリのデータ
$ sudo zip -r backup.zip /var/www/

# WordPressのデータベース
$ sudo mysqldump -u root -p wordpress_db > wordpress_dumpl.sql

実際は、nginxの設定ファイルやら、いろいろ取ってきているのですが…。

新サーバでの作業

ConoHaで、Ubuntu 14.04を選択後に行った作業です。「$」が付いていますが、基本的にはrootです。

# ユーザ作成
$ adduser --shell /bin/bash conoha    # デフォルトが /bin/sh になっていたため
$ visudo

# SSH系
# ConoHaのコントロールパネルから公開鍵を設定できるが、rootアカウントのみのようなので
$ vim /etc/ssh/sshd_config
$ su conoha
conoha~$ mkdir ~/.ssh
conoha~$ chmod 700 ~/.ssh
conoha~$ cat >> ~/.ssh/authorized_keys
conoha~$ chmod 600 ~/.ssh/authorized_keys
conoha~$ exit
$ service ssh restart

# ツール設定など
$ apt-get update
$ # https://github.com/lrks/setting/blob/master/vim/.vimrc
$ # https://github.com/lrks/setting/blob/master/tmux/.tmux.conf
$ apt-get install language-pack-ja=1:14.04+20140410	# http://qiita.com/ariarijp/items/53a5eec3c30d767945c5
$ update-locale LANG=ja_JP.UTF-8
$ apt-get install sysv-rc-conf
$ echo "127.0.1.1 `hostname`" >> /etc/hosts
$ dpkg-reconfigure -plow unattended-upgrades

# Firewall
# ConoHaのコントロールパネルの「接続許可ポート」は、マシンの上流で遮断される模様
# 「全て許可」にチェックを入れないと、ICMPすら通らなくなる
$ ufw status
$ ufw allow <SSH_PORT>
$ ufw allow 80
$ ufw allow 443
$ ufw enable
$ ufw status

# Nginx と PHP
$ apt-get install nginx php5 php5-cli php5-gd php5-fpm php5-mysql
$ cat > /etc/nginx/conf.d/original.conf
$ cat > /etc/nginx/sites-available/hoge
$ ln -s /etc/nginx/sites-available/hoge /etc/nginx/site-enabled/hoge
$ rm /etc/nginx/site-enabled/default
$ (適当に、旧サーバでの /var/www/ の中身を展開したり)
$ service nginx reload

# GitLab と オレオレ証明書
# https://about.gitlab.com/downloads/#ubuntu1404
$ apt-get install curl openssh-server ca-certificates postfix
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
$ apt-get install gitlab-ce
$ vim /etc/gitlab/gitlab.rb	# 組み込みのnginxは使わないようにする
$ gitlab-ctl reconfigure
$ mkdir /etc/pki/gitlab/
$ openssl genrsa -out /etc/pki/gitlab/server.key 2048
$ openssl req -new -key /etc/pki/gitlab/server.key -out /etc/pki/gitlab/server.csr
$ openssl x509 -req -days 365 -in /etc/pki/gitlab/server.csr -signkey /etc/pki/gitlab/server.key -out /etc/pki/gitlab/server.crt
$ cat > /etc/nginx/site-available/gitlab

# Dokku-alt
# https://github.com/dokku-alt/dokku-alt
$ bash -c "$(curl -fsSL https://raw.githubusercontent.com/dokku-alt/dokku-alt/master/bootstrap.sh)"
$ ufw allow 2000
$ ufw status
$ (http://IPADDR:2000/へアクセスして設定)
$ ufw delete (Port:2000へのallowを消す)
$ ufw status
$ dokku manager:install         # 正直、あまり使えないし要らない
$ dokku mariadb:console dam dam	# https://github.com/romaninsh/dokku-alt-manager/issues/21
MariaDB [dam]> CREATE TABLE _db_update (status varchar(255), name varchar(255));
MariaDB [dam]> exit
$ dokku manager:upgrade

# Dokku-alt の テスト
# 静的ファイルの配信
(local)~$ git clone https://github.com/nulltask/heroku-static-provider
(local)~$ (いろいろ変更)
(local)~$ cat >> ~/.ssh/config
Host 5v-gnd.net
     Port <SSH_PORT>
     IdentityFile <公開鍵>
(local)~$ git add -A
(local)~$ git commit -m "hogehoge"
(local)~$ git remote add dokku dokku@5v-gnd.net:aaaaa
(local)~$ git push dokku master	# 既存のnginxから設定ファイルが読み込まれ、Dockerコンテナに繋がる

# PHPで動くサイト
(local)~$ git clone https://github.com/heroku/php-getting-started.git
(local)~$ (あとはほとんど一緒)

# xn--vckq4ald8kl4jk9f.xn--q9jyb4c の対応
(local)~$ (静的ファイル配信の設定を済ませておく)
$ dokku domains:set <app_name> xn--vckq4ald8kl4jk9f.xn--q9jyb4c	# 以降、pushしても、このドメインが使われるようになる

# WordPressの移行
$ apt-get install mariadb-server mariadb-client
$ vim /etc/php5/cli/php.ini
$ vim /etc/php5/fpm/php.ini
$ mysql -u root -p	# 一応ユーザを新規で作る
MariaDB [(none)]> CREATE USER 'hoge'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE hage_db;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON hage_db.* TO 'hoge'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
$ mysql -u root -p hage_db < wordpress_dump.sql
$ cat > /etc/nginx/site-availables/blog
$ ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog

# Fail2Ban
# iptables とか書いてあるし、動くか微妙、要検証
apt-get install fail2ban
cp /etc/fail2ban/jail.conf{,.local}
vim /etc/fail2ban/jail.conf.local

感想

感想を述べます。箇条書きです。

Dokku(-alt)がすごい
  • すごい
  • デプロイしたアプリは、サーバを再起動しても自動で立ち上がってくる
    • systemdのサービスとか書く必要はない
    • Ubuntu14.04は、systemdではないが…
  • ドメインの設定もできる
    • すごい
  • X-Forwarded-Forも付けてくれる
    • ちゃんと実IPアドレスが分かる
  • 複数ユーザにも対応してる
    • 公開鍵を複数登録できるって話だけど
    • すごい
    • githubからメンバーの公開鍵を収集して自動登録すると良さそう
  • managerは微妙だけど
  • コンテナのベースイメージのアップデートも心配
    • 別の機会にCoreOSで構築したサーバでは、大変苦労した
    • まぁ、なんとかしてくれるか
    • 来年4月が怖い
  • HTTPSでpushできるとさらに良さそう
    • なんとかできそう
ConoHaについて
  • このはちゃん(初期)すき
    • その頃にクーポンを貰って、一度もVPSを起動しなかった経験がある
    • その後、リニューアルされてどんな扱いになったか分からない
  • 速い
    • 何年か前のVPSサーバと比べてなので当然だが…
  • タダでDNSサーバが使える
    • すごくいい
  • コントロールパネルには二段階認証を設定できる
    • OTPの入力欄が「type='password'」なので、Chromeが覚えようとして煩わしい
    • しかも、割りと何回も打たされる
      • 煩わしい

以上です。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>