「Filebrowser」や「FileBrowser Quantum」、「OxiCloud」、「nextExplorer」、「Filestash」と紹介してきましたが、UIが少しクセはあるものの、軽快動作ながら多機能なのが「Copyparty」で、GitHubで公開されています。デモサイトで動作を確認出来ます。ちなみにテーマ機能もあり、下記はWindows95のようなテーマです。

1. Copypartyとは
Copypartyは、Pythonで書かれた軽量・ゼロ依存のセルフホスト型ファイルサーバーです。1つのPythonファイルを実行するだけで、ブラウザからファイルのアップロード・ダウンロード・プレビューが行えます。
| 機能 | 概要 |
|---|---|
| マルチプラットフォーム | Windows / macOS / Linux / Android / iOS から利用可能 |
| WebUI | ブラウザだけで操作完結。インストール不要 |
| WebDAV / SFTP / FTP | OSのネイティブフォルダとしてマウント可能 |
| メディアプレビュー | 画像・音楽・動画のサムネイル・インライン再生 |
| 再開アップロード | 大容量ファイルの中断・再開対応 |
| 重複排除(Dedup) | 同じ内容のファイルを自動的に重複保存しない |
LXDコンテナでセットアップ
このあとで紹介するスクリプトのほうがおすすめです。
#!/bin/bash
# ==============================================================
# Copyparty セルフホスト セットアップスクリプト
# 対象: Ubuntu 26.04 LXDコンテナ (Tailscale認証済み)
# 外部公開ポート: 3321
# ==============================================================
set -euo pipefail
PORT=3321
DATA_DIR="/opt/copyparty/data"
SFX_PATH="/opt/copyparty/copyparty-sfx.py"
SERVICE_NAME="copyparty"
echo "========================================="
echo " Copyparty セットアップ開始"
echo "========================================="
# ---------- 1. 依存パッケージのインストール ----------
echo "[1/5] パッケージのインストール..."
apt-get update -qq
apt-get install -y --no-install-recommends \
python3 \
python3-pil \
ffmpeg \
curl \
ca-certificates
# ---------- 2. copyparty-sfx.py のダウンロード ----------
echo "[2/5] copyparty-sfx.py をダウンロード中..."
mkdir -p /opt/copyparty
curl -fsSL \
"https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py" \
-o "$SFX_PATH"
chmod +x "$SFX_PATH"
# ---------- 3. データディレクトリの作成 ----------
echo "[3/5] データディレクトリを作成中..."
mkdir -p "$DATA_DIR"
# ---------- 4. systemd サービスの登録 ----------
echo "[4/5] systemd サービスを登録中..."
cat > "/etc/systemd/system/${SERVICE_NAME}.service" <<EOF
[Unit]
Description=Copyparty File Server
After=network.target
[Service]
Type=simple
ExecStart=python3 ${SFX_PATH} \\
-p ${PORT} \\
-e2dsa \\
-v ${DATA_DIR}::A
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now "$SERVICE_NAME"
# ---------- 5. 起動確認 ----------
echo "[5/5] 起動確認中..."
sleep 3
if systemctl is-active --quiet "$SERVICE_NAME"; then
# Tailscale ホスト名の取得
TS_HOSTNAME=$(tailscale status --json 2>/dev/null \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['Self']['DNSName'].rstrip('.'))" \
2>/dev/null || hostname)
echo ""
echo "========================================="
echo " セットアップ完了!"
echo "========================================="
echo ""
echo " アクセスURL: http://${TS_HOSTNAME}:${PORT}"
echo ""
echo " データフォルダ : ${DATA_DIR}"
echo " ログ確認 : journalctl -u ${SERVICE_NAME} -f"
echo " サービス停止 : systemctl stop ${SERVICE_NAME}"
echo ""
echo " ※ デフォルト設定: 全ユーザーに読み書き権限あり"
echo " 本番利用時は -a/-v オプションでアカウント管理を推奨"
echo "========================================="
else
echo ""
echo "[ERROR] サービスの起動に失敗しました。ログを確認してください:"
journalctl -u "$SERVICE_NAME" --no-pager -n 30
exit 1
fi
ローカルPCからのマウントも簡単
インストール後にアクセスするとこのような表示になります。ごちゃごちゃしていますが、日本語化して色々試していれば操作は分かるでしょう。

ブラウザでアクセスする以外にも、WindowsやLinux、macOSからマウントして利用することも出来ます。マウント用のコマンドなども表示されるので簡単にマウント出来る点も特徴。

ディレクトリの移動なども軽快、ファイルのアップロードも速いですね。

