これは常用はしないかもしれないので、ひとまずというところで。
セルフホストで使える画像編集ソフトで、レイヤーにも対応しています。

LXD内のDocker環境で試しています。インストールはコピペして貼り付けるだけ。
#!/bin/bash
#
# BitMappery 一括インストールスクリプト
# 前提: Docker インストール済み
#
# Usage:
# ./install-bitmappery.sh # デフォルト (port 5173)
# PORT=8080 ./install-bitmappery.sh # ポート指定
#
set -euo pipefail
# ── 色定義 ──────────────────────────────────────────────────
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# ── デフォルト値 ─────────────────────────────────────────────
PORT="${PORT:-5173}"
CONTAINER_NAME="bitmappery"
INSTALL_DIR="${INSTALL_DIR:-/opt/docker/bitmappery}"
echo -e "${BLUE}======================================"
echo -e " BitMappery 一括インストール"
echo -e "======================================${NC}"
echo ""
# ============================================================
# 1. Docker 確認
# ============================================================
echo -e "${BLUE}[1/4] Docker 確認...${NC}"
if ! command -v docker &> /dev/null; then
echo -e "${RED}✗ docker コマンドが見つかりません${NC}"
echo ""
echo "インストール方法:"
echo " Ubuntu/Debian : curl -fsSL https://get.docker.com | sh"
echo " macOS : brew install --cask docker"
exit 1
fi
if ! docker info &> /dev/null; then
echo -e "${RED}✗ Docker デーモンが起動していません${NC}"
echo "Docker Desktop を起動するか、'sudo systemctl start docker' を実行してください"
exit 1
fi
echo -e "${GREEN}✓ Docker $(docker --version | awk '{print $3}' | tr -d ',') OK${NC}"
# ============================================================
# 2. インストールディレクトリ準備
# ============================================================
echo ""
echo -e "${BLUE}[2/4] リポジトリ取得 → ${INSTALL_DIR}${NC}"
# /opt 配下は root 所有のため、書き込み権限を確認して必要なら sudo で作成
if [ ! -d "$INSTALL_DIR" ]; then
if [ -w "$(dirname "$INSTALL_DIR")" ]; then
mkdir -p "$INSTALL_DIR"
else
sudo mkdir -p "$INSTALL_DIR"
sudo chown "$(id -u):$(id -g)" "$INSTALL_DIR"
fi
fi
if [ -d "$INSTALL_DIR/.git" ]; then
echo -e "${YELLOW} 既存リポジトリを更新中...${NC}"
git -C "$INSTALL_DIR" pull -q
else
git clone -q https://github.com/igorski/bitmappery.git "$INSTALL_DIR"
fi
echo -e "${GREEN}✓ リポジトリ OK${NC}"
# ============================================================
# 3. Docker イメージビルド
# ============================================================
echo ""
echo -e "${BLUE}[3/4] Docker イメージをビルド...${NC}"
# 既存コンテナ・イメージを事前に削除
if docker ps -aq -f name="^${CONTAINER_NAME}$" | grep -q .; then
echo -e "${YELLOW} 既存コンテナを停止・削除中...${NC}"
docker stop "$CONTAINER_NAME" > /dev/null
docker rm "$CONTAINER_NAME" > /dev/null
fi
if docker image inspect "$CONTAINER_NAME" &> /dev/null; then
docker rmi "$CONTAINER_NAME" > /dev/null
fi
# ビルド(出力はそのまま表示、失敗時は終了)
if ! docker build -t "$CONTAINER_NAME" "$INSTALL_DIR"; then
echo -e "${RED}✗ ビルド中にエラーが発生しました${NC}"
exit 1
fi
echo -e "${GREEN}✓ ビルド完了${NC}"
# ============================================================
# 4. コンテナ起動
# ============================================================
echo ""
echo -e "${BLUE}[4/4] コンテナ起動...${NC}"
docker run -d \
--name "$CONTAINER_NAME" \
-p "0.0.0.0:${PORT}:5173" \
--restart unless-stopped \
"$CONTAINER_NAME" > /dev/null
# ── アクセス URL の表示 ──────────────────────────────────────
# LAN IP の取得 (Linux / macOS 両対応)
if command -v hostname &> /dev/null && hostname -I &> /dev/null 2>&1; then
LAN_IP=$(hostname -I | awk '{print $1}')
elif command -v ipconfig &> /dev/null; then
LAN_IP=$(ipconfig getifaddr en0 2>/dev/null || echo "")
else
LAN_IP=""
fi
# ============================================================
# 完了
# ============================================================
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e " ✅ BitMappery インストール完了!"
echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo -e " ローカル : ${GREEN}http://localhost:${PORT}${NC}"
if [ -n "$LAN_IP" ]; then
echo -e " LAN 内 : ${GREEN}http://${LAN_IP}:${PORT}${NC}"
fi
echo ""
echo " コンテナ状態:"
docker ps --filter "name=^${CONTAINER_NAME}$" --format " {{.Status}}"
echo ""
# ブラウザを開く (任意)
if command -v xdg-open &> /dev/null; then
xdg-open "http://localhost:${PORT}" 2>/dev/null &
elif command -v open &> /dev/null; then
open "http://localhost:${PORT}" 2>/dev/null &
fi
# ── 操作コマンド一覧 ─────────────────────────────────────────
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " よく使うコマンド"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo " 状態確認 : docker ps --filter name=${CONTAINER_NAME}"
echo " ログ : docker logs -f ${CONTAINER_NAME}"
echo " 停止 : docker stop ${CONTAINER_NAME}"
echo " 再開 : docker start ${CONTAINER_NAME}"
echo " 完全削除 : docker stop ${CONTAINER_NAME} && docker rm ${CONTAINER_NAME}"
echo " 再ビルド : INSTALL_DIR=${INSTALL_DIR} PORT=${PORT} $0"
echo ""

