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=✓" -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 | ログイン処理に失敗したりする。何度か実行すると成功する。なんでだ。。 |