CentOS 6にLAMP, Git, Redmine, phpMyAdminな開発サーバを一発構築するスクリプト

CentOS仮想マシンにLAMP, Git, Redmine, phpMyAdminな開発サーバを一発構築するスクリプト

ローカル開発用にCentOS 6 (x86/64)の仮想サーバを構築し、開発環境を一発でセットアップするスクリプトをGitHubにて公開しました。

統合開発環境にNetBeansプロジェクト管理にRedmine、コミット → プッシュされたら公開ディレクトリに自動デプロイという環境を構築できます。

スポンサーリンク

GitHubのリポジトリ

Contribute to bootstrap development by creating an account on GitHub.

気が向いた時に更新されるかもしれません。

想定している開発フロー

  1. Redmineでプロジェクト管理
  2. NetBeansでWEB+DB開発
  3. ローカルのGitリポジトリでコミット
  4. リモートのベアリポジトリへプッシュ(Redmineが参照するのはココ)
  5. 本番環境リポジトリ(/var/www/html以下)で自動プル

スクリプトの概要

  • セキュリティ関係の設定(ローカル開発環境なので甘々に設定)
  • yumのリポジトリを追加(epel, remi)
  • yum updateと、必要なパッケージのインストール
  • 不要なサービスの停止
  • LAMP(Apache, MySQL, PHP)のインストールと最低限の設定
  • RubyとPassenger周りのインストール
  • Gitユーザーの作成と関連する設定
  • phpMyAdminのインストール(ソースから)
  • Redmine及びテーマとプラグインをインストール
  • おまけ:ベアリポジトリ用フックスクリプトの雛形

詳細は、シェルスクリプトを読んでみてください。たいしたことはしていません。

動作環境

  • LAN内のサーバPC、またはVirtualBox等の仮想マシン(Vagrant可)
  • CentOS6 x86/64 minimal isoイメージでのインストール直後であること

インストール

rootでログインし、gitをインストール後、取得したbootstrap.shを実行するだけです。

# yum -y install git
# cd
# git clone https://github.com/ryu-blacknd/bootstrap.git
# chmod +x bootstrap/bootstrap.sh
# bootstrap/bootstrap.sh

ほぼノンストップで進みますが、Passengerのインストール時のみ画面に表示される通りEnterを押して進んでください。

※2013.10.16 追記:Passengerインストール時にEnterを自動入力することで、ノンストップになりました。

インストール後はシステムを再起動します。

# reboot

開発に関する情報

種別
Gitユーザー gituser:gituser
Gitベアリポジトリ *1 /var/repos/[プロジェクト名]
Git公開鍵を追記するファイル *2 /home/gituser/.ssh/authorized_keys
RedmineのURL http://[ホスト名]/redmine/
Redmineユーザー admin:admin
phpMyAdminのURL http://[ホスト名]/phpmyadmin/
各プロジェクトのURL http://[ホスト名]/[プロジェクト名]/

*1 NetBeansでのプッシュ先リポジトリ = Redmineでの参照リポジトリ

*2 開発ユーザー毎にSSH公開鍵を作成し、このファイルに追記していく(後述)

初回の開発フロー

初回のみGit絡みで面倒ですが、以下のフローが済めば、以降は自動化され楽になります。

  1. [サーバ] ユーザーgituserでSSHログイン
  2. [サーバ] /var/repos/[プロジェクト名]を作成し、ディレクトリ内でgit init --bare
  3. [ローカル] NetBeansでローカルのリポジトリにファーストコミット
  4. [ローカル] NetBeansから先ほど作成したベアリポジトリにプッシュ
  5. [ローカル] Redmineで新規プロジェクトを作成、リポジトリを設定、ユーザー割り当て
  6. [サーバ] cd /var/www/htmlしてgit clone /var/repos/[プロジェクト名]
  7. [サーバ] /var/repos/[プロジェクト名]/.git/hooks/post-updateをコピーして編集

post-updateファイルはユーザーrootのホームディレクトリにあるため、gituserはアクセスできません。

# chown gituser. post-update

