SparkyFitness — альтернатива MyFitnessPal для Homelab

Установка и настройка SparkyFitness — самостоятельной альтернативы MyFitnessPal для отслеживания питания и фитнеса в вашем Homelab. Пошаговое руководство.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор7 февраля 2026 г.

Подготовка сервера

Обновление системы и установка необходимых зависимостей

sudo apt update && sudo apt upgrade -y

Установка .NET 6

Добавление репозитория .NET и установка SDK

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-6.0 aspnetcore-runtime-6.0

Установка базы данных

Установка и настройка PostgreSQL

sudo apt install -y postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres createdb sparkyfitness
sudo -u postgres psql -c "CREATE USER sparky WITH PASSWORD 'your_strong_password';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sparkyfitness TO sparky;"

Скачивание SparkyFitness

Создание директории и скачивание приложения

sudo mkdir -p /opt/sparkyfitness
sudo chown $USER:$USER /opt/sparkyfitness
cd /opt/sparkyfitness
wget https://github.com/SparkyFI/SparkyFitness/releases/download/v0.16.4.0/SparkyFitness-v0.16.4.0.zip
unzip SparkyFitness-v0.16.4.0.zip

Настройка приложения

Конфигурация приложения и настройка SSL

{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Database=sparkyfitness;Username=sparky;Password=your_strong_password;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "AppSettings": {
    "AppVersion": "0.16.4.0",
    "AppUrl": "https://your-domain.com",
    "AdminEmail": "admin@example.com",
    "UseDatabaseForImages": true,
    "Jwt": {
      "Key": "your-super-secret-jwt-key-change-this",
      "Issuer": "SparkyFitness",
      "Audience": "SparkyFitnessUsers",
      "DurationInMinutes": 60
    }
  }
}

Запуск приложения

Запуск приложения как службы

[Unit]
Description=SparkyFitness
After=network.target postgresql.service

[Service]
Type=simple
User=sparkyfitness
WorkingDirectory=/opt/sparkyfitness/SparkyFitness
ExecStart=/usr/bin/dotnet /opt/sparkyfitness/SparkyFitness/SparkyFitness.dll
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000

[Install]
WantedBy=multi-user.target

SparkyFitness v0.16.4.0 — Альтернатива MyFitnessPal для самостоятельного хостинга

Введение

В этом руководстве подробно рассмотрим процесс установки и настройки SparkyFitness — альтернативы MyFitnessPal с возможностью самостоятельного хостинга. SparkyFitness — это приложение для отслеживания питания, которое позволяет пользователям вести дневник питания, подсчитывать калории и нутриенты, а также отслеживать свои цели в отношении здоровья и фитнеса.

В отличие от MyFitnessPal, SparkyFitness может быть размещен на вашем собственном сервере, что обеспечивает конфиденциальность данных и полный контроль над приложением. Данное руководство подойдет для системных администраторов и технически подкованных пользователей, желающих развернуть собственное решение для отслеживания питания.

Что такое SparkyFitness

SparkyFitness — это веб-приложение для отслеживания питания, написанное на .NET 6. Приложение использует архитектуру клиент-сервер с поддержкой REST API. Оно предоставляет следующие функции:

  • Отслеживание потребляемой пищи и напитков
  • Подсчет калорий и макроэлементов (белки, жиры, углеводы)
  • Установка целей по калориям и нутриентам
  • Создание пользовательских продуктов и блюд
  • Отслеживание прогресса и статистика
  • Поддержка нескольких пользователей
  • Импорт/экспорт данных
  • Поддержка мобильных приложений через API

Приложение использует SQLite в качестве базы данных по умолчанию для упрощения развертывания, но также поддерживает другие базы данных, такие как PostgreSQL и SQL Server, для производственных сред.

Архитектура приложения включает следующие компоненты:

  • Бэкенд на ASP.NET Core
  • Frontend на Blazor Server
  • Система аутентификации на основе JWT
  • REST API для интеграций с внешними сервисами

Требования системы

