セルフホスト可能なペイントソフト「DPaint-js」

これもメモ的に。ドローイングソフト「Deluxe Paint (DPaint)」に強くインスパイアされた、ブラウザ上で動作する無料のオープンソースのピクセルアート(ドット絵)エディタペイントソフト「DPaint-js」の導入についてです。特に常用する予定もないので、メモ程度に。

LXDコンテナのDocker環境で実行しています。

#!/bin/bash
# =============================================================
#  DPaint-js (Docker版) インストールスクリプト
#  対象: LXDコンテナ (Ubuntu 20.04/22.04/24.04)
#  使い方: bash install-dpaint-docker.sh
#  ポート変更: DPAINT_PORT=3000 bash install-dpaint-docker.sh
# =============================================================

set -euo pipefail

PORT="${DPAINT_PORT:-8080}"
REPO_DIR="/opt/DPaint-js-docker"
CONTAINER_NAME="dpaint-js"

echo "======================================"
echo "  DPaint-js セットアップ開始"
echo "  ポート: ${PORT}"
echo "======================================"

# ── 1. Docker インストール ───────────────────────────────────────
if ! command -v docker &>/dev/null; then
    echo "[1/4] Docker をインストールします..."
    apt-get update -qq
    apt-get install -y -qq ca-certificates curl gnupg lsb-release

    # Docker 公式 GPG キー & リポジトリ追加
    install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
        | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    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 \
      $(lsb_release -cs) stable" \
      > /etc/apt/sources.list.d/docker.list

    apt-get update -qq
    apt-get install -y -qq docker-ce docker-ce-cli containerd.io
else
    echo "[1/4] Docker は既にインストール済みです (スキップ)"
fi

# ── 2. Docker デーモン起動 ───────────────────────────────────────
echo "[2/4] Docker デーモンを起動します..."
if command -v systemctl &>/dev/null && systemctl is-system-running &>/dev/null 2>&1; then
    systemctl enable docker --now
else
    # systemd がない場合 (LXC unprivileged 等)
    if ! docker info &>/dev/null 2>&1; then
        dockerd &>/var/log/dockerd.log &
        sleep 3
    fi
fi

# 起動確認
if ! docker info &>/dev/null 2>&1; then
    echo "❌ Docker デーモンの起動に失敗しました。"
    echo "   LXDコンテナの場合、以下の設定が必要です:"
    echo "   lxc config set <コンテナ名> security.nesting true"
    exit 1
fi

# ── 3. リポジトリ取得 & イメージビルド ──────────────────────────
echo "[3/4] DPaint-js をクローン & イメージをビルドします..."

apt-get install -y -qq git

if [ -d "${REPO_DIR}/.git" ]; then
    echo "  既存リポジトリを更新します..."
    git -C "${REPO_DIR}" pull --ff-only
else
    git clone --depth 1 \
        https://github.com/sgilissen/DPaint-js-docker.git \
        "${REPO_DIR}"
fi

cd "${REPO_DIR}"
docker build -t dpaint-js .

# ── 4. コンテナ起動 ─────────────────────────────────────────────
echo "[4/4] DPaint-js コンテナを起動します..."

# 既存コンテナがあれば停止・削除
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
    echo "  既存コンテナを停止・削除します..."
    docker rm -f "${CONTAINER_NAME}"
fi

docker run -d \
    --name "${CONTAINER_NAME}" \
    --restart unless-stopped \
    -p "${PORT}:80" \
    dpaint-js

# ── 完了確認 ────────────────────────────────────────────────────
sleep 2
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
    CONTAINER_IP=$(hostname -I | awk '{print $1}')
    echo ""
    echo "======================================"
    echo "  ✅ DPaint-js 起動完了!"
    echo ""
    echo "  ブラウザでアクセス:"
    echo "    http://${CONTAINER_IP}:${PORT}/"
    echo ""
    echo "  管理コマンド:"
    echo "    停止  : docker stop ${CONTAINER_NAME}"
    echo "    再起動: docker restart ${CONTAINER_NAME}"
    echo "    ログ  : docker logs ${CONTAINER_NAME}"
    echo "======================================"
else
    echo "❌ コンテナの起動に失敗しました。"
    docker logs "${CONTAINER_NAME}" 2>/dev/null || true
    exit 1
fi
タイトルとURLをコピーしました