Nextcloudの代替となりそうな「Sync-in」

セルフホスト出来るサービスとして有名なのが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との連携も出来そうですが。

タイトルとURLをコピーしました