月: 2024年1月 Page 1 of 4

BookStackをnginxで動かす場合の設定。

デスクトップPCとしてのLinux利用(Kubuntu 22.04インストール後にやったこと) – Manualmaton's Laboratory

こちら、ローカルサーバとして運用することにしています。

公開しているサイトと異なりnginxで動かしているので、その場合のメモです。

環境

  • Ubuntu 22.04
  • 適切に名前解決できる
  • ドメイン名に沿った証明書がある
    • 筆者はmkcertでローカル証明書を作っています

インストールして最初の設定が終わっている状態です。

nginxインストール

sudo aptitude install nginx

mysqlインストール

sudo aptitude install mysql-server mysql-client libmysqlclient-dev

sql設定変更

sudo cp -pi /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。
# .$(date +%Y%m%d)をつけることで、バックアップファイルは当日日付(YYYYMMDD形式)で記録されます

diff -u /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# バックアップが取れていることを「差分が存在しないこと」で確認します

echo -e "default_authentication_plugin=mysql_native_password" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
# mysqld.cnfに追記をします

MySQL再起動

sudo systemctl restart mysql.service

MySQLのrootパスワード変更

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
exit

運用に合わせて適切なパスワードを設定します。

mysql-secure-installation

sudo mysql_secure_installation

詳しい設定は以下に記しています。

https://atelier.reisalin.com/projects/zettel/questions/5-mysql_secure_installation

phpのインストール

https://barrel.reisalin.com/books/nextcloud/page/1-1-nextcloud

自サイトを参考にしていますが、一部異なります。

PHPレポジトリを追加して必要パッケージをインストールします。

  • レポジトリ追加
sudo add-apt-repository ppa:ondrej/php

Ubuntu20.04系ではこれを行わないとPHP7.4系しかインストールされません。

  • パッケージアップデート
sudo aptitude update
  • php インストール
sudo aptitude install php8.1
sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,fpm}
#fpmを入れる必要あり

nginx環境でも動かすため、php(バージョン)-.fpmを入れます。

  • apache無効化
sudo disable apache2.service

依存関係でapache2も一緒にインストールされるので、ここで停止させます。

Composerインストール

https://barrel.reisalin.com/books/bookstack/page/bookstackubuntu2004

同じくこちらにメモを残しています。

  • インストール
  • ディレクトリ移動
cd /hoge

任意の作業ディレクトリに移動します

  • インストーラーのダウンロード
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • インストール
sudo php composer-setup.php
  • インストーラーのリンク解除
sudo php -r "unlink('composer-setup.php');"
  • コマンドのパスを移動
sudo mv composer.phar /usr/local/bin/composer
  • composerに実行権を付与
sudo chmod +x /usr/local/bin/composer
  • バージョン確認
composer --version

バージョンが表示されることを確認します。

DBを作成します。

  • mysqlログイン
mysql -u root -p
CREATE DATABASE bookstack character set utf8mb4;
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstackuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

DB名/パスワードはポリシーに応じて適切なものを指定します。

BookStackの配置

  • プログラム配置
cd /home/www-data
# パーティションの都合上、/home/www-dataに置いています。
# 環境に合わせて適切なWebサービス公開ディレクトリを指定してください。

sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch 
sudo chown -R www-data:www-data BookStack
cd BookStack
  • 設定ファイル編集
sudo cp -pi .env.example .env

教義・信仰に沿ったエディタで以下を編集します。

APP_URL=https://hoge.example.com
# 公開用URLを指定します

# Database details
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=password
# DB名、パスワードなどは先ほど作成したものです。
  • マイグレート
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan db:seed --force
sudo -u www-data php artisan migrate --force

Nginx設定

  • 設定ファイル作成
    • /etc/nginx/site-available/bookstack.conf
  • ファイル内容
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    # サーバ名を指定します。
    server_name  hoge.example.com;
        server_tokens off;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
        add_header Strict-Transport-Security 'max-age=63072000';

    # 任意のログディレクトリを指定します。
    access_log  /var/log/nginx/bookstack/access.log;
    error_log   /var/log/nginx/bookstack/error.log;
    # SSL証明書を指定します。
    ssl_certificate      /path/to/ssl_certificate/hoge.crt;
    # SSL秘密鍵を指定します。
    ssl_certificate_key  /path/to/ssl_key/hoge.key;

    # BookStackが置かれているディレクトリです。/publicは必ず指定します。
    root /home/www-data/BookStack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

# 強制的にhttps通信
server {
    listen       80;
    listen       [::]:80;
    server_name  veritas.lumos;
    return 301   https://$host$request_uri;
}

