プロジェクト

全般

プロフィール

ALMinium » 履歴 » バージョン 2

kanata, 2025/04/13 16:02

1 1 kanata
# ALMInium
2
3
Redmine、DVCS(Git/VMercurial)、Backlogs、コードレビュープラグインなど、開発に必要な環境を簡単にセットアップできるもの。
4
5
{{toc}}
6
7
# Portal
8
9
http://alminium.github.io/alminium/
10
11
https://github.com/alminium/alminium
12
13
# CentOS7にインストールする方法
14
15
ここを参考にさせて頂きましたが、CentOS7だと、いろいろ問題があります。
16
http://little-braver.com/346/
17
18
## 課題1 MySQLからmariadbに変更になっている
19
20
MySQLとmariadbは、ほぼ互換なのだけれど、サービス起動の名前が違っていたりして、smeltスクリプトでデーモンの起動が失敗する。
21
そのため、smelt実行前に予め起動しておく。
22
23
````
24
#service mariadb start
25
````
26
27
28
## 課題2 SELinuxの設定の無効化/ファイウォールの無効化
29
30
起動の仕様がinit/upstartからsystemdに変更になっているからなのか、
31
smeltスクリプトでデーモンの起動や、設定が失敗する。
32
33
インストール時には、ファイアフォールは解除しておく。後で80だけ許可しましょう(その手順は後述)。
34
````
35
#iptables -F
36
````
37
38
ちなみに、CentOS7は、iptablesじゃなくて、firewalldに変更になっているので、
39
これまでのやりかたではダメ。
40
41
42
## 課題3 mod_perlがApache2.4に対応していないので、インストールできない
43
44
これが一番の問題。mod_perlが足りなくて、apacheが起動できない。
45
なので、mod_perlを使う設定を外すんだけど・・・
46
外しちゃうと、svn連携やgit連携が出来なくなると思う。
47
mod_perlがいつ対応してくれるのかも不明。もう1年ぐらい更新されていない。
48
49
ALMiniumインストール後(smelt実行後)に、以下を実施する。
50
51
````
52
#vi /etc/opt/alminium/alminium.conf
53
54
- Include /etc/opt/alminium/vcs.conf
55
+ #Include /etc/opt/alminium/vcs.conf
56
57
````
58
59
以上の対応で、httpdは起動できる。
60
61
````
62
#service httpd start
63
````
64
65
## 課題4 ブラウザでアクセスしても、httpsにReWriteされる
66
67
localhost以外でアクセス(IP直打ちとか)すると、
68
````
69
/etc/httpd/conf.d/welcome.conf
70
````
71
に設定されているページが優先されて表示されてしまう。
72
73
````
74
# vi /etc/opt/alminium/redmine.conf
75
-   RewriteEngine On
76
+   RewriteEngine Off
77
````
78
79
で、解決する。
80
81
## インストール手順
82
83
### SELinuxを無効にする
84
85
SELinuxが有効だと、細かい設定が大変なので無効にします。
86
87
````
88
vi /etc/sysconfig/selinux
89
````
90
 