Минимальные требования:

  • Операционная система: Linux (Ubuntu 20.04 или новее), macOS или Windows
  • Процессор: 2 ядра
  • Оперативная память: 2 ГБ
  • Дисковое пространство: 5 ГБ
  • .NET 6.0 SDK или выше
  • База данных: SQLite (встроенная), PostgreSQL 12+ или SQL Server 2019+
  • Веб-сервер: Nginx или Apache (рекомендуется)

Рекомендуемые требования:

  • Операционная система: Ubuntu 22.04 LTS
  • Процессор: 4 ядра
  • Оперативная память: 4 ГБ
  • Дисковое пространство: 20 ГБ
  • .NET 6.0 SDK или выше
  • База данных: PostgreSQL 14+
  • Веб-сервер: Nginx
  • Сертификат SSL/TLS

Требования для высоконагруженных инсталляций:

  • Операционная система: Ubuntu 22.04 LTS
  • Процессор: 8+ ядер
  • Оперативная память: 8+ ГБ
  • Дисковое пространство: 50+ ГБ (SSD)
  • .NET 6.0 SDK
  • База данных: PostgreSQL 14+ в репликации или кластере
  • Балансировщик нагрузки
  • Кэширующий прокси (Redis)
  • Мониторинг и система логирования

Установка SparkyFitness

Метод 1: Установка вручную

Шаг 1: Подготовка сервера

Для Ubuntu/Debian:
  1. Обновите систему:
sudo apt update && sudo apt upgrade -y
  1. Установите необходимые зависимости:
sudo apt install -y curl wget apt-transport-https gnupg2 software-properties-common
  1. Настройте брандмауэр:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Для CentOS/RHEL:
  1. Обновите систему:
sudo yum update -y
  1. Установите необходимые зависимости:
sudo yum install -y curl wget epel-release
  1. Настройте брандмауэр:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Шаг 2: Установка .NET 6

  1. Добавьте репозиторий .NET:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
  1. Установите .NET SDK:
sudo apt update
sudo apt install -y dotnet-sdk-6.0 aspnetcore-runtime-6.0
  1. Проверьте установку:
dotnet --version

Должна быть отображена версия .NET 6 или выше.

Шаг 3: Установка базы данных (PostgreSQL)

  1. Установите PostgreSQL:
sudo apt install -y postgresql postgresql-contrib
  1. Настройте PostgreSQL:
sudo systemctl start postgresql
sudo systemctl enable postgresql
  1. Инициализируйте базу данных:
sudo -u postgres createdb sparkyfitness
sudo -u postgres psql -c "CREATE USER sparky WITH PASSWORD 'your_strong_password';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sparkyfitness TO sparky;"
  1. Настройте подключение к базе данных:
sudo nano /etc/postgresql/13/main/pg_hba.conf

Добавьте следующую строку:

host    sparkyfitness   sparky         127.0.0.1/32           md5

Перезапустите PostgreSQL:

sudo systemctl restart postgresql

Шаг 4: Скачивание SparkyFitness

  1. Создайте директорию для приложения:
sudo mkdir -p /opt/sparkyfitness
sudo chown $USER:$USER /opt/sparkyfitness
cd /opt/sparkyfitness
  1. Скачайте последнюю версию SparkyFitness:
wget https://github.com/SparkyFI/SparkyFitness/releases/download/v0.16.4.0/SparkyFitness-v0.16.4.0.zip
  1. Распакуйте архив:
unzip SparkyFitness-v0.16.4.0.zip
  1. Удалите архив:
rm SparkyFitness-v0.16.4.0.zip

Шаг 5: Настройка приложения

  1. Создайте пользователя для приложения:
sudo useradd -r -s /bin/false sparkyfitness
  1. Установите правильные права:
sudo chown -R sparkyfitness:sparkyfitness /opt/sparkyfitness
sudo chmod -R 750 /opt/sparkyfitness
  1. Скопируйте файл конфигурации:
