Posted at

EC2のAmazonLinuxにQiitaライクな情報共有サービス「Knowledge」を立ち上げる

More than 1 year has passed since last update.


目的

社内の情報共有に、Qiita:Teamはちょっとお高いからもっと気軽に始められるKnowledgeを作ってみよう、というところ。


背景

実は半年ぐらい使っていたのですが、個人サーバに作った結果、誤って消してしまう、かつバックアップも無いという事態に陥り、ちゃんと作り直すことに。。。


構成

ソフトウェアとか
バージョン
その他

OS
AmazonLinux
Amazon Linux AMI 2016.09.0.20160923 x86_64 HVM

Java
1.8.0
yumベース

Tomcat
8.0
yumベース

Knowledge
1.6.0
2016/10/27時点ではpre-release4でした

PostgreSQL
9.5.4
Knowledgeのデータ保管用

※Knowledgeの管理画面上、PostgreSQLのドライバーが9.3となっていますが、9.5でも動きました


導入手順


1.AmazonLinux

改めて言うことも無いので、ポイントだけ。


  • AWSの管理コンソールから最新のAmazonLinux用AMIを選択してポチポチやる

  • 今回はt2.micro、ストレージは20GBに設定

  • セキュリティーグループはhttpの80だけ全解放(とりあえずIP制限等無し)

  • 消してしまうと怖いから削除保護を有効にしておく

  • タイムゾーンは日本に変更しておく

  • EIPをセット


2.Knowledgeのインストール

作業は基本的にec2-userで行います。


Java/Tomcatのインストール


  • 標準では1.7が入っているが、Java version 8 以降が推奨されているので更新する

$ sudo yum list installed |grep java

java-1.7.0-openjdk.x86_64 1:1.7.0.111-2.6.7.2.68.amzn1 installed
javapackages-tools.noarch 0.9.1-1.5.amzn1 installed
tzdata-java.noarch 2016g-2.64.amzn1 @amzn-updates


  • 基本はyumベースとし、2016年10月27日時点で安定版をインストール対象とする

  • Java : JDK1.8

  • Tomcat : 8.0.36

  • 念のため、yum search javaで最新版を確認

  • alternativesコマンドを使い、Javaのバージョンを変更

$ sudo yum -y update

$ yum search java|grep openjdk
$ sudo yum -y install java-1.8.0-openjdk-devel tomcat8
$ sudo alternatives --config java

There are 2 programs which provide 'java'.

Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
2 /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2
$ java -version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)
$ tomcat8 version
Server version: Apache Tomcat/8.0.36
Server built: Aug 12 2016 18:14:42 UTC
Server number: 8.0.36.0
OS Name: Linux
OS Version: 4.4.19-29.55.amzn1.x86_64
Architecture: amd64
JVM Version: 1.8.0_101-b13
JVM Vendor: Oracle Corporation


Knowledgeのデプロイ


  • Tomcatの初期設定で、/var/lib/tomcat8/webappsがデフォルトディレクトリ

  • デフォルトだと8080ポートなので、80ポートに変更

  • 80ポートでリクエストされたものを、8080ポートで待機しているTomcatにルーティングし、proxyPort属性を追加

  • Tomcatを自動起動

$ sudo vi /etc/tomcat8/server.xml

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
- redirectPort="8443" />
+ redirectPort="8443"
+ proxyPort="80" />
$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
$ sudo /sbin/service iptables save
$ sudo service tomcat8 start
$ sudo chkconfig tomcat8 on

$ cd /var/lib/tomcat8/webapps

$ sudo wget https://github.com/support-project/knowledge/releases/download/v1.6.0pre4/knowledge.war
$ sudo service tomcat8 start


3.初期セットアップ


  • ブラウザにhttp://[[EC2のEIP]]/knowledge/でアクセス

  • 公式サイトの手順に従い、初期セットアップ


4.PostgreSQLへの移行


  • デフォルトのH2DatabaseからPostgreSQLへ移行する(公式サイトの推奨設定)

  • 自動起動をOn

$ sudo yum install -y postgresql95 postgresql95-server postgresql95-devel postgresql95-contrib

$ psql --version
psql (PostgreSQL) 9.5.4
$ sudo service postgresql95 initdb
Initializing database: [ OK ]
$ sudo chkconfig postgresql95 on
$ sudo service postgresql95 start

#postgresユーザのパスワードを変更(今回はとりあえずパスワードも`postgres`にしましたが、適宜変えてください)
$ sudo passwd postgres
#環境変数を変更
$ sudo service postgresql95 stop
$ sudo usermod -d /var/lib/pgsql95 postgres
$ sudo grep postgres /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql95:/bin/bash
$ su - postgres
$ vi /var/lib/pgsql95/.bash_profile
[ -f /etc/profile ] && source /etc/profile

- PGDATA=/var/lib/pgsql93/data
+ PGDATA=/var/lib/pgsql95/data
export PGDATA
$ exit
$ sudo service postgresql95 start


  • Knowledge用接続設定

$ su - postgres

$ vi /var/lib/pgsql95/data/postgresql.conf
- #listen_addresses = 'localhost' # what IP address(es) to listen on;
+ listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
- #port = 5432 # (change requires restart)
+ port = 5432 # (change requires restart)
$ vi /var/lib/pgsql95/data/pg_hba.conf
#以下の通り設定
- local all all peer
+ local all all md5
host all all 127.0.0.1/32 trust
$ exit
$ sudo service postgresql95 restart

#Knowledge用DB作成
$ su - postgres
createdb knowledge


  • Knowledge画面からPostgreSQLの設定


    1. Knowledgeに管理者ユーザでログイン

    2. 右上のユーザボタンから「システム設定」を選択

    3. 「データベースの接続先変更」を選択

    4. 「org.postgresql.Driver(9.3-1103-jdbc41)」を選択

    5. 以下の通り設定し、保存を押下




項目
設定値
備考

URL
jdbc:postgresql://localhost:5432/knowledge
-

user
postgres
-

password
postgres
※適宜正しい値を設定してください

schema
public
-

max connection
0
Knowledgeのデフォルト値

auto commit
false
Knowledgeのデフォルト値


  • 「組み込みDBのデータをカスタム設定のDBへコピー」を実行


バックアップ設計


  • とりあえず手動でpg_dumpを取得し、別途アタッチしたEBSをスナップショット保管


  • この辺りの記事を参考に別途実施・・・したい

これで使えるようになりました!!

あとはバックアップと、EIPは格好悪いから、専用のドメインを割り当てようかと。

気が向いたら更新します。


参考にさせていただいたサイト