思い付くまでタイトル未定

RubyとかRailsとかももクロちゃんとか色々な事書きます。

DiscourseをVirtualBox上のUbuntu14.10にインストールする。

VirtualBox上のUbuntu Server 14.10にDiscourseをインストールしてみます。
Discourseとは「Railsで作られた100%オープンソースの次世代ディスカッションプラットフォーム」です。

githubを見ると、最初のコミットが2013年2月6日です。
まだ(もう?)2年しか経っていません。(今日は2015年4月22日)そのせいか、インストールしたよって日本語で書いてある記事が少ない気がします。
見つけたと思っても、Ruby1.9とかになっているので、あまり新しくなさそうです。

さっそくgithubのインストールガイドを参考にインストールしてみたいと思います。

Ubuntuのインストール

以下のサイトを参考に、VirtualBoxUbuntu Server 14.10をインストールします。

Ubuntu 14.04 LTS をインストールしてみた - Linux入門 - Webkaru
discourse/INSTALL-ubuntu.md at master · discourse/discourse · GitHub

VirtualBoxVMの新規作成をする際に、ハードドライブの容量は多めにした方が良いです。 はじめ8GBにしたところ、sambaをインストールしたら足りなくなってしまいました。

参考サイトのUbuntuのバージョンが少し違うので、若干表示が異なるところがありますが、特に問題ありませんでした。

ユーザを作成する際には「discourse」以外にした方がよさそうです。
ここで作成したユーザを「作業アカウント」って呼ぼうと思います。(良い名前が思いつかなかった。。。)

「ソフトウェアの選択」と言うところまで行ったら、githubの方も見ながらインストールを進めます。

discourseのインストール

OpenSSH server、Mail server、PostgreSQLのインストールはubuntuのインストール時に行っているので、省略します。

  1. 必要なパッケージのインストール(作業アカウント)

     sudo apt-get -y install build-essential libssl-dev libyaml-dev git libtool libxslt-dev libxml2-dev libpq-dev gawk curl pngcrush imagemagick python-software-properties  
    
  2. Redisのインストール(作業アカウント)

     sudo apt-add-repository -y ppa:rwky/redis  
     sudo apt-get update  
     sudo apt-get install redis-server  
    
  3. nginxのインストール(作業アカウント)

     sudo apt-get remove '^nginx.*$'  
     cat << 'EOF' | sudo tee /etc/apt/sources.list.d/nginx.list  
     deb http://nginx.org/packages/ubuntu/ precise nginx  
     deb-src http://nginx.org/packages/ubuntu/ precise nginx  
     EOF  
    
     curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -  
     sudo apt-get update && sudo apt-get -y install nginx  
    
  4. RVMでRubyをインストール
    (作業アカウント)

     sudo adduser --shell /bin/bash --gecos 'Discourse application' discourse  
     sudo install -d -m 755 -o discourse -g discourse /var/www/discourse  
    
     sudo -u postgres createuser -s discourse  
     sudo -u postgres psql -c "alter user discourse password 'dbのパスワードを決めて入れる';"  
    

    ここからdiscourseユーザで作業します。sudo su - discourse
    (discourseユーザ)

      \curl -s -S -L https://get.rvm.io | bash -s stable  
      . ~/.rvm/scripts/rvm  
    

    上記コマンドの実行に失敗したらエラーメッセージに書いてある、 curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -を実行してから再度試します。

      rvm --autolibs=read-fail requirements  
    

    "Requirements installation successful."と表示され無かった場合は、 エラーメッセージに書かれているパッケージを追加でインストールして再確認します。
    "Requirements installation successful."と表示されたら次に進みます。
    ※追加パッケージのインストールは、作業アカウントで!

      rvm install 2.0.0  
      rvm use 2.0.0 --default  
      gem install bundler  
    
  5. discourseのセットアップ
    (discourseユーザ)

      git clone git://github.com/discourse/discourse.git /var/www/discourse  
      cd /var/www/discourse  
      bundle install --deployment --without test  
    
      cd /var/www/discourse/config  
      cp discourse_quickstart.conf discourse.conf  
      cp discourse.pill.sample discourse.pill  
    

    設定ファイルを変更します。

      vi discourse.conf  
    

    dbのユーザ名とパスワードを変更します。
    ホスト名を変更します。
    メールの設定をします。

      vi discourse.pill  
    

    必要があればアプリケーション名を変更します。

      cd /var/www/discourse  
      createdb discourse_prod  
      RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ENV=production bundle exec rake db:migrate  
      RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ENV=production bundle exec rake assets:precompile  
    

    以下、言語を変更する場合行います。

      cd /var/www/discourse  
      RAILS_ENV=production bundle exec rails c  
      # rails consoleが立ち上がります
      LocaleSiteSetting.values           #←サポートされている言語の一覧  
      SiteSetting.default_locale = 'ja'  #←日本語の場合  
      exit  
    
  6. nginxのセットアップ(作業アカウント)

     sudo cp /var/www/discourse/config/nginx.global.conf /etc/nginx/conf.d/local-server.conf  
     sudo cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf  
    

    nginxでdiscourse以外のサービスを提供しない場合に実行します。

     sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
    

    設定ファイルを変更します。

     sudo vi /etc/nginx/conf.d/discourse.conf  
    

    server_nameを変更します。
    NUM_WEBに合わせてsocketの数を変更します。
    discourseを/var/www/discourse以外に設置した場合はそれに合わせて各種設定を変更します。
    nginxのキャッシュの保存場所が違う場合があるので、確認して proxy_cache_pathを変更します。

     sudo /etc/init.d/nginx reload  
    
  7. Bluepillのセットアップ(discourseユーザ)

     gem install bluepill  
     echo 'alias bluepill="NOEXEC_DISABLE=1 bluepill --no-privileged -c ~/.bluepill"' >> ~/.bash_aliases  
     rvm wrapper $(rvm current) bootup bluepill  
     rvm wrapper $(rvm current) bootup bundle  
    

    discourseの起動

     RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ROOT=/var/www/discourse RAILS_ENV=production NUM_WEBS=2 bluepill --no-privileged -c ~/.bluepill load /var/www/discourse/config/discourse.pill
    

    サーバー起動時にdiscourseが自動起動するようにします

     crontab -e  
    

    次の行を追記します

     @reboot RUBY_GC_MALLOC_LIMIT=90000000 RAILS_ROOT=/var/www/discourse RAILS_ENV=production NUM_WEBS=2 /home/discourse/.rvm/bin/bootup_bluepill --no-privileged -c ~/.bluepill load /var/www/discourse/config/discourse.pill  
    

以上で大体のセットアップは終わりです。
その他の設定は各環境に合わせて行ってください。

メールがdiscourseから飛ばないので、勉強します。。。

今後について

日本語に翻訳されておらず「 [ja.composer.auto_close.all.units]」のように表示されるところが多く目立ちます。
日本でdiscourseのサービスを提供できるようにまずは翻訳を直していきたいと思います。