としておき、gituserのホームディレクトリにでもコピーしておくとよいでしょう。

post-updateのコピーと編集

フックスクリプトpost-updateは、プロジェクトを作成する毎に手動でコピー、****の部分を編集します。

#!/bin/sh
/usr/bin/wget -q -O /dev/null http://localhost/redmine/sys/fetch_changesets?key=****
(cd /var/www/html/**** && git --git-dir=.git pull)

2行目は、Redmineの 管理 → 設定 → リポジトリ で生成したAPIキーを記述します。

RedmineのAPIキー

3行目は、上記手順のプロジェクト名(=リポジトリのディレクトリ名)を記述します。

これで冒頭に書いたようなフローの準備が整いました。

以後はNetBeansで、ローカルコミットとベアリポジトリへのプッシュを繰り返して開発を進めます。

コミット・メッセージでチケットの状態を更新する

NetBeansからのコミット時は、コミット・メッセージの文末にrefs #1 @1.5h等を付与すると、Redmineのチケットと連携することができます。

このとき、作成者とコミッタをRedmineのユーザー名に合わせるようにしてください。

コミット・メッセージ

上記ユーザー名がRedmine側と一致しない場合は、チケット連携が正常に行われません。その場合はプロジェクト毎の 設定 → リポジトリ から、ユーザーの関連付けを行ってください。

※詳しくはこちらを参照してください。

リポジトリへのアクセスにSSH鍵認証を利用する

ユーザー毎のSSH公開鍵をユーザーgituserauthorized_keysに追記していきます。

以下の手順でSSH公開鍵と秘密鍵のペアを生成します。

$ ssh-keygen -C user@example.com

なお、この鍵ペアを外部サーバへの接続用途に使わないのであれば、パスフレーズは無視して構いません。

これでユーザーのホームディレクトリに2つの鍵ファイルが作成されます。

役割 ファイル名
SSH秘密鍵 ~/.ssh/id_rsa
SSH公開鍵 ~/.ssh/id_rsa.pub

この公開鍵をサーバ管理者に渡し、管理者はgituserユーザーで~/.ssh/authorized_keysに追記します。

$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys

次にNetBeans側で、「秘密鍵ファイル」に上記の秘密鍵ファイルを指定すれば、リポジトリにアクセスすることができるようになります。

『CentOS 6にLAMP, Git, Redmine, phpMyAdminな開発サーバを一発構築するスクリプト』へのコメント

  1. 名前:ryu_blacknd 投稿日:2013/10/15(火) 08:35:34 ID:589fc6ab0

    まだやりかけの部分も多いけど、とりあえずつくってみた。

  2. 名前:CentOS6用 LAN内開発サーバ構築スクリプト - BLACKND - ちゅどん道中記 投稿日:2013/10/15(火) 23:13:23 ID:2b59c402c 返信

    […] >>CentOS6用 LAN内開発サーバ構築スクリプト – BLACKND Author: […]

  3. 名前:山本 投稿日:2013/11/23(土) 02:52:26 ID:d4bbfa246 返信

    上記の手順でやった所、下記のエラーがでました

    httpd を起動中: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Syntax error on line 1 of /etc/httpd/conf.d/passenger.conf: Cannot load /usr/local/lib/ruby/gems/1.9.1/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so into server: /usr/local/lib/ruby/gems/1.9.1/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so: cannot open shared object file: No such file or directory

    • 名前:りゅう・д・ 投稿日:2013/11/23(土) 21:29:53 ID:cfd76cf4f 返信

      passengerの位置かバージョンが異なっているように思われます。
      環境によって異なる場合がありますので、passengerインストール時に表示されるメッセージ
      に従って/etc/httpd/conf.d/passenger.confの修正をしてみてください。
      今後、バージョンを指定してインストールする版の作成も考えてみます。

    • 名前:りゅう・д・ 投稿日:2013/11/24(日) 17:53:40 ID:f513b4baf 返信

      RubyとPassengerのバージョンを差し替えておきました。
      こちらの環境ではエラーもなく成功しました。
      一度最新のスクリプトで試してみてください。