2016/10/28

[作業記録][Debian] Debian 8.5 最小構成インストールから Redmine3 + redmine_code_review を使えるようになるまで

環境

  • Debian 8.5 最小構成インストール
  • sudo, vim, ssh はインストール済み

目標

Debian 8.5 で、Redmine を使いたい、そしてコードレビューもしたい。

そのため、下記組み合わせで Redmine を使用できるようにする。

  • Redmine 3.3.1
  • redmine_code_review
  • sqlite3
  • Unicorn
  • nginx

Redmine と Nginx, Unicorn の連携については、このあたり の投稿を参考にすれば問題ないはずなので省略。

作業概要

  1. Redmine の準備
    1. 必要パッケージのインストール
    2. Redmine ソースコードの取得
    3. データベース設定
    4. 必要な gem のインストール
    5. デフォルトデータ作成
    6. secret token の準備
    7. 動作確認
  2. redmine_code_review の準備
    1. redmine_code_review ソースコードの取得と配置
    2. データベースのマイグレーション
    3. 動作確認

以下、各作業の詳細を記述していく。

Redmie の準備

必要パッケージのインストール

Redmine インストールにあたり、いろいろ必要なので apt でインストールする。

# ベースの最新化
sudo apt update
sudo apt upgrade

# rails のためのパッケージ
sudo apt install ruby-rails

# redmine の gem インストール時に必要になるものたち
sudo apt install zlib1g-dev pkg-config libmagickcore-dev libmagickwand-dev libsqlite3-dev

# Redmine を svn で取得してこれるように
sudo apt install subversion

Redmine ソースコードの取得

svn の stable ブランチからソースを取得する。今回は、 3.3-stable を取得する。

今回は、Redmine のルートディレクトリは /var/redmine とする。

sudo mkdir /var/redmine
sudo svn co https://svn.redmine.org/redmine/branches/3.3-stable /var/redmine
sudo chown -R www-data:www-data /var/redmine

データベース設定

今回は、 /var/redmine/db/redmine.sqlite3 を Redmine 用のデータベースとする。

1. ひな形コピー

cd /var/redmine
sudo -u www-data cp config/database.yml.example config/database.yml
sudo -u www-data vim config/database.yml

2. 設定ファイル編集

/var/redmine/db/redmine.sqlite3 を編集する。

# SQLite3 configuration example
production:
  adapter: sqlite3
  database: db/redmine.sqlite3

必要な gem のインストール

gem をインストール

cd /var/redmine
sudo -u www-data bundle install --path vendor/bundle

デフォルトデータ作成

cd /var/redmine
sudo -u www-data bundle exec rake db:migrate RAILS_ENV=production
sudo -u www-data bundle exec rake redmine:load_default_data RAILS_ENV=production

secret token の準備

セッション関係で使うトークンを生成するらしい。

cd /var/redmine
sudo -u www-data bundle exec rake generate_session_store

動作確認

cd /var/redmine
sudo -u www-data bundle exec rails server webrick -b 0.0.0.0 -e production

redmine_code_review の準備

redmine_code_review ソースコードの取得と配置

cd ~
wget https://bitbucket.org/haru_iida/redmine_code_review/downloads/redmine_code_review-0.7.0.zip
unzip redmine_code_review-0.7.0.zip
sudo -u www-data cp -r redmine_code_review /var/redmine/plugins

データベースのマイグレーション

cd /var/redmine
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

動作確認

cd /var/redmine
sudo -u www-data bundle exec rails server webrick -b 0.0.0.0 -e production

2016/10/26 時点では、「コードレビュー」タブをクリックすると Internal Error になってしまう。 そのため、プロジェクトの設定で「コードレビュータブを隠す」にチェックを入れてタブを隠す。

以上。

2016/10/20

[作業記録] Windows で、Sphinx のスタンドアロンインストーラを試してみる

目標

Windows で Sphinx を使えるようにする。

環境

  • Windows Insider Build 14936
  • msys2 インストール済み
    • なので、コマンドプロンプトでも python 叩くと python 3.4.3 が起動する状態

作業概要

  1. インストーラーのダウンロード
  2. インストール

以下、各作業についての詳細を記述。

