【Redmine】Redmine導入前準備

RedmineをAWSのEC2の無料版であるAmazon Linuxに導入します。
導入の前提として、WEBサーバ、DBサーバの設定が済んでいること。
WEBサーバにはApache2、DBサーバにはMySQLを利用します。

導入前の準備として、各ツールを揃えます。

  • 開発ツール・ビルドに必要なヘッダファイルのインストール
    RubyやPassengerのビルドで必要なヘッダファイルです。

    yum -y groupinstall "Development Tools"
    yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
    
  • ImageMagickと日本語フォントのインストール
    ImageMagickと日本語フォントはガントチャートをPNG形式の画像にエクスポートする機能、
    添付ファイルのサムネイル画像を作成するのに利用するようです。
    インストールを行わなくてもRedmineの実行は可能ですが、入れておきます。

    yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
    
  • Rubyインストール
    Amazon Linuxでは既に導入済ですが、最新のものにしました。

    yum install ruby-devel
    
  • bundler導入
    Redmineが使用するGemを一括インストールするためのツールです。

    gem install bundler --no-rdoc --no-ri
    

    「–no-rdoc –no-ri」はドキュメントのインストールを省略するためのオプションです。

  • Redmine用のMySQLのユーザ作成

    mysql -uroot -pデータベースパスワード
    
    create database レッドマイン用DB名 default character set utf8;
    grant all on レッドマイン用DB名.* to レッドマイン用ユーザ名@localhost identified by 'レッドマイン用ユーザパスワード';
    flush privileges;
    exit
    

【DBサーバ】MySQL導入

  • MySQLインストール

    yum -y install mysql-server mysql-devel
    
  • MySQL設定

    vi /etc/my.cnf
    
    # 下記内容を追加([mysqld]に)
    # クライアントの文字コードに依存しない
    skip-character-set-client-handshake
    # 文字コード
    character-set-server=utf8
    
    下記内容を追加
    [mysql]
    default-character-set=utf8
    
    /etc/rc.d/init.d/mysqld start
    chkconfig mysqld on
    chkconfig --list mysqld
    

    ランレベルが2~5でonを確認する。

  • rootユーザのパスワード設定とUTF-8の確認

    mysql -u root
    
    SET PASSWORD FOR root@localhost=password('データベースパスワード');
    

    character_set_filesystemとcharacter_sets_dir以外がUTF-8であることを確認する。

    show variables like 'char%';
    
  • 初期ユーザと初期データベースの削除

    mysql -u root -pデータベースパスワード
    

    ユーザ名が空のユーザを確認し、削除する。

    SELECT user,host FROM mysql.user;
    
    DELETE FROM mysql.user WHERE user='';
    

    データベースを確認しデータベースtestを削除する。

    SHOW DATABASES;
    
    DROP DATABASE test;
    exit
    

