От излишен хардуер до боен сървър: Защо се лудуваме по self-hosting на Raspberry Pi

От излишен хардуер до боен сървър: Защо се лудуваме по self-hosting на Raspberry Pi

Май 07, 2026 self-hosting raspberry-pi node.js devops dns github-actions astro web-infrastructure

Серверът в чекмеджуто ти

Има нещо магично да пускаш истински сайт от хардуер, който струва колкото кафе машина. Облакът като Vercel е супер за повечето проекти, но понякога Raspberry Pi е по-добър избор. Не става дума само за носталгия.

Представи си: имаш Node.js проект с Astro, Svelte Kit или React. Някои библиотеки не работят в serverless – например стара i18n, която е перфектна, но не се компилира статично. Или искаш пълен контрол над изпълнението. Тогава Pi-то ти се превръща в евтина алтернатива на скъпия облак.

Стъпка 1: Свързване към интернет чрез рутера

Първо, отвори портове на рутера си. Така трафикът от публичния IP отива до Pi-то на рафта.

Избери Caddy – лесен reverse proxy, много по-прост от старите. Конфигурацията е такава:

yoursite.com {
    root * /home/username/projects/yoursite
    
    file_server
    reverse_proxy localhost:4321
}

Промени порта според фреймуърка: Astro е 4321, Svelte Kit – 5173, Node.js обикновено 3000. Презареди Caddy и си готов наполовина.

Стъпка 2: Насочване на домейна към Pi

В панела на регистратора (като NameOcean) добави A запис:

A Record: yoursite.com → your.public.ip.address

Рута ти ще пренасочи трафика. Готово.

Стъпка 3: Създай веднъж, работи вечно

Изгради проекта:

npm run build

Получаваш dist папка с готовия код и входен файл като entry.mjs.

Тук помага PM2 – мениджър, който държи аппа жив завинаги:

npm install -g pm2
cd dist/
pm2 start entry.mjs

Сайтът е онлайн. Не му трябва терминал.

Стъпка 4: Автоматични ъпдейти с GitHub Actions

Да не логваш всеки път по SSH. GitHub Actions прави всичко автоматично.

Създай .github/workflows/deploy.yml:

name: Deploy to Raspberry Pi
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.PI_HOST }}
          username: ${{ secrets.PI_USER }}
          password: ${{ secrets.PI_PASSWORD }}
          script: |
            ~/bin/deploy.sh

Сложи IP и пароли в secrets на репото. Скриптът deploy.sh е такъв:

#!/usr/bin/env bash
set -euo pipefail

BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0

echo "Вкарвам последния код..."
for dir in "$BASE_DIR"/*/ ; do
    if [[ -d "$dir/.git" ]]; then
        (cd "$dir" && git pull)
    fi
done

echo "Компилирам проектите..."
for dir in "$BASE_DIR"/*/ ; do
    if [[ -f "$dir/package.json" ]]; then
        CURRENT_PORT=${PORTS[$PORT_INDEX]}
        (
            cd "$dir"
            npm run build -- --port "$CURRENT_PORT"
        )
        PORT_INDEX=$(( (PORT_INDEX + 1) % ${#PORTS[@]} ))
    fi
done

echo "Рестартирам услугите..."
pm2 restart all

Сега всеки git push ъпдейтва, компилира и рестартира автоматично.

Реалният разчет

Не е за всеки. Нямаш резервни копия, CDN или безкраен трафик като в облака. Ако интернетът ти падне, сайтът ти също. Но ако искаш контрол, спестяване и пълна независимост – работи перфектно.

Освен това учиш DNS, reverse proxies, PM2 и CI/CD на практика. Нищо подобно не дава облачният дашборд.

Pi-то в чекмеджуто не е играчка. Това е истинска инфраструктура за production. Не винаги ти трябва корпоративен облак.

Read in other languages:

RU EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN