Nextcloudは非常に多機能ですが、ちょっとファイル共有に利用したい、という場合には重量級です。そこに、Rustで書かれた「OxiCloud」が作られているというので試してみました。
現時点はv0.5.4で、まだ作成中のようですが、動作は軽快で、期待できそうな内容でした。

1コピペでインストール
LXDコンテナで実行すれば、コピペするだけでインストールされます。ビルドするので多少時間がかかりますが。
スクリプトがやること(順番に):
git curl build-essential libssl-dev libpq-dev postgresqlをapt導入- PostgreSQLを起動してDB・ユーザーを自動作成(パスワードはランダム生成)
- rustup で Rust stable を
/usr/local/cargoにシステムインストール /opt/oxicloudにソースをクローン(再実行時はpull).envを自動生成(IPアドレスを自動検出)cargo build --releaseでビルド(初回は10〜20分かかります)- バイナリを
/usr/local/bin/oxicloudに配置 - systemdサービスとして登録・起動
#!/usr/bin/env bash
# ============================================================
# OxiCloud ネイティブインストーラー(Docker不要)
# 対象: Ubuntu/Debian 系 LXD コンテナ
# 必要: Rust 1.93+, PostgreSQL 13+(本スクリプトが導入)
# ============================================================
set -euo pipefail
# ---- ユーザー設定(変更可) ---------------------------------
INSTALL_DIR="/opt/oxicloud"
STORAGE_DIR="/var/lib/oxicloud/storage"
PORT="8086"
DB_NAME="oxicloud"
DB_USER="oxicloud"
DB_PASS="${DB_PASS:-$(openssl rand -hex 16)}"
APP_URL="${APP_URL:-}" # 例: http://192.168.1.10:8086
RUN_USER="oxicloud"
SERVICE_NAME="oxicloud"
# ------------------------------------------------------------
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[INFO]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
echo "======================================================"
echo " OxiCloud ネイティブインストール開始"
echo "======================================================"
# --- 0. root 確認 ---
[ "$(id -u)" -eq 0 ] || error "root (または sudo) で実行してください"
# --- 1. APP_URL 自動補完 ---
if [ -z "$APP_URL" ]; then
LOCAL_IP=$(hostname -I | awk '{print $1}')
APP_URL="http://${LOCAL_IP}:${PORT}"
fi
warn "アクセスURL: $APP_URL"
# --- 2. システムパッケージ ---
warn "システムパッケージを更新・インストールします..."
apt-get update -qq
apt-get install -y --no-install-recommends \
git curl build-essential pkg-config \
libssl-dev libpq-dev ca-certificates \
postgresql postgresql-client openssl
info "パッケージインストール完了"
# --- 3. PostgreSQL 起動 & DB 作成 ---
warn "PostgreSQL を設定します..."
# クラスタ番号を自動検出して起動
PG_VERSION=$(pg_lsclusters -h | awk 'NR==1{print $1}')
pg_ctlcluster "${PG_VERSION}" main start 2>/dev/null || true
# DB ユーザー・データベース作成(冪等)
su -c "psql -tc \"SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'\" | grep -q 1 || \
psql -c \"CREATE USER ${DB_USER} WITH PASSWORD '${DB_PASS}'\"" postgres
su -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'\" | grep -q 1 || \
psql -c \"CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}\"" postgres
info "PostgreSQL 設定完了 (DB: ${DB_NAME}, User: ${DB_USER})"
# --- 4. Rust インストール / 更新 ---
warn "Rust ツールチェーンを確認します..."
export CARGO_HOME="/usr/local/cargo"
export RUSTUP_HOME="/usr/local/rustup"
export PATH="${CARGO_HOME}/bin:${PATH}"
if ! command -v cargo &>/dev/null && [ ! -x "${CARGO_HOME}/bin/cargo" ]; then
warn "rustup をインストールします(数分かかります)..."
curl -fsSL https://sh.rustup.rs | \
RUSTUP_HOME="$RUSTUP_HOME" CARGO_HOME="$CARGO_HOME" \
sh -s -- -y --no-modify-path --default-toolchain stable
info "Rust インストール完了 ($(${CARGO_HOME}/bin/rustc --version))"
else
"${CARGO_HOME}/bin/rustup" update stable --no-self-update 2>/dev/null || rustup update stable --no-self-update
info "Rust 確認済み ($(rustc --version 2>/dev/null || ${CARGO_HOME}/bin/rustc --version))"
fi
# --- 5. ソース取得 ---
warn "OxiCloud ソースを取得します..."
if [ -d "${INSTALL_DIR}/.git" ]; then
warn "既存リポジトリを更新します..."
git -C "$INSTALL_DIR" fetch --tags
git -C "$INSTALL_DIR" pull --ff-only
else
git clone --depth 1 https://github.com/DioCrafts/oxicloud.git "$INSTALL_DIR"
info "クローン完了"
fi
# --- 6. .env 生成 ---
warn ".env を生成します..."
cat > "${INSTALL_DIR}/.env" <<EOF
DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/${DB_NAME}
OXICLOUD_DB_CONNECTION_STRING=postgres://${DB_USER}:${DB_PASS}@localhost/${DB_NAME}
APP_URL=${APP_URL}
OXICLOUD_BASE_URL=${APP_URL}
POSTGRES_DB=${DB_NAME}
POSTGRES_USER=${DB_USER}
POSTGRES_PASSWORD=${DB_PASS}
RUST_LOG=info
EOF
info ".env 生成完了"
# --- 7. ビルド ---
warn "リリースビルドを実行します(初回は10〜20分かかります)..."
cd "$INSTALL_DIR"
CARGO_HOME="$CARGO_HOME" RUSTUP_HOME="$RUSTUP_HOME" \
"${CARGO_HOME}/bin/cargo" build --release
info "ビルド完了"
# --- 8. バイナリを配置 ---
install -m 755 "${INSTALL_DIR}/target/release/oxicloud" /usr/local/bin/oxicloud
info "バイナリを /usr/local/bin/oxicloud に配置しました"
# --- 9. 実行ユーザー & ディレクトリ ---
id "$RUN_USER" &>/dev/null || useradd -r -s /bin/false -d "$STORAGE_DIR" "$RUN_USER"
mkdir -p "$STORAGE_DIR"
chown -R "${RUN_USER}:${RUN_USER}" "$STORAGE_DIR" "$INSTALL_DIR"
info "ユーザー・ディレクトリ設定完了"
# --- 10. systemd サービス登録 ---
warn "systemd サービスを登録します..."
cat > "/etc/systemd/system/${SERVICE_NAME}.service" <<EOF
[Unit]
Description=OxiCloud - Self-hosted cloud storage
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=${RUN_USER}
WorkingDirectory=${INSTALL_DIR}
EnvironmentFile=${INSTALL_DIR}/.env
ExecStart=/usr/local/bin/oxicloud
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=oxicloud
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable "${SERVICE_NAME}"
systemctl restart "${SERVICE_NAME}"
info "サービス起動完了"
# --- 完了 ---
echo ""
echo "======================================================"
echo " OxiCloud インストール完了!"
echo ""
echo " ブラウザでアクセス : ${APP_URL}"
echo " 初回アクセスで管理者アカウントを作成してください"
echo ""
echo " ログ確認 : journalctl -u ${SERVICE_NAME} -f"
echo " 再起動 : systemctl restart ${SERVICE_NAME}"
echo " 停止 : systemctl stop ${SERVICE_NAME}"
echo ""
echo " DB パスワード: ${DB_PASS}"
echo " ※ 上記パスワードを安全な場所に保管してください"
echo "======================================================"

カスタマイズしたい場合:
# ポートやパスワードを指定
sudo DB_PASS=mypassword APP_URL=http://192.168.1.50:8086 bash install_oxicloud.sh

