26
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker で NextCloud & OnlyOffice 環境を構築した時の備忘録

Last updated at Posted at 2019-02-28

はじめに

Docker で NextCloud & OnlyOffice 環境を構築した時の備忘録。

基本的には以下のサイトの手順に従う。
How to Easily Integrate OnlyOffice and NextCloud Using Docker

が、OSが違ったり、手順通りでうまくいかなかったところがあるので。

【環境、使用ソフトなど】
・さくらVPS
・CentOS7
・Docker
・NextCloud
・OnlyOffice
・Let's Encrypt

ドメインの取得、DNS設定

httpsでのアクセスが基本となるようなので、あらかじめドメインを取得してさくらVPSへのDNS設定をしておく。
今回はとりあえずお試しということで無料の
freenom
を使用。

まずはユーザ登録、ドメイン取得。
このあたりは参考になるページがいくつもあるので、割愛。
01_freenom.png

こんな感じでドメインとさくらVPSのIPアドレスを紐付けるAレコードを登録する。

さくらVPSの設定

さくらVPSで、CentOS7をインストールし、基本設定を行う。
このあたりも参考サイトがあるので、実際に実行したコマンドだけ雑に列挙。

・CentOS7を選択してOSインストール
 スタートアップスクリプトは選択しない。

・インストール済みのパッケージをアップデート

# yum update

・日本語化、結果確認

# localectl set-locale LANG=ja_JP.UTF-8
# localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp106
      X11 Layout: jp

・ユーザ追加

# useradd ユーザ名

・パスワード設定

# passwd ユーザ名
→パスワードを設定

・権限の設定

# usermod -G wheel ユーザ名

・追加したユーザでsudoできるように設定

# visudo
## Allows people in group wheel to run all commands
#%wheel  ALL=(ALL)       ALL   ←この行がコメントアウトされていたら、コメントアウトを解除。
# vim /etc/pam.d/su
/etc/pam.d/su
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid    ←この行がコメントアウトされていたら、コメントアウトを解除。
auth            substack        system-auth

参考:基本設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル

必要があれば、rootのパスワードの変更やログイン禁止なども適当に。
で、作業ユーザでログインし直す。

ポート開放

http,httpsのポートを開放する。

$ sudo firewall-cmd --zone=public --add-service=http --permanent	
$ sudo firewall-cmd --zone=public --add-service=https --permanent	
$ sudo firewall-cmd --reload	
$ sudo firewall-cmd --list-all		
	public (active)
	  target: default
	  icmp-block-inversion: no
	  interfaces: eth0
	  sources:
	  services: dhcpv6-client ssh http https  ←http,httpsが追加されている。
	  ports:
	  protocols:
	  masquerade: no
	  forward-ports:
	  source-ports:
	  icmp-blocks:
	  rich rules:

Dockerのインストール

すでにインストールされていたら削除

$ sudo yum remove docker docker-common docker-selinux docker-engine

最新バージョンをインストール

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum install docker-ce

起動

$ sudo systemctl start docker

sudoグループに追加(sudoを付けなくてもdockerコマンドが使用できるように)

$ sudo groupadd docker
$ sudo usermod -aG docker ユーザ名

※ 「sudo groupadd docker」はすでに存在するため不要のはずだが、念のため。

自動起動の設定

$ sudo systemctl enable docker

OS再起動(念のため)

$ reboot

参考:CentOS7にDockerをインストールする

Docker Composeのインストール

インストール

$ sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`
> uname -m` -o /usr/local/bin/docker-compose
→パスワード入力
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    752      0 --:--:-- --:--:-- --:--:--   752
100 11.2M  100 11.2M    0     0  1765k      0  0:00:06  0:00:06 --:--:-- 2677k

※ バージョンは、
  https://github.com/docker/compose/releases
  で確認できる。

実行権限付与

$ sudo chmod +x /usr/local/bin/docker-compose

確認

$ docker -v
Docker version 18.09.2, build 6247962
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

参考:How to Easily Integrate OnlyOffice and NextCloud Using Docker

docker-onlyoffice-owncloudの設定

gitからファイル取得

git clone --recursive https://github.com/ONLYOFFICE/docker-onlyoffice-owncloud
cd docker-onlyoffice-owncloud
git submodule update --remote