nginx設定を有効化します。

  • ディレクトリ移動
cd /etc/nginx/sites-enabled
  • 初期設定ファイルを無効
sudo unlink default
  • 設定有効化
sudo ln -sf /etc/nginx/site-available/bookstack.conf bookstack.conf
  • 構文チェック
sudo nginx -t

エラーがないことを確認します。

  • nginx再起動
sudo systemctl restart nginx.service

インストール確認

設定したドメインにブラウザでアクセスし、ログイン画面が出てくれば成功です。

Linuxを入れたLet’s noteにWebアプリを導入。

週末はこちらの設定をずっと行っていました。

Growiのインストール

これは絶対に行いたいものでした。「個人のWiki/メモサイト」という性質上、宅内NWにしか置けなかったものです。

しかし、階層ごとに文書を管理したり、各種Markdownの入力補助が豊富なこのシステムは一丁目一番地として導入したいと考えていました。

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/77

のサイトを参考に、ローカルホストでのみ動くGrowiがようやく完成です。

BookStack

これもこれで入れておきたいシステム。Growiが日付ごとの記録を行ってくれるなら、こっちは分野ごとの整理にちょうどいいのです。

https://barrel.reisalin.com/books/bookstack/chapter/1bookstack

こちらの自サイトを参考にインストールしていったものの、Growiのリバースプロキシにnginxを利用したため、導入は少し勝手が違いました。

その当たりのルールは改めて記述するとして

無事、動いたことが確認できて良かったです。

デスクトップPCとしてのLinux利用(Kubuntu 22.04インストール後にやったこと)

概要

中古のLet's noteにKubuntu 22.04を入れたので、デスクトップPCのセットアップを行いました。

デスクトップ側での手順-1-

SSHのインストール

同一NW内のデスクトップなので、リモートアクセスで操作しやすいようにします。

sudo aptitude install ssh

リモート側(クライアント)でのSSHを利用してのインストール

ここからはSSHでログインして作業を行います。

パッケージ一新

sudo aptitude upgdate && sudo aptitude upgrade
  • 再起動
sudo reboot

日本語入力化

Kubuntuは何故か日本語入力システムがインストールされていません。

sudo aptitude install fcitx-mozc

Edgeインストール

好みの問題でEdgeを入れます。

  • 必須パッケージを入れる
 sudo aptitude install git build-essential apt-transport-https 

この機会に開発パッケージも入れます。

  • リポジトリ鍵追加
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
  • リポジトリ追加
 sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
  • リポジトリ追加後のパッケージアップグレード
sudo aptitude update
  • インストール
sudo aptitude install microsoft-edge-stable

Linuxデスクトップ再起動

sudo reboot

デスクトップ側での手順-2-

  1. Linuxデスクトップにログインします。
  2. 日本語入力ができることを確認します。
  3. ブラウザがインストールできることを確認します。

中古PCの入手とLinuxインストール。

きっかけ

ChromebookでのLinux運用が厳しくなってきたことがまずありました。

Play Storeでアプリは揃えられるものの、一部がスマートフォン専用だったり、ファイル操作に難があるというのにも難がありました。

そんな矢先、Windows10のサポート終了が近づいているのでWindows11未対応のノートPCが市場にかなり出回るようになってきたという話を聞き、秋葉原で発見。

Let's note CF-XZ

Let's noteのCF-XZです。

  • Core i-5 7300
  • 8GB Memory
  • 256GB SSD

と、基本的なスペックはあります。

