Raspberry PiにDocker ComposeでownCloudを導入する

raspbian+nginxで動かしているサーバーにownCloudを導入したのでその備忘録です。nginxは仮想環境ではなくraspbian上で直接動いている前提です。

Dockerのインストール

Raspberry Pi財団の公式ブログに書いてある通りです。dockerグループにユーザーを追加することでsudoなしで使えるようになります。

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi

Docker Composeのインストール

cd ~
git clone https://github.com/docker/compose.git
cd compose
docker build -t docker-compose:armhf -f Dockerfile.armhf .
docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"
sudo cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose

ちゃんと導入できているか確認

docker-compose --version

docker-compose.ymlを書く

cd ~
mkdir owncloud
cd owncloud
vim docker-compose.yml

docker-compose.ymlの中身はこんな感じです。mysqlのofficialのdockerイメージはarmに対応していないみたいなのでraspi向けに用意してくれているものを使います。mysqlのデータベース名等は適宜設定して下さい。後のownCloudの初期設定で使います。

version: '3.1'

services:
    owncloud:
        image: owncloud:10.0.8
        restart: always
        depends_on:
            - db
        ports:
            - 10080:80
        volumes:
            - owncloud-data:/var/www/html
    db:
        image: hypriot/rpi-mysql
        restart: always
        environment:
            MYSQL_DATABASE: データベース名
            MYSQL_USER: ユーザ名
            MYSQL_PASSWORD: ユーザーのパスワード
            MYSQL_ROOT_PASSWORD: rootのパスワード
        volumes:
            - mysql-data:/var/lib/mysql
            
volumes:
    mysql-data:
    owncloud-data:

コンテナを起動します。restart: alwaysにしているのでマシンを再起動しても勝手にコンテナも再起動します。

docker-compose up -d

nginxの設定

cd /etc/nginx/sites-available
vim cloud.example.com.conf

cloud.example.com.confの中身はこんな感じです。「Let’s EncryptでSSL対応した話(raspbian+nginx)」でワイルドカード証明書を既に発行してあります。ラズパイのローカルIPは適宜設定して下さい。

server {
    listen  443;
    server_name cloud.example.com;

    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    $remote_addr;

    client_max_body_size 10g;
    proxy_connect_timeout 75s;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://192.168.0.100:10080/;
    }
}

sites-enabledにシンボリックリンクを貼ってnginxを再起動します。

cd ../sites-enabled
sudo ln -s /etc/nginx/sites-available/cloud.example.com.conf cloud.example.com.conf
sudo nginx -t
sudo nginx -s reload

ownCloudの初期設定

cloud.example.comにアクセスすると初期設定画面が出てくるはずですこのときラズパイのローカルIP:10080にアクセスしても同じ画面が出てきますが、設定に問題が起きるので必ずドメイン名でアクセスして下さい。docker-compose.ymlで設定したデータベース名等を設定します。データベースの接続先には「db」を設定します。

各種設定

ownCloudの各種設定はコンテナ内の/var/www/html/config/config.phpを編集します。

以上です。