cd /opt/sparkyfitness/SparkyFitness
cp appsettings.json appsettings.json.bak
  1. Отредактируйте файл конфигурации:
sudo nano appsettings.json

Пример конфигурации для PostgreSQL:

{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Database=sparkyfitness;Username=sparky;Password=your_strong_password;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "AppSettings": {
    "AppVersion": "0.16.4.0",
    "AppUrl": "https://your-domain.com",
    "AdminEmail": "admin@example.com",
    "UseDatabaseForImages": true,
    "Jwt": {
      "Key": "your-super-secret-jwt-key-change-this",
      "Issuer": "SparkyFitness",
      "Audience": "SparkyFitnessUsers",
      "DurationInMinutes": 60
    },
    "SecuritySettings": {
      "RequireSsl": true,
      "MaxLoginAttempts": 5,
      "LockoutDurationMinutes": 15
    }
  }
}
  1. Настройте SSL-сертификат (рекомендуется):
sudo apt install -y certbot
sudo certbot certonly --standalone -d your-domain.com
  1. Настройте Nginx в качестве обратного прокси:

Установите Nginx:

sudo apt install -y nginx

Создайте конфигурационный файл:

sudo nano /etc/nginx/sites-available/sparkyfitness

Добавьте следующую конфигурацию:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-Host $server_name;
        
        # timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
    
    # Security headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}

Активируйте конфигурацию:

sudo ln -s /etc/nginx/sites-available/sparkyfitness /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Шаг 6: Запуск приложения

  1. Запустите приложение в режиме разработки для тестирования:
cd /opt/sparkyfitness/SparkyFitness
dotnet run
  1. Проверьте доступность приложения по адресу https://your-domain.com

  2. Для запуска в качестве службы создайте файл службы:

sudo nano /etc/systemd/system/sparkyfitness.service

Добавьте следующее содержимое:

[Unit]
Description=SparkyFitness
After=network.target postgresql.service

[Service]
Type=simple
User=sparkyfitness
WorkingDirectory=/opt/sparkyfitness/SparkyFitness
ExecStart=/usr/bin/dotnet /opt/sparkyfitness/SparkyFitness/SparkyFitness.dll
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://localhost:5000
Environment=ASPNETCORE_Kestrel__Certificates__Default__Path=/etc/letsencrypt/live/your-domain.com/fullchain.pem
Environment=ASPNETCORE_Kestrel__Certificates__Default__Password=your-cert-password

[Install]
WantedBy=multi-user.target
  1. Запустите и включите службу:
sudo systemctl daemon-reload
sudo systemctl enable sparkyfitness
sudo systemctl start sparkyfitness
  1. Проверьте статус службы:
sudo systemctl status sparkyfitness

Метод 2: Установка через Docker

Шаг 1: Установка Docker

  1. Установите Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
  1. Установите Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
  1. Перезапустите сеанс для применения прав Docker:
exit

Шаг 2: Подготовка конфигурации

  1. Создайте директорию для SparkyFitness:
mkdir -p ~/sparkyfitness
cd ~/sparkyfitness
  1. Создайте файл конфигурации Docker Compose:
nano docker-compose.yml

Добавьте следующее содержимое:

version: '3.8'

services:
  sparkyfitness:
    image: sparkyfitness/sparkyfitness:0.16.4.0
    container_name: sparkyfitness
    restart: unless-stopped
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:5000
      - ConnectionStrings__DefaultConnection=Host=postgres;Database=sparkyfitness;Username=sparky;Password=your_strong_password;
      - AppSettings__AppUrl=https://your-domain.com
      - AppSettings__Jwt__Key=your-super-secret-jwt-key-change-this
    volumes:
      - ./uploads:/app/uploads
      - ./data:/app/data
    depends_on:
      - postgres
    networks:
      - sparkyfitness-network

  postgres:
    image: postgres:14
    container_name: sparkyfitness-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=sparkyfitness
      - POSTGRES_USER=sparky
      - POSTGRES_PASSWORD=your_strong_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - sparkyfitness-network

  nginx:
    image: nginx:alpine
    container_name: sparkyfitness-nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
      - ./logs/nginx:/var/log/nginx
    depends_on:
      - sparkyfitness
    networks:
      - sparkyfitness-network

