160 lines
4.9 KiB
Bash
Executable File
160 lines
4.9 KiB
Bash
Executable File
#!/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 "=========================================="
|