インストーラーのダウンロード

下記ページからインストーラーをダウンロードする。

Windowsへのインストール(スタンドアロンインストール) — Python製ドキュメンテーションビルダー、Sphinxの日本ユーザ会 : http://sphinx-users.jp/gettingstarted/install_windows_standalone.html

今回は、SphinxInstaller-1.4.1.20160416-py2.7-win32.zip をダウンロードした。

インストール

展開して出てきた SphinxInstaller-1.4.1.20160416-py2.7-win32.exe を管理者として実行する。

基本、デフォルトで OK, 好みがあれば適宜変更すればよい感じ。

動作確認

msys2 環境で実行。

mikoto@mnhomewin  ~
$ mkdir -p project/sphinx-test

mikoto@mnhomewin  ~
$ cd project/sphinx-test/

mikoto@mnhomewin  ~/project/sphinx-test
$ sphinx-quickstart

Welcome to the Sphinx 1.4.1 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Enter the root path for documentation.
> Root path for the documentation [.]:

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: y

Inside the root directory, two more directories will be created; "_templates"
for custom HTML templates and "_static" for custom stylesheets and other static
files. You can enter another prefix (such as ".") to replace the underscore.
> Name prefix for templates and static dir [_]:

The project name will occur in several places in the built documentation.
> Project name: Test
> Author name(s): Mikoto2000

Sphinx has the notion of a "version" and a "release" for the
software. Each version can have multiple releases. For example, for
Python the version is something like 2.5 or 3.0, while the release is
something like 2.5.1 or 3.0a1.  If you don't need this dual structure,
just set both to the same value.
> Project version: 1.0.0
> Project release [1.0.0]:

If the documents are to be written in a language other than English,
you can select a language here by its language code. Sphinx will then
translate text that it generates into that language.

For a list of supported codes, see
http://sphinx-doc.org/config.html#confval-language.
> Project language [en]: ja

The file name suffix for source files. Commonly, this is either ".txt"
or ".rst".  Only files with this suffix are considered documents.
> Source file suffix [.rst]:

One document is special in that it is considered the top node of the
"contents tree", that is, it is the root of the hierarchical structure
of the documents. Normally, this is "index", but if your "index"
document is a custom template, you can also set this to another filename.
> Name of your master document (without suffix) [index]:

Sphinx can also add configuration for epub output:
> Do you want to use the epub builder (y/n) [n]:

Please indicate if you want to use one of the following Sphinx extensions:
> autodoc: automatically insert docstrings from modules (y/n) [n]:
> doctest: automatically test code snippets in doctest blocks (y/n) [n]:
> intersphinx: link between Sphinx documentation of different projects (y/n) [n]:
> todo: write "todo" entries that can be shown or hidden on build (y/n) [n]:
> coverage: checks for documentation coverage (y/n) [n]:
> imgmath: include math, rendered as PNG or SVG images (y/n) [n]:
> mathjax: include math, rendered in the browser by MathJax (y/n) [n]:
> ifconfig: conditional inclusion of content based on config values (y/n) [n]:
> viewcode: include links to the source code of documented Python objects (y/n) [n]:
> githubpages: create .nojekyll file to publish the document on GitHub pages (y/n) [n]:

