なるべくお手軽な、おうちRedmine環境構築


# 概要

自分のメインPC内にRedmineを構築し、個人開発のチケット管理に利用します。

他のチケット管理ステムも利用しましたが、やはり無料アカウントでは限界があるのと、メインPCのリソース有効活用（特にストレージ容量は余る傾向にあります）のため、これを利用することにしました。

自分のPC内でグローバルからのアクセスも考慮していないため、なるべくお手軽設計となっています。

ローカルのGitの内容も見ることができますが、より詳細にGitを管理するならGitLabを入れるなど、追加の対応が必要になると思います。


# 動作環境

- Ubuntu: 22.04 LIS
- CPU: AMD Ryzen 5600G
- メモリ: 32GB

上記の環境内に構築した 24.04 LIS LXDコンテナに構築します。




# 事前準備

## Rubyのインストール

以前書いたこちらの記事を参考にインストールします。

https://qiita.com/usagr10asu1/items/7c8478a62a449b064b44


## PostgreSQL のインストールをあらかじめ実施

apacheは使用せずに構築します。

SQLiteを使用すれば更に手間を削減できますが、別用途にも使用するので今回はPostgreSQLを使用します。

-  公式リポジトリの設定

```bash
apt install -y postgresql-common
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
```

- インストール(16)

```bash
apt update
apt install postgresql-16
```

- 設定の調整

必要最低限の設定を行います。

```text:/etc/postgresql/16/main/postgresql.conf
listen_addresses = '0.0.0.0'
max_connections = 1000
shared_buffers = 512MB
maintenance_work_mem = 128MB
work_mem = 16MB

log_destination = 'stderr' 
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 
log_file_mode = 0600
log_rotation_age = 1d

autovacuum = on
autovacuum_naptime = 1min
```

設定を反映させ、自動起動するようにします。

```bash
systemctl daemon-reload
systemctl enable postgresql
systemctl restart postgresql
systemctl status postgresql
```

## 関連パッケージのインストール

```bash
apt install unzip
```

## 専用ユーザーを作成( redmiusr )

Redmine用のデータベースを作成

```bash
su - postgres
createuser -P redmiusr
  pass: ＜パスワード＞
createdb -E UTF-8 -l ja_JP.UTF-8 -O redmiusr -T template0 RedmineDB
```



# Redmineのダウンロードと配置

ダウンロード
```bash
wget https://www.redmine.org/releases/redmine-5.1.3.zip
```

解凍して配置します。
```bash
mkdir redmine
cd redmine/
unzip ../redmine-5.1.3.zip -d ./
mv redmine-5.1.3 bin
cd bin
```

# 各設定ファイルを編集

`config`の設定ファイルを編集します。

## DB情報

設定ファイルをコピー
```bash
cp config/database.yml.example config/database.yml
```

設定を編集しPostgreSQLの設定を行います。

```yaml:config/database.yml
# PostgreSQL configuration example
production:
  adapter: postgresql
  database: RedmineDB
  host: localhost
  username: redmiusr
  password: "＜パスワード＞"
  encoding: utf8
```

## Railsの設定

```ruby:config/application.rb
# メールを使わない
config.action_mailer.perform_deliveries = false
```

```yaml:config/configuration.yml 
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: “localhost”
port: 25
domain: “sample.com”  ※redmineを実行するサーバーのFQDN

rmagick_font_path: /usr/share/fonts/truetype/usr/share/fonts/truetype/noto/NotoSans-Regular.ttf
```

## ログローテション

ローカル配置でも、不具合があった際に原因を探れるようにログは出力したほうがいいです。

日付でローテーションもできますが、古いログの削除を別で実装する必要があって面倒なので、ファイルサイズでローテーションを行います。

```ruby:config/environments/production.rb
# 5Mになったらローテションして10個前は削除
config.logger = Logger.new('log/production.log', 10, 5 * 1024 * 1024)

# 日付でローテションする方法もあるが、削除をしてくれない
#config.logger = Logger.new('log/sample.log', 'daily')
```


# インストール

## スクリプトを実行

```bash
bundle config set --local path 'vendor/bundle' --without production
bundle install --path vendor/bundle
bundle exec rake generate_secret_token
```

## データベースのテーブル作成

```bash
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
```

## テストでサーバーを起動

```bash
bundle exec rails server -e production
```

ポート番号やLISTENするIPを変更するには以下のようにしたほうが

```bash
bundle exec rails server -e production -b 0.0.0.0 -p 3000
```

## 初期ログイン

初期管理者IDは以下となります。
```
login: admin
password: admin
```

初期パスワードは変更してください。

また、実際にチケットの管理を行う別ユーザーを作成しておきます。



# Redmineのデーモン化

デーモン化し、コンテナ起動時に自動で起動するようにします。