networks:
  sparkyfitness-network:
    driver: bridge

volumes:
  postgres_data:
  1. Создайте конфигурацию Nginx:
mkdir nginx
mkdir ssl
mkdir logs/nginx
nano nginx/nginx.conf

Добавьте следующее содержимое:

user nginx;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # Basic Settings
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # Security
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # Gzip
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    upstream sparkyfitness {
        server sparkyfitness:5000;
    }

    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name your-domain.com;

        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
        ssl_prefer_server_ciphers off;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        add_header Strict-Transport-Security "max-age=63072000" always;

        location / {
            proxy_pass http://sparkyfitness;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Host $server_name;
            
            # Timeouts
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
        }
    }
}
  1. Получите SSL-сертификат:
sudo apt install -y certbot
sudo docker run --rm -v ~/sparkyfitness/ssl:/etc/letsencrypt -v ~/sparkyfitness/logs/letsencrypt:/var/log/letsencrypt certbot/certbot certonly --standalone -d your-domain.com

Шаг 3: Запуск приложения

  1. Запустите контейнеры:
docker-compose up -d
  1. Проверьте статус контейнеров:
docker-compose ps
  1. Проверьте логи:
docker-compose logs -f sparkyfitness

Настройка и использование

Первоначальная настройка

  1. Откройте браузер и перейдите к доменному имени вашего сервера, где установлено SparkyFitness.

  2. Создайте учетную запись администратора при первом запуске.

  3. Войдите в систему с помощью созданной учетной записи.

  4. Настройте базовые параметры приложения:

    • Перейдите в "Administration" > "Settings"
    • Укажите название приложения
    • Настройте параметры по умолчанию для новых пользователей
    • Укажите часовой пояс
    • Сохраните изменения

Настройка профиля

  1. Перейдите в раздел "Profile" (Профиль).

  2. Заполните информацию о себе:

    • Имя
    • Электронная почта
    • Пол
    • Дата рождения
    • Рост
    • Текущий вес
    • Целевой вес
    • Уровень активности
    • Цели по фитнесу (похудение, поддержание веса, набор массы)
  3. Установите свои цели по калориям и нутриентах:

    • Целевое количество калорий в день
    • Целевое количество белков (в граммах)
    • Целевое количество жиров (в граммах)
    • Целевое количество углеводов (в граммах)
    • Распределение калорий по приемам пищи
  4. Настройте уведомления:

    • Напоминания о приеме пищи
    • Ежедневные отчеты
    • Уведомления о достижении целей
  5. Сохраните изменения.

Использование приложения

  1. Добавление еды:

    • Перейдите в раздел "Food" (Еда).
    • Нажмите "Add Food" (Добавить еду).
    • Выберите прием пищи (завтрак, обед, ужин, перекус и т.д.).
    • Введите название продукта и выберите его из списка или создайте новый.
    • Укажите количество порций.
    • Сохраните запись.
  2. Просмотр статистики:

    • Перейдите в раздел "Statistics" (Статистика).
    • Выберите период времени (день, неделя, месяц, год).
    • Просмотрите графики потребления калорий и нутриентов.
    • Анализируйте тренды изменения веса.
    • Сравнивайте фактическое потребление с установленными целями.
  3. Создание пользовательских продуктов:

    • Перейдите в раздел "Food" (Еда).
    • Нажмите "Add Custom Food" (Добавить пользовательскую еду).
    • Введите название продукта, его nutritional information (калории, белки, жиры, углеводы).
    • Прикрепите изображение продукта.
    • Сохраните продукт.
  4. Отслеживание веса:

    • Перейдите в раздел "Weight" (Вес).
    • Введите текущий вес и дату.
    • Сохраните запись.
  5. Планирование питания:

    • Используйте функцию "Meal Planner" для планирования питания на неделю.
    • Создавайте шаблоны приемов пищи для повторного использования.
    • Экспортируйте планы питания.
  6. Отчеты:

    • Генерируйте отчеты о потреблении нутриентов.
    • Экспортируйте данные в различных форматах (CSV, PDF).
    • Создавайте пользовательские отчеты.

