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