docker-compose.ymlの設定

vi docker-compose.yml

5行目を「image: nextcloud:fpm」に変更する。

docker-compose.yml
ersion: '3'
services:
  app:
    container_name: app-server
    image: nextcloud:fpm     ←変更
    stdin_open: true
    tty: true

nginxブロックに「- /etc/letsencrypt:/etc/letsencrypt」を追記する。

docker-compose.yml
  nginx:
    container_name: nginx-server
    image: nginx
    stdin_open: true
    tty: true
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - onlyoffice
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - app_data:/var/www/html
      - /etc/letsencrypt:/etc/letsencrypt     ←追記
networks:
  onlyoffice:
    driver: 'bridge'

nginx.confの設定

vi nginx.conf

サーバブロックにサーバのドメインを追加する。

nginx.conf
    server {
        listen 80;
↓↓↓↓↓↓↓↓↓追記
        server_name ドメイン名;
↑↑↑↑↑↑↑↑↑追記

        # Add headers to serve security related headers
        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;

dockerコンテナ起動

$ docker-compose up -d

確認

$ docker network ls
NETWORK ID          NAME                                  DRIVER              SCOPE
6ea1f4ff6067        bridge                                bridge              local
33d05649cf53        dockeronlyofficeowncloud_onlyoffice   bridge              local
56fe104ece72        host                                  host                local
d10e8d381e95        none                                  null                local
$ docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED              STATUS              PORTS                                      NAMES
b645decc529b        onlyoffice/documentserver:latest   "/bin/sh -c /app/onl…"   About a minute ago   Up About a minute   80/tcp, 443/tcp                            onlyoffice-document-server
5d0ed88e01c1        nginx                              "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-server
48192a961cbc        nextcloud:fpm                      "/entrypoint.sh php-…"   About a minute ago   Up About a minute   80/tcp, 9000/tcp                           app-server

http://ドメイン名.com
でサイトにアクセスできることを確認する。
image.png
とりあえずここまででNextCloudの構築は成功。

※ Chromeで一度httpsで接続してしまうと、再構築後もhttpsにリダイレクトされてしまって接続できない現象が発生。その場合、以下を参考にHSTSを削除する。

  Chromeでhttpからhttpsへ強制リダイレクトされる場合の対処法

Let's Encryptの設定

まずはインストール

$ sudo yum install epel-release
$ sudo yum install certbot

nginx.confにLet's Encryptアクセス用の定義を追加

vi nginx.conf

末尾にlocationを追加する。

nginx.conf
        # Optional: Don't log access to other assets
        location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
            access_log off;
        }

↓↓↓↓↓↓↓↓↓追記
        location ~ /.well-known/acme-challenge {
            root /var/www/html/;
            allow all;
        }

        location ^~ /.well-known/acme-challenge/ {
            default_type "text/plain";
            root         /var/www/html/;
        }
↑↑↑↑↑↑↑↑↑追記

    }
}

NGINX再起動

$ docker restart nginx-server