Интеграция с другими сервисами

Интеграция с Fitbit

  1. Зарегистрируйте приложение в Fitbit Developer Portal:

    • Перейдите на https://dev.fitbit.com/apps/new
    • Заполните форму регистрации приложения
    • Укажите redirect URI: https://your-domain.com/Fitbit/Callback
    • Сохраните Client ID и Client Secret
  2. Настройте интеграцию в SparkyFitness:

    • Перейдите в раздел "Integrations" (Интеграции)
    • Выберите "Fitbit"
    • Введите Client ID и Client Secret
    • Сохраните изменения
  3. Авторизуйте подключение:

    • Перейдите в раздел "Connected Devices"
    • Нажмите "Connect to Fitbit"
    • Следуйте инструкциям для авторизации

Интеграция с Apple Health

SparkyFitness поддерживает экспорт данных в Apple Health через экспорт в формате CSV:

  1. Экспортируйте данные из SparkyFitness:

    • Перейдите в раздел "Data Export" (Экспорт данных)
    • Выберите период экспорта
    • Нажмите "Export" (Экспорт)
  2. Импортируйте данные в Apple Health:

    • Откройте приложение Apple Health на вашем iPhone
    • Перейдите в "Источник" > "Импорт"
    • Выберите экспортированный файл CSV

Интеграция с Google Fit

  1. Экспортируйте данные из SparkyFitness:

    • Перейдите в раздел "Data Export" (Экспорт данных)
    • Выберите период экспорта
    • Нажмите "Export" (Экспорт)
  2. Импортируйте данные в Google Fit:

    • Откройте приложение Google Fit на вашем Android-устройстве
    • Перейдите в "Профиль" > "Настройки"
    • Выберите "Импорт данных"
    • Выберите экспортированный файл CSV

Интеграция с Garmin Connect

  1. Зарегистрируйте приложение в Garmin Developer Portal:

    • Перейдите на https://developer.garmin.com/
    • Создайте учетную запись и приложение
    • Сохраните Client ID и Client Secret
  2. Настройте интеграцию в SparkyFitness:

    • Перейдите в раздел "Integrations" (Интеграции)
    • Выберите "Garmin"
    • Введите Client ID и Client Secret
    • Сохраните изменения
  3. Авторизуйте подключение:

    • Перейдите в раздел "Connected Devices"
    • Нажмите "Connect to Garmin"
    • Следуйте инструкциям для авторизации

Интеграция с API для кастомных решений

SparkyFitness предоставляет REST API для интеграции с другими системами:

  1. Включите API в настройках:

    • Перейдите в "Administration" > "API"
    • Включите "Enable API"
    • Настройте токены доступа
  2. Пример использования API для получения статистики:

curl -X GET "https://your-domain.com/api/statistics/daily?date=2023-05-15" \
  -H "Authorization: Bearer your_api_token"
  1. Документация API доступна по адресу: https://your-domain.com/api/docs

Обновление и обслуживание

Обновление SparkyFitness

Для ручной установки:

  1. Сделайте резервную копию базы данных:
sudo -u postgres pg_dump sparkyfitness > /opt/sparkyfitness/backup/sparkyfitness-$(date +%Y%m%d).sql
  1. Остановите службу SparkyFitness:
sudo systemctl stop sparkyfitness
  1. Скачайте новую версию:
cd /opt/sparkyfitness
wget https://github.com/SparkyFI/SparkyFitness/releases/download/v0.16.4.0/SparkyFitness-v0.16.4.0.zip
  1. Распакуйте архив:
unzip SparkyFitness-v0.16.4.0.zip
rm -rf SparkyFitness
mv SparkyFitness-v0.16.4.0 SparkyFitness
  1. Обновите базу данных:
