Prismo

Posted on
Prisom Reddit clone

Prismo をインストールしてみたが、ドキュメントが腐っているという、オープンソースフリーソフトにありがちなものだったので、インストール手順をまとめておく。

  • ソースgit clone https://gitlab.com/prismosuite/prismoとかして ダウンロードする。
  • ruby 2.5.1 が必要なので、rvm なり、rbenv なりで環境を整えておく。おすすめは、rbenv。
  • Node.JS 10.x と yarn が必要なので、インストールしておく。
  • bundler をインストール。gem isntall bundler
  • sidekiq をインストール。gem install sidekiq
  • Gemfile を修正する。

    --- Gemfile.orig	2019-06-26 09:30:35.440184122 -0700
    +++ Gemfile	2019-06-26 06:50:29.313718143 -0700
    @@ -77,17 +77,19 @@
    gem 'webmention'
    gem 'webmention-endpoint'
    gem 'doorkeeper'
    +gem 'listen', '>= 3.0.5', '< 3.2'
    +gem 'bullet'
    
    group :development, :test do
    gem 'dotenv-rails'
    gem 'byebug', platforms: %i[mri mingw x64_mingw]
    -  gem 'bullet'
    +  # gem 'bullet'
    gem 'rspec-rails', '~> 3.7'
    end
    
    group :development do
    gem 'web-console', '>= 3.3.0'
    -  gem 'listen', '>= 3.0.5', '< 3.2'
    +  #gem 'listen', '>= 3.0.5', '< 3.2'
    gem 'spring'
    gem 'spring-watcher-listen', '~> 2.0.0'
    gem 'spring-commands-rspec'
    @@ -118,4 +120,3 @@
    
    # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
    gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
    
  • bundle instlal --without development test

  • yarn

  • bundle exec rails assets:precompile RAILS_ENV=production

  • bundle exec rails secret で、SECRET_KEY を取得しておく。

  • 以下の環境変数を設定する。あとで、sidekiq の設定をするので、スクリプトにまとめておくと便利。名前は仮に、sidekiq.env としておく。

    #! /bin/bash
    
    export RAILS_ENV=production
    export DB_NAME=prismo
    export DB_USER=prismo
    export DB_PASS=password
    export DB_HOST=localhost
    export REDIS_URL=redis://localhost:6379/1
    export SECRET_KEY_BASE=[`bundle exec rails secret`で取得した値]
    export LOCAL_DOMAIN=example.com
    export WEB_DOMAIN=example.com
    export S3_ENABLED=true
    export S3_BUCKET=prosmo
    export AWS_ACCESS_KEY_ID=[AWS S3 のアクセスキー]
    export AWS_SECRET_ACCESS_KEY=[AWS S3 のシークレットキー]
    export S3_REGION=us-east-1
    export S3_HOSTNAME=https://s3.amazonaws.com
    export SMTP_DOMAIN=example.com
    export SMTP_SERVER=example.com
    export SMTP_PORT=25
    export SMTP_FROM_ADDRESS=no-reply@example.com
  • Passenger を使う場合は、ここでインストールする。ウェブサーバー用のモジュールを作成して、a2enmod で有効にしておくことを忘れない。

  • ウェブサーバーを設定する。例えば、apache なら以下の通り。

    <VirtualHost *:80>
    	ServerName example.com
    	ServerAlias www.example.com
    	RewriteEngine on
    	RewriteCond %{SERVER_NAME} =example.com [OR]
    	RewriteCond %{SERVER_NAME} =www.exmaple.com
    	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
    
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    
    	ServerName example.com
    	ServerAlias www.example.com
    	ServerAdmin webmaster@example.com
    
    	Include /etc/letsencrypt/options-ssl-apache.conf
    	SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    	SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    
    	SetEnv NODE_ENV prod
    	SetEnv REDIS_URL redis://localhost:6379/1
    	SetEnv DB_HOST localhost
    	SetEnv DB_USER prismo
    	SetEnv DB_NAME prismo
    	SetEnv DB_PASS db-password
    	SetEnv DB_PORT 5432
    	SetEnv SECRET_KEY_BASE (bundle exec rails secret で取得した値)
    	SetEnv LOCAL_DOMAIN example.com
    	SetEnv S3_ENABLED true
    	SetEnv S3_BUCKET prosmo
    	SetEnv AWS_ACCESS_KEY_ID (S3のアクセスキー)
    	SetEnv AWS_SECRET_ACCESS_KEY (S3 のシークレットキー)
    	SetEnv S3_REGION us-east-1
    	SetEnv S3_HOSTNAME https://s3.amazonaws.com
    
    	RailsEnv production
    
    	DocumentRoot /srv/prismo/public
    	<Directory "/srv/prismo/public">
    		Options SymLinksIfOwnerMatch
    		AllowOverride All
    		Require all granted
    	</Directory>
    
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    </VirtualHost>
    </IfModule>
    
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
  • ここで、指定した URL にアクセスして正常に表示されることを確認する。

  • 次に sidekiq 起動スクリプトを作成する。以下は、rbenv を使って ruby をインストールした場合の例である。

    #! /bin/sh
    
    PATH="/srv/prismo/.rbenv/bin:$PATH"
    eval "$(rbenv init -)"
    
    source /srv/prismo/sidekiq.env
    
    bundle exec sidekiq -q default -q mailers -q pull -q push
  • OS 起動時に自動的に起動するよう、systemd のサービスファイルを作成する。名前は、仮に、/lib/systemd/system/prismo.service とする。

    [Unit]
    Description=Prismo - a link aggregator
    After=network.target
    
    [Service]
    Type=simple
    User=prismo
    WorkingDirectory=/srv/prismo
    ExecStart=/srv/prismo/sidekiq.sh
    Restart=on-abort
    
    [Install]
    WantedBy=multi-user.target
  • sidekiq を起動する。

    sudo systemctl enable prismo
    sudo system start prismo
  • ここでブラウザに戻って、ユーザー登録を行い、確認メールが配送されることを確かめる。

  • 確認メールの confirm my account というリンクをクリックして、ログインする。