概要
自分のメインPC内にRedmineを構築し、個人開発のチケット管理に利用します。
他のチケット管理ステムも利用しましたが、やはり無料アカウントでは限界があるのと、メインPCのリソース有効活用(特にストレージ容量は余る傾向にあります)のため、これを利用することにしました。
自分のPC内でグローバルからのアクセスも考慮していないため、なるべくお手軽設計となっています。
ローカルのGitの内容も見ることができますが、より詳細にGitを管理するならGitLabを入れるなど、追加の対応が必要になると思います。
動作環境
- Ubuntu: 22.04 LIS
- CPU: AMD Ryzen 5600G
- メモリ: 32GB
上記の環境内に構築した 24.04 LIS LXDコンテナに構築します。
事前準備
Rubyのインストール
以前書いたこちらの記事を参考にインストールします。
PostgreSQL のインストールをあらかじめ実施
apacheは使用せずに構築します。
SQLiteを使用すれば更に手間を削減できますが、別用途にも使用するので今回はPostgreSQLを使用します。
- 公式リポジトリの設定
apt install -y postgresql-common
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
- インストール(16)
apt update
apt install postgresql-16
- 設定の調整
必要最低限の設定を行います。
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
設定を反映させ、自動起動するようにします。
systemctl daemon-reload
systemctl enable postgresql
systemctl restart postgresql
systemctl status postgresql
関連パッケージのインストール
apt install unzip
専用ユーザーを作成( redmiusr )
Redmine用のデータベースを作成
su - postgres
createuser -P redmiusr
pass: <パスワード>
createdb -E UTF-8 -l ja_JP.UTF-8 -O redmiusr -T template0 RedmineDB
Redmineのダウンロードと配置
ダウンロード
wget https://www.redmine.org/releases/redmine-5.1.3.zip
解凍して配置します。
mkdir redmine
cd redmine/
unzip ../redmine-5.1.3.zip -d ./
mv redmine-5.1.3 bin
cd bin
各設定ファイルを編集
config
の設定ファイルを編集します。
DB情報
設定ファイルをコピー
cp config/database.yml.example config/database.yml
設定を編集しPostgreSQLの設定を行います。
# PostgreSQL configuration example
production:
adapter: postgresql
database: RedmineDB
host: localhost
username: redmiusr
password: "<パスワード>"
encoding: utf8
Railsの設定
# メールを使わない
config.action_mailer.perform_deliveries = false
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
ログローテション
ローカル配置でも、不具合があった際に原因を探れるようにログは出力したほうがいいです。
日付でローテーションもできますが、古いログの削除を別で実装する必要があって面倒なので、ファイルサイズでローテーションを行います。
# 5Mになったらローテションして10個前は削除
config.logger = Logger.new('log/production.log', 10, 5 * 1024 * 1024)
# 日付でローテションする方法もあるが、削除をしてくれない
#config.logger = Logger.new('log/sample.log', 'daily')
インストール
スクリプトを実行
bundle config set --local path 'vendor/bundle' --without production
bundle install --path vendor/bundle
bundle exec rake generate_secret_token
データベースのテーブル作成
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
テストでサーバーを起動
bundle exec rails server -e production
ポート番号やLISTENするIPを変更するには以下のようにしたほうが
bundle exec rails server -e production -b 0.0.0.0 -p 3000
初期ログイン
初期管理者IDは以下となります。
login: admin
password: admin
初期パスワードは変更してください。
また、実際にチケットの管理を行う別ユーザーを作成しておきます。
Redmineのデーモン化
デーモン化し、コンテナ起動時に自動で起動するようにします。
スクリプトを作成
#!/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
実行権限を付けておきます。
chmod 700 ~/redmine/redmine.sh
systemdの設定ファイルを作成します。
[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
アクセス権を修正し書式の確認します。
chmod 644 /etc/systemd/system/redmine.service
systemd-analyze verify /etc/systemd/system/redmine.service
起動設定を行います。
systemctl daemon-reload
systemctl enable redmine
systemctl start redmine
systemctl status redmine
バックアップ
バックアップ用のスクリプトを作成します。
ディレクトリを作成
mkdir /root/bkscript
バックアップスクリプトを配置します。
#!/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/
実行権限を付けておきます。
chmod 700 /root/bkscript/redmine-bk-pg.sh
DBアカウントの設定を行います。
localhost:5432:RedmineDB:redmiusr:<<パスワード>>
アクセス権を修正します。
chmod 0600 ~/.pgpass
最後にcronの設定を行います。
crontab -e
10 13 * * * /root/bkscript/redmine-bk-pg.sh
確認
crontab -l
バックアップからのリストア
PostgreSQLのインストールとDBの作成
RubyのインストールとRedmineのダウンロードと展開まで実施
バックアップを解凍します。
tar -pzxvf /home/bk-redmine/redminebk-1.tar.gz
confをコピーします。
また、filesを移動します。
mv ../../work/root/bkscript/redmine/files/* files/
ビルド・インストールして空のものを新規作成します。
systemctl用やバックアップ用のスクリプトを設置します・
DBをいったん空にします。
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
公式サイト
参考資料