cd /opt/sparkyfitness/SparkyFitness
dotnet ef database update
  1. Запустите службу:
sudo systemctl start sparkyfitness
  1. Проверьте статус приложения:
sudo systemctl status sparkyfitness

Для Docker установки:

  1. Сделайте резервную копию базы данных:
cd ~/sparkyfitness
docker exec sparkyfitness-db pg_dump -U sparky sparkyfitness > backup/sparkyfitness-$(date +%Y%m%d).sql
  1. Остановите контейнеры:
docker-compose down
  1. Обновите образ SparkyFitness:
docker-compose pull sparkyfitness
  1. Запустите контейнеры:
docker-compose up -d
  1. Проверьте статус:
docker-compose ps

Обновление базы данных

  1. Сделайте резервную копию базы данных:
sudo -u postgres pg_dump sparkyfitness > /opt/sparkyfitness/backup/sparkyfitness-$(date +%Y%m%d).sql
  1. Обновите схему базы данных:
cd /opt/sparkyfitness/SparkyFitness
dotnet ef database update

Регулярное обслуживание

  1. Настройте автоматическое резервное копирование базы данных:
sudo nano /etc/cron.daily/sparkyfitness-backup

Добавьте следующий скрипт:

#!/bin/bash
BACKUP_DIR="/opt/sparkyfitness/backup"
DATE=$(date +%Y%m%d)
sudo -u postgres pg_dump sparkyfitness > $BACKUP_DIR/sparkyfitness-$DATE.sql
find $BACKUP_DIR -name "sparkyfitness-*.sql" -mtime +30 -delete
  1. Сделайте скрипт исполняемым:
sudo chmod +x /etc/cron.daily/sparkyfitness-backup
  1. Настройте мониторинг приложения с помощью Prometheus и Grafana:

    • Установите Prometheus:
    sudo apt install -y prometheus
    
  2. Настройте сбор метрик SparkyFitness:

    sudo nano /etc/prometheus/prometheus.yml
    

Добавьте следующую конфигурацию:

scrape_configs:
  - job_name: 'sparkyfitness'
    static_configs:
      - targets: ['localhost:5000']
    scrape_interval: 15s
    metrics_path: '/metrics'
    scheme: 'http'
  1. Установите Grafana:

    sudo apt install -y grafana
    sudo systemctl start grafana-server
    sudo systemctl enable grafana-server
    
  2. Импортируйте дашборд для SparkyFitness:

    • Откройте Grafana в браузере по адресу http://your-server-ip:3000
    • Войдите с учетными данными по умолчанию (admin/admin)
    • Перейдите в "Dashboards" > "Import"
    • Импортируйте дашборд с ID 12345

Оптимизация производительности

  1. Настройте кэширование:

    • Установите Redis:
    sudo apt install -y redis-server
    
    • Настройте Redis для SparkyFitness:
    sudo nano /opt/sparkyfitness/SparkyFitness/appsettings.json
    

Добавьте следующую конфигурацию:

"CacheSettings": {
  "Provider": "Redis",
  "RedisConnectionString": "localhost:6379",
  "InstanceName": "SparkyFitness",
  "DefaultExpiration": "00:30:00"
}
  1. Оптимизируйте изображения:

    • Установите ImageSharp:
    cd /opt/sparkyfitness/SparkyFitness
    dotnet add package SixLabors.ImageSharp
    dotnet add package SixLabors.ImageSharp.Web
    
  2. Настройте сжатие:

    • Отредактируйте конфигурацию Nginx:
    sudo nano /etc/nginx/sites-available/sparkyfitness
    

Добавьте параметры сжатия:

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

Устранение неполадок

Проблема: Приложение не запускается

  1. Проверьте статус службы:
sudo systemctl status sparkyfitness
  1. Посмотрите логи службы:
sudo journalctl -u sparkyfitness -f
  1. Проверьте конфигурацию приложения:
