---
# System prepended metadata

title: やったこと

---

# やったこと
## 環境
- さくらVPS
    - CPU : 2Core
    - RAM : 1G
    - SSD : 100G
    - OS : ubuntu20.04LTS
    - リージョン : 石狩
- ドメイン
    - DNS : Xdomain
    - domain : kouga.info

## 初期セットアップ
- OSインストール（ubuntu20.04LTS）
- SSHでログイン
    - (初期化しなおした場合)known-hostsの上書きをする
- ルートにいって
    - `sudo su -`
- 個人のアカウントとマキニスタアカウント作成
    - `sudo adduser <username>`
- sudo権限与えて
    - `sudo usermod -aG sudo <username>`
- マキグループに追加
    - `sudo usermod -aG maquinista <username>`
- マキグループでの編集権限与えた
    - `sudo chmod 777 -R /home/maquinista/`

## dockerインストール
[URL](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja)

- docker公式ホームページ
https://docs.docker.com/engine/install/ubuntu/
- 上のURLのInstall using the repositoryと、Install Docker Engineをやった。

- sudo usermod -aG docker maquinistaってやってdockeコマンド打つたびにsudoを付けなくても済むようになった
    - 一度ログアウトする必要あり

## dockerにコンテナイメージDL
- [ドッカーとは](https://qiita.com/KeitaMoromizato/items/ae1a57fc62b41b942d71)←わかりやすい
- [ドッカーとは２](https://qiita.com/etaroid/items/b1024c7d200a75b992fc)←これもわかりやすい
- dockerにテストとして、シンプルなコンテナイメージを作成
    - https://github.com/KeitaMoromizato/docker-sample-1
    - ↑起動したコンテナのコマンドを叩くところの説明が間違っている。コンテナIDはdocker imagesで取得するのではなくdocker ps -a
- node
- mongo

## docker-composeのインストール
公式ページ
https://docs.docker.jp/compose/install.html
によるとdocker-composeのバージョンを
https://github.com/docker/compose/releases
ここから取得する
ここによると1.29.1が最新だからdownload/のあとに1.29.1を指定すれば良さそう
uname
```
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

```

を打てばよい
つまり
```
sudo curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```
さくら
```
# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

```
さくらの方法でも出来た

### 確認
```
docker-compose -v
docker-compose version 1.29.1, build c34c88b2
```

## composeの使い方

### イメージを作成
docker-compose.ymlがあるディレクトリで
```
sudo docker-compose build
```
- https://github.com/KeitaMoromizato/docker-sample-2 をやってみた

### コンテナの起動
```
sudo docker-compose up -d
```
-dはバックグラウンド処理
(-dつけないとログみたいなものターミナルに出力され続けた)

### コンテナの入り方
sudo docker-compose exec -it <コンテナID> bash
↑dockerじゃね？

## crowi/crowi
```
maquinista/workspace/ $git clone https://github.com/crowi/crowi.git
```
```
sudo docker-compose up -d
```
masterでやってみたけどエラーが出た。
それに対処しようとして実行したコマンドがつぎ
```
sudo apt install npm
```
```
npm install
```

参考：https://kenyo--c.com/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3/2173/

うまくいかなかったので
v1.7.2-patchブランチに移ってdocker-compose.development.ymlでコンテナを立ち上げてみた
```
$ git checkout v1.7.2-patch
$ docker-compose -f docker-compose.development.yml up
```

結果
npmのところでうまくいかなかった
>npm WARN notice [SECURITY] npm has the following vulnerabilities: 4 low. Go here for more details: https://www.npmjs.com/advisories?search=npm&version=5.10.0 - Run `npm i npm@latest -g` to upgrade your npm version, and then `npm audit` to get more info.


>Step 8/9 : RUN npm install --unsafe-perm
 ---> Running in d5ad13de38b4
(node:8) Warning: a promise was created in a handler at /usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/tarball.js:39:25 but was not returned from it, see http://goo.gl/rRqMUw

 とか
> npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

みたいなエラーが起きた

### npm自身のバージョンが上げられない
↑のエラーがnpmのバージョンあげろと書いてあったのでバージョンを上げたい。ユーザーがバージョンを確認すると、6.14.4と表示される。
>kouga@ik1-431-47918:~$ npm -v
6.14.4

ここで
```
npm install npm@latest -g
```
を実行しても正常に終了するがバージョンが上げられない。
次にroot権限を使って同じことをやるとバージョンが7.12.0になった。しかし、ユーザーが確認すると6.14.4のままであった。
```
sudo npm install -g npm
```
でももちろんダメ。

#### 追記
```
npm install --unsafe-perm
```
↑--unsafe-permを書けばいけるらしい[ソース](https://qiita.com/niina/items/3d4238dfd3cd31fee7c7)
あとでやるbakudankun/crowiではうまくいったし、もともと書いてあった。


## bakudankun/crowiでやったらうまくいった
bakudankun/crowiにあったymlファイルのサンプル
```dockerfile=
version: '2'

services:
  crowi:
    image: bakudankun/crowi:latest
    links:
      - mongo:db
      - redis:redis
      - elasticsearch:es
    ports:
      - 8080:3000

  mongo:
    image: mongo

  redis:
    image: redis:alpine

  elasticsearch:
    image: elasticsearch:2
    # プラグインのKuromojiが必要
    entrypoint:
      - bash
      - -c
      - >-
        bin/plugin list | grep -q analysis-kuromoji
        || bin/plugin install analysis-kuromoji
        && exec /docker-entrypoint.sh $$0 $$@
    command: elasticsearch
```
これどのタイミングで作るのかわからなかった。
色々やってみたけど結局このymlファイルだけあればcrowiの構築はできた。

1. maquinista/crowi_test/直下で上の内容docker-compose.ymlを作った。
1. sudo docker-compose up -dでコンテナを立ち上げた。
1. そしたら下のコンテナが動いて
``` bash
CONTAINER ID   IMAGE                     COMMAND                  CREATED              STATUS                     PORTS
  NAMES
2dff0202c8ab   bakudankun/crowi:latest   "/entrypoint.sh npm …"   About a minute ago   Up About a minute          0.0.0.0:8080->3000/tcp, :::8080->3000/tcp   crowi_test_crowi_1
265d382157f9   redis:alpine              "docker-entrypoint.s…"   About a minute ago   Up About a minute          6379/tcp
  crowi_test_redis_1
e180feb7c7b7   mongo                     "docker-entrypoint.s…"   About a minute ago   Up About a minute          27017/tcp
  crowi_test_mongo_1
0abd4e3556ef   elasticsearch:2           "bash -c 'bin/plugin…"   About a minute ago   Up About a minute          9200/tcp, 9300/tcp
  crowi_test_elasticsearch_1
d1ed7b621f6f   crowi_crowi               "bash -c 'npm instal…"   6 hours ago          Created
```
4. ブラウザから`<ドメイン>:8080`打ち込むとcrowiのセットアップにいけた
5. こんなかんじ(ここで管理者アカウント作成した)
![](https://i.imgur.com/lH55RYX.png)
6. ログインした
![](https://i.imgur.com/HCGr6d8.png)
7. いつものwikiの画面に入った
8. アプリ設定は特になにもやらなかった
![](https://i.imgur.com/8x06LDO.png)
9. 検索機能 > Build Now をやった。いったんコンテナStop `sudo docker-compose stop` してからもう一度`sudo docker-compose up -d`で起動しなおした
10. 検索機能使えなかった
→adminの検索管理からBuild now押したらできた
![](https://i.imgur.com/IcVbJ96.png)


### 気づいたこと
- wikiの名前がMaquiTestになってた
    - 変えたからでした
- bakudankun/crowiはcrowi v1.6.3
    - dockerfileより

## このあとやること
- nginx経由してみる？
    - ymlの書き換え
- 検索機能を使えるようにする
- きれいな環境を作りなおしたい
    - 本家crowi/crowiのv1.7.2

## うまくいかなかったやつのDockerfile書き換えてみる
↑（npm自身のバージョン上げれない）でnpmのインストール方法変えたら行けそう？みたいな説がわかったので、うまくいかなかったdocker-compose(crowi_v1.6.4)のDockerfileを
```
RUN npm install --unsafe-perm
```
に書き換えてdocker-composeを実行してみる。
1. すでに動いてるbakudankun/crowiを停止する
ymlのあるディレクトリで、
```
docker-compose stop
```
2. 

## crowi_testのdocker-compose.ymlファイルの書き換え
maquinista/workspace/crowiに`git clone https://github.com/crowi/crowi.git`
crowi/crowiのv1.7.9のコミットに移った
`git checkout ff6e721646d842d5779e539d764837ee2b1e0876`
このままだとブランチがDetatched branchなので`git checkout -b v1.7.9`でv1.7.9っていう新しいブランチを切った
docker-compose.ymlファイルをmaquinista/workspace/crowiの下に作った
```dockerfile=
version: '2'

services:
  crowi:
    image: crowi/crowi:1.7.9
    links:
      - mongo:db
      - redis:redis
      - elasticsearch:es
    ports:
      - 8080:3000

  mongo:
    image: mongo:3.6.3

  redis:
    image: redis:alpine

  elasticsearch:
    image: elasticsearch:2
    # プラグインのKuromojiが必要
    entrypoint:
      - bash
      - -c
      - >-
        bin/plugin list | grep -q analysis-kuromoji
        || bin/plugin install analysis-kuromoji
        && exec /docker-entrypoint.sh $$0 $$@
    command: elasticsearch
```
sudo docker-compose up -d やったところ
```bash=
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS                           PORTS                NAMES
e7dfe3b13100   crowi/crowi:1.7.9         "/bin/sh -c 'npm run…"   44 seconds ago   Exited (1) 41 seconds ago                             crowi_crowi_1
305ccf2bfe22   elasticsearch:2           "bash -c 'bin/plugin…"   45 seconds ago   Up 43 seconds                    9200/tcp, 9300/tcp   crowi_elasticsearch_1
78b8ed26291d   mongo:3.6.3               "docker-entrypoint.s…"   45 seconds ago   Up 43 seconds                    27017/tcp            crowi_mongo_1
cc54c4277b74   redis:alpine              "docker-entrypoint.s…"   45 seconds ago   Up 43 seconds                    6379/tcp             crowi_redis_1
```
crowi/crowiのコンテナが停止していた(docker-compose upでログが見れる)
```bash
crowi_1     | npm ERR! code ELIFECYCLE
crowi_1     | npm ERR! errno 1
crowi_1     | npm ERR! crowi@1.7.9 start: `node app.js`
crowi_1     | npm ERR! Exit status 1
crowi_1     | npm ERR! 
crowi_1     | npm ERR! Failed at the crowi@1.7.9 start script.
crowi_1     | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
crowi_1     | 
crowi_1     | npm ERR! A complete log of this run can be found in:
crowi_1     | npm ERR!   /root/.npm/_logs/2021-05-08T07_51_59_431Z-debug.log
```




## crowi/crowi:1.7.9の導入をいったんあきらめた
**理由**
- npmまわりのエラーがよくわからなかった
    - nodeのバージョン管理(nvmでバージョン管理できるらしいけどそもそもnvmがよくわからんくてインストールしなかった→maquiwikiのwiki構築記事でも使ってたから後々いれたほうがいいかも)
- ymlの書き方がイマイチ理解できてない
- crowi/crowi:1.7.9のコンテナを立ち上げられなかった
- とりあえず簡単そうなnextcloudからやる

## NextCloud
dockerhub
https://hub.docker.com/_/nextcloud
sudo docker pull nextcloud:latest
sudo docker run nextcloud

↑で80番ポートを開放したけど、アクセスできなかった。Nextcloud単体では無理かも？

### ymlファイルをつくった


参考:https://www.virment.com/setup-nextcloud-docker/
```dockerfile=
version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root # 適当なパスワードを設定
      - MYSQL_PASSWORD=root      # 適当なパスワードを設定
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 8000:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
```
Portsだけ8080:80→8000:80に変更した
<ドメイン>:8000で入れた

![](https://i.imgur.com/HED7t0T.jpg)

ユーザ名:admin
PW:ad〇〇〇〇〇〇〇〇〇or

ストレージとデータベースの設定は
データベースのユーザ名：nextcloud
PW：ad〇〇〇〇〇〇〇〇〇or
データベース名：nextcloud
データベースのホスト名：localhost:3306


### できたこと
- デスクトップクライアント
- アップしたファイルの確認
    - nextcloudのコンテナに入って、/var/www/html/data/admin/files/の下に作成したファイルがあった。
     - ファイルの変更をコンテナの中でやったけどwebの方には変更が加わることはなさそう(一方向)
- グループ「マキニスタ」を作成
- カレンダー機能を有効にすると全員にカレンダー昨日を適用できる。グループに対して共有とかもできる。
- GoogleカレンダーからデータをエクスポートしてNextCloudでインポートするとマキの予定を表示することができるが、同期ではないので変更は適用されない→使い物にならない
- adminが作成したフォルダをグループで共有するのではなく、adminが共有フォルダーを作成する必要がある。（プラグインの機能を有効にする必要がある、まだやってない）

### 確認すること
- カレンダー
- WebDAV使えなかった
    - httpsじゃないからかも？
- バックアップ
- nginx使う
    - wiki, nextcloud, (owncloud), wordpressに対してそれぞれ用意するのかわかってない


### やりたいこと
- コマンドラインでWebアップロード

## 今後の展望

### 入れるもの(kouga.infoにて)
- crowi/mongodb
- nextcloud
- owncloud
- wordpress
- Pstfix(メールサーバー[MTA])(おまけ)


### やること
- サブドメインで移動できるように
    - wiki.kouga.info
    - blog.kouga.info
    - nextcloud.kouga.info
    - owncloud.kouga.info
    - みたいに
        - DNSサーバ確認

- SSL
    - 証明書

- 最後AWS借りる？
    - 契約

- ドメイン
    - .org
    - .jp
    - 両方とる


### ⭐︎⭐︎読めば読むほどわからない⭐︎⭐︎

## 宿敵nginx

### docker network
- [Docker + Nginx + Let's EncryptでHTTPS対応のプロキシサーバーを構築する](https://qiita.com/bremen/items/fcf8571fd2bae080b42b)を読むと、
    >プロキシ用のネットワークを構築する
プロキシサーバーとWebサーバー間のネットワークは外部との通信を行う必要がありません。そこでプロキシサーバーとWebサーバー間の 内部ネットワーク を構築するため、EC2のインスタンスにログインし、以下のコマンドを入力します。

と書かれており、ネットワークとは！？となった。
- しかし、[letsencrypt-nginx-proxy-companionを使って複数ドメイン名に無料SSL証明書を適用する](https://qiita.com/fukuyama012/items/5d4390ae4a34ba477cef)に書かれている通り、docker-composeを分けると、どうやらネットワークを作る必要が出てくるらしい。
- [docker-composeのネットワーク機能](https://docs.docker.jp/compose/networking.html)にわかりやすくネットワークについて書かれていた。ymlファイルをupすると普通、[ディレクトリフォルダ名]_[default]の名前でネットワークが作成され、自動的に各コンテナはそのネットワークを経由して情報のやりとりをするらしい。そこで別々のymlファイルを作成してそれぞれでupするとなると、同一ネットワークに参加していないので、情報のやりとりができない。だからネットワークを作成する必要がある。(この認識で合ってるかな、、)
- ネットワーク関連の参考資料（全部公式ドキュメント）
    - [Composeのネットワーク機能](https://docs.docker.jp/compose/networking.html)
    - [Composeファイルリファレンス network](https://docs.docker.jp/compose/compose-file.html#compose-file-networks)
    - [Composeファイルリファレンス network設定リファレンス](https://docs.docker.jp/compose/compose-file.html#network-configuration-reference)
    - [network create](https://docs.docker.jp/engine/reference/commandline/network_create.html)
- `docker network create --driver bridge shared`でドッカーネットワークを作成できることは↑の[ここ](https://qiita.com/fukuyama012/items/5d4390ae4a34ba477cef)でわかるが、ここの`--driver bridge`は意味がないことが公式ドキュメントからわかった。何も書かなければデフォルトでbridgeになるらしい。意味的にはdriverコマンドで文字通りドライバーを指定できる（外部のドライバとかも使えるらしい）。bridgeとoverlayの違いについては理解が追いついてないが、色々みた感じbridgeしか使ってないので理解は後回し。
- [Docker + Nginx + Let's EncryptでHTTPS対応のプロキシサーバーを構築する](https://qiita.com/bremen/items/fcf8571fd2bae080b42b)でdocker createのコマンドとして`--internal`が使用されていた。これはネットワーク外のコンテナと通信ができないように限定するための設定のようだが、このようにする理由がわからなかった。
- 公式ドキュメントを読んだ感じ、ymlのnetworksに何も書かなければ、[ymlのディレクトリ]_[default]でネットワークが作成するらしいが、networksに何か書くとデフォルトのネットワークは作られないらしい。→crowiとかmongoとかたくさん書かれてるymlのネットワークを変にいじると動かなくなる？→nextcloudのymlをいじってみよう。
- nginx-proxyとletsencrypt-nginx-proxy-companionの書かれたymlファイルとしては[ここ](https://tyablog.net/2019/07/14/https-using-docker-compose-and-nginx-proxy/)も参考になった。


### 実際にネットワークを立てて、ymlを編集してupする
nginxとsslのコンテナのネットワークにnextcloudをぶち込む
[これ](https://qiita.com/fukuyama012/items/5d4390ae4a34ba477cef)をパクってやってみる
nextcloudのdocker-compose.ymlの最後に
```dockerfile=
    enviroment:
        VIRTUAL_PORT: <ポート番号>
        VIRTUAL_HOST: <割り当てたいサブドメイン>
        LETSENCRYPT_HOST: <割り当てたいサブドメイン>
        LETSENCRYPT_EMAIL: <メールアドレス>
        
networks:
  default:
    external:
      name: proxy_nw    #ネットワークの名前はproxy_nw
```
を書き足す。
#### nginxとletsencrypt
/home/maquinista/proxyのディレクトリを作成し、そこにdocker-compose.ymlを作成。内容を
```dockerfile=
version: "2"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443" #なぜ443も必要なのかわかってない。letsencrypt関係？
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
    restart: always
    networks:
      - proxy_nw

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
    volumes_from:
      - nginx-proxy  #vlumes_fromはバージョン3から使えなくなったらしい。バージョン3ではdepends_on?
    restart: always
    networks:
      - proxy_nw

networks:
  proxy_nw:
    external: true
```
と記述する。
`docker network create  proxy_nw`を実行してネットワークを立て、proxyのディレクトリでdocker compose upを実行。
/home/maquinista/nextcloudのディレクトリでも
docker compose upでnextcloudのコンテナを立ち上げ直す。

#### nextcloudのyml
```dockerfile=
version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root # 適当なパスワードを設定
      - MYSQL_PASSWORD=root      # 適当なパスワードを設定
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 8000:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
    environment:
      VIRTUAL_PORT: 8000 #<ポート番号>
      VIRTUAL_HOST: nextcloud.kouga.info #<割り当てたいサブドメイン>
      LETSENCRYPT_HOST: nextcloud.kouga.info #<割り当てたいサブドメイン>
      LETSENCRYPT_EMAIL: yuta613soccer@gmail.com #<メールアドレス>
        
networks:
  default:
    external:
      name: proxy_nw    #ネットワークの名前はproxy_nw
```

**注意**
portsは8000:8000としたらダメだった



### nginxとletsencryptのdockerhub
- nginx-proxy
    - https://hub.docker.com/r/jwilder/nginx-proxy
- letsencrypt
    - https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion

### やってみた
サブドメインでnextcloudにアクセスできた！
![](https://i.imgur.com/aQBUjo8.jpg)
- サブドメインが信頼されたドメインリストになくてログインできない。
- SSLもできない
    - SSLできないのはletsencryptの設定でサブドメインに関する記述を忘れた可能性がある。まだやり方は把握していない。
    - ↑は嘘。翌朝確認したらちゃんとSSLになってた。
- ↓コンテナ内はnanoもvimも入ってなくて編集できなかった。コンテナ側からホスト側にコピーして書き換え、それをコンテナ側に移してコンテナの再起動をかけてみる。
- ↓コンテナ内のconfig.phpを編集してtrust domeinにnextcloud.kouga.infoを追記する。
    - ホストOSでやること
        - コンテナ内のファイルをホスト側にもってくる
        - `docker container cp <コンテナ名>:/var/www/html/config/config.php /home/maquinista/nextcloud/`ってやってホストにコピー
        - ![](https://i.imgur.com/LryNbxL.png)
        - 'trusted_domains' =>
  array (
    0 => 'kouga.info:8000',
  ),ってあるところに
    1 => 'nextcloud.kouga.info',を追記
        - `sudo docker container cp /home/maquinista/nextcloud/config.php 05db2c584c98:/var/www/html/config/config.php`ってやってコンテナにファイルを戻す

- ただこの変更だけだとまだエラーって出る。
![](https://i.imgur.com/hNn8wWQ.png)
- これはconfiとconfig.phpのパーミッションを変更しないといけないっていう意味。
    - コンテナに入って権限を編集する
    - `docker exec -it <nextcloudのコンテナ名> babsh`で入って
    - `chmod 777 /var/www/html/config/config.php`
    - `chmod 777 /var/www/html/config/config/`
    - ![](https://i.imgur.com/qdjB4sj.png)
    ↓そしたら

**ｷﾀｰ サブドメインでnextcloud接続できた！**
![](https://i.imgur.com/xyn4G1e.jpg)
→翌朝確認したらSSL適用できてた

### wikiでもやって見る
/crowi_test/docker-compose.ymlを書き換え
→enviroment:とnetworks:を追記
```dockerfile=
version: '2'

services:
  crowi:
    image: bakudankun/crowi:latest
    links:
      - mongo:db
      - redis:redis
      - elasticsearch:es
    ports:
      - 8080:3000
    environment:
      VIRTUAL_PORT: 8080 #<ポート番号>
      VIRTUAL_HOST: wiki.kouga.info #<割り当てたいサブドメイン>
      LETSENCRYPT_HOST: wiki.kouga.info #<割り当てたいサブドメイン>
      LETSENCRYPT_EMAIL: yuta613soccer@gmail.com #<メールアドレス>

  mongo:
    image: mongo

  redis:
    image: redis:alpine

  elasticsearch:
    image: elasticsearch:2
    # プラグインのKuromojiが必要
    entrypoint:
      - bash
      - -c
      - >-
        bin/plugin list | grep -q analysis-kuromoji
        || bin/plugin install analysis-kuromoji
        && exec /docker-entrypoint.sh $$0 $$@
    command: elasticsearch

networks:
  default:
    external:
      name: proxy_nw
```
DNSでwiki.kouga.infoを追加(wiki.kouga.infoをグローバルIPに割り当て)
`$docker-compose up -d`でwiki起動
サブドメインで接続できた。SSLも同時に。
![](https://i.imgur.com/MZ89rZ1.png)

### 開放したポートを閉じていく。
- 8080(wiki)と8000(nextcloud)のポートを閉じた
- ちゃんとアクセスできた
- 80と443、22だけ開放してる
- 80だけあればサブドメインで各種サービスに振り分けてくれる
- まじかよnginx-proxy最高だな

### Wordpress鯖立てる
- 参考になりそうな[docker公式ドキュメント](https://docs.docker.jp/compose/wordpress.html)
- ２つワードプレスを立てる[参考](https://teratail.com/questions/251378)
- [URL](https://qiita.com/tomokei5634/items/75d2501cfb968d0cfab5)←yamlファイルの解説が載っててわかりやすい
- ./maquinista/wordpressの下にhpとblogのフォルダを作った
- yaml書いていく
```dockerfile=
version: '3'

services:
   db1: #dbからdb1に変更。db2を作るから同じ名前だと干渉すると思った
     image: mysql:5.7
     container_name: 'wpdb-hp' #コンテナ名追加
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: root

   wordpress:
     depends_on:
       - db1
     image: wordpress:latest
     ports:
       - "8888:80" #8000:80から8888:80に。
     restart: always
     environment:
       WORDPRESS_DB_HOST: db1:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: root
       VIRTUAL_PORT: 8888 #環境変数追加
       VIRTUAL_HOST: kouga.info
       LETSENCRYPT_HOST: kouga.info
       LETSENCRYPT_EMAIL: yuta613soccer@gmail.com
volumes:
    db_data:
networks: #エラー出たから後から書き足した
  default:
    external:
      name: proxy_nw
```
これで動いた。下のコードはwordpressのenviromentの下に書いてたけどnetwork　proxy_nwが見つかりませんって言われたから消したら上手くいった。これでいけると思ったのになぁ。
```
networks: #networksを追加最後に書くのではなくwordpress下に書いた。defaultはdbとの通信用。
    - proxy_nw
    - default
```
kouga.infoで接続できた.
![](https://i.imgur.com/3gasILF.png)
初期設定をしてWEBサイトを公開した。
ユーザー：admin
メール：yuta613soccer@gmail.com
PW:
![](https://i.imgur.com/rgHiThV.png)

### 二つ目のWordpress鯖を立てる
息をするようにyamlを書く
```dockerfile=
version: '3'

services:
   db2: #dbからdb2に変更。
     image: mysql:5.7
     container_name: 'wpdb-blog' #コンテナ名追加
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: root

   wordpress:
     depends_on:
       - db2
     image: wordpress:latest
     ports:
       - "8880:80" #8000:80から8880:80に。
     restart: always
     environment:
       WORDPRESS_DB_HOST: db2:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: root
       VIRTUAL_PORT: 8880 #環境変数追加
       VIRTUAL_HOST: blog.kouga.info
       LETSENCRYPT_HOST: blog.kouga.info
       LETSENCRYPT_EMAIL: yuta613soccer@gmail.com
volumes:
    db_data:
networks: #エラー出たから後から書き足した
  default:
    external:
      name: proxy_nw
```
blog.kouga.infoでもできた。サイト名「TEST_SITE_2」
![](https://i.imgur.com/dQgMc2b.png)

## 一区切り
一応きりのいいところまで行けた感があるのでMDを区切る

### できたこと
- docker-compose 使う
- ドメインごとに各種サービスが使えることを検証
    - Wiki: wiki.kouga.info
    - Cloud: nextcloud.kouga.info
    - HP: kouga.info
    - Blog: blog.kouga.info
- 常時SSL

### できなかったこと
- crowi/crowi 1.7.9を使ってwikiの立ち上げ（現状bakudankun/crowiしか立ち上げれてない）
- nginxとnginx-proxyの違いの理解
- NextcloudのWebDAVが使えない
- node.js周りの理解

### 次やりたいこと
- 上記のできなかったことの検証
- crowiのバージョンアップができるか
- バックアップからcrowiの復元/検証
- db周りの理解（mongo,maria,mysql）
- nextcloudにownのファイルをコピーしてみる
    - nextcloudのコンテナ内で新しくディレクトリ構成を作り直せばownのディレクトリ構成を再現できるかどうか検証してみたい
- メールサーバを立てる
- コンテナの内部で編集できるようにする
    - configファイルの編集などでコンテナ内部のオーナー権限あたりでいろいろ大変だった
    - [dockerでvolumeをマウントしたときのファイルのowner問題](https://qiita.com/yohm/items/047b2e68d008ebb0f001)を試したい
    - ついでにvscodeで編集できるようにする
- コンテナ名を適当にしてたからメンテナンス性考えていい感じにしたい