これもメモ的に。ドローイングソフト「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