nano /opt/sparkyfitness/SparkyFitness/appsettings.json
  1. Проверьте подключение к базе данных:
sudo -u postgres psql -d sparkyfitness
  1. Проверьте зависимости:
dotnet --list-sdks
dotnet --list-runtimes

Проблема: Ошибки подключения к базе данных

  1. Проверьте конфигурацию подключения в appsettings.json:
{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Database=sparkyfitness;Username=sparky;Password=your_strong_password;"
  }
}
  1. Проверьте, работает ли PostgreSQL:
sudo systemctl status postgresql
  1. Проверьте права доступа пользователя к базе данных:
sudo -u postgres psql -c "\du"
  1. Проверьте логи PostgreSQL:
sudo tail -f /var/log/postgresql/postgresql-13-main.log
  1. Проверьте свободное место в базе данных:
sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('sparkyfitness'));"

Проблема: Ошибки SSL-сертификата

  1. Проверьте срок действия сертификата:
sudo certbot certificates
  1. Обновите сертификат:
sudo certbot renew --dry-run
  1. Перезапустите Nginx:
sudo systemctl reload nginx
  1. Проверьте конфигурацию SSL:
sudo nginx -t

Проблема: Ошибки загрузки файлов

  1. Проверьте права доступа к директории загрузки:
ls -la /opt/sparkyfitness/SparkyFitness/uploads
  1. Установите правильные права:
sudo chown sparkyfitness:sparkyfitness /opt/sparkyfitness/SparkyFitness/uploads
sudo chmod 755 /opt/sparkyfitness/SparkyFitness/uploads
  1. Проверьте настройку Nginx для загрузки файлов:
sudo nano /etc/nginx/sites-available/sparkyfitness

Убедитесь, что есть конфигурация:

client_max_body_size 10M;

Проблема: Высокое использование памяти

  1. Проверьте использование памяти:
free -h
  1. Проверьте использование памяти приложением:
sudo systemctl status sparkyfitness
  1. Проверьте логи на предмет ошибок памяти:
sudo journalctl -u sparkyfitness -f | grep -i memory
  1. Оптимизируйте использование памяти:
    • Уменьшите размер пула соединений с базой данных
    • Настройте кэширование
    • Оптимизируйте запросы к базе данных

Проблема: Медленная производительность

  1. Проверьте нагрузку на систему:
top
htop
  1. Проверьте использование CPU:
mpstat 1 5
  1. Проверьте запросы к базе данных:
sudo -u postgres psql -d sparkyfitness -c "SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;"
  1. Оптимизируйте производительность:
    • Включите кэширование запросов
    • Оптимизируйте индексы базы данных
    • Настройьте пул соединений

Проблема: Ошибки аутентификации

  1. Проверьте конфигурацию JWT:
nano /opt/sparkyfitness/SparkyFitness/appsettings.json
  1. Проверьте системные логи:
sudo journalctl -u sparkyfitness -f | grep -i auth
  1. Проверьте настройки безопасности:
nano /opt/sparkyfitness/SparkyFitness/appsettings.json

Убедитесь, что секция безопасности правильно настроена:

"SecuritySettings": {
  "RequireSsl": true,
  "MaxLoginAttempts": 5,
  "LockoutDurationMinutes": 15
}

Заключение

SparkyFitness — это мощная альтернатива MyFitnessPal с возможностью самостоятельного хостинга. В этом руководстве мы подробно рассмотрели процесс установки, настройки и использования приложения, а также интеграцию с другими сервисами и обновление системы.

С помощью SparkyFitness вы можете полностью контролировать свои данные по питанию и фитнесу, не полагаясь на сторонние сервисы. Регулярное обновление и обслуживание приложения обеспечит его стабильную работу в долгосрочной перспективе.

При возникновении проблем обратитесь к разделу "Устранение неполадок" или воспользуйтесь официальной документацией проекта на GitHub.

Дополнительную информацию и исходный код можно найти на GitHub-репозитории проекта.

Поделиться:TelegramX / TwitterVK