A Makefile and a Windows command file can be generated for you so that you
only have to run e.g. `make html' instead of invoking sphinx-build
directly.
> Create Makefile? (y/n) [y]:
> Create Windows command file? (y/n) [y]:

Creating file .\source\conf.py.
Creating file .\source\index.rst.
Creating file .\Makefile.
Creating file .\make.bat.

Finished: An initial directory structure has been created.

You should now populate your master file .\source\index.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
   make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

mikoto@mnhomewin  ~/project/sphinx-test
$ make html
sphinx-build -b html -d build/doctrees   source build/html
Running Sphinx v1.4.1
making output directory...
loading translations [ja]... done
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: 1 added, 0 changed, 0 removed
reading sources... [100%] index
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] index
generating indices... genindex
writing additional pages... search
copying static files... done
copying extra files... done
dumping search index in Japanese (code: ja) ... done
dumping object inventory... done
build succeeded.

Build finished. The HTML pages are in build/html.

mikoto@mnhomewin  ~/project/sphinx-test
$ start build/html/index.html

これで、 sphinx のウェルカムページが見えるはず。 ...msys2 環境でやるなら pacman で入れたほうが良くなかったか?

動作確認 on コマンドプロンプト

ということでコマンドプロンプトで試す。

C:\Users\mikoto>mkdir -p project\sphinx-test

C:\Users\mikoto>cd project\sphinx-test

C:\Users\mikoto\project\sphinx-test>sphinx-quickstart
Welcome to the Sphinx 1.4.1 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Enter the root path for documentation.
> Root path for the documentation [.]:

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: y

Inside the root directory, two more directories will be created; "_templates"
for custom HTML templates and "_static" for custom stylesheets and other static
files. You can enter another prefix (such as ".") to replace the underscore.
> Name prefix for templates and static dir [_]:

The project name will occur in several places in the built documentation.
> Project name: Test2
> Author name(s): Mikoto2000

Sphinx has the notion of a "version" and a "release" for the
software. Each version can have multiple releases. For example, for
Python the version is something like 2.5 or 3.0, while the release is
something like 2.5.1 or 3.0a1.  If you don't need this dual structure,
just set both to the same value.
> Project version: 1.0.0
> Project release [1.0.0]:

If the documents are to be written in a language other than English,
you can select a language here by its language code. Sphinx will then
translate text that it generates into that language.

For a list of supported codes, see
http://sphinx-doc.org/config.html#confval-language.
> Project language [en]: ja

The file name suffix for source files. Commonly, this is either ".txt"
or ".rst".  Only files with this suffix are considered documents.
> Source file suffix [.rst]:

One document is special in that it is considered the top node of the
"contents tree", that is, it is the root of the hierarchical structure
of the documents. Normally, this is "index", but if your "index"
document is a custom template, you can also set this to another filename.
> Name of your master document (without suffix) [index]:

Sphinx can also add configuration for epub output:
> Do you want to use the epub builder (y/n) [n]:

Please indicate if you want to use one of the following Sphinx extensions:
> autodoc: automatically insert docstrings from modules (y/n) [n]:
> doctest: automatically test code snippets in doctest blocks (y/n) [n]:
> intersphinx: link between Sphinx documentation of different projects (y/n) [n]:
> todo: write "todo" entries that can be shown or hidden on build (y/n) [n]:
> coverage: checks for documentation coverage (y/n) [n]:
> imgmath: include math, rendered as PNG or SVG images (y/n) [n]:
> mathjax: include math, rendered in the browser by MathJax (y/n) [n]:
> ifconfig: conditional inclusion of content based on config values (y/n) [n]:
> viewcode: include links to the source code of documented Python objects (y/n) [n]:
> githubpages: create .nojekyll file to publish the document on GitHub pages (y/n) [n]:

A Makefile and a Windows command file can be generated for you so that you
only have to run e.g. `make html' instead of invoking sphinx-build
directly.
> Create Makefile? (y/n) [y]:
> Create Windows command file? (y/n) [y]:

Creating file .\source\conf.py.
Creating file .\source\index.rst.
Creating file .\Makefile.
Creating file .\make.bat.

Finished: An initial directory structure has been created.

You should now populate your master file .\source\index.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
   make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

C:\Users\mikoto\project\sphinx-test>make.bat html
Running Sphinx v1.4.1
making output directory...
loading translations [ja]... done
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: 1 added, 0 changed, 0 removed
reading sources... [100%] index
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] index
generating indices... genindex
writing additional pages... search
copying static files... done
copying extra files... done
dumping search index in Japanese (code: ja) ... done
dumping object inventory... done
build succeeded.

Build finished. The HTML pages are in build/html.

C:\Users\mikoto\project\sphinx-test>start build\html\index.html

うん、OK です。

msys2 環境が悪さしないで良かった。

2016/10/19

[作業記録][Debian] Sphinx を使ってみたい

環境

  • Debian 8.5 最小構成インストール
  • sudo, vim, ssh はインストール済み

目標

Sphinx でドキュメントを作成し、生成した html を Nginx で公開する。

作業

