徒然なるままに プログラミングメモや日々の生活などつれづれとつづっていくblog

2016年10月6日

Concrete5.6 日本語版用のDockerfileを作る

Filed under: Concrete5,Docker,Linux,OSS,オープンソース,PC — ranpei @ 11:51 PM

Dockerのインストールが終わってしまえば後はDocker Hubから

使いたいDockerイメージを持ってきてコンテナを作成するだけなのですが・・・・

Concrete5のコンテナを作成するときに問題があったため少しメモを。。。

 

1.発覚した問題

Concrete5の移行手順を調べているときに分かったのですが・・・

最新の5.7では下位互換がなくなっていたのです!!

今運用しているのは5.6・・・これじゃ移行できないよ・・・・・

5.6を探すもなかなか見つからず・・

さらにDocker Hub上のconcrete5のイメージは大半が本家のソースをDLして作られているために

運よく5.6のイメージが見つかっても日本語表示に不安が・・・・

 

2.だったら作ればいいじゃない!

そんなわけで、Concrete5のイメージは自分で作成することにしました。

で、作成したDockerfileが以下

FROM chriswayg/apache-php

RUN apt-get update && \
    apt-get install -y wget unzip php5-mysql php5-gd && \
    apt-get clean && \
    apt-get -yq autoremove && \
    rm -rf /var/lib/apt/lists/*

RUN cd /tmp && \
    wget -O concrete.zip http://concrete5-japan.org/index.php/download_file/view/1920/45/ && \
    unzip concrete.zip && \
    rm /tmp/concrete.zip && \
    cp -rp /tmp/concrete5.6.3.4.ja/* /var/www/html && \
    chown www-data:www-data -R /var/www/html && \
    chmod 777 -R /var/www/html/config && \
    chmod 777 -R /var/www/html/files && \
    chmod 777 -R /var/www/html/packages && \
    chmod 777 -R /var/www/html/themes && \
    chmod 777 -R /var/www/html/updates && \
    rm -rf /var/www/html/index.html

RUN echo php_value default_charset UTF-8 >> /var/www/html/.htaccess && \
    echo php_value mbstring.language neutral >> /var/www/html/.htaccess && \
    echo php_value mbstring.internal_encoding UTF-8 >> /var/www/html/.htaccess && \
    echo php_flag mbstring.encoding_translation Off >> /var/www/html/.htaccess

EXPOSE 80 443

GitHub⇒gittrname/concrete56-ja

バージョン番号などがファイルに含まれる場合は、

バージョンアップ時に変わることを考慮した作りにするのですが今回は考慮していません。

(5.6がバージョンアップされることはそうそう無いでしょう)

このDockerfileをbuildすることでイメージが作成されます。

 

3.docker-composeで一括作成

最後に自前のDockerfileと公式のMySQLイメージを使って

Concrete5のコンテナ環境を作成していきましょう。

  • フォルダの構成

以下のようにファイルを配置します。

作業Root/
  ├ docker-compose.yml
  ├ concrete56-ja/
  |   └ Dockerfile
  └ mysql/
      └ initdb.d/
          └ create_concrete_database.sql
  • docker-compose.ymlの中身
version: '2'
services:
  #####################
  # concrete5.6-ja
  #####################
  concrete:
    build: concrete56-ja
    container_name: concrete
    links:
      - mysql
  #####################
  # mysql
  #####################
  mysql:
    image: mysql/mysql-server
    container_name: mysql
    volumes:
      - mysqldata:/var/lib/mysql
      - ${PWD}/mysql/initdb.d:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD={rootユーザーのパスワード}
volumes:
  mysqldata:
    driver: local

MySQL公式コンテナはdocker-entrypoint-initdb.d配下のSQLやシェルスクリプトをコンテナ作成時に実行するので
それを利用し初期DBと接続用ユーザーの作成を行っています。

SQLはこんな感じ

-- Concrete
CREATE DATABASE IF NOT EXISTS concrete CHARACTER SET utf8;
GRANT all ON concrete.* TO 'concrete'@'%' identified by 'concrete';

 

linksでMySQLコンテナを指定していますので、

IPアドレスを調べなくてもコンテナ名を使ってDockerコンテナ間の通信が可能になっています。

あとは、docker-compose.ymlファイルがある階層で

docker-composeを起動するだけでビルドからコンテナ作成まで一通りやってくれます。


// コンテナ起動

$ docker-compose up -d

// 起動確認

$ docker ps -a

 

作成が終わったら公式のインストール手順に従ってブラウザから初期設定を行うだけです。

2016年10月5日

CentOS 7.2でDocker環境構築

Filed under: Docker,ESXi,Linux,OSS,PC — ranpei @ 9:22 PM

内部ツール系サーバーは CentOS 7.2を使って構築していきます。

外部と別ディストリビューションを使うのに特に理由はありません。

単に私がいろいろなディストリビューションを触りたいというだけですw

 

 

1.Dockerをインストール

// Dockerをインストール
#yum -y install docker
// サービスを起動
#systemctl start docker
#systemctl enable docker
// 動作確認
#docker run hello-world

2.Docker-Composeのインストール(最新版はここを参照)

こちらにもDocker-Composeをインストールしておきます。

#curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > docker-compose
#chmod +x docker-compose
#sudo mv ./docker-compose /usr/local/bin/docker-compose

あとselinuxが有効な状態だとマウントしたvolumeに書き込むことができないので
selinuxを無効化しておきます。

#vi /etc/selinux/config
SELINUX=enforcing
 ↓
SELINUX=disabled

再起動すれば設定が反映されます。
こちらもすんなりいきましたね。

Ubuntu 16.04でDocker環境構築

Filed under: Docker,ESXi,Linux,OSS,PC — ranpei @ 9:22 PM

外部公開ツール系サーバーはUbuntu Server 16.04 LTSで作成し、

複数コンテナの管理をやりやすくするためにDocker-Composeをインストールします。

※ Ubuntuのインストールは省略

1.Dockerのインストール (ここを参照)

// 最新パッケージをインストール
$sudo curl -fsSL https://get.docker.com/ | sh
// 一般ユーザに"docker"グループの追加
$sudo gpasswd -a {ユーザー名} docker
// ログアウト
$exit

再度ログインして以降の手順を実施

// Dockerサービスを起動
$sudo service docker start
// 動作確認
$docker run hello-world

2.Docker-Composeのインストール(最新版はここを参照)

$curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > docker-compose
$chmod +x docker-compose
$sudo mv ./docker-compose /usr/local/bin/docker-compose

自宅サーバーをDockerで再構築する

Filed under: Docker,ESXi,GitLab,Linux,OSS,PC — ranpei @ 3:08 AM

なかなか長続きしないものですね。。。

まあだらだら日記を書くよりもできるだけ有益な情報のみを書く方針なので

ネタがなかったってだけなんですがね・・・・

 

さて、今回は自宅サーバーをDockerを使って再構築した話を複数回にわたって書いて行こうと思います。

(後ろの方はDocker要素ほとんどないかと思いますがw)

 

1.Dockerで再構築しようと思った訳

Linuxのお試し用にVMを作ろうと思ったらメモリ残量がほとんどないことに気が付きまして・・・

サーバーリソース量

稼働中のVMを調べてみたところ各VMに設定しているメモリ量の合計が搭載メモリ量カツカツな状態でしたw

にもかかわらずVM内部では確保したメモリは半分も使用されていないという状況・・・

各VMのメモリ使用量

Dockerを使えば確保するメモリ量を減らし、なおかつサーバーリソースを有効に利用できるのでは?

と思い立ったのがきっかけです。

 

2.サーバー構成を考えてみる

現在実運用中のサーバーは以下の図のようになっています。

現行サーバー構成図

  • ゲートウェイサーバー
    • インターネットからの入口に置かれ内部サーバーとの中継役を担うサーバー
    • Webサイト高速化のためにキャッシュ役も担う
  • アプリケーションサーバー
    • 実際のアプリ運用を担当するサーバー
    • ブログやCMSなど様々なアプリが同居している
  • データベースサーバー
    • 文字通りデータベースサーバー
  • Gitlab運用サーバー
    • GitlabやJenkinsなど開発サポート用のツール類を運用するサーバー
    • 内部利用が主のため基本的に外部に解放しない
  • メールサーバー
    • プライベートメールアドレスなどの運用を行うサーバー
    • アプリ運用中の通知メールなどを外部に送信する際に使用される

 

これをDockerを使って以下のように2台のVM内に集約してしまおうと画策してみました。

想定サーバー構成図

  1. ゲートウェイサーバー、アプリケーションサーバー、データベースサーバー、メールサーバーを集約
  2. 1アプリを1コンテナとして、蓄積データは個別のデータコンテナに保存することで永続化

が!しかし!?

結局想定通りにはいかず・・・・

以下の図のようになりました。

最終サーバー構成図

  1. メールサーバー、VPNサーバーはDocker化できず仕方なく通常のVMのまま運用・・・
  2. データコンテナはアプリによって保存がうまくいかないためデータボリューム方式に妥協・・
  3. 図では分かりにくいですがGitlabは永続化すらできていませんw

 

3.想定通りにいかなかった理由

自身のDockerへの理解不足などもあったためですが、個別にうまくいかなかった分けをつらづらと・・・・

  • メールサーバー

Linuxユーザーを作成して、各自の個人ディレクトリにメールを保存するという現状運用がDockerにミスマッチでした。

特に複数のユーザーアカウントをどのように永続化するか課題となり移行を断念。

おそらくですが複数ユーザーで運用する場合はユーザーアカウントはLDAPなどで一元管理して、

バーチャルメールボックス方式での運用となるのではないでしょうか?

  • VPNサーバー

構成自体はfrosquin/softetherを使って簡単に構築できたのですが、以下の2つの問題が発生。

1.DockerホストのVMにsshでログインできない

2.DockerホストのOSが64bitだったため「Softether VPN 経由でVMware vSphere Clientが開かない」の内容が再発してしまった

そのためリモート管理に支障を期すのでDocker化は断念し、

Dockerホストの環境を汚さないように別建てでVPN専用サーバーを建てるにしました。

  • Gitlab

PostgreSQLやWebサーバー等が1コンテナにまとまった物を使ったためコンテナ内で複数のデーモンが読み書きを行っており

DockerのVolumeのアクセス権限の問題について」の問題がネックとなって永続化は断念しました。

データの保全はGitlabのバックアップ機能を使って定期的にバックアップ作成し、Dockerホストにコピーして対応しています。

(今回、私は横着して1つにまとまった物を使用しましたが

Gitlabを運用する場合はデータベースサーバーやWebサーバーなどを個別に建てるのが正解だと思います)

 

4.最後に

一応移行自体は終わって1.5GBほどののメモリを確保できましたが、

今後のことを考えるとVPNサーバーはともかく、

Gitlabはバックアップでは心もとないためデータの永続化は必須ですし、

NASや各アプリのアカウント管理も地味に面倒なので、LDAP等で一元管理するようにして

メールサーバーの再構築ぐらいは行いたいですね。。。

では、実際の構築作業等は別記事で!!

2013年11月10日

Webサイトのキャプチャーを作る

Filed under: PHP,wkhtmltoimage,PC — ranpei @ 7:23 AM

現在私が管理しているWebサイトで、リンク先がサイト名だけではわかりにくいな~と思ったので、
マウスオーバーするとリンク先のイメージが表示されるような機能を付けることにしました。
その時のメモです。

今回の想定ではリアルタイムにスクリーンショットを作成する必要はないので(負荷が高くなるのでそもそもやりたくない)
wkhtmltoimageを利用して一定時間ごとにバッチでキャプチャーを撮る方式にしました。

wkhtmlimageのインストール

まず、wkhtmltoimageをインストールします。
インストールサーバーはUbuntu13.04(64bit)です。

1. ファイルをダウンロード

#wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2

最新のwkhtmltoimage-0.11.0_rc1-static-amd64.tar.bz2だとエラーが出てキャプチャーが取れないので
1つ前のバージョンをダウンロードします。

2. 解凍する

#tar jxf wkhtmltoimage-0.10.0_rc1-static-amd64.tar.bz2

解凍すると wkhtmltoimage-amd64 というファイルができます。
これがそのまま実行ファイルですので ./wkhtmltoimage-amd64 http://www.google.co.jp test.png とコマンドを実行すれば
キャプチャーが作成できるはずです。

もし、ライブラリが足りないなどのエラーが表示された場合は

#sudo apt-get install wkhtmltopdf

を実行して wkhtmltopdf をインストールしてみてください。
もともとwkhtmltopdfの機能だったものを分離しているのでwkhtmltopdfをインストールすれば
必要なライブラリ類も自動的にインストールされちゃうわけです。

3. /usr/bin/に配置

#mv wkhtmltoimage-0.10.0_rc1-static-amd64 /usr/bin/wkhtmltoimage

私はこれだけでパスの設定などは特に必要なかったです。

4. 日本語フォントのインストール
このままだと日本語が文字化けするので日本語フォントをインストールします。
今回はIPAフォントを利用しました。
ダウンロードしたものを解凍して .ttfファイルを/usr/share/fonts/配下に配置するだけです。

#sudo cp ipaexg00201/*.ttf /usr/share/fonts/.

以上が終わればインストール完了です。

#wkhtmltoimage http://www.google.co.jp test.png

とコマンドを実行すればキャプチャーが作成できているはずです。

2013年10月23日

VMDKファイルのコピーに失敗する

Filed under: ESXi,PC — ranpei @ 3:21 AM

ESXiアップデート時に起こった問題
「なぜかコピーできないVM(しかもこれがメインサーバーのVM)」
実はこれが一番原因を探るのに時間がかかりました。


・vSphere Client上でコピーしてもダメ、
・cpコマンドでコピーしてもダメ
・vmkfstoolsコマンドでクローンを移行先HDDに作ろうとしてもダメ


オプションをあれこれ変えながらいろいろ試行錯誤しましたが、どうにもならずギブアップ・・・
(コピーに時間がかかる上エラーとなるのが99%になったあたりだった)


結局、入れ替え先HDD上にVMを新規に作りそこに旧サーバーの設定やらDBデータやらを持っていく
いわゆる「サーバーの立て直し」することにしまいした。




立て直したサーバーは前のサーバーと同じvine linux 4.1 だったこともあり
以下の流れで結構すんなり移行することができました。
1. ユーザの移行
  ユーザ数が少なかったので新サーバーに手動でユーザを作り
  旧サーバーのユーザフォルダをガバーとコピーしてやりました。

2. mysqlのインストールと設定ファイルのコピー

3. 旧サーバーからmysqのデータをエクスポート→新サーバーにインポート
  mysqldumpコマンドで全データをエクスポート→インポート

4. apacheの設定ファイルと公開しているサイトのファイルをコピー

5. 新サーバーのIPアドレスを旧サーバーのものに変更する
  これが終われば速やかに旧サーバーは停止します


うちはWebサーバー以外立てていなかったためこれだけで済みましたが、
他にも色々なサーバーを立てている人は各サーバーの移行が必要でしょうね。


今回の「サーバーの立て直し」は苦肉の策、最終手段というところです。

ESXi 5.5 容量は問題ないのにコピーできない

Filed under: ESXi,PC — ranpei @ 3:21 AM

さて、前回のESXiアップグレード時に起こった問題の1つ
「容量は問題ないのに容量オーバーとなりコピーできない。」についてです。


この問題の原因はRawデバイスマッピング(RDM)したHDDでした。

/vmfs/volumes/524d5df7-3408bde8-5d18-d4ae52ca3c1d/windows7 # ls -l
total 43148312
-rw------- 1 root root 2000398934016 Oct 4 13:47 WDC_WD20EARX2D00PASB0-rdmp.vmdk
-rw------- 1 root root 539 Oct 5 18:22 WDC_WD20EARX2D00PASB0.vmdk
-rw------- 1 root root 132120576 Oct 5 16:39 vmx-windows7-1955177614-1.vswp
-rw------- 1 root root 1073741824 Oct 5 16:39 windows7-7489a48e.vswp
-rw------- 1 root root 27 Oct 3 15:30 windows7-f185cab4.hlog
-rw------- 1 root root 42949672960 Oct 22 17:20 windows7-flat.vmdk
-rw------- 1 root root 8684 Oct 20 15:51 windows7.nvram
-rw------- 1 root root 495 Oct 5 18:22 windows7.vmdk
-rw------- 1 root root 0 Oct 3 12:08 windows7.vmsd
-rw------- 1 root root 3658 Oct 22 09:46 windows7.vmx
-rw------- 1 root root 0 Oct 5 16:39 windows7.vmx.lck
-rw------- 1 root root 3937 Oct 5 18:23 windows7.vmxf
-rw------- 1 root root 3659 Oct 22 09:46 windows7.vmx~

上記の「WDC_WD20EARX2D00PASB0-rdmp.vmdk」がRDMしたvmdkです。
御覧の通りRDMしたHDDは見掛け上マウントしたHDDと同じ容量となっています。


どうやら、この見掛け上の容量が問題でコピー時に容量オーバーとなっていたようなのです。


vShere Client上でのデータコピー、SSH接続でcpコマンドを使用したコピーなどの方法を試しましたが
すべて容量エラーでコピーに失敗してしまいました。。。


結局入れ替え先のHDDにRDMのvmdkを新しく作ることにして移行しました。


備考ですが、ESXiでRMDを作成する方法はこちらをご覧ください。
vSphere(ESXi)でSATAディスクをRDMで使う

2013年10月8日

ESXi5.1 → 5.5 へのバージョンアップ

Filed under: ESXi,PC — ranpei @ 10:46 PM

3か月の出張を終えて帰ってまえりました。

戻ってきて即、出張している間に公開されたESXi5.5に自宅サーバーをアップグレードしてみましたw。

そしてみごとにはまり・・・・10/3~5の間サーバーにほとんど接続できなくなり、
訪れていただいた方々に非常にご迷惑をおかけしたことをこの場を借りて謝罪いたします。

さて、はまった内容ですが・・
実はESXiのアップグレードが原因ではなく、同時に行ったHDDの入れ替えがなかなかうまくいかなかったことが原因です。
1.容量は問題ないのに容量オーバーとなりコピーできない。
2.なぜかコピーできないVM(しかもこれがメインサーバーのVM)

この2つが同時に起こるものだから原因を特定するのにえらい時間がかかりました。
それぞれの詳細は別記事で書かせていただきます。

ではノシ

2010年5月17日

日本語表示対応JPalib配布開始しました

Filed under: NDSプログラミング,PC — ranpei @ 12:55 AM

ゴールデンウィーク前にはじめてはいいが、リアルの事情のせいで、全く開発に手をつけることができない・・・・

それでもPalibで検索して音連れている人はいるようなので

個人的にはまだまだ不満足なできではありますが新JPalibの配布を開始しようと思います。

本ライブラリは以前のライブラリと同じくひらがな、カタカナの表示にしか対応していません。
また、日本語キーボードが未実装状態です。

それでも良いという方は以下のサイトのdownloadよりダウンロードしてください

http://www.geocities.jp/ccfjd821/

使い方は、Palibを導入する代わりにフォルダに放りこめばいけるはずです。

漢字表示の基礎となる部分は出来上がっているので早いところ実装にもっていきたいものです。

2010年4月4日

PAlib0912xx_bateでの日本語表示に成功!

Filed under: NDSプログラミング,PC — ranpei @ 3:07 AM

NDSの開発環境の構築が終わったので

さっそくPAlibの改造をやってみました。

関数名に変更があったりしますが基本JPalib080220のコードから日本語化部分をコピペするだけですw

そして実際に動かした画面がこちら

久々に見て半角の文字間隔が広いな?と思いましたが

確か最初作ったものが全角半角でも文字間隔が同じ8×8ピクセルなので

違いを出すために半角だけ4×8ピクセルにしたんだったと思います。

PAlibが文字を表示する際にタイルを使用しているためにこういうことになります。

Bitmapフォントや8bitフォントを使えば解消できそうな気もしますが

できるだけ既存の機能で多くの人が使えるものとしてノーマルなtextを選んだのです

今後、表示できる文字を増やしたいと思っているのですが

このときに一番のネックになるのがタイルなんですよね^^;

PAlibは文字画像とタイルにしてメモリに格納し、表示する際にタイルを張り替えることで文字表示を実現しています。

タイルはメモリに1024までしかもてないため、

日本語では文字画像すべてをメモリに読み込むといったことが不可能になります

現JPAlibではPAlibの既存フォントの画像に空きがあるのを利用して

ひらがなカタカナを無理やり入れ込み表示を実現しています。

逆に言うとこんなやり方を使ってるためにひらがなカタカナしか表現できないわけで・・・・・・・

多くの文字を表示させたいのならば

PAlibの文字表示ロジックに頼らないやり方で文字表示をやることでしかないわけで・・・・

その方法を考えるのが今後の課題でしょうね・・・・・

あ、新型JPAlibの公開時期はまだ未定です^^;

Older Posts »

Powered by WordPress