NextCloud
NextCloudをDockerで構築する手順+自己証明書でssl化をメモ、インストールの時はインターネット環境で、実行はクローズド環境です。
サーバーは Ubuntu Server 24.04 LTS
ホワイトボードサーバーも同一環境に実装
Office Draw.io 全文検索は別途考えよう
sudo apt update
sudo apt upgrade -yDockerのインストール
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin一般ユーザー権限で Docker を使用する設定
sudo usermod -aG docker $USER
newgrp dockermkcertのインストール
sudo apt install mkcertルート認証局(CA)のインストール
mkcert -installサーバー証明書と秘密鍵の作成
your-ip your-domainは適宜変更
mkcert -key-file server.key -cert-file server.crt localhost your-ip your-domainNextCloudのインストールをここから
ls
server.crt server.key
mkdir nextcloud
cd nextcloud
mkdir certs
# 上の階層にある自己証明書をコピー
cp ../server.crt certs/
cp ../server.key certs/vi docker-compose.ymlnextcloud-whiteboard-serverのhttps://your-ip は適宜変更
services:
app:
image: nextcloud
restart: always
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
proxy:
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./certs:/etc/nginx/certs:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
nextcloud-whiteboard-server:
image: ghcr.io/nextcloud-releases/whiteboard:release
restart: always
ports:
- 3002:3002
environment:
- NEXTCLOUD_URL=https://your-ip
- JWT_SECRET_KEY=some-random-key
depends_on:
- proxy
volumes:
nextcloud:
db:
networks:
default:
name: nextcloud-network
driver: bridge
Nginx
vi nginx.confyour-ipは適宜変更
server {
listen 80;
server_name localhost your-ip;
# Redirect all HTTP traffic to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name localhost your-ip;
# SSL settings
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
# Proxy settings to Nextcloud app container
location / {
proxy_pass http://app:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10G; # Adjust as needed for file uploads
proxy_request_buffering off; # Disable buffering for large uploads
}
# WebSocket proxy settings for Whiteboard
location /whiteboard/ {
proxy_pass http://your-ip:3002/; # Backend WebSocket server
proxy_http_version 1.1; # Use HTTP/1.1 for WebSocket
proxy_set_header Upgrade $http_upgrade; # WebSocket upgrade header
proxy_set_header Connection "upgrade"; # Connection header for WebSocket
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Optional timeout settings (adjust as needed)
proxy_read_timeout 60s;
proxy_connect_timeout 60s;
}
}
docker起動
pwd
/home/user/nextcloud
docker compose up -d開く
your-ipは適宜変更
http://your-ip
https://your-ipログイン画面確認後閉じる
docker container exec -it nextcloud-app-1 /bin/bash
### docker containerの中
# cat /var/www/html/config/config.phpcat の中身をテキストコピー
your-ipは適宜変更
'overwrite.cli.url' の値を httpからhttpsにする
'overwrite.cli.url' のポート8080を付ける
'overwriteprotocol' => 'https',を追加
'config_is_read_only' => true,を追加
'trusted_domains' =>
array (
0 => 'your-ip',
1 => 'your-ip:8080',
2 => 'localhost'
),
pwd
/home/user/nextcloud
vi config.php
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'upgrade.disable-web' => true,
'instanceid' => 'oc7249if6xb1',
'passwordsalt' => 'agedocLilsCYJ8eiGNCfILq6rS2yrw',
'secret' => '0JUQLU2sH7ViOrSNrWz6a8+9+N2tkxk2/sqM6v6L+26B3LYa',
'trusted_domains' =>
array (
0 => 'your-ip',
1 => 'your-ip:8080',
2 => 'localhost'
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '31.0.4.1',
'overwrite.cli.url' => 'https://your-ip:8080',
'overwriteprotocol' => 'https',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => 'nextcloudpassword',
'installed' => true,
'config_is_read_only' => true,
);app のvolumesにconfig.phpを追加
services:
app:
image: nextcloud
restart: always
links:
- db
volumes:
- nextcloud:/var/www/html
- ./config.php:/var/www/html/config/config.php:rw # config.phpをマウント
environment:
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
proxy:
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./certs:/etc/nginx/certs:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
nextcloud-whiteboard-server:
image: ghcr.io/nextcloud-releases/whiteboard:release
restart: always
ports:
- 3002:3002
environment:
- NEXTCLOUD_URL=https://your-ip
- JWT_SECRET_KEY=some-random-key
depends_on:
- proxy
volumes:
nextcloud:
db:
networks:
default:
name: nextcloud-network
driver: bridgedocker再起動
pwd
/home/user/nextcloud
docker compose down
docker compose up -d開く
your-ipは適宜変更
http://your-ip
https://your-ipとりあえずインストールする

アプリにホワイトボードを追加した
your-ip は適宜変更

dockerを再起動するとwhiteboardのデータがdocker compose downで消えてしまう
perplexityに聞いたところ redisにしなさいといわれて試したが、docker compose down で同じく消える
whiteboardの/app自体を永続化して対応した
果たしてこれでいいのだろうか・・・ひとまずdocker compose down してもデータは残るようにはなった
一応その時のdocker-compose.yml
your-ip は同じく適宜変更
services:
app:
image: nextcloud
restart: always
links:
- db
volumes:
- nextcloud:/var/www/html
- ./config.php:/var/www/html/config/config.php:rw # config.phpをマウント
environment:
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_PASSWORD=nextcloudpassword
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
proxy:
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./certs:/etc/nginx/certs:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
redis: # Redisサービス追加
image: redis:alpine
restart: always
volumes:
- redis_data:/data
command: redis-server --save 60 1 --loglevel warning
nextcloud-whiteboard-server:
image: ghcr.io/nextcloud-releases/whiteboard:release
restart: always
ports:
- 3002:3002
environment:
- NEXTCLOUD_URL=https://your-ip
- JWT_SECRET_KEY=some-random-key
- STORAGE_STRATEGY=redis # LRU→Redisに変更
- REDIS_URL=redis://redis:6379
depends_on:
- proxy
- redis # 依存関係追加
volumes:
nextcloud:
db:
whiteboard_data:
redis_data: #Redis永続化用
networks:
default:
name: nextcloud-network
driver: bridgedraw.ioとofficeの方も今度試そう