下記手順で作業を行う。

  1. 必要パッケージのインストール
  2. sphinx プロジェクトの作成
  3. ドキュメント作成
  4. ドキュメントビルド
  5. html を配置

必要パッケージのインストール

make が必要なの注意。

sudo apt install python3-sphinx
sudo apt install nginx
sudo apt install make

sphinx プロジェクトの作成

Separate source and build directoriesy のほうが管理しやすい感じがした。 その他はよしなにする感じで。

mikoto@debian-base:~$ mkdir -p sphinx/test
mikoto@debian-base:~$ cd sphinx/test/
mikoto@debian-base:~/sphinx/test$ sphinx-quickstart
Welcome to the Sphinx 1.2.3 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Enter the root path for documentation.
> Root path for the documentation [.]:     

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: y

Inside the root directory, two more directories will be created; "_templates"
for custom HTML templates and "_static" for custom stylesheets and other static
files. You can enter another prefix (such as ".") to replace the underscore.
> Name prefix for templates and static dir [_]: 

The project name will occur in several places in the built documentation.
> Project name: Test
> Author name(s): Mikoto2000

Sphinx has the notion of a "version" and a "release" for the
software. Each version can have multiple releases. For example, for
Python the version is something like 2.5 or 3.0, while the release is
something like 2.5.1 or 3.0a1.  If you don't need this dual structure,
just set both to the same value.
> Project version: 1.0.0
> Project release [1.0.0]: 

The file name suffix for source files. Commonly, this is either ".txt"
or ".rst".  Only files with this suffix are considered documents.
> Source file suffix [.rst]: 

One document is special in that it is considered the top node of the
"contents tree", that is, it is the root of the hierarchical structure
of the documents. Normally, this is "index", but if your "index"
document is a custom template, you can also set this to another filename.
> Name of your master document (without suffix) [index]: 

Sphinx can also add configuration for epub output:
> Do you want to use the epub builder (y/n) [n]: 

Please indicate if you want to use one of the following Sphinx extensions:
> autodoc: automatically insert docstrings from modules (y/n) [n]: 
> doctest: automatically test code snippets in doctest blocks (y/n) [n]: 
> intersphinx: link between Sphinx documentation of different projects (y/n) [n]: 
> todo: write "todo" entries that can be shown or hidden on build (y/n) [n]: 
> coverage: checks for documentation coverage (y/n) [n]: 
> pngmath: include math, rendered as PNG images (y/n) [n]: 
> mathjax: include math, rendered in the browser by MathJax (y/n) [n]: 
> ifconfig: conditional inclusion of content based on config values (y/n) [n]: 
> viewcode: include links to the source code of documented Python objects (y/n) [n]: 