※ 参考サイトではlocation ~ /.well-known/acme-challenge {の記載だったが、証明書の発行でエラーになった。
  参考サイトのコメントに従って、location ^~ /.well-known/acme-challenge/ {も追加する。

証明書発行

$ sudo certbot certonly --webroot --agree-tos --email メールアドレス -d ドメイン名 -w /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data

こんなメッセージが出て、
/etc/letsencrypt/live/ドメイン名/fullchain.pem
/etc/letsencrypt/live/ドメイン名/privkey.pem
が生成されたら成功。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ドメイン名/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ドメイン名/privkey.pem
   Your cert will expire on 2019-05-25. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

nginx.confのサーバブロックにSSL証明書の設定を追加する。

vi nginx.conf
nginx.conf
    server {
        listen 80;
        server_name ドメイン名;

↓↓↓↓↓↓↓↓↓追記
        listen 443 ssl http2;

#        if ($scheme != "https") {
#            return 301 https://$host$request_uri;
#        }

        ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
        ssl_session_cache shared:le_nginx_SSL:1m;
        ssl_session_timeout 1440m;

        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;

        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
↑↑↑↑↑↑↑↑↑追記

        # Add headers to serve security related headers
        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;

※ 構築後にスプレッドシートを開こうとすると、「文書を保存できませんでした。」のエラーになったので、参考サイトのコメントに従って、
  if ($scheme != "https") { ・・・
  からの3行はコメントアウトする。

NGINX再起動

$ docker restart nginx-server

今度は「https://ドメイン名」でアクセスできること、証明書が有効になっていることを確認する。
image.png

【2019/05/20 追記】
証明書の自動更新の設定。
以下のコマンドで更新&NGINX再起動し、有効期限が伸びていることを確認する。

sudo certbot certonly --webroot -w /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data -d ドメイン名
docker restart nginx-server

OKなら、コマンドをcronに登録し、cronを再起動。

sudo crontab -e
00 0 * * 0 certbot renew --post-hook "docker restart nginx-server"
sudo systemctl restart crond

※ ↑毎週日曜日の00:00に「certbot renew」を実行し、nginxを再起動。

これでOKなはず。(未確認。。。)

MariaDBの設定

インストール

$ docker run --restart=always --net docker-onlyoffice-owncloud_onlyoffice --name mariadb-server -e MYSQL_ROOT_PASSWORD=パスワード -d mariadb --log-bin --binlog-format=MIXED

※ 微妙にオプションが違ってた。Dockerのバージョンのせい?
 --net dockeronlyofficeowncloud_onlyoffice
--net docker-onlyoffice-owncloud_onlyoffice

$ docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                      NAMES
a8669abf86cb        mariadb                            "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        3306/tcp                                   mariadb-server
bb915afe1f28        onlyoffice/documentserver:latest   "/bin/sh -c /app/onl…"   26 hours ago        Up 26 hours         80/tcp, 443/tcp                            onlyoffice-document-server
9446de803483        nextcloud:fpm                      "/entrypoint.sh php-…"   26 hours ago        Up 26 hours         80/tcp, 9000/tcp                           app-server
f311556e7c31        nginx                              "nginx -g 'daemon of…"   26 hours ago        Up 20 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-server

MariaDBのdockerにログイン

$ docker exec -it mariadb-server bash

MariaDBでデータベース作成など

mysql -u root -p 
→rootのパスワードを入力。
create database nextcloud;
create user nextclouduser@172.18.0.3 identified by 'パスワード';
grant all privileges on nextcloud.* to nextclouduser@172.18.0.3 identified by 'パスワード';
flush privileges;
exit;
exit

※ IPアドレスは「172.18.0.3」のはずだが、念のため確認する。
 docker inspect app-server | grep IPAddress

NextCloudにログイン

以下の設定を入力し、「セットアップを完了します」を選択する。
(管理者アカウント、パスワードは適当に設定。)

設定値
データフォルダー /var/www/html/data ※変更なし
データベース MySQL/MariaDB
データベースのユーザー名 nextclouduser
データベースのパスワード 上で設定したパスワード
データベース名 nextcloud
localhost mariadb-server

NextCloudにログインできることを確認する。
あなたの全データの安全な家・・・。

image.png

OnlyOfficeとの連携

以下のコマンドを発行

$ sudo bash set_configuration.sh

以下のエラーになった。

  App "ONLYOFFICE" cannot be installed because it is not compatible with this
   version of the server.

onlyofficeを再取得して置き換える。

$ cd ..
$ sudo git clone --depth=1 https://github.com/ONLYOFFICE/onlyoffice-nextcloud.git onlyoffice
$ sudo mv onlyoffice/ /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data/apps/

「ファイルが存在します」のエラーとなった。
cpならどうか。

$ sudo cp -rf onlyoffice/ /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data/apps/
cp: ディレクトリではない `/var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data/apps/onlyoffice/.git' をディレクトリ `onlyoffice/.git' で上書きすることはできません

どうやら「.git」のファイルが邪魔しているらしい。
削除して再度cp。

$ sudo rm /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data/apps/onlyoffice/.git
$ sudo cp -rf onlyoffice/ /var/lib/docker/volumes/docker-onlyoffice-owncloud_app_data/_data/apps/

今度は成功したらしい。
で、再度コマンド発行。

$ cd docker-onlyoffice-owncloud
$ sudo bash set_configuration.sh

今度は成功。
NextCloudのページをリロードすると、SpreedSheetなどが作成可能になっている。

image.png

26
30
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
26
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?