こちらのRELEASEが示すように画面自体が取り外せる(つまり、画面自体をタブレットとして利用可能。

Linuxインストール

  • 通常と異なる機能が備わっている
  • 画面タッチは対応しているのか
  • そもそもインストールできるのか

がLinux化の懸念点ではありましたが、Kubuntu 22.04は正常にインストールできました。

  1. 公式サイトからイメージをダウンロード
  2. Rufusを使ってブートドライブ作成
  3. ノートPCのBIOSを起動
  4. ブートドライブから起動
  5. インストーラーの指示に従う(デュアルブートは考えていません)

で、無事にインストール完了。無線LANは確認しました。(優先はこれから確認です)

画面の切り離しやタッチ操作なども可能でした。

これから

  • 完全なローカルサーバ化
  • Webアプリのインストール
  • その他、検証

など、すき煮やっていく予定です。

シェルスクリプト:秘密鍵を用いたLinuxサーバへのログインスクリプト。

概要

SSH接続しているLinuxクライアントから別のLinuxサーバにSSHログインする際の効率化を図るスクリプトです。

通常のコマンドを用いた秘密鍵を用いたアクセス

ssh -i /path/to/private_key username@server_host

と、-iの後に秘密鍵を指定し、ユーザ名@サーバ名/IPアドレスを入力するのはちょっと面倒なので、コマンド一発で接続できるようにします。

前提

  • Linuxサーバの秘密鍵を有していること。
  • 秘密鍵に適切なパスワードがかけられていること。

スクリプト

  • ssh_server.sh

serverの部分を任意のホスト名にすると便利です

#!/bin/bash

# 変数定義
## 接続先のサーバ名/IPアドレス
server_host="your_server_host"
## 接続先でログインするアカウント名
username="your_username"
## 秘密鍵のファイルパスを絶対パスで表記
private_key_path="/path/to/private_key"
## 接続時間を記録するログのディレクトリパスを絶対パスで表記
log_directory="/path/to/logs"


# ログディレクトリが存在しない場合は作成する
if [ ! -d "$log_directory" ]; then
    mkdir -p "$log_directory"
fi

# 現在の日付と時刻を取得
current_datetime=$(date +"%Y%m%d%H%M")

# ログファイルのパス
log_file="$log_directory/$server_host$current_datetime.log"

# 秘密鍵の存在チェック
if [ ! -f "$private_key_path" ]; then
    echo "$(date): Error - 秘密鍵ファイルが見つかりません: $private_key_path" >> "$log_file"
    exit 1
fi

# 秘密鍵のパーミッションが600であるかのチェック
if [ $(stat -c %a "$private_key_path") -ne 600 ]; then
    echo "$(date): Error - 秘密鍵のパーミッションが正しくありません (600 である必要があります): $private_key_path" >> "$log_file"
    exit 1
fi

# SSH接続
echo "$(date): SSH接続を試行します: ssh -i $private_key_path $username@$server_host" >> "$log_file"
ssh -i "$private_key_path" "$username@$server_host"
echo "$(date): SSH接続が正常に終了しました" >> "$log_file"
  • 実行権付与
chmod +x ssh_server.sh

動き

./ssh_server.sh

を実行後、秘密鍵のパスワード入力画面が出てきます。認証後、接続先のプロンプトが返ってくれば成功です。

Redmine5.1検証-4.2で使っていたプラグインの稼働可否(動いたプラグイン)-

概要

Ubuntu 20.04系のEOLに備えて、Redmineも5.1で動かし筒あります。そんな中で、「今まで使っていたプラグインが動くかどうかを確かめました。

動いたプラグイン

まずは動いたプラグインです。

プラグイン名機能URL備考
Redmine Logsログの表示や削除を行うhttps://github.com/haru/redmine_logs最初に入れます(障害切り分けのため)
Additionals様々なマクロを提供https://github.com/alphanodes/additionals使い勝手が大きく変わります
Additonal Tagsチケットのタグ付けを行うhttps://github.com/alphanodes/additional_tags/上記、Addtionalsが必須です
full_text_searchチケット全文検索https://github.com/clear-code/redmine_full_text_search逆に4.2で動かしていなかったものです
RedMica UI extensionMermaid対応/バーンダウンチャート追加などhttps://github.com/redmica/redmica_ui_extensionこれも最初の方に入れるプラグインです
DMSFファイル機能拡充https://www.redmine.org/plugins/redmine_dmsfRedmineが機能不全に陥る可能性がありますのでインストール時は要注意
Redmine Issue Badge割り当てられているチケットの数を表示https://github.com/akiko-pusu/redmine_issue_badgeモチベーション維持に有用です
Redmine Issue Templateチケットやコメントのテンプレート化https://github.com/agileware-jp/redmine_issue_templates4.2対応版とメンテナが変わっています。
Redmine Local Avatarsアカウントのアイコンを任意の画像に変えるhttps://github.com/ncoders/redmine_local_avatarsこれも個人で使っているならモチベーション維持につながります
Redmine Message Cutomize各種用語を変更しますhttps://github.com/farend/redmine_message_customizeローカライズされていないもの(誤訳)などに対応
Redmine View Customize見た目や機能の拡充など、Redmineにおけるアーミーナイフのような頼れる存在ですhttps://github.com/onozaty/redmine-view-customize非常に優先度が高いプラグインです

動かなかったプラグインやワークアラウンドは後日。

MySQLコンソールにログインせず、使われているテーブルの名前を検索する。

コマンド概要

MySQLのテーブルを検索する際、「使われているテーブルの名前を知りたい」時に使います。

コマンド

テーブルの一覧を確認する

mysql -u [user] -p -D [DB] -e "show tables"
mysql -u root -p -D redmine -e "show tables"

ここでは、DB:redmineのテーブル一覧を確認しています。 (rootユーザを用いています。特権などにより、適切なアカウントを指定してください)

特定の文字列が使われているテーブルを一覧表示する

mysql -u [user] -p -D [DB] -e "show tables like '%[文字列]%'"
mysql -u root -p -D redmine -e "show tables like '%issue%'"

ここでは、DB:redmineから、「issue」を含むテーブルのみを一覧表示します。

いちいち、

mysql -u [user] -p

の後に

USE [DB名];
SHOW TABLES LIKE '%issue%';

QUIT

と打ち込むより早いワンライナーでした。 (パスワードを入力するので厳密には異なりますが)

Redmine View Customize Pluginでのアイコンサイズ変更。

やりたいこと

Redmineのチケット表示画面に出てくるこのアイコンを大きくします。

環境

  • Redmine 4.2 Redmine 5.1
  • 要:ViewCustomize Pluginの導入

共通手順

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに移動します。
  3. 「新しい表示のカスタマイズ」をクリックします。

カスタマイズ1

以下の通り指定します。

  • パスのパターン:空白
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード
$(document).ready(function() {
  // 表示環境やテーマに合わせて任意のサイズを指定
$('.gravatar').css('width', '70px').css('height', '70px');
});

コード入力後、有効にして「保存」をクリックします。

設定反映後、

と、サイズが大きくなりました。

しかし、全てに適用されるので

ガントチャートのアイコンもそれに合わせて大きくなります。それを抑制する措置を執ります。

カスタマイズ2

以下の通り指定します。

  • パスのパターン:/gantt
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード
$(document).ready(function() {
  // 表示環境やテーマに合わせて任意のサイズを指定
   $('.gravatar').css('width', '10px').css('height', '10px');
});

適用後、

ガントチャートのアイコンサイズも設定できました。

まとめ

  • アイコンが全てに及ぶため、かなり乱暴な手を取っています。
  • そのため、カスタマイズを2つ挟む結果になりました。
  • もっとスマートな手があると思いますので、要検証です。

ボードゲーム『ワーリング・ウィッチクラフト』開封。

購入から間が経った作品、ようやく開封できました。

開封

『ワーリング・ウィッチクラフト』外箱

ゲーム時間やプレイ感と比して、箱はかなり大きめです。

内容物

コンポーネントは少なめ

やはり、箱に比してコンポーネントも少なめ。

  • 組み立て式の大釜
  • 個人ボード
  • キューブ
  • カード

のほぼ4構成です。

大釜

存在感が大きい釜

本作を象徴するのがこちらの大釜です。これをやりとりしていくので、後でボンドなどで補強する必要がありそうです。

釜を全て組み立て、カードをスリーブに入れて収納に掛かります。

収納

大釜をしまうための仕切り付き

箱の大きさ、最大の理由はこの「釜の収納スペース」です。もう少しコンパクトにできれば箱の大きさは小さくできたのでしょうが、没入感を考えるとこちらです。

このため、収納スペースはほとんど余裕がありません。最初についていた袋に頼るほかないです。

釜と錬金術士

そして、想像通り、この釜のサイズはfitma / ねんどろいどとぴったりのサイズでした。

Redmine 5.1にIssue Template Pluginをインストール。

この記事を書いて程なくして、直々に別リポジトリにメンテナが引き継がれていたとの情報を戴きましたので、

早速、インストールします。

環境

  • Ubuntu 22.04
  • Redmine 5.1
  • Ruby 3.0
  • Apache 2.4

導入時

Gem追加:要
DBマイグレーション:要

さっくりとした手順

  1. SSHログイン後、Redmineプラグインに移動
  2. gitでレポジトリをダウンロード
  3. 新規ジェムをインストール
  4. DBマイグレーション
  5. Webサービス再起動

ディレクトリに移動します。

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

プラグインを配置します。

sudo -u www-data git clone https://github.com/agileware-jp/redmine_issue_templates

ls -ld redmine_issue_templates

Gemをインストールします。

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

sudo -u www-data bundle install

DBのマイグレーションを行います。

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

Webサービスを再起動します。

sudo systemctl restart apache2

動作

  1. Redmineに管理者アカウントでログインします。
  2. 任意のプロジェクトを選択して設定をクリックします。
  3. モジュール「チケットテンプレート」にチェックを入れて保存します。
  4. プロジェクトにチケットテンプレートのタブが表示されていれば設定完了です。

このプラグインの有無がRedmine 5.1に移行できるかの鍵の一つだったので、大いに助かりました。

Page 1 of 4

Powered by WordPress & Theme by Anders Norén