A Makefile and a Windows command file can be generated for you so that you
only have to run e.g. `make html' instead of invoking sphinx-build
directly.
> Create Makefile? (y/n) [y]: 
> Create Windows command file? (y/n) [y]: n

Creating file ./source/conf.py.
Creating file ./source/index.rst.
Creating file ./Makefile.

Finished: An initial directory structure has been created.

You should now populate your master file ./source/index.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
   make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

こんな感じのディレクトリ構成になります。

mikoto@debian-base:~/sphinx/test$ find ./ -maxdepth 2 
./
./build
./Makefile
./source
./source/conf.py
./source/index.rst
./source/_templates
./source/_static

ドキュメント作成

適当にドキュメントを作ります。

今回は、test.rst を作成して、 index.rsttoctreetest.rst を追加。

mikoto@debian-base:~/sphinx/test$ cat source/test.rst 
====
test
====

Hello Sphinx document!

mikoto@debian-base:~/sphinx/test$ cat source/index.rst 
.. Test documentation master file, created by
   sphinx-quickstart on Tue Oct 18 23:52:34 2016.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to Test's documentation!
================================

Contents:

.. toctree::
   :maxdepth: 2

   test


Indices and tables
==================


* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

ドキュメントビルド

プロジェクトルートで make html するだけ。

mikoto@debian-base:~/sphinx/test$ make html
sphinx-build -b html -d build/doctrees   source build/html
Making output directory...
Running Sphinx v1.2.3
loading pickled environment... failed: [Errno 2] No such file or directory: '/home/mikoto/sphinx/test/build/doctrees/environment.pickle'
building [html]: targets for 2 source files that are out of date
updating environment: 2 added, 0 changed, 0 removed
reading sources... [100%] test                                                                                       looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] test                                                                                        writing additional files... genindex search
copying static files... done
copying extra files... done
dumping search index... done
dumping object inventory... done
build succeeded.

build/html に html ファイルが生成される。

html を配置

生成された heml ファイルをそのまま nginx のドキュメントルートに突っ込んでしまえば OK。

mikoto@debian-base:~/sphinx/test$ sudo cp -r build/html/* /var/www/html/

これで、 http://ホスト名/ にアクセスすると、生成した Sphinx ドキュメントが参照できるようになっているはず。

以上。

2016/10/18

[作業記録][Debian] Debian 最小構成から Redmine を動かすまで(3) - Nginx インストールから自動起動設定まで -

環境

  • Debian 8.5 最小構成インストール
  • sudo, vim, ssh はインストール済み
  • Redmine は準備済み(前々回の投稿)
  • Unicorn はインストール済み(前回の投稿)

目標

Redmine + sqlite3 + Nginx + Unicorn な環境を作る。

今回は、 Nginx のインストールから、デーモンとして自動起動するための設定まで。

Unicorn の準備

nginx と unicorn を socket で連携させるための設定を行う。

  1. /var/redmine/config/unicorn.rblisten "/var/redmine/tmp/unicorn.sock" を追加
  2. unicorn リスタート

Nginx の準備

Nginx をインストールし、 Unicorn との連携するための設定を行う。

Nginx のインストール

sudo apt install nginx

Nginx の設定

  1. デフォルトの設定を無効化
  2. redmine 用の設定ファイル作成
  3. redmine 用の設定を有効化

デフォルトの設定を無効化

sudo rm /etc/nginx/sites-enabled/default

redmine 用の設定ファイル作成

デフォルト設定をコピーし、redmine 用の設定ファイルにする。

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/redmine.conf

redmine 用設定ファイル /etc/nginx/sites-available/redmine.conf を修正する。

# redmine minimum configuration
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        location / {
                proxy_pass http://unix:/var/redmine/tmp/unicorn.sock;
        }
}

redmine 用の設定を有効化

sudo ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/sites-enabled/redmine.conf

Nginx の動作確認

sudo service nginx restart

この後、http://ホスト名:80/ にアクセスすれば、 redmine のトップページが見れるはず。

以上。

2016/10/02

[作業記録][Debian] Debian 最小構成から Redmine を動かすまで(2) - Unicorn インストールから自動起動設定まで -

環境

  • Debian 8.5 最小構成インストール
  • sudo, vim, ssh はインストール済み
  • Redmine は準備済み(前回の投稿)

目標

Redmine + sqlite3 + Nginx + Unicorn な環境を作る。

今回は、 Unicorn のインストールから、デーモンとして自動起動するための設定まで。

手順概要

Unicorn の準備

Unicorn のインストール

sudo apt install unicorn

Unicorn の設定

/etc/default/unicorn

デフォルトで起動する unicorn の起動スクリプト設定ファイルは /etc/default/unicorn にあるのでこれを編集。 APP_ROOT を Redmine のルートディレクトリに修正。

これと、起動スクリプトをコピーして、 Rails アプリごとに Unicorn サーバーを立てるのが普通なのかな?動なんだろうか。

# Change paramentres below to appropriate values and set CONFIGURED to yes.
# CONFIGURED=no
CONFIGURED=yes

# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60

# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
# APP_ROOT=/path/to/your/web/application
APP_ROOT=/var/redmine

# Server's config.rb, it's not a rack's config.ru
# CONFIG_RB="$APP_ROOT/unicorn.conf.rb"
CONFIG_RB="$APP_ROOT/config/unicorn.rb"

# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
# PID=/run/unicorn.pid
PID=/var/redmine/run/unicorn.pid

# Additional arguments passed to unicorn, see man (1) unicorn.
# UNICORN_OPTS="-D -c $CONFIG_RB"
UNICORN_OPTS="/var/redmine/config.ru -D -c $CONFIG_RB -E production"

/var/redmine/config/unicorn.rb

unicorn の設定ファイルは、ひな形が /usr/share/doc/unicorn/examples/unicorn.conf.minimal.rb にあるので、それをコピーして使用する。コピー先は、 /etc/default/unicorn 内の CONFIG_RB の設定値(今回は /var/redmine/config/unicorn.rb)。

sudo -u www-data cp /usr/share/doc/unicorn/examples/unicorn.conf.minimal.rb /var/redmine/config/unicorn.rb

下記のように修正。

# Minimal sample configuration file for Unicorn (not Rack) when used
# with daemonization (unicorn -D) started in your working directory.
#
# See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
# documentation.
# See also http://unicorn.bogomips.org/examples/unicorn.conf.rb for
# a more verbose configuration using more features.

listen 2007 # by default Unicorn listens on port 8080
worker_processes 2 # this should be >= nr_cpus
# pid "/path/to/app/shared/pids/unicorn.pid"
pid "/var/redmine/run/unicorn.pid"
stderr_path "/var/redmine/log/unicorn_stderr.log"
# stderr_path "/path/to/app/shared/log/unicorn.log"
stdout_path "/var/redmine/log/unicorn_stdout.log"
# stdout_path "/path/to/app/shared/log/unicorn.log"

ディレクトリ作成

ログ出力先と PID 出力先を作成。

cd /var/redmine
sudo -u www-data mkdir run log

Unicorn の動作確認(手動)

cd /var/redmine
sudo -u www-data unicorn -c config/unicorn.rb -E production

これで、ホストの 2007 ポートにアクセスすれば、 Redmine のトップページが見れるはず。 終了は Ctrl-D で。

起動スクリプトの準備

/etc/init.c/unicorn がそのままだと動かなかったので修正。

PID と、起動時のオプションを変えた。

起動スクリプト修正

#!/bin/sh
### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: unicorn initscript
# Description:       unicorn
### END INIT INFO

set -e

NAME=unicorn
DESC="Unicorn web server"

. /lib/lsb/init-functions

if [ -f /etc/default/unicorn ]; then
  . /etc/default/unicorn
fi

DAEMON=/usr/bin/unicorn
# PID=${PID-/run/unicorn.pid}
PID=/var/redmine/run/unicorn.pid

run_by_init() {
    ([ "${previous-}" ] && [ "${runlevel-}" ]) || [ "${runlevel-}" = S ]
}

exit_with_message() {
  if ! run_by_init; then
    log_action_msg "$1 Not starting."
  fi
  exit 0
}

check_config() {
  if [ $CONFIGURED != "yes" ]; then
    exit_with_message "Unicorn is not configured (see /etc/default/unicorn)."
  fi
}

check_app_root() {
  if ! [ -d $APP_ROOT ]; then
    exit_with_message "Application directory $APP_ROOT is not exist."
  fi
}

set -u

case "$1" in
  start)
        check_config
        check_app_root

        log_daemon_msg "Starting $DESC" $NAME || true
#         if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
        if start-stop-daemon --start --chdir /var/redmine --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
              ;;
  stop)
        log_daemon_msg "Stopping $DESC" $NAME || true
        if start-stop-daemon --stop --signal QUIT --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  force-stop)
        log_daemon_msg "Forcing stop of $DESC" $NAME || true
        if start-stop-daemon --stop --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" $NAME || true
        start-stop-daemon --stop --quiet --oknodo --pidfile $PID
        sleep 1
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" $NAME || true
        if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  reopen-logs)
        log_daemon_msg "Relopening log files of $DESC" $NAME || true
        if start-stop-daemon --stop --signal USR1 --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  status)
        status_of_proc -p $PID $DAEMON $NAME && exit 0 || exit $?
        ;;
  *)
        log_action_msg "Usage: $0 <start|stop|restart|force-reload|reload|force-stop|reopen-logs|status>" || true
        exit 1
        ;;
esac

systemctl 更新

sudo systemctl daemon-reload

動作確認

起動確認

sudo service unicorn start

終了確認

sudo service unicorn stop