91
「enforcing」を「disabled」へ変更します。
92
93
````
94
- SELINUX=enforcing
95
+ SELINUX=disabled
96
````
97
98
再起動後、「getenforce」コマンドで「Disabled」になっていることを確認します。
99
100
````
101
# getenforce
102
Disabled
103
````
104
105
### ポートの開放
106
107
firewalldで80のポートを追加します。
108
109
現在のゾーン(デフォルトはpublic)に、http(80番ポート)の通信を許可する。
110
111
ゾーンの確認
112
113
````
114
# firewall-cmd --list-all
115
````
116
117
httpポート解放の設定
118
119
````
120
# firewall-cmd --add-service=http --zone=public --permanent
121
````
122
123
定期の反映
124
125
````
126
# firewall-cmd --reload
127
````
128
129
130
### yumでいろいろインストール
131
132
````
133
# yum groupinstall "Development Tools"
134
# yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
135
# yum install httpd httpd-devel
136
# yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts
137
# yum install wget git
138
# yum install mariadb-server mariadb-libs mariadb-devel mariadb
139
# yum install ruby ruby-devel ruby-libs rubygem
140
````
141
142
### bundlerのインストール
143
144
````
145
# gem install bundler --no-rdoc --no-ri
146
````
147
148
### Passengerのインストール
149
150
````
151
# gem install passenger --no-rdoc --no-ri
152
# passenger-install-apache2-module
153
````
154
155
156
### ALMiniumのインストール
157
158
GitHubからALMiniumを取得します。
159
160
````
161
# git clone https://github.com/alminium/alminium.git
162
````
163
164
「git checkout dev」コマンドで開発中の最新バージョンをチェックアウトします。
165
166
````
167
# cd alminium
168
# git checkout dev
169
````
170
171
「smelt」を実行し、ホスト名などのオプションを選択します。
172
173
````
174
# bash ./smelt
175
````
176
177
以下を前提に、動作確認しています。
178
* SSLのサポート→しない
179
* セキュリティの設定→する(SE Linuxの無効化をする)
180
* Jenkinsインストール→しない
181
* SE Linux →設定する
182
183
smeltの実行が終わったら、前述の「課題3」と「課題4」を実施。
184
185
### インストール完了
186
187
ブラウザに
188
````
189
http://[ipアドレス]
190
````
191
とか
192
````
193
http://localhost
194
````
195
と入力して表示されればOK!
196
197
### ほっとくとログが肥大していくので切り替える設定をする
198
199
logrotateを利用する。logrotateの細かい仕様の話はググってもらうとして、結局のところ、CentOS7では、
200
201
```
202
/etc/logrotate.d
203
```
204
205
配下に設定ファイル(ファイル名任意)を作ればよい。
206
207
```
208
# cd /etc/logrotate.d
209
# vi redmine
210
211
+ /opt/alminium/log/production.log {
212
+   weekly
213
+   rotate 4
214
+   dateext
215
+   copytruncate
216
+   missingok
217
+ }
218
```
219
220
ファイルを作ったらテストしてみる。以下のコマンドを叩く。
221
-dオプションだと、実際にログの切替は発生しない。エラーが出なかったら、とりあえずOK。
222
223
```
224
# logrotate -dv /etc/logrotate.d/redmine 
225
reading config file /etc/logrotate.d/redmine
226
227
Handling 1 logs
228
229
rotating pattern: /opt/alminium/log/production.log  weekly (4 rotations)
230
empty log files are rotated, old logs are removed
231
considering log /opt/alminium/log/production.log
232
  log does not need rotating
233
```
234
235
本当にこれで動いてくれるかは、ログ切替タイミングでログ出力先を確認してみよう。
236
(環境に依存するが、おそらく日曜日の朝に切り替えになる。 その後、 /opt/alminium/log の中を確認してみること。cronのログを確認するのもいいと思う。)
237
ちなみに強制実行は、
238
239
```
240
# logrotate -f /etc/logrotate.d/redmine 
241
```
242
243
これで即時切替する。
244
245
### MariaDB(MySQL)の文字コードをutf8mb4にする
246
247
utf8の4Byte文字に対応するよう文字コードを変更しておく。
248
初期状態では、4byte文字を入力するとおかしなことになる。
249
以下を参考にして実施。
250
251
Dig that groovy! - Redmine構築後のDBの文字コードをutf8mb4に変換して絵文字に対応する
252
http://zappy.hatenablog.jp/entry/2015/05/19/015044
253
254
1.DBのバックアップ
255
256
念のためにしておく
257
258
2.my.cnfの変更
259
260
~~~
261
# vi /etc/my.cnf.d/server.cnf
262
~~~
263
264
以下を[mysqld]セクションへ追記。
265
266
~~~
267
[mysqld]
268
character-set-server = utf8mb4
269
innodb_file_format = Barracuda
270
innodb_file_per_table = 1
271
innodb_large_prefix
272
~~~
273
3.Mariadbを再起動
274
275
~~~
276
# service mariadb restart
277
~~~
278
279
DB情報を変数にあらかじめ追加する
280
281
4.DB情報を変数にあらかじめ追加する
282
283
~~~
284
# MYSQL_DB=alminium
285
# MYSQL_USER=alminium
286
# MYSQL_PASS=alminium
287
# CONVERT_SCRIPT_FILE=convert_script
288
~~~
289
290
5.文字コード変換用スクリプトの作成
291
292
~~~
293
# (echo 'alter database `'"$MYSQL_DB"'` default character set utf8mb4;'; mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "show tables" --batch --skip-column-names | xargs -I{} echo -e 'alter table `'{}'` ROW_FORMAT=DYNAMIC;\nalter table `'{}'` convert to character set utf8mb4;') > $CONVERT_SCRIPT_FILE
294
~~~
295
296
>めっちゃ助かりました。[クポ](http://zappy.hatenablog.jp/entry/2015/05/19/015044)さん、ありがとうございます。
297
298
6.スクリプトの実行
299
300
~~~
301
# mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB < $CONVERT_SCRIPT_FILE
302
~~~
303
304
7.RedmineのDB設定の変更
305
306
~~~
307
# vi /opt/alminium/config/database.yml
308
- encoding: utf8
309
+ encoding: utf8mb4
310
~~~
311
312
8.Apache再起動
313
314
~~~
315
# service httpd restart
316
~~~
317
318
319
320
321
322
323
324
325
# その他
326
327
## httpsでアクセスしたい
328
329
```
330
# vi /etc/opt/alminium/alminium.conf
331
```
332
コメントアウトを外す
333
334
````
335
- #Include /etc/opt/alminium/redmine-ssl.conf
336
+ Include /etc/opt/alminium/redmine-ssl.conf
337
````
338
339
340
# バックアップ&リストア
341
342
## バックアップ
343
344
dbは、alminium配下だけでも、リストア対象としては、十分です。
345
私は、リストア時に設定ファイルの差分を確認したいので、丸ごともバックアップしています。
346
347
```
348
# mysqldump -u root alminium        > /tmp/backup_20150101_mariadb_alminium.dmp
349
# mysqldump -u root --all-databases > /tmp/backup_20150101_mariadb_all.dmp
350
```
351
352
tarは、/opt/alminium/files配下だけでも、リストア対象としては、十分です。
353
私は、リストア時に設定ファイルの差分を確認したいので、丸ごとバックアップしています。
354
355
```
356
# cd /opt
357
# tar cvfj /tmp/backup_20150101_opt_alminium.tar.bz2 alminium
358
```
359
360
## リストア
361
362
```
363
# service httpd stop
364
# cd /opt/alminium
365
# tar xvfj /tmp/backup_20150101_opt_alminium.tar.bz2
366
```
367
368
前提として、alminiumのdatabaseがからで存在すれば、バックアップ時に取得したダンプデータを使ってデータを投入できます。
369
370
```
371
# mysql -u root alminium < /tmp/backup_20150101_mariadb_alminium.dmp
372
```
373
374
databaseがなんにもなかったら、これでいけるんじゃないかな・・・
375
376
```
377
# mysql -u root alminium < /tmp/backup_20150101_mariadb_all.dmp
378
```
379
380
## wikiの生データ抽出(自作ツール)
381
382
以下のシェルスクリプトで、wikiの加工前(MarkDown記法そのまま)のデータを取得できます。
383
別の環境に移行する時や、うっかりwikiだけ消してしまった時の復旧などに便利。
384
385
実行するとカレントディレクトリにwiki毎にテキストファイルを吐くので、実行する場所は注意してください。wikiの記事数によるけど、いっぱいファイルが吐かれるよ!
386
387
getRedmineWiki.sh
388
389
```bash
390
#!/bin/bash
391
392
# Redmineのwikiをそのままダンプするシェルスクリプト ver 0.2
393
# 2016.9.18 kanata
394
395
# 環境に合わせて書き換えてね ----------
396
URL="https://raintrees.net" 
397
PROJECTID="a-painter-and-a-black-cat"
398
ID="xxxxxxxxxx"
399
PASS="xxxxxxxxxx"
400
#--------------------------------------
401
402
LIST=`curl -s -b cookie.txt -c cookie.txt ${URL}/projects/${PROJECTID}/wiki/index|grep "^<li><a"|grep wiki|grep -v "wiki selected"|grep "^<li><a"|grep wiki|grep -v "wiki selected"|cut -d'/' -f5|cut -d"\"" -f1`
403
404
#########
405
# login #
406
#########
407
echo "login start"
408
409
while :
410
do
411
  TOKEN=`curl -s -b cookie.txt -c cookie.txt  ${URL}/login|grep authenticity_token|cut -d "\"" -f20|tail -1`
412
  RESULT=`curl -s -b cookie.txt -c cookie.txt -d "utf8=&#x2713;" -d "authenticity_token=${TOKEN}" -d "username=${ID}" -d "password=${PASS}" "${URL}/login"|grep errorExplanation`
413
414
  if echo ${RESULT} |grep errorExplanation
415
  then
416
    echo "login error. Retrying.."
417
  else
418
    break
419
  fi
420
done
421
422
echo "logged in"
423
424
######################
425
# wikidata get start #
426
######################
427
echo "wiki data get start"
428
429
for WIKI in ${LIST}
430
do
431
  echo "- ${WIKI}"
432
  curl -s -L -b cookie.txt -c cookie.txt "${URL}/projects/${PROJECTID}/wiki/${WIKI}/edit" -o ${WIKI}.tmp
433
  #どうやらcurlがファイルにflashするのに時間差があるようなので、少し待つ
434
  sleep 1
435
436
  #なんちゃってスクレイピング
437
  echo -n "" > ${WIKI}.txt
438
  FLAG="0"
439
  while read LINE
440
  do
441
    if echo ${LINE}|fgrep "<textarea " > /dev/null
442
    then
443
      FLAG="1"
444
    fi
445
    if echo ${LINE}|fgrep "</textarea>" > /dev/null
446
    then
447
      echo "${LINE}" |sed 's/<\/textarea>//g' >> ${WIKI}.txt
448
      FLAG="0"
449
    fi
450
    if [ ${FLAG} = "2" ]
451
    then
452
      echo "${LINE}" >> ${WIKI}.txt
453
    fi
454
    if [ ${FLAG} = "1" ]
455
    then
456
      FLAG="2"
457
    fi
458
  done < ${WIKI}.tmp
459
  rm ${WIKI}.tmp
460
done
461
462
# クッキーは消さない方が吉(初回のログイン処理の動作が安定しないので)
463
#rm cookie.txt
464
echo "wiki data get finish"
465
466
exit 0
467
```
468
469
ログイン処理に失敗したりする。何度か実行すると成功する。なんでだ。。