【WEBサーバ】Apache2SSL導入

  • 秘密鍵作成

    cd /etc/pki/tls/certs
    openssl genrsa -aes256 1024 > server.key
    
    Generating RSA private key, 1024 bit long modulus
    ......................++++++
    ............++++++
    e is 65537 (0x10001)
    Enter pass phrase:パスワード入力
    Verifying - Enter pass phrase:パスワード再入力
    
  • 公開鍵作成

    openssl req -new -key server.key > server.csr
    
    Enter pass phrase for server.key:パスワード入力
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    略
    Country Name (2 letter code) [XX]:JP
    State or Province Name (full name) []:Tokyo
    Locality Name (eg, city) [Default City]:Akihabara
    Organization Name (eg, company) [Default Company Ltd]:OreOreCA
    Organizational Unit Name (eg, section) []:z-aws
    Common Name (eg, your name or your server's hostname) []:z-aws.net
    Email Address []:空欄
    A challenge password []:空欄
    An optional company name []:空欄
    
  • 証明書作成

    openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt
    
    Enter pass phrase for server.key:パスワード入力
    
  • 秘密鍵パスワード解除
    現状のままだとApache2の再起動のたびにパスワードを求められるので、
    秘密鍵のパスワードを解除しておきます。

    mv server.key server.key.org
    openssl rsa -in server.key.org > server.key
    
    Enter pass phrase for server.key.org:パスワード入力
    writing RSA key
    
  • Apache2のSSL導入

    yum install mod_ssl
    
  • Apache2のSSL設定

    cp -pi /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org
    vi /etc/httpd/conf.d/ssl.conf
    
    下記内容に変更
    #DocumentRoot "/var/www/html"
    ↓
    DocumentRoot "/var/www/html"
    
    ErrorLog logs/ssl_error_log
    ↓
    ErrorLog /var/log/httpd/ssl_error_log
    
    TransferLog logs/ssl_access_log
    ↓
    #TransferLog logs/ssl_access_log
    
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    ↓
    CustomLog /var/log/httpd/ssl_access_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    
    
    # POODLE SSLv3.0 脆弱性問題対処
    SSLProtocol all -SSLv2
    ↓
    SSLProtocol all -SSLv2 -SSLv3
    
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    ↓
    SSLCertificateFile /etc/pki/tls/certs/server.crt
    
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ↓
    SSLCertificateKeyFile /etc/pki/tls/certs/server.key
    
  • Apache2SSLの動作確認
    AWSコンソール画面から「セキュリティグループ」-「インバウンド」で
    以下を許可しておきます。

    プロトコル:TCP
    ポート:443
    
    echo '<h1>It works!</h1>' > /var/www/html/index.html
    /etc/rc.d/init.d/httpd restart
    

    https://xxx.xxx.xxx.xxx/

    証明書の確認が表示された後、「It works!」が表示されれば正常です。

    rm -f /var/www/html/index.html
    

【WEBサーバ】Apache2設定

  • Apache2のドキュメントルート設定
    基本的な設定は完了したので、次にドキュメントルートの設定を行います。

    vi /etc/httpd/conf/httpd.conf
    
    下記の設定となるように変更(変更部分または重要部分のみ記載)
    # ドキュメントルート
    DocumentRoot "/var/www/html"
    
    # 最上位の制御
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    
    # ドキュメントルートの制御
    <Directory "/var/www/html">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    
    # アクセス制御ファイル名
    AccessFileName .htaccess
    
    # ファイル名を指定しない場合の検索優先順位(index.html)
    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
        Satisfy All
    </Files>
    
    # iconsルートの制御
    <Directory "/var/www/icons">
        Options -Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
    # エラーログ出力先
    ErrorLog /var/log/httpd/error_log
    
  • welcome.confの無効化

    mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org
    
  • Apache2の動作確認
    AWSコンソール画面から「セキュリティグループ」-「インバウンド」で
    以下を許可しておきます。

    プロトコル:TCP
    ポート:80
    
    echo '<h1>It works!</h1>' > /var/www/html/index.html
    /etc/rc.d/init.d/httpd start
    

    http://xxx.xxx.xxx.xxx/

    「It works!」が表示されれば正常です。

    rm -f /var/www/html/index.html
    
  • Apache2起動設定

    chkconfig httpd on
    chkconfig --list httpd
    

    ランレベルが2~5でonを確認する。

【WEBサーバ】Apache2導入

  • Apatch2インストール

    yum -y install httpd httpd-devel
    

    簡単な初期設定を行っておきます。

    cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
    vi /etc/httpd/conf/httpd.conf
    
    下記内容を変更
    # サーバ情報表示内容
    ServerTokens OS
    ↓
    ServerTokens ProductOnly
    
    # サーバ署名表示内容
    ServerSignature On
    ↓
    ServerSignature Off
    

【Oracle】1ヵ月間の範囲に含まれるにデータの抽出

業務では適用開始年月日(VALID_START_YMD)と
適用終了年月日(VALID_END_YMD)を持つテーブルが多いですが、
そこから指定の1ヵ月間の範囲に含まれるデータを抽出します。

WHERE VALID_START_YMD <= '月末' AND VALID_END_YMD >= '月初'
適用開始年月日にあてるのが「月末」
適用終了年月日にあてるのが「月初」

逆にしてしまうと1ヶ月間のうち、月初~15日、16日~月末のような
2レコードがある場合、取得できなくなります。

【bat】フォルダの末尾に日付を追加してバックアップ

作業フォルダの末尾に日付を追加してバックアップします。
設計や開発時にファイルサーバーやSVNサーバが使えない場合、
日々のバックアップで利用しました。

@ECHO OFF
REM コピーします。
SET DIR_NAME=%date:~0,4%%date:~5,2%%date:~8,2%
SET DIR_FULL_NAME=D:\test_%DIR_NAME%

REM ディレクトリを作成する。実行結果をNULに流し、標準エラー出力および標準出力とする。
MKDIR %DIR_FULL_NAME% > NUL 2>&1
XCOPY /Y /D /E C:\Users\ユーザ名\Desktop\test %DIR_FULL_NAME%
REM /Y:同名のファイルが存在する場合、上書きの確認を行わない
REM /D:コピー先に同名のファイルが存在する場合に更新日が新しいファイルのみコピーする
REM /E:ファイルが存在しなくてもディレクトリごとコピーする
REM /EXCLUDE:file nameを使うとコピー除外もできる

【WordPress】WordPressテーマ変更

  • 外観-テーマ
    BirdTIPSを入れました。
  • 外観-テーマ編集
    index.php、single.php、archive.php、page.php、search.php、404.phpの編集で下記内容を削除する。

    <?php get_sidebar('right'); ?>
    
  • 外観-テーマ編集
    style.cssの編集で下記内容を変更する。
    変更前

    #main {
      width: 78.59%;
      float: left; }
    

    変更後

    #main {
      width: 100.00%;
      float: left; }
    
  • 外観-テーマ編集
    header.phpの編集で下記内容をコメントアウトする。
    スマホから見た場合、ソース表示内容が切れてしまうのを防ぎたいので、
    あえてPC表示と同じ見た目にするためにコメントアウトしています。

    <meta name="viewport" content="width=device-width" >
    
  • 設定-表示設定
    1ページに表示する最大投稿数を5から10に変更する。
  • 設定-SyntaxHighlighter
    テーマをEmacsからRDarkに変更する。

