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