パスワードを設定する
デフォルトではパスワードなしです。現在の設定 -v /opt/copyparty/data::A は全ユーザーに全権限を与えているため、誰でもアクセス・アップロード・削除できます。Tailnet内限定なら許容範囲ですが、設定することを推奨します。
パスワードの設定は、/etc/systemd/system/copyparty.service の ExecStart を編集します。
nano /etc/systemd/system/copyparty.service
ExecStart=python3 /opt/copyparty/copyparty-sfx.py \
-p 3321 \
-e2dsa \
-a admin:mypassword \
-v /opt/copyparty/data::A,admin
-a admin:mypassword: ユーザー名・パスワードを定義::A,admin:adminユーザーのみに全権限
匿名ユーザーにも読み取りだけ許可したい場合は ::r:A,admin にします。
ルートフォルダを変更する
同じく -v の引数を変えるだけです。
# 例: /mnt/share を公開したい場合
-v /mnt/share::A,admin
# 例: 複数フォルダを別々のURLで公開
-v /mnt/share:share:A,admin \
-v /mnt/media:media:r,admin
書式は -v ローカルパス:URLパス:パーミッション です。URLパスを空にすると /(ルート)になります。
変更後の反映
systemctl daemon-reload
systemctl restart copyparty
パスワードやルートフォルダをインストール時に設定する
#!/bin/bash
# ==============================================================
# Copyparty セルフホスト セットアップスクリプト
# 対象: Ubuntu 26.04 LXDコンテナ (Tailscale認証済み)
# 外部公開ポート: 3321
# ==============================================================
set -euo pipefail
PORT=3321
SFX_PATH="/opt/copyparty/copyparty-sfx.py"
SERVICE_NAME="copyparty"
# デフォルト値
DEFAULT_DATA_DIR="/opt/lxd-data"
DEFAULT_USER="admin"
echo "========================================="
echo " Copyparty セットアップ"
echo "========================================="
echo ""
# ---------- インタラクティブ設定 ----------
read -rp "マウントディレクトリ [${DEFAULT_DATA_DIR}]: " INPUT_DATA_DIR
DATA_DIR="${INPUT_DATA_DIR:-$DEFAULT_DATA_DIR}"
echo ""
read -rp "ユーザー名 [${DEFAULT_USER}] (Enterでパスワードなし・認証なし): " INPUT_USER
USERNAME="${INPUT_USER:-}"
PASSWORD=""
if [[ -n "$USERNAME" ]]; then
while true; do
read -rsp "パスワード: " INPUT_PASS
echo ""
if [[ -z "$INPUT_PASS" ]]; then
echo " ※ パスワードが空です。もう一度入力してください。"
continue
fi
read -rsp "パスワード(確認): " INPUT_PASS2
echo ""
if [[ "$INPUT_PASS" == "$INPUT_PASS2" ]]; then
PASSWORD="$INPUT_PASS"
break
else
echo " ※ パスワードが一致しません。もう一度入力してください。"
fi
done
fi
# 設定内容の確認
echo ""
echo "-----------------------------------------"
echo " 設定内容の確認"
echo "-----------------------------------------"
echo " マウントディレクトリ : ${DATA_DIR}"
if [[ -n "$USERNAME" ]]; then
echo " ユーザー名 : ${USERNAME}"
echo " パスワード : ********"
else
echo " 認証 : なし(全ユーザーに全権限)"
fi
echo "-----------------------------------------"
read -rp "この設定でインストールしますか? [Y/n]: " CONFIRM
CONFIRM="${CONFIRM:-Y}"
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
echo "インストールを中止しました。"
exit 0
fi
echo ""
# ---------- 1. 依存パッケージのインストール ----------
echo "[1/5] パッケージのインストール..."
apt-get update -qq
apt-get install -y --no-install-recommends \
python3 \
python3-pil \
ffmpeg \
curl \
ca-certificates
# ---------- 2. copyparty-sfx.py のダウンロード ----------
echo "[2/5] copyparty-sfx.py をダウンロード中..."
mkdir -p /opt/copyparty
curl -fsSL \
"https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py" \
-o "$SFX_PATH"
chmod +x "$SFX_PATH"
# ---------- 3. データディレクトリの作成 ----------
echo "[3/5] データディレクトリを作成中..."
mkdir -p "$DATA_DIR"
# ---------- 4. systemd サービスの登録 ----------
echo "[4/5] systemd サービスを登録中..."
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
# ヘッダー部分
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=Copyparty File Server
After=network.target
[Service]
Type=simple
EOF
# ExecStart を認証有無で分岐して1行で書き出す
if [[ -n "$USERNAME" ]]; then
echo "ExecStart=python3 ${SFX_PATH} -p ${PORT} -e2dsa -a ${USERNAME}:${PASSWORD} -v ${DATA_DIR}::A,${USERNAME}" >> "$SERVICE_FILE"
else
echo "ExecStart=python3 ${SFX_PATH} -p ${PORT} -e2dsa -v ${DATA_DIR}::A" >> "$SERVICE_FILE"
fi
# フッター部分
cat >> "$SERVICE_FILE" << 'EOF'
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now "$SERVICE_NAME"
# ---------- 5. 起動確認 ----------
echo "[5/5] 起動確認中..."
sleep 3
if systemctl is-active --quiet "$SERVICE_NAME"; then
TS_HOSTNAME=$(tailscale status --json 2>/dev/null \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['Self']['DNSName'].rstrip('.'))" \
2>/dev/null || hostname)
echo ""
echo "========================================="
echo " セットアップ完了!"
echo "========================================="
echo ""
echo " アクセスURL : http://${TS_HOSTNAME}:${PORT}"
echo " マウントディレクトリ : ${DATA_DIR}"
if [[ -n "$USERNAME" ]]; then
echo " ユーザー名 : ${USERNAME}"
else
echo " 認証 : なし"
fi
echo ""
echo " ログ確認 : journalctl -u ${SERVICE_NAME} -f"
echo " サービス停止 : systemctl stop ${SERVICE_NAME}"
echo " 設定変更 : nano /etc/systemd/system/${SERVICE_NAME}.service"
echo "========================================="
else
echo ""
echo "[ERROR] サービスの起動に失敗しました。ログを確認してください:"
journalctl -u "$SERVICE_NAME" --no-pager -n 30
exit 1
fi
2. ブラウザUI画面の構成
ブラウザで http://[サーバーアドレス]:3321 にアクセスすると以下の画面が表示されます。
2-1. 画面全体のレイアウト
| エリア | 説明 |
|---|---|
| 上部ナビゲーションバー | 現在のフォルダパス(パンくずリスト)が表示されます。クリックで上位フォルダへ移動できます |
| ファイル一覧エリア(中央) | フォルダ・ファイルの一覧。アイコン表示とリスト表示を切り替え可能 |
| 右パネル(アップロードエリア) | ファイルのドラッグ&ドロップ、またはクリックでアップロード |
| 上部ツールバー | 各種操作ボタンが集まっているエリア |
2-2. ツールバーのボタン一覧
| ボタン名 | 表示 | 機能 |
|---|---|---|
| 📁 新規フォルダ | mkdir | 新しいフォルダを作成します。名前を入力するダイアログが表示されます |
| ⬆️ アップロード | up | ファイル選択ダイアログを開きます。複数ファイルの同時選択も可能です |
| 📋 クリップボードから貼り付け | paste | スクリーンショットなどクリップボードの内容を直接アップロードします |
| 🔍 検索 | search | ファイル名・タグ・メタデータで検索できます |
| 🗂️ 表示切替 | grid/list | ファイル一覧の表示形式をグリッド(アイコン)とリストで切り替えます |
| ✅ 選択モード | sel | 複数ファイルを選択してまとめて操作(削除・移動・ダウンロード)できます |
| ⬇️ ZIPダウンロード | dl zip | 現在のフォルダの内容を丸ごとZIPでダウンロードします |
| 🔗 URL共有 | share | 選択したファイルの直接リンクをコピーします |
| ⚙️ 設定 | cfg | 表示件数・ソート順・UIテーマなどの設定を変更します |
| 📊 ソート | sort | 名前・日付・サイズ・種類でファイルを並べ替えます |
| 🖼️ ギャラリー表示 | gallery | 画像・動画を一覧サムネイル表示するモードに切り替えます |
2-3. ファイルの操作メニュー
ファイル名の右にある「…」ボタンや右クリックで、各ファイルの操作メニューが開きます。
| 操作 | 内容 |
|---|---|
| ダウンロード | ファイルをブラウザでダウンロードします |
| リネーム | ファイル名を変更します(書き込み権限が必要) |
| 移動 / コピー | 別フォルダへの移動またはコピーができます |
| 削除 | ファイルを削除します。確認ダイアログが表示されます |
| プロパティ | ファイルサイズ・更新日時・チェックサムなどの詳細情報を表示します |
| タグ編集 | メタデータタグを追加・編集できます(メディア検索に利用) |
3. ファイルのアップロード方法
3-1. ドラッグ&ドロップ
ブラウザ画面上の任意の場所にファイルをドラッグして放すだけでアップロードできます。複数ファイルやフォルダごとドロップすることも可能です。
3-2. ボタンからアップロード
- ツールバーの「⬆️ アップロード」ボタンをクリックします
- ファイル選択ダイアログが表示されます
- アップロードしたいファイルを選択し「開く」をクリックします
- プログレスバーが表示され、完了するとファイル一覧に追加されます
3-3. 大容量ファイルのアップロード
Copypartyは大容量ファイルの中断・再開(レジューム)に対応しています。通信が切れた場合でも、続きからアップロードが再開されます。
💡 アップロード中はブラウザタブを閉じないようにしてください。バックグラウンドに切り替えても進行します。
4. ファイルのダウンロード方法
4-1. 単体ダウンロード
ファイル名をクリックするとプレビュー(対応ファイルの場合)またはダウンロードが始まります。ファイル右側の「…」メニューから「ダウンロード」を選択することもできます。
4-2. フォルダ一括ダウンロード(ZIP)
ツールバーの「⬇️ dl zip」ボタンをクリックすると、現在のフォルダの全内容をZIP圧縮してダウンロードできます。
4-3. 複数ファイルを選択してダウンロード
- ツールバーの「✅ sel」ボタンで選択モードを有効にします
- ダウンロードしたいファイルにチェックを入れます
- 「dl zip」で選択したファイルをまとめてZIPダウンロードします
5. メディアプレビュー機能
画像・音楽・動画ファイルはブラウザ上でインラインプレビューが可能です。
| ファイル種別 | 対応形式 | 操作 |
|---|---|---|
| 画像 | JPG / PNG / GIF / WebP / SVG 等 | クリックで拡大表示。←→キーで前後の画像に移動 |
| 音楽 | MP3 / FLAC / OGG / AAC 等 | インラインプレイヤーで再生。プレイリスト連続再生可能 |
| 動画 | MP4 / WebM / MKV 等 | インラインプレイヤーで再生。ffmpeg導入時はトランスコード対応 |
| ブラウザのPDFビューアで表示 | ||
| テキスト | TXT / MD / CSV 等 | ブラウザ上でテキスト表示 |
5-1. ギャラリーモード
ツールバーの「🖼️ gallery」ボタンをクリックすると、フォルダ内の画像・動画をサムネイル一覧で表示できます。大量の写真や動画を管理するのに便利です。
6. 各OS・デバイスからの接続方法
Copypartyには複数の接続方法があります。目的に合わせて使い分けてください。
6-1. ブラウザから接続(全OS共通)
最も手軽な方法です。インストール不要でどのOSからでも利用できます。
- Chrome・Firefox・Safari を開きます
- アドレスバーに以下を入力してアクセスします
http://[Tailscaleホスト名]:3321
💡 Tailscaleを使用している場合、接続できるのはTailscaleネットワークに参加しているデバイスのみです。
6-2. Windowsからの接続
ブラウザ(推奨)
Chrome / Edge / Firefox からブラウザでアクセスするのが最もシンプルです。
WebDAVでエクスプローラーからマウント
WebDAVを使うとWindowsのエクスプローラーから直接、ネットワークドライブとして操作できます。
- エクスプローラーを開き、左パネルの「PC」を右クリック →「ネットワーク ドライブの割り当て」を選択
- 「別のWebサイトやネットワークの場所に接続する」をクリック
- インターネットやネットワークのアドレスに以下を入力します
http://[Tailscaleホスト名]:3321/
- 資格情報の入力を求められた場合は、サーバーのアカウント情報を入力します(デフォルト設定では認証なし)
💡 Windows 10/11では、HTTP(非SSL)のWebDAVマウントに制限がある場合があります。接続できない場合はレジストリの「BasicAuthLevel」を2に設定するか、ブラウザ経由をご利用ください。
WinSCP(SFTPクライアント)
WinSCPを使ってSFTP/FTP接続することもできます。ポート番号はCopypartyのFTP/SFTPポートを確認してください(デフォルト設定によります)。
6-3. macOSからの接続
ブラウザ(推奨)
Safari / Chrome / Firefox からブラウザでアクセスします。
FinderからWebDAVマウント
macOSのFinderからネットワークドライブとしてマウントすることで、Finderから直接ファイル操作できます。
- Finderを開き、メニューバーから「移動」→「サーバーへ接続…」を選択(または
⌘K) - サーバーアドレス欄に以下を入力します
http://[Tailscaleホスト名]:3321/
- 「接続」をクリックします
- 接続方式の選択で「登録ユーザ」または「ゲスト」を選びます
- マウントが成功するとFinderのサイドバーに追加されます
💡 macOSのWebDAVはSSLを推奨します。HTTP接続が拒否される場合は「デフォルトのWebDAV接続にHTTPを許可する」設定が必要な場合があります。
ターミナルからcurlでファイル操作
アップロード:
curl -T ファイル名.txt http://[Tailscaleホスト名]:3321/
ダウンロード:
curl -O http://[Tailscaleホスト名]:3321/ファイル名.txt
6-4. Linuxからの接続
ブラウザ
任意のブラウザでアクセス可能です。
davfs2でWebDAVマウント
davfs2パッケージを使うとLinuxのディレクトリとしてマウントできます。
sudo apt install davfs2
sudo mount -t davfs http://[Tailscaleホスト名]:3321/ /mnt/copyparty
自動マウントする場合は /etc/fstab に追記します:
http://[Tailscaleホスト名]:3321/ /mnt/copyparty davfs user,noauto 0 0
curlでコマンドライン操作
アップロード:
curl -T ファイル名.txt http://[Tailscaleホスト名]:3321/
ダウンロード:
wget http://[Tailscaleホスト名]:3321/ファイル名.txt
rcloneでのアクセス
rcloneを使うとrsync感覚で同期や大量ファイル転送が行えます。
rclone copy ./local-folder :webdav,url=http://[Tailscaleホスト名]:3321/:/remote-folder
6-5. スマートフォン・タブレットからの接続
iOS(iPhone / iPad)
- Safariまたは任意のブラウザでアクセス(ホーム画面に追加すればアプリ感覚で利用可)
- 「ファイル」アプリでWebDAV接続:「ファイル」→「…」→「サーバーに接続」からアドレスを入力
Android
- Chromeまたは任意のブラウザでアクセス
- 公式Androidアプリ(Copyparty Port)をインストールすると、写真のアップロードなどが簡単になります
- Solid ExplorerなどのファイルマネージャーからWebDAV接続も可能です
7. よくある操作 Q&A
| Q: やりたいこと | A: 操作方法 |
|---|---|
| フォルダを作りたい | ツールバーの「mkdir」ボタンをクリックしてフォルダ名を入力します |
| ファイルを検索したい | ツールバーの検索アイコンをクリックし、ファイル名やキーワードを入力します |
| ファイルを削除したい | ファイル右の「…」メニュー→「削除」を選択します(書き込み権限が必要) |
| フォルダ全体をダウンロードしたい | 対象フォルダを開き、ツールバーの「dl zip」ボタンをクリックします |
| ファイルリンクを共有したい | ファイルを選択し、「share」ボタンでURLをコピーします |
| 表示順を変えたい | ツールバーの「sort」ボタンで名前・日時・サイズから選択できます |
| 画像をまとめて見たい | 「gallery」ボタンでギャラリーモードに切り替えます |
| スマホから写真をアップしたい | ブラウザでアクセスし、アップロードボタンからカメラロールを選択します |
| ダークモードにしたい | ツールバーの「cfg」(設定)ボタンからテーマを変更できます |
8. トラブルシューティング
| 症状 | 対処法 |
|---|---|
| ページが開けない | ①サービスが起動しているか確認 ②Tailscaleに接続しているか確認 ③ポート3321でアクセスしているか確認 |
| アップロードできない | 書き込み権限を確認。デフォルト設定では全ユーザーに読み書き権限があります。ディスク容量も確認してください |
| 動画が再生されない | ffmpegがインストールされているか確認。ブラウザの対応コーデックによっては再生できない形式もあります |
| WebDAVがマウントできない | Windows:HTTP WebDAVの設定確認。macOS:「移動→サーバーへ接続」で http:// を含めて入力しているか確認 |
| サムネイルが表示されない | python3-pillow(PIL)とffmpegがインストールされているか確認。インストール後はサービスを再起動してください |
サービスの起動状態を確認するコマンド:
sudo systemctl status copyparty
9. サービス管理コマンド
サーバー管理者向けの基本コマンドです。
| 操作 | コマンド |
|---|---|
| 起動状態の確認 | sudo systemctl status copyparty |
| サービスの再起動 | sudo systemctl restart copyparty |
| サービスの停止 | sudo systemctl stop copyparty |
| ログのリアルタイム確認 | journalctl -u copyparty -f |
| データフォルダの確認 | ls -la /opt/copyparty/data/ |


