6 Commits
Author SHA1 Message Date
austnv 933e8c118a v0.6.0
Build and Deploy Backend / build-and-deploy (push) Successful in 4m45s
2026-06-21 18:01:04 +03:00
austnv 15fb0342a8 update nodes endpoint 2026-06-21 18:00:39 +03:00
austnv 1410006047 update build.yml 2026-06-21 17:37:20 +03:00
austnv 7385695f51 Merge branch 'master' of ssh://git.uvpn.shop:2222/uVPN/backend 2026-06-21 16:47:50 +03:00
austnv 76a8393bb6 update workflow 2026-06-21 16:47:46 +03:00
austnv da7194e506 Обновить .gitea/workflows/build.yml
Build and Push Docker Image / build-and-push (push) Successful in 49s
2026-06-21 16:09:21 +03:00
3 changed files with 41 additions and 22 deletions
+37 -7
View File
@@ -1,18 +1,21 @@
name: Build and Push Docker Image name: Build and Deploy Backend
on: on:
push: push:
branches: [ "master" ] # Запускать при пуше в эти ветки tags:
- '*'
workflow_dispatch:
jobs: jobs:
build-and-push: build-and-deploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
# 1. Клонируем ваш репозиторий # 1. Клонируем код
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
# 2. Настраиваем Docker Buildx для сборки # 2. Настраиваем Docker Buildx
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
@@ -22,7 +25,7 @@ jobs:
with: with:
registry: git.uvpn.shop registry: git.uvpn.shop
username: ${{ gitea.repository_owner }} username: ${{ gitea.repository_owner }}
password: ${{ secrets.ACCESS_TOKEN }} # Используем ваш секрет password: ${{ secrets.ACCESS_TOKEN }}
# 4. Собираем и пушим образ # 4. Собираем и пушим образ
- name: Build and push Docker image - name: Build and push Docker image
@@ -32,4 +35,31 @@ jobs:
push: true push: true
tags: | tags: |
git.uvpn.shop/uvpn/backend:latest git.uvpn.shop/uvpn/backend:latest
git.uvpn.shop/uvpn/backend:${{ gitea.sha }} # Полезно для версионирования git.uvpn.shop/uvpn/backend:${{ gitea.sha }}
# 5. Устанавливаем SSH-ключ для деплоя
- name: Install SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}
# 6. Деплой на сервер
- name: Deploy on server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} << 'EOF'
# Переходим в папку с проектом (где лежит docker-compose.yml)
cd /opt/uvpn.shop/backend
# Логинимся в реестр Gitea (чтобы docker pull мог скачать образ)
echo "${{ secrets.ACCESS_TOKEN }}" | docker login git.uvpn.shop -u ${{ gitea.repository_owner }} --password-stdin
# Скачиваем свежий образ
docker pull git.uvpn.shop/uvpn/backend:latest
# Перезапускаем контейнер с новым образом
docker-compose down || true # Если контейнер не запущен — игнорируем ошибку
docker-compose up -d
# Очищаем неиспользуемые образы
docker image prune -f
EOF
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "uvpn-backend" name = "uvpn-backend"
version = "0.5.0" version = "0.6.0"
description = "FastAPI backend with Docker for uvpn.shop" description = "FastAPI backend with Docker for uvpn.shop"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"
+3 -14
View File
@@ -2,7 +2,7 @@ from fastapi import APIRouter
import logging import logging
from os import getenv from os import getenv
from remnawave import RemnawaveSDK from remnawave import RemnawaveSDK
from remnawave.models.nodes import GetAllNodesResponseDto from remnawave.models.hosts import GetAllHostsResponseDto
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@@ -11,17 +11,6 @@ remnawave = RemnawaveSDK(base_url='http://remnawave:3000', token=getenv('REMNAWA
@router.get('/nodes') @router.get('/nodes')
async def get_nodes(): async def get_nodes():
nodes: GetAllNodesResponseDto = await remnawave.nodes.get_all_nodes() hosts: GetAllHostsResponseDto = await remnawave.hosts.get_all_hosts()
return [
{
'ip': node.address,
'port': node.port,
'uptime': node.xray_uptime,
'users_online': node.users_online,
'name': node.name,
'country_code': node.country_code
}
for node in nodes if node.is_connected
]
return hosts.root