Files
gitea-backup/migration-scripts/lxc/create-lxc.sh
2026-01-06 22:12:07 +05:00

160 lines
4.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# Скрипт создания LXC контейнера для Gitea на Proxmox
# Запускать на хосте Proxmox (192.168.0.33)
#
set -e
# ============================================
# НАСТРОЙКИ LXC КОНТЕЙНЕРА
# ============================================
# ID контейнера (проверьте что не занят)
CT_ID="${CT_ID:-300}"
# Hostname
CT_HOSTNAME="${CT_HOSTNAME:-gitea}"
# Ресурсы
CT_MEMORY="${CT_MEMORY:-2048}"
CT_CORES="${CT_CORES:-2}"
CT_DISK="${CT_DISK:-20}"
# Сеть
CT_IP="${CT_IP:-192.168.0.40/24}"
CT_GW="${CT_GW:-192.168.0.1}"
CT_BRIDGE="${CT_BRIDGE:-vmbr0}"
# Storage для rootfs и шаблонов
CT_STORAGE="${CT_STORAGE:-local-zfs}"
TEMPLATE_STORAGE="${TEMPLATE_STORAGE:-local}"
# Шаблон (Debian 12 - актуальная версия)
# Доступные варианты:
# debian-12-standard_12.12-1_amd64.tar.zst - чистый Debian 12 (рекомендуется)
# debian-13-standard_13.1-2_amd64.tar.zst - Debian 13 (testing)
# ubuntu-24.04-standard_24.04-2_amd64.tar.zst - Ubuntu 24.04 LTS
# НЕ используйте debian-12-turnkey-gitea - он для новой установки, не для миграции
CT_TEMPLATE="${CT_TEMPLATE:-debian-12-standard_12.12-1_amd64.tar.zst}"
# Пароль root (ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ!)
CT_PASSWORD="${CT_PASSWORD:-ChangeMe123!}"
# ============================================
# ФУНКЦИИ
# ============================================
log() {
echo -e "\033[1;32m[$(date '+%H:%M:%S')]\033[0m $1"
}
error() {
echo -e "\033[1;31m[ERROR]\033[0m $1" >&2
exit 1
}
# ============================================
# ПРОВЕРКИ
# ============================================
# Проверяем что мы на Proxmox
if ! command -v pct &> /dev/null; then
error "Этот скрипт должен запускаться на Proxmox хосте"
fi
# Проверяем что ID не занят
if pct status "$CT_ID" &> /dev/null; then
error "Контейнер с ID $CT_ID уже существует"
fi
log "=== Создание LXC контейнера для Gitea ==="
log "ID: $CT_ID"
log "Hostname: $CT_HOSTNAME"
log "IP: $CT_IP"
log "Memory: ${CT_MEMORY}MB"
log "Disk: ${CT_DISK}GB"
# ============================================
# СКАЧИВАНИЕ ШАБЛОНА (если нет)
# ============================================
TEMPLATE_PATH="/var/lib/vz/template/cache/$CT_TEMPLATE"
if [ ! -f "$TEMPLATE_PATH" ]; then
log "Скачивание шаблона $CT_TEMPLATE..."
pveam update
pveam download "$TEMPLATE_STORAGE" "$CT_TEMPLATE"
fi
# ============================================
# СОЗДАНИЕ КОНТЕЙНЕРА
# ============================================
log "Создание контейнера..."
pct create "$CT_ID" "${TEMPLATE_STORAGE}:vztmpl/${CT_TEMPLATE}" \
--hostname "$CT_HOSTNAME" \
--password "$CT_PASSWORD" \
--memory "$CT_MEMORY" \
--cores "$CT_CORES" \
--rootfs "${CT_STORAGE}:${CT_DISK}" \
--net0 "name=eth0,bridge=${CT_BRIDGE},ip=${CT_IP},gw=${CT_GW}" \
--features "nesting=1" \
--unprivileged 1 \
--onboot 1
# ============================================
# ЗАПУСК КОНТЕЙНЕРА
# ============================================
log "Запуск контейнера..."
pct start "$CT_ID"
sleep 5
# Проверка
if pct status "$CT_ID" | grep -q "running"; then
log "✅ Контейнер запущен"
else
error "Контейнер не запустился"
fi
# ============================================
# БАЗОВАЯ НАСТРОЙКА
# ============================================
log "Базовая настройка контейнера..."
# Обновление системы
pct exec "$CT_ID" -- bash -c "apt update && apt upgrade -y"
# Установка базовых пакетов
pct exec "$CT_ID" -- bash -c "apt install -y curl wget git sudo"
# ============================================
# ИТОГИ
# ============================================
# Получаем IP (без маски)
CT_IP_CLEAN=$(echo "$CT_IP" | cut -d'/' -f1)
echo ""
echo "=========================================="
echo " LXC контейнер создан!"
echo "=========================================="
echo ""
echo " ID: $CT_ID"
echo " Hostname: $CT_HOSTNAME"
echo " IP: $CT_IP_CLEAN"
echo ""
echo " Вход в контейнер:"
echo " pct enter $CT_ID"
echo " или: ssh root@$CT_IP_CLEAN"
echo ""
echo " Следующий шаг:"
echo " Скопируйте install-gitea-lxc.sh в контейнер"
echo " и запустите его для установки Gitea"
echo ""
echo " pct push $CT_ID /path/to/install-gitea-lxc.sh /root/install-gitea-lxc.sh"
echo " pct exec $CT_ID -- bash /root/install-gitea-lxc.sh"
echo ""
echo "=========================================="