セルフホスト出来るサービスとして有名なのがNextcloud。ファイル管理だけでなく、Office連携や各種機能の追加などとにかく多機能ですが、ただ動作が重いのがネック。Nextcloudの代替となりそうな「Sync-in」というのがありました。デモサイトも用意されています。GitHubでも公開されておりセルフホストが可能。

LXDコンテナにインストール
#!/bin/bash
# ============================================================
# Sync-in セットアップスクリプト (完成版)
# 対象: Ubuntu 26.04 LXDコンテナ (Docker済み・Tailscale認証済み)
# 外部ポート: 3320 / インストール先: /opt/syncin
# ============================================================
set -euo pipefail
# ── 管理者情報を対話入力 ─────────────────────────────────────
echo "============================================"
echo " Sync-in セットアップ"
echo "============================================"
echo ""
read -rp "管理者ユーザー名 [admin]: " ADMIN_LOGIN
ADMIN_LOGIN="${ADMIN_LOGIN:-admin}"
while true; do
read -rsp "管理者パスワード: " ADMIN_PASSWORD
echo ""
read -rsp "管理者パスワード (確認): " ADMIN_PASSWORD2
echo ""
if [[ "${ADMIN_PASSWORD}" == "${ADMIN_PASSWORD2}" ]]; then
break
fi
echo "パスワードが一致しません。再入力してください。"
done
if [[ -z "${ADMIN_PASSWORD}" ]]; then
echo "ERROR: パスワードを空にすることはできません"
exit 1
fi
echo ""
echo "==> ユーザー名: ${ADMIN_LOGIN}"
echo "==> セットアップを開始します..."
echo ""
# ── 定数 ────────────────────────────────────────────────────
INSTALL_DIR="/opt/syncin"
HOST_DATA_DIR="/opt/syncin/data"
EXTERNAL_PORT=3320
# ── ランダムシークレット生成 ─────────────────────────────────
ENCRYPTION_KEY=$(openssl rand -base64 32)
ACCESS_SECRET=$(openssl rand -base64 32)
REFRESH_SECRET=$(openssl rand -base64 32)
MYSQL_ROOT_PASSWORD=$(openssl rand -hex 16)
# ── Tailscale MagicDNS ホスト名取得 ──────────────────────────
TAILSCALE_HOST=$(tailscale status --json 2>/dev/null \
| python3 -c "
import json, sys
d = json.load(sys.stdin)
print(d.get('Self', {}).get('DNSName', '').rstrip('.'))
" 2>/dev/null || true)
DISPLAY_HOST="${TAILSCALE_HOST:-$(hostname -f)}"
echo "==> ホスト名: ${DISPLAY_HOST}"
# ── ディレクトリ準備 ─────────────────────────────────────────
mkdir -p "${INSTALL_DIR}" "${HOST_DATA_DIR}" \
"${INSTALL_DIR}/mariadb_data" \
"${INSTALL_DIR}/desktop_releases"
cd "${INSTALL_DIR}"
# ── 公式 docker compose ファイル取得 ────────────────────────
echo "==> 公式パッケージをダウンロード中..."
curl -fsSL -o sync-in-docker.tar.gz \
https://github.com/Sync-in/server/releases/latest/download/sync-in-docker.tar.gz
tar zxf sync-in-docker.tar.gz --strip-components=1
rm -f sync-in-docker.tar.gz
echo "==> ダウンロード完了"
# ── environment.yaml 生成 ────────────────────────────────────
cat > "${INSTALL_DIR}/environment.yaml" << EOF
auth:
encryptionKey: "${ENCRYPTION_KEY}"
token:
access:
secret: "${ACCESS_SECRET}"
refresh:
secret: "${REFRESH_SECRET}"
mysql:
url: mysql://root:${MYSQL_ROOT_PASSWORD}@mariadb:3306/sync_in
applications:
files:
dataPath: /app/data
EOF
echo "==> environment.yaml を生成しました"
# ── docker-compose.yaml を確定版で上書き ────────────────────
cat > "${INSTALL_DIR}/docker-compose.yaml" << EOF
#include:
# - ./config/nginx/docker-compose.nginx.yaml
# - ./config/onlyoffice/docker-compose.onlyoffice.yaml
# - ./config/collabora/docker-compose.collabora.yaml
# - ./config/sync-in-desktop-releases/docker-compose.sync-in-desktop-releases.yaml
name: sync-in
services:
sync_in:
image: syncin/server:2
container_name: sync-in
restart: always
environment:
- INIT_ADMIN
- INIT_ADMIN_PASSWORD
- INIT_ADMIN_LOGIN
- PUID=\${PUID:-8888}
- PGID=\${PGID:-8888}
ports:
- "${EXTERNAL_PORT}:8080"
volumes:
- ./environment.yaml:/app/environment/environment.yaml
- ${HOST_DATA_DIR}:/app/data
- ${INSTALL_DIR}/desktop_releases:/app/static/releases:ro
depends_on:
- mariadb
logging:
driver: json-file
options:
max-size: "25m"
max-file: "5"
networks:
- sync_in_network
mariadb:
image: mariadb:11
container_name: mariadb
restart: always
command: --innodb_ft_cache_size=16000000 --max-allowed-packet=1G
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: sync_in
volumes:
- ${INSTALL_DIR}/mariadb_data:/var/lib/mysql
networks:
- sync_in_network
networks:
sync_in_network:
driver: bridge
EOF
echo "==> docker-compose.yaml を生成しました"
# ── 起動 ────────────────────────────────────────────────────
echo "==> Sync-in を起動中..."
INIT_ADMIN=true \
INIT_ADMIN_LOGIN="${ADMIN_LOGIN}" \
INIT_ADMIN_PASSWORD="${ADMIN_PASSWORD}" \
docker compose up -d
# ── 起動確認 ─────────────────────────────────────────────────
echo ""
echo "==> コンテナ状態:"
docker compose ps
# ── 完了メッセージ ───────────────────────────────────────────
echo ""
echo "============================================"
echo " Sync-in セットアップ完了!"
echo "============================================"
echo " URL : http://${DISPLAY_HOST}:${EXTERNAL_PORT}"
echo " ログイン : ${ADMIN_LOGIN}"
echo " パスワード: ${ADMIN_PASSWORD}"
echo ""
echo " ⚠️ 初回ログイン後にパスワードを変更してください"
echo " 📁 データ : ${HOST_DATA_DIR}"
echo " 📁 DB : ${INSTALL_DIR}/mariadb_data"
echo "============================================"
見た目が美しく動作も軽快
アクセスしたら最初に入力したユーザー名とパスワードでログインします。

ワークスペースを作成したりユーザーを作成したり出来ます。

日本語のファイル名やフォルダ名も問題なさそうです。まだ少ししか触っていませんが、けっこう良さそうですね。デモサイトを見るとOfficeとの連携も出来そうですが。