## スクリプトを作成
```shell:~/redmine/redmine.sh
#!/usr/bin/bash

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

cd ~/redmine/bin
bundle exec rails server -e production -b 0.0.0.0 -p 3000
```
実行権限を付けておきます。
```bash
chmod 700 ~/redmine/redmine.sh
```
systemdの設定ファイルを作成します。

```shell:/etc/systemd/system/redmine.service
[Unit]
Description=Redmine
After=network.target

[Service]
#WatchdogSec=10
User=redmine
Type=simple
WorkingDirectory=/home/redmine/redmine/bin/
ExecStart=/home/redmine/redmine/redmine.sh

[Install]
WantedBy=multi-user.target
```

アクセス権を修正し書式の確認します。
```bash
chmod 644 /etc/systemd/system/redmine.service
systemd-analyze verify /etc/systemd/system/redmine.service
```

起動設定を行います。
```bash
systemctl daemon-reload
systemctl enable redmine
systemctl start redmine
systemctl status redmine
```


# バックアップ

バックアップ用のスクリプトを作成します。

ディレクトリを作成
```bash
mkdir /root/bkscript
```
バックアップスクリプトを配置します。

```bash:/root/bkscript/redmine-bk-pg.sh
#!/usr/bin/bash

mkdir /root/bkscript/redmine-bk

# postgreSQL
pg_dump -U redmiusr -h localhost -Fc --file=/root/bkscript/redmine-bk/pg-RedmineDB`date +%Y%m%d`.sql RedmineDB

# Redmine file
cp -pr /home/redmine/redmine/bin/files /root/bkscript/redmine-bk/
rsync -ahv /home/redmine/redmine/bin/config/ /root/bkscript/redmine-bk/config --exclude "locales"

# system file copy
cp -p /home/redmine/redmine/redmine.sh /root/bkscript/redmine-bk/
cp -p /etc/systemd/system/redmine.service /root/bkscript/redmine-bk/
cp -p /root/script/redmine-bk-pg.sh /root/bkscript/redmine-bk/
cp -p /root/.pgpass /root/bkscript/redmine-bk/dot_pgpass

# tar and move
tar -pzcf /root/script/redminebk-1.tar.gz /root/bkscript/redmine-bk
rm -rf /root/bkscript/redmine-bk

mv /home/bk-redmine/redminebk-6.tar.gz /home/bk-redmine/redminebk-7.tar.gz
mv /home/bk-redmine/redminebk-5.tar.gz /home/bk-redmine/redminebk-6.tar.gz
mv /home/bk-redmine/redminebk-4.tar.gz /home/bk-redmine/redminebk-5.tar.gz
mv /home/bk-redmine/redminebk-3.tar.gz /home/bk-redmine/redminebk-4.tar.gz
mv /home/bk-redmine/redminebk-2.tar.gz /home/bk-redmine/redminebk-3.tar.gz
mv /home/bk-redmine/redminebk-1.tar.gz /home/bk-redmine/redminebk-2.tar.gz
mv /root/script/redminebk-1.tar.gz /home/bk-redmine/
```

実行権限を付けておきます。
```bash
chmod 700 /root/bkscript/redmine-bk-pg.sh
```

DBアカウントの設定を行います。

```bash:~/.pgpass
localhost:5432:RedmineDB:redmiusr:<<パスワード>>
```

アクセス権を修正します。
```bash
chmod 0600 ~/.pgpass
```

最後にcronの設定を行います。

```bash
crontab -e
```

```bash
10 13 * * * /root/bkscript/redmine-bk-pg.sh
```

確認
```bash
crontab -l
```






# バックアップからのリストア

PostgreSQLのインストールとDBの作成
RubyのインストールとRedmineのダウンロードと展開まで実施

バックアップを解凍します。
```bash
tar -pzxvf /home/bk-redmine/redminebk-1.tar.gz
```

confをコピーします。

また、filesを移動します。

```bash
mv ../../work/root/bkscript/redmine/files/* files/
```

ビルド・インストールして空のものを新規作成します。

systemctl用やバックアップ用のスクリプトを設置します・


DBをいったん空にします。

```bash
su - postgres
dropdb RedmineDB
createdb -E UTF-8 -l ja_JP.UTF-8 -O redmiusr -T template0 RedmineDB
exit
```

pg_dumpからリストアします。

```
pg_restore -U redmiusr -h localhost -d RedmineDB <バックアップファイル>
```

起動して動作確認を行い、バックアップcronの設定をおこないます。





# 参考URL

公式サイト
- https://www.redmine.org/
- https://www.postgresql.org/

参考資料

https://qiita.com/devzooiiooz/items/4b564839efa063e6702a

https://qiita.com/takeda-no-nao/items/2f44d08b40eb6c5612d4