所用のついでに立ち寄ったワークマン。

手頃なスーツケース型のポシェットが売られていました。

見ての通り『ゆるキャン△』とのコラボ。取り敢えず何かに使えるだろうと思っていたら

今、メインで使っているカメラとよく使うレンズ二本がジャストフィット。

クロスも入りますし、マチが採られている上に開閉に制限があるので落とす心配もそれほどありません。

肩掛けストラップ付きなので持ち運びも大丈夫。
カメラの運搬問題が解決しました。
所用のついでに立ち寄ったワークマン。
手頃なスーツケース型のポシェットが売られていました。
見ての通り『ゆるキャン△』とのコラボ。取り敢えず何かに使えるだろうと思っていたら
今、メインで使っているカメラとよく使うレンズ二本がジャストフィット。
クロスも入りますし、マチが採られている上に開閉に制限があるので落とす心配もそれほどありません。
肩掛けストラップ付きなので持ち運びも大丈夫。
カメラの運搬問題が解決しました。
SSHの不正アクセス対策としてfail2banを入れています。とはいえ、これがマシンリソースを喰うので根本的な設定を行いました。
SSHを前提としているサーバの場合は
ことが大前提です。
また、鍵交換での手順です。パスワード認証でこの設定を行うと接続ができなくなります。
sudo cp -pi /etc/ssh/sshd_config /path/to/backup/directory/sshd_config.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
diff -u /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
エラーがなければ(差分がなければ)バックアップできています。
echo -e "\nPermitRootLogin no\nPasswordAuthentication no\nAllowUsers user1" | sudo tee -a /etc/ssh/sshd_config
user1の部分は「実際にSSH接続を行うアカウント」を指定します。
user1 user2
のように、スペースで区切って複数のアカウントを指定することが可能です。
diff -u /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
以下のような差分を確認します。
+PermitRootLogin no
+PasswordAuthentication no
+AllowUsers user1
SSH接続で修正をしている場合、別にターミナルクライアントを立ち上げておきます。
sudo systemctl restart ssh.service
ことを確認します。また、
sudo reboot
を行い、サーバ再起動でも同じ挙動を確認します。
スナップショットからイメージを復元します。
または、直接コンソールを開き、
sudo cp -pi /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
として設定を切り戻し、
sudo systemctl restart ssh.service
を実施します。
以下の環境でインストールを確認しています。
Ruby 3.1 / 3.2 / 3.3 が要件であるため、Ubuntu 22.04 / 20.04へのインストールは避けた方が無難です。
※ また、テーマやプラグインの仕様も大きく異なっているため、本格的な以降は筆者は様子見にしています。
sudo add-apt-repository ppa:ondrej/apache2
sudo aptitude update
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev
sudo aptitude install libapache2-mod-passenger
apache2ctl -v
Apache/2.4.59
以降(2024/11/21現在2.4.62)であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。
sudo gem install bundler racc mysql2
「3 gems installed」が表示されればインストール成功です。
mysql_secure_installationによる初期設定を行います。
うまくいかない場合は以下を参照してください。
https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation
sudo mysql -u root -p
上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします
CREATE DATABASE redmine character set utf8mb4;
DB "redmine" を作成します
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください
GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit
mysql -u redmine -p
SHOW DATABASES;
exit
sudo mkdir -p /home/www-data/redmine
自分の環境に合わせます。
sudo chown -R www-data:www-data /home/www-data
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/6.0-stable /home/www-data/redmine
sudo -u www-data cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml
/home/www-data/redmine/config/database.yml
このファイルを教義・信仰に従ったエディタで編集してください。
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
# rootからredmineに変更します
password: "redmine用のパスワード"
encoding: utf8mb4
# 本番環境(production)のみ設定を行います
cd /home/www-data/redmine/ && pwd
/home/www-data/redmine/
(Redmineを配置したディレクトリ)であることを確認します
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle exec rake generate_secret_token
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
ServerName 【hoge.example.com】
# ServerNameは自身が設定したredmineに読み替えてください。
DocumentRoot /home/www-data/redmine/public
<Directory /home/www-data/redmine/public>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
__EOF__
ls -l /etc/apache2/sites-available/redmine.conf
sudo a2ensite redmine.conf
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
sudo apache2ctl configtest
Syntax OK を確認します
systemctl status apache2.service
active(running)を確認します
sudo systemctl restart apache2.service
systemctl status apache2.service
active(running)を確認します
http://設定したRedmineドメイン
でRedmineのトップページが表示されれば成功です。
直ちにadmin/adminでログインし、強固なパスワードを設定し直します。
Redmine 5.1でも動くようになったknowlegebaseプラグイン。
なぜかその記事が検索で引っかからなかったので対処を行います。
参考:Redmine v5.1系で knowledgebaseプラグインの記事を検索する
cd /redmine/root/directory/plugins/plugins/redmine_knowledgebase/lib/ && pwd
/redmine/root/directory/
は自分の環境に合わせます。
sudo cp -pi redmine_knowledgebase.rb /path/to/backup/directory/redmine_knowledgebase.rb
任意のバックアップディレクトリを指定します。
diff -u /path/to/backup/directory/redmine_knowledgebase.rb redmine_knowledgebase.rb
エラー(差分)がないことを確認します。
redmine_knowledgebase.rb
の、
base_url = File.dirname(__FILE__)
REQUIRED_FILES.each { |file| require(base_url + '/' + file) }
module RedmineKnowledgebase
end
の箇所を、
module RedmineKnowledgebase
Redmine::Activity.register :kb_articles
Redmine::Search.available_search_types << 'kb_articles'
end
となるように編集します。
diff -u /path/to/backup/directory/redmine_knowledgebase.rb redmine_knowledgebase.rb
module RedmineKnowledgebase
+
+ Redmine::Activity.register :kb_articles
+ Redmine::Search.available_search_types << 'kb_articles'
end
sudo systemctl restart apache2.service
systemctl status apache2.service
active(running)
を確認します。
修正を行ったRedmineにアクセスし、knowlegebaseへのアクセス権があるユーザーでログインします。
Redmineの検索機能で、knowledgebaseプラグインの記事が検索できていれば設定完了です。
V7.1.xからパッケージ管理がyarnではなくmnpmに変更されました。
その手順に合わせたメモです。
v7.0.x以前はyarnを用います。
systemctl status growi.service
※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します
sudo systemctl stop growi.service
systemctl status growi.service
inactive (dead)を確認します
cd /opt/growi
自分の環境に合わせます。
sudo git fetch --tags
sudo git tag -l
スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。
sudo git stash
sudo git checkout 【バージョン】
sudo pnpm install
sudo npm app:build
systemctl status growi.service
inactive (dead)を確認します
sudo systemctl start growi.service
※ 完全に起動していないと、アクセスしても503エラーが発生します。
systemctl status growi.service
サービススクリプトを[growi]にしている場合
active (running)を確認します
Nextcloud、Webからアップグレードすることはできますが下位のメジャーバージョンにダウングレードすることはできません。
アップグレードの失敗ならびにアプリの相性などで元のバージョンに戻したい場合は以下のように切り戻しを行います。
(今回の筆者のパターンは前者です)
アップグレード前のnextcloudのDBを取っていること
これがなければそもそも成り立ちません。この方法で日次のバックアップを取っていました。
取っていなかった場合は別のサイトをお探しください。
nextcloud_backup.sql
等のSQLを任意のディレクトリに格納してください。
データ格納ディレクトリを別パーティションにしています。
sudo mv /home/www-data/nextcloud /path/to/backup/directory/nextcloud.$(date +%Y%m%d)
退避前、退避先はそれぞれ自分の環境に合わせます。
ls -l /path/to/backup/directory/nextcloud.$(date +%Y%m%d)
退避先にディレクトリファイル一式があることを確認します。
cd /hoge && pwd
任意のディレクトリを指定します。
wget https://download.nextcloud.com/server/releases/nextcloud-29.0.8.zip
切り戻しを行う(アップグレード前)のバージョンを指定します。
unzip nextcloud-29.0.8.zip
sudo chown -R www-data:www-data nextcloud
Nextcloud(Webサービス)実行ユーザーに合わせます。
sudo mv nextcloud /home/www-data/
元々Nextcloudが配置されていたディレクトリに再配置します。
ls -l nextcloud /home/www-data/nextcloud
ディレクトリ・ファイル一式があることを確認します。
sudo cp -pi /path/to/backup/directory/nextcloud.$(date +%Y%m%d)/config/config.php /home/www-data/nextcloud/config/
sudo -u www-data cp -r /path/to/backup/directory/nextcloud.$(date +%Y%m%d)/apps/* /home/www-data/nextcloud/apps/
sudo -u www-data cp -r /path/to/backup/directory/nextcloud.$(date +%Y%m%d)/data/* /home/www-data/nextcloud/data/
※データ格納ディレクトリを別のパーティションにしている場合は不要です。ディスクサイズによってはcp -r
の代わりにmv
を用いてください。
mysql -u nextcloud -p nextcloud < /path/to/directory/nextcloud_backup.sql
-u nextcloudのDBユーザ名
、-p nextloudDB名
です。バックアップのSQLファイルは自分の環境に合わせます。
sudo systemctl restart apache2.service
sudo systemctl restart nginx.service
sudo rm -rf /path/to/backup/directory/nextcloud.$(date +%Y%m%d)
rm /path/to/directory/nextcloud_backup.sql
Redmine標準で備わっているリマインダー。
締め切りが近いチケットを担当者に送付できる機能をcronで登録しています。これを更に改良です。
#!/bin/bash
# 引数でルートディレクトリを指定(デフォルトは/home/www-data/redmine)
REDMINE_ROOT=${1:-"/home/www-data/redmine"}
# 引数で日数を指定(デフォルトは3日)
DAYS=${2:-3}
# Redmineのルートディレクトリに移動
cd $REDMINE_ROOT
# リマインダーを送信
bundle exec rake redmine:send_reminders days=$DAYS RAILS_ENV=production
前は締め切り日数を
./redmine_reminder.sh 5
のように、引数で指定していました。新しいスクリプトでは
./redmine_reminder.sh /home/wwww-data/redmine2 5
と、同一サーバ上にある別Redmineでもルートディレクトリを指定できるようになっています。
後はこれを
20 8 * * * /home/hoge/scripts/redmine_reminder.sh /home/www-data/redmine2 31
など、crontabでの自動化を行いやすくしました。
以下のように、UX回りを大幅にパワーアップするプラグインです。
cd /home/www-data/redmine && pwd
自分の環境に合わせます。
sudo -u www-data git clone https://github.com/sk-ys/redmine_enhanced_ux
ls -ld redmine_enhanced_ux
ディレクトリがあることを確認します。
sudo systemctl restart apache2.service
利用者にとっては、ない方がよかった機能もいくつかあります。そこはユーザーと調整しながら行ってください。
Growi v7.1.0のインストールメモです。
パッケージ管理がyarnからpnpmに変更されているため、若干手間が異なります。
の基本的な設定が済んだという状況です。
sudo aptitude install build-essential git git-lfs apt-transport-https
※v6系と異なり、git-lfsをインストールしない状態でgit-clone
を行うと正しくビルドが行えません。
sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash
sudo aptitude update
sudo aptitude install nodejs
node -v
2024/10/30現在:v20.18.0
npm -v
2024/10/30現在:10.9.0
sudo aptitude install redis-server
systemctl status redis-server
active(running)を確認します。
sudo systemctl enable redis-server
sudo aptitude install openjdk-17-jdk
sudo aptitude install openjdk-17-jdk sudo bash -
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo aptitude update
sudo aptitude install elasticsearch
※この後、デフォルトパスワードが表示されますが、控えておく程度にしましょう。
sudo mkdir /etc/elasticsearch/old
※任意のバックアップディレクトリを指定します。
sudo cp -pi /etc/elasticsearch/jvm.options /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d)
echo -e "-Xms256m\n-Xmx256m" | sudo tee -a /etc/elasticsearch/jvm.options
sudo diff -u /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d) /etc/elasticsearch/jvm.options
+-Xms256m
+-Xmx256m
※この作業だけ管理者権限で実行します。
sudo su -
cp -pi /etc/elasticsearch/elasticsearch.yml /path/to/backup/elasticsearch.yml.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
sed -i -e 's/xpack.security.enabled: true/xpack.security.enabled: false/' \
-e '/xpack.security.http.ssl:/{n; s/ enabled: true/ enabled: false/}' \
-e '/xpack.security.transport.ssl:/{n; s/ enabled: true/ enabled: false/}' /etc/elasticsearch/elasticsearch.yml
diff -u /path/to/backup/elasticsearch.yml.$(date +%Y%m%d) /etc/elasticsearch/elasticsearch.yml
# Enable security features
-xpack.security.enabled: true
+xpack.security.enabled: false
xpack.security.enrollment.enabled: true
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
- enabled: true
+ enabled: false
keystore.path: certs/http.p12
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
- enabled: true
+ enabled: false
exit
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
sudo systemctl start elasticsearch
systemctl status elasticsearch
active(running)を確認します。
sudo systemctl enable elasticsearch
sudo aptitude install gnupg
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
--dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo aptitude update
sudo aptitude install mongodb-org
MongoDBの格納先を、冗長化構成されているパーティションにするため対応しました。
sudo mkdir /home/mongodb
保存先を変えたいところにします
sudo chown -R mongodb:mongodb /home/mongodb
ls -ld /home/mongodb
sudo cp -pi /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
sudo diff -u /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)
バックアップが保存されたか、差分がないことで確認します。
sudo sed -i 's/dbPath: \/var\/lib\/mongodb/dbPath: \/home\/mongodb/' /etc/mongod.conf
sudo diff -u /path/to/backup/mongod.conf.$(date +%Y%m%d) /etc/mongodb.conf
- dbPath: /var/lib/mongodb
+ dbPath: /home/mongodb
sudo systemctl start mongod
systemctl status mongod
active (running)を確認します
sudo systemctl enable mongod
sudo npm install -g pnpm
※Growi v6.1.0から必須パッケージとなりました。
sudo yarn global add turbo
sudo git clone https://github.com/weseek/growi /home/www-data/growi
※任意のディレクトリを指定します。
cd /home/www-data/growi && pwd
先ほどcloneしたディレクトリです。
sudo git checkout -b v7.1.0 refs/tags/v7.1.0
sudo git lfs pull
sudo pnpm install
CPUのスペックによっては相当な時間がかかります。
sudo npm run app:build
やはり時間がかかります。
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.service
After=network.target elasticsearch.service
ConditionPathExists=【/home/www-data/growi】
[Service]
ExecStart=【/home/www-data/growi/】growi-start.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
__EOF__
※【】内を、git cloneしたディレクトリにします。
growi-start.sh
#!/bin/bash
cd 【/home/www-data/growi】
NODE_ENV=production \
AUDIT_LOG_ENABLED=true \
FORCE_WIKI_MODE=private \
MONGO_URI=mongodb://localhost:27017/growi \
ELASTICSEARCH_URI=http://localhost:9200/growi \
REDIS_URI=redis://localhost:6379 \
PASSWORD_SEED=[任意の文字列] \
npm run app:server
※【】内を、git cloneしたディレクトリにします。
[]内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED
また、オプションなどは好みに応じて指定してください。(今回はs3互換クラウドストレージに保存するため、ファイルのアップロードを自由選択にしています。)
sudo chmod +x /home/www-data/growi/growi-start.sh
sudo systemctl daemon-reload
sudo systemctl start growi.service
systemctl status growi.service
active(running)を確認
sudo systemctl enable growi.service
sudo a2enmod proxy_http rewrite
sudo systemctl restart apache2.service
suod mkdir /var/log/growi/
sudo chown -R www-data:www-data /var/log/growi
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/growi.conf
<VirtualHost _default_:80>
ServerName 【hoge.example.com】
# ドメイン名を指定します
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>
<VirtualHost _default_:443>
ServerName 【hoge.example.com】
# ドメイン名を指定します
CustomLog /var/log/growi/growi_access.log combined
ErrorLog /var/log/growi/growi_error.log
#SSL設定
SSLEngine on
Protocols h2 http/1.1
# SSLを有効化します
SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します
# Header に Host: example.com を追加するため
ProxyPreserveHost On
# HTTPS利用時: Header に x-forwarded-proto: https を追加するため
RequestHeader set x-forwarded-proto 'https'
# Apache では static assets で 304 が返らないことがあるので ETag を無効化する
<ifModule mod_headers.c>
Header unset ETag
</ifModule>
FileETag None
# socket.io の path を rewrite する
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
__EOF__
【】内を自分の環境に変更してください。
※Ubuntu22.04の時と異なり、socket.ioのpathは公式ドキュメント通りで正常に動作しています。
sudo a2ensite growi.conf
sudo apache2ctl configtest
Syntax OKを確認します。
sudo systemctl restart apache2.service
http://設定したドメイン でアクセスします。
この初期サイトが表示されたらインストール完了です。
Ubuntu 7.1.0はかなり大きめの仕様変更がありました。
https://github.com/weseek/growi/releases/tag/v7.1.0
いくつかハマったポイントがありましたが、「自分はこの手順でうまくいった」 というメモを残します。
以下の手順に沿ってインストール済みです。
https://barrel.reisalin.com/books/growi/page/ubuntu2404growi-v7v710
ここで分かるように、パッケージ管理がyarnからpnpmへと変わっています。
なぜか通常のgit checkoutはビルドがうまくいきませんでした。
systemctl status growi.service
active(running)
を確認します。
sudo systemctl stop growi.service
systemctl stop growi.service
inactive(dead)
を確認します。
筆者環境は/home/www-data/growi
です。
sudo mv /home/www-data/growi /path/to/backup/directory/growi_org
ls -l /path/to/backup/directory/growi_org
ファイル一覧が参照できることを確認します。
sudo git clone https://github.com/weseek/growi /home/www-data/growi
※任意のディレクトリを指定します。
cd /home/www-data/growi && pwd
先ほどcloneしたディレクトリですが、退避前のディレクトリと同じことを確認します。
sudo git checkout -b v7.1.0 refs/tags/v7.1.0
sudo git lfs pull
sudo npm install -g pnpm
pnpm --version
9.12.3
を確認(2024/11/02現在)
sudo git lfs pull
sudo pnpm install
※ マシンスペックによっては相当時間がかかります
※ Done in 【時間】と書かれていたらアップグレード完了です
sudo npm run app:build
筆者のように、起動スクリプトをGrowiのインストールディレクトリに仕込んでいる場合の手順です。
sudo cp -pi /path/to/backup/directory/growi_org/growi-start.sh /home/www-data/growi/
それぞれ、バックアップしたディレクトリとcloneしたディレクトリです。
ls -l /home/www-data/growi/growi-start.sh
ファイルがあることを確認します。
systemctl status growi.service
inactive (dead)を確認します
sudo systemctl start growi.service
※ 完全に起動していないと、アクセスしても503エラーが発生します。
systemctl status growi.service
サービススクリプトを[growi]にしている場合
active (running)を確認します
Powered by WordPress & Theme by Anders Norén