LoginSignup
8
13

More than 3 years have passed since last update.

docker-composeで保守力の高いサーバー構築を

Last updated at Posted at 2020-01-29

概要

らい さむ(@tyariponzu614 )です。
サーバーの入れ替えを行いました。
ホストはなるべくクリーンな状態を保ちたいため、
docker-composeで以下のツールを構築しました。

また、docker runにどんな引数が入っているかわからないと管理が大変です。
ymlを見ればどういうビルドがされたかわかるため、
保守が楽になるかなと思います。

ちなみにコンテナ間は連携していないです。

用途 ツール名
社内Wiki Growi
ソースコード管理 gitlab
ファイル共有 samba
タスク管理 openproject

環境

> cat /etc/lsb-release
Ubuntu 18.04.3 LTS

> docker --version
Docker version 18.09.7, build 2d0083d

> docker-compose --version
docker-compose version 1.17.1, build unknown

環境構築

> sudo apt-get update
> sudo apt-get upgrade

> sudo apt-get install docker
> sudo apt-get install docker-compose

growi

公式ドキュメントのdocker-composeで構築します。

※一点ご注意ください。
ubuntuの前にraspberrypi model 2で試していますが、
どうやらalm7lアーキテクチャのため、
MongoDBイメージのビルドが失敗するようです。

本記事ではコミットNo. b5b96cfを編集しています。

docker-compose.yml
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 0.0.0.0:3000:3000    # localhost以外からのアクセスに対応
    links:
      - mongo:mongo
      - elasticsearch:elasticsearch
    depends_on:
      - mongo
      - elasticsearch
    environment:
      - MONGO_URI=mongodb://mongo:27017/growi
      - ELASTICSEARCH_URI=http://elasticsearch:9200/growi
      - PASSWORD_SEED=changeme
      # - FILE_UPLOAD=mongodb   # activate this line if you use MongoDB GridFS rather than AWS
      # - FILE_UPLOAD=local     # activate this line if you use local storage of server rather than AWS
      # - MATHJAX=1             # activate this line if you want to use MathJax
      # - PLANTUML_URI=http://  # activate this line and specify if you use your own PlantUML server rather than public plantuml.com
      # - HACKMD_URI=http://    # activate this line and specify HackMD server URI which can be accessed from GROWI client browsers
      # - HACKMD_URI_FOR_SERVER=http://hackmd:3000  # activate this line and specify HackMD server URI which can be accessed from this server container
      # - FORCE_WIKI_MODE='public'    # activate this line to force wiki public mode
      # - FORCE_WIKI_MODE='private'   # activate this line to force wiki private mode

    command: "dockerize
              -wait tcp://mongo:27017
              -wait tcp://elasticsearch:9200
              -timeout 60s
              npm run server:prod"
    restart: unless-stopped
    volumes:
      - growi_data:/data

  mongo:
    image: mongo:3.6
    restart: unless-stopped
    volumes:
      - mongo_configdb:/data/configdb
      - mongo_db:/data/db

  elasticsearch:
    build:
      context: ./elasticsearch
      dockerfile: ./Dockerfile
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"  # increase amount if you have enough memory
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: unless-stopped
    volumes:
      - es_data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

volumes:
  growi_data:
  mongo_configdb:
  mongo_db:
  es_data:

gitlab

docker-composeで管理できるようにymlファイルを作成します。

docker-compose.yml
services:
  gitLab:
    image: gitlab/gitlab-ce:latest
    ports:
     - 0.0.0.0:10080:80
    volumes:
     - '/srv/gitlab/config:/etc/gitlab'
     - '/srv/gitlab/logs:/var/log/gitlab'
     - '/srv/gitlab/data:/var/opt/gitlab'

samba

共有フォルダを以下の権限を与えないと、
クライアントからファイルの読み書きができません。

> cd ~/samba/pub
> sudo chmod 777 pub
> ls -la
drwxrwxrwx  2 xxxxx xxxxxx 4096  1月 29 12:07 pub

公式のイメージが無かったため、スター数が多いdperson/sambaを使用します。

> sudo docker search samba
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
dperson/samba                                                                     324                                     [OK]
svendowideit/samba                Sharing a Docker container's volume should b…   55                                      [OK]

docker-composeで管理できるようにymlファイルを作成します。

docker-compose.yml
samba:
  image: dperson/samba
  container_name: samba
  ports:
    - "137:137/udp"
    - "138:138/udp"
    - "139:139/tcp"
    - "445:445/tcp"
  volumes:
    - ~/samba/pub:/mnt/pub:rw
  command:
    "-s public;/mnt/pub;yes;no;yes;all;none"
  restart: unless-stopped

OpenProject

スター数が多いopenproject/communityを使用します。

NAME                                        DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
openproject/community                       Docker image for OpenProject Community Editi…   167
progtologist/openproject                    OpenProject 5.0                                 17                                      [OK]

docker-composeで管理できるようにymlファイルを作成します。

docker-compose.yml
version: '3'

services:
  openproject:
    image: openproject/community:latest
    ports:
      - 0.0.0.0:30080:80
    volumes:
      - ./db-data:/var/lib/postgresql/data
      - ./data:/var/db/openproject
    environment:
      SECRET_KEY_BASE: openproject_secret_key

ビルド方法

sudo docker-compose up -d

-dデタッチモードです。バックグラウンドで実行してくれます。

結果

docker-composeでサーバー管理が楽になりそうです。

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13