プロジェクト

全般

プロフィール

ALMinium » 履歴 » バージョン 1

kanata, 2025/04/13 16:02

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