kuri's notebook

気になったものごとの備忘録です。

Redmine+NGINXをDocker上で動かす

仕事で久々にRedmineを構築することになったので、せっかくなのでDocker上で動かすことにしました。

RedmineってRuby on Railsで動いているのでmigrationとかが走るので面倒ですが、なんとかできたのでその記録としてまとめます。

環境

  • Ubuntu Server 19.04

  • Docker18.09.1

  • docker-compose 1.25.0

1. RedmineのDockerイメージ作成

まず、RedmineのDockerイメージを作成します。
基本的にはRedmine公式のDockerイメージを使用しますが、今回はほかのシステムとの共存が必要なのでサブディレクトリ対応する必要があります。

カスタムRedmineのDockerfileとして以下のDockerfileを作成します。
config.ruの内容は後で触れますので、取り合えずこのファイルを追加するのだなと思っておいてください。

config.ru以外は何もないので、ほとんど公式イメージと同じですね(笑)

FROM redmine:4.0.5-alpine

COPY --chown=redmine:redmine config.ru config.ru

2. config.ruの作成

では、カスタムRedmineの肝となるconfig.ruを記載します。

基本的にRedmineのIssueに記載されている内容通りに作れば問題ありません。

これでサブディレクトリがある場合/ない場合両方に対応したイメージが作成できます。
どうしてか公式のイメージには含まれていないんですよね~。

3. リバースプロキシ設定を作成

NGINXに読み込ませるリバースプロキシの設定を作成します。 ここで設定するサブディレクトリとこの後で設定する環境変数を合わせないと動作しないので注意が必要です。

upstream redmine_back {
  server redmine:3000;
}
server {
  location /redmine/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Host $host;
    
    proxy_pass http://redmine_back/redmine/;
    proxy_redirect default;
  }
}

ここの細かな設定は説明しませんが、リバースプロキシを設定する場合はこれらproxy_set_headerを設定しておくと無難です。

4. docker-compose.ymlを作成する

最後にcomposeの設定を作成します。

重要なのはredmine環境変数RAILS_RELATIVE_URL_ROOTを入れることとweb-proxyサービスのvolumesで作成したdefault.confを参照することです。
環境変数 RAILS_RELATIVE_URL_ROOTでサブディレクトリを指定します。
また、web-proxyのdefault.confは既存で存在しますが、上書きするのがよいです。

version: '3'
services:
  redmine:
    build:
      context: ./redmine
      dockerfile: Dockerfile
    environment: 
      RAILS_RELATIVE_URL_ROOT: '/redmine'
  web-proxy:
    image: nginx:1.17-alpine
    volumes: 
      - ./web-proxy/default.conf:/etc/nginx/conf.d/default.conf
    links:
      - redmine
    ports:
      - 80:80

5. 実行

最後にdocker-composeを使用して実行します。
今回はRDBMSがないのでSQLite3で動作しますが、本番環境ではpostgreSQLmySQLなどにする必要があります(mySQLは相性が良くないようなので、postgreSQLがよいでしょう)。

最後に

久々のRedmine構築で調べまくりでしたが、意外と変更箇所が少なくてよかったです。
ただ、Dockerで動かすのはどこのサイトを見てもpassengerを使っているので軽量なalpineの情報がないのはつらかったですが。。。

今回のソースコードは以下のGistにまとまっていますので、よろしかったら参照してみてください。

Running redmine under the NGINX reverse proxy on D ...

webpack4 + TypeScript + SCSS構成でCSSをJSに含めないようにする

個人的なプロジェクトでサーバサイドだけでなくクライアントサイドもこれまで使ったことがないツールを使ってみようと思い、タイトルのような構成にしてみました。

ただ、SPAではないのとHTTP/2を考えてJSのサイズを小さくしたかったのでCSSをJSから分割しました。

その設定をまとめました。

続きを読む

CentOS7でDocker環境構築

毎月ブログを書こうと決心して始めましたが、少し間が開いてしまいました。

今回は会社で技術ブログを作ろうということになったので、手軽に環境の改変ができるDockerを使った内容を書きます。

とりあえず、今回はDockerのインストールについて(といっても、ドキュメントの通りですが..)。

構築環境前提条件

  1. CentOS 7

  2. Docker 1.06.0-ce

Dockerのインストー

Dockerのインストールはドキュメントに書かれている手順で行います。

Dockerインストールドキュメントはこちらを参照https://docs.docker.com/engine/installation/linux/docker-ce/centos/

  1. セットアップに必要なパッケージをインストー

    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  2. Dockerのリポジトリを追加する

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  3. yumのパッケージを更新する

    $ sudo yum makecache fast

  4. Dockerコミュニティエディションのインストー

    $ sudo yum install docker-ce

  5. Dockerの起動

    $ sudo systemctl start docker

  6. Dockerのサービス有効化

    $ sudo systemctl enable docker

  7. Dockerの動作確認

    $ sudo docker run hello-world

    hello-worldが表示されればOK

プログラミングXamarinが届きました!!

待ちに待ったプログラミングXamarinがようやく届きました。

まだ、届いたばかりで開いてもいませんがかなりの厚さです。 

原書は無料で配布されていたものですが、なにぶん英語はよわいので本格的に理解しようとなるとJXUGか日本語の書籍に頼るという有様。

しかし、やはり技術書は紙媒体に限りますね。
見ながらコードを書いたりするときに画面をとられずにすみますから。

 

ということで、Xamarinを理解するのならば、『プログラミングXamarin』はおすすめです。

 

プログラミングXamarin 上 Xamarin.FormsとC#によるクロスプラットフォームモバイルアプリ開発 (マイクロソフト公式解説書)
 

 

 

Xamarin Studioを更新するとVisual Studio for Macが起動できない問題の解決方法

Xamarin StudioをインストールしたMacVisual Studio for Macをインストールして両方を使用していました。

ところが、急にVisual Studioが使用できなくなったので、原因を調べてみました。

続きを読む