redmine を社内LANから さくらのVPS に移設しました。
グローバルに出すにあたってSSL化することになったのですが、チケットに画像表示しているページで緑の鍵マークが出なかったので対処しました。情報が少なくて迷ったので、同じような状況の人がいたら参考になれば。
SSL の黄色の警告マークが出た
SSL化の設定が一通り終わってトップページにアクセスすると問題なくSSL接続できており、アドレスバーには緑の鍵マークが出ていた。
が、しかし、チケットを表示させて確認していくと、あるページではアドレスバーに黄色の警告マークがでてしまっていた。ぱっと見では添付ファイルや表示されている画像くらいしかほかのページとの違いがなかったので、右クリックから画像のURLをコピーでURLを確認してみると案の定 http://となっていた。
ただ、添付されているだけのファイルは https:// となっていたので問題無し。問題なのは、チケットを開いたら表示される画像の方だった。
wiki 記法(?)で、添付ファイルのファイル名や画像のURLを!マークでくくってチケット本文に記載すると、チケットを開いたときに画像を表示させることができる。これをやることで、いちいち添付ファイルをダウンロードして画像を確認する必要がなくなり作業がはかどるのだ。例えば以下のように記載する。
!添付ファイル名!
または
!http://redmine.example.com/files/picture.png!
利用上はとても便利な機能だが、この文字列はデータベース内に残ってしまうので、http:// → https:// と変更するためには、DBのデータを直接書き換える必要がある。他に簡単なやり方があったら教えてください ><
対処法
バックアップ
DBのデータを直接書き換えるので元に戻せるようにバックアップをとります。
以下は、Mariadb の場合(MySQL でも使用可)
USERNAME/PASSWORD/DATABASE は書き換えてください。
1 |
mysqldump --user USERNAME --password=PASSWORD --single-transaction --opt --default-character-set=binary DATABASE | gzip > redminebk.sql.gz |
修正するところ
書き換える内容としては、基本的に !http:// → !https:// です。
注意する点としては、通常のURL(最初の!がない http://~~ )は外部リンクの場合もあるので書き換えません。
あくまでも画像表示させるための !http:// の箇所となります。外部URLの画像を貼っている場合はひとつづつ調べてください。。。
対象のテーブルとフィールド(列)
テーブルは、wiki_contents と issues の2つ(だと思います。。。)
- テーブル名:wiki_contents
フィールド名:text - テーブル名:issues
フィールド名:description
redmine のテーブル構造とか設計的な情報があまりなくて正直よくわかってない。ただ、これら2つのテーブルには !http:// が記載されていて、!https:// に修正したら警告は消えた!
ちなみに以下のように↑のテーブルのフィールドを確認すると Type が longtext のものがある。本文を示してそうなものってこのくらいだよね(笑)あとはテーブルなんだけど。他にもあるのかなぁ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
MariaDB [redmine]> show columns from wiki_contents; +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | page_id | int(11) | NO | MUL | NULL | | | author_id | int(11) | YES | MUL | NULL | | | text | longtext | YES | | NULL | | | comments | varchar(1024) | YES | | | | | updated_on | datetime | NO | | NULL | | | version | int(11) | NO | | NULL | | +------------+---------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) MariaDB [redmine]> show columns from issues; +------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | tracker_id | int(11) | NO | MUL | NULL | | | project_id | int(11) | NO | MUL | NULL | | | subject | varchar(255) | NO | | | | | description | longtext | YES | | NULL | | | due_date | date | YES | | NULL | | | category_id | int(11) | YES | MUL | NULL | | | status_id | int(11) | NO | MUL | NULL | | | assigned_to_id | int(11) | YES | MUL | NULL | | | priority_id | int(11) | NO | MUL | NULL | | | fixed_version_id | int(11) | YES | MUL | NULL | | | author_id | int(11) | NO | MUL | NULL | | | lock_version | int(11) | NO | | 0 | | | created_on | datetime | YES | MUL | NULL | | | updated_on | datetime | YES | | NULL | | | start_date | date | YES | | NULL | | | done_ratio | int(11) | NO | | 0 | | | estimated_hours | float | YES | | NULL | | | parent_id | int(11) | YES | MUL | NULL | | | root_id | int(11) | YES | MUL | NULL | | | lft | int(11) | YES | | NULL | | | rgt | int(11) | YES | | NULL | | | is_private | tinyint(1) | NO | | 0 | | | closed_on | datetime | YES | | NULL | | +------------------+--------------+------+-----+---------+----------------+ |
まずは、対象のテーブルとフィールドを select で見てみると、直すべき箇所が見えてきます。サーバを移設していたり、IPを変更していたりすると、古いホスト名やIPアドレスが残っていたりもするので見もの。うゎ なつかしっ ってなること請け合い。
1 2 3 |
MariaDB [redmine]> select text from wiki_contents; MariaDB [redmine]> select description from issues; |
置換コマンド
置換するコマンドは以下の通り、update 文を使用します。
1 |
update テーブル set フィールド = replace(フィールド,'置換前文字列','置換後文字列') |
実際に実行するコマンドは以下。
1 2 3 |
update wiki_contents set text = replace(text,'!http://','!https://') update issues set description = replace(description,'!http://','!https://'); |
あとは、select で対象のフィールドを確認して、以下の文字列が残っていないか確認してみる。
- !http://
- 旧ホスト名
- 旧IPアドレス
以上です。
↓↓↓ redmineについて参考になった書籍を紹介
Redmine実践ガイド 理論と実践、事例で学ぶ新しいプロジェクトマネジメント