最近よく調べるのでメモ。裏側のWebアプリがこの辺りのヘッダを正しく見てくれていれば、リンクに記載されるURLやリダイレクト先が適切に設定され、うまく動いてくれる。

        location / {
            client_max_body_size 512m;
            proxy_redirect       off;
            proxy_timeout        300;
            proxy_set_header     Host               $host;
            proxy_set_header     X-Real-IP          $remote_addr;
            proxy_set_header     X-Forwarded-Host   $host;
            proxy_set_header     X-Forwarded-Server $host;
            proxy_set_header     X-Forwarded-For    $proxy_add_x_forwarded_for;
            proxy_set_header     X-Forwarded-Proto  $scheme;
            proxy_pass           http://localhost:3000;
        }

Webサービスを待ち受ける際、Let’s Encrypt経由で証明書を取得し、Nginxの設定を変更して…という手順を踏むのが面倒、という悩みを解決してくれるコンテナ https-portal が便利です。適当なWebコンテナを localhost:xxxx でListenさせて、それらへのアクセスをHTTPSでリバースプロキシする構成がおすすめです。後述するdocker-compose.ymlでとりあえずリバースプロキシを立てておくだけで、裏側のサービス群をまとめてHTTPS化できます。

docker-compose.yml は次のようになります。 DOMAINS 環境変数に、カンマ区切りで複数のホストを記載できます。Let’s Encryptで取得したサーバ証明書は、 ./data/ssl_certs 以下に保存されます。

version: '3.7'

services:
  https-portal:
    network_mode: host
    image: steveltn/https-portal:1
    ports:
      - '80:80'
      - '443:443'
    restart: always
    environment:
      DOMAINS: 'service1.example.com -> http://127.0.0.1:8080, service2.example.com -> http://127.0.0.1:8081, service3.example.com -> http://127.0.0.1:3000'
      STAGE: 'production'
    volumes:
      - ./data/ssl_certs:/var/lib/https-portal

初回起動は少し時間がかかりますが、証明書を取得して不揮発領域に保存した状態からであれば、コンテナ再起動にもそれほど時間はかかりません。

前提条件

  • Docker / docker-compose がインストールされていること
  • 適当なリバースプロキシが立っていること(設定ファイルで調整可)
  • 豊富なメモリ(4GBだと1-2GBくらいswapします)
  • (2019/5/23 追記)リバースプロキシのproxy_timeoutが5分以上に設定されていること。DBの初期化に時間がかかり、途中でタイムアウトするとセットアップ全体が失敗するようです。

おおまかな手順

  1. docker-compose up -d
  2. データベースを作成
  3. WebUIから設定を進める
この記事で作成するコンテナの構成。Nginx(リバースプロキシ)は別途用意してください。

1. docker-compose up -d

  • ./data 以下に必要なデータが不揮発化されています。
  • HTTPSのリバースプロキシがいる前提です。{jira,confluence}.example.com の部分は適当な値に設定してください。
  • リバースプロキシを使わない場合は、jiraとconfluenceのenvironmentセクションを削除してください。
version: '3.7'
services:
  db:
    restart: always
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --transaction-isolation=READ-COMMITTED --innodb-log-file-size=2GB --max-allowed-packet=512MB
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./data/db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
  jira:
    restart: always
    image: cptactionhank/atlassian-jira-software:8.1.0
    environment:
      X_PROXY_NAME: jira.example.com
      X_PROXY_PORT: 443
      X_PROXY_SCHEME: https
    ports:
      - 8080:8080
    links:
      - db
    volumes:
      - ./data/jira:/var/atlassian/jira
      - /etc/localtime:/etc/localtime:ro
  confluence:
    restart: always
    image: cptactionhank/atlassian-confluence:6.15.4
    environment:
      X_PROXY_NAME: confluence.example.com
      X_PROXY_PORT: 443
      X_PROXY_SCHEME: https
    ports:
      - 8090:8090
    links:
      - db
    volumes:
      - ./data/confluence:/var/atlassian/confluence
      - /etc/localtime:/etc/localtime:ro

2. データベースの作成

次のコマンドでMySQLに接続。上のdocker-compose.ymlをそのまま使っているなら、パスワードは password です。

docker-compose exec db mysql -u root -p

接続したら、データベースを作成します。JIRAとConfluenceでは、要求されるCharacter SetとCollationが異なります。docker-compose.ymlにはJIRA用のデフォルト設定が記載されています。Confluenceのデータベース作成時に、必要な設定を追加しておきます。

mysql> CREATE DATABASE jira;
mysql> CREATE DATABASE confluence DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
mysql> QUIT;

