セルフホスト可能なレイヤー対応の画像編集「BitMappery」

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

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 ""
タイトルとURLをコピーしました