【AWS】iphoneからAWS接続

  • iphoneからAWS接続
    *pemを*pkkにPuTTYの鍵生成で変換。
    vsshアプリで鍵指定して接続可能。

  • iphoneからAWS起動
    AWSアプリで可能。
    IAMユーザーで作成したユーザーでログインする。

【JScript】ファイル一覧とディレクトリ一覧

サブディレクトリ内は再帰しません。

// パスを指定する。
var target = "D:/Book/";

// ファイル一覧とディレクトリ一覧を取得する。
enumFiles(target);

function enumFiles(target) {

    // ファイルを扱う準備を行う。
    var fso = new ActiveXObject("Scripting.FileSystemObject");

    // FileExistsの第1引数がファイルの場合
    if (fso.FileExists(target) == true) {
        WScript.Echo("ファイルです。");
    }

    // FileExistsの第1引数がファイル以外の場合
    if (fso.FileExists(target) == false) {
        WScript.Echo("ファイルではありません。");
    }

    // FolderExistsの第1引数がディレクトリの場合
    if (fso.FolderExists(target) == true) {
        WScript.Echo("ディレクトリです。");

        // ディレクトリ内の一覧を取得する。
        var all = fso.GetFolder(target);

        // ディレクトリ内の一覧からファイルを取得する。
        var eFile = new Enumerator(all.Files);
        for ( ; !eFile.atEnd(); eFile.moveNext()) {
            var file = eFile.item();
            WScript.Echo(file.Path);
        }

        // ディレクトリ内の一覧からサブディレクトリを取得する。
        var eDir = new Enumerator(all.SubFolders);
        for ( ; !eDir.atEnd(); eDir.moveNext()) {
            var dir = eDir.item();
            enumFiles(dir.Path);
        }
    }

    // FolderExistsの第1引数がディレクトリ以外の場合
    if (fso.FolderExists(target) == false) {
        WScript.Echo("ディレクトリではありません。");
    }
}