3. WebUIから設定

  • 上記のdocker-compose.ymlにはMySQLコンテナが含まれています。MySQLを使うためには、Production用の設定で進めます。
  • 途中でライセンスの入力を求められます。Atlassianアカウント経由で評価版ライセンスを取得できます。
  • JIRA→Confluenceの順でセットアップすることをおすすめします。ConfluenceはJIRAのユーザを参照し、連携できます。
できあがりイメージ。画像はJIRAですが、Confluenceも同時に構築されます。

PowerPointで作業していると、元に戻す回数の上限がデフォルトで20に設定されており、時々戻りたい時点まで戻れないことがあります。この回数上限を増やしておくことで、このようなリスクをある程度小さく抑えることができます。

環境設定 > 編集 > 元に戻す操作の最大数(150まで設定可能)

前提条件

  • Homebrewがインストールされていること

インストール手順

(1) rbenvをインストールする

Homebrewで rbenv をインストールします。依存関係で ruby-build も一緒にインストールされます。

brew install rbenv

インストールできたら、次のコマンドの出力結果を~/.bash_profileに追記します。

rbenv init

追記したら、シェルを再起動して設定をロードします。

(2) 最新のRubyをインストールする

バージョンを指定してインストールします。

# Ruby 2.6.3 を指定してインストール
rbenv install 2.6.3

# デフォルトで利用するバージョンを 2.6.3 に設定する
rbenv global 2.6.3

# 動作確認
ruby --version

インストール可能なバージョンは次のコマンドで一覧表示できます。

rbenv install --list

この記事が前提とした環境

  • sudoがインストールされたLinux
  • rootでログインしていること

A. sudoグループに追加する場合

# 新規ユーザを作成してsudoグループに追加する
useradd -m -G sudo <username>

# パスワードを設定
passwd <username>

B. wheelグループに追加する場合

# 新規ユーザを作成してwheelグループに追加する
useradd -m -G wheel <username>

# パスワードを設定
passwd <username>

この記事が前提とした環境

  • 外部から対象サーバにホスト名でアクセスできること
  • Nginxがインストールされており、外部からHTTPでアクセスできること

1. Let’s Encryptのインストール

Nginxのルートディレクトリが /usr/share/nginx/html に設定されている前提です。

# Let's Encryptのインストール
sudo apt update
sudo apt install letsencrypt

# ホスト名を指定して証明書を取得
sudo letsencrypt certonly \
  --webroot -w /usr/share/nginx/html \
  -d <hostname>

2. 自動更新の設定

/etc/crontab を適当なエディタで開き、以下の行を追記。毎週日曜日の午前0時10分に証明書を更新する。

10 0  * * 7 root  letsencrypt renew && systemctl reload nginx

cronを再起動して設定を読み込む。

sudo systemctl restart cron

3. NginxにSSL証明書を設定する

/etc/nginx.conf または /etc/nginx/conf.d/*.conf あたりに、次の要領でSSL証明書の設定を記載します。

    server {
        listen       [::]:443 ssl http2;
        listen       443 ssl http2;
        server_name  <hostname>;

        ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem;
    
        location / {
            ...
        }
    }

設定が完了したらNginxを再起動します。

# 設定ファイルの書式を確認
sudo nginx -t

# Nginxを再起動
sudo systemctl restart nginx

この記事が前提とした環境

  • CentOS 7.x がインストールされたサーバ
  • /usr/local などグローバルな場所を汚したくないというモチベーション

1. 依存パッケージのインストール

sudo yum install bzip2 gcc openssl-devel readline-devel zlib-devel git

2. rbenvのインストール

# rbenvの実行に必要なファイルの取得
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# PATHを通す
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

# rbenvの実行確認
rbenv --version

3. Rubyをビルドしてインストール

# インストール可能なバージョンを確認
rbenv install --list

# インストール
rbenv install 2.6.3

# 通常使うバージョンを2.6.3に設定
rbenv global 2.6.3

# インストールされたRubyの確認
ruby --version

トラックパッドを3本指で使うと、ドラッグする設定が便利です。アクセシビリティの設定画面で、3本指のドラッグを有効にします。トラックパッドを3本指でスワイプすると、ウィンドウの移動や文字の選択ができるようになります。

設定 > アクセシビリティ > マウスとトラックパッド > トラックパッドオプション…

前提条件

  • Homebrewがインストールされていること

インストール手順

次のコマンドを叩いてDockerをインストールします。

brew cask install docker

インストールが終了したら、Dockerを起動して初期設定を完了させます。

open /Applications/Docker.app

Dockerが起動したら、動作確認します。

docker run hello-world

docker-composeも使えるようになっています。

docker-compose --version