diff --git a/.env b/.env new file mode 100644 index 0000000..39e7a54 --- /dev/null +++ b/.env @@ -0,0 +1,27 @@ +########### +# GATEWAY # +########### +#Секретный ключ по которому авторизуются бекенды при подключении к SFU шлюзу +SECRET=SFU_TEST_SECRET +#PORT SFU шлюза (для приема соединений от бекендов) +PORT=1001 +############### +# SFU SECTION # +############### +#Публичный IP адрес, который будет использоваться для ICE кандидатов (если SFU работает за NAT) +SFU_PUBLIC_IP=192.168.6.82 +#Диапазон портов для ICE кандидатов +SFU_PORT_RANGE_FROM=30000 +SFU_PORT_RANGE_TO=39999 +################ +# TURN SECTION # +################ +#Разрешить использовать этот SFU как TURN сервер тоже (для ретрансляции медиа трафика на сам SFU) +TURN_ALLOW=true +#TURN имя пользователя и пароль для аутентификации на TURN сервере (если используется) +TURN_PUBLIC_IP=192.168.6.82 +TURN_USER=user +TURN_PASS=pass +#Диапазон занимемых TURN сервером портов (tcp/udp) +TURN_PORT_RANGE_FROM=40000 +TURN_PORT_RANGE_TO=50000 diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..efce143 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,39 @@ +name: Build G365SFU +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Install Node.js + run: | + if command -v apt-get &> /dev/null; then + sudo apt-get update && sudo apt-get install -y nodejs npm + elif command -v brew &> /dev/null; then + brew install node + fi + - name: Checkout code + uses: actions/checkout@v6 + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: 1.20 + - name: Build G365SFU + run: | + make build + - name: Deploy to server via SSH + uses: appleboy/scp-action@v1 + with: + host: ${{ secrets.SFU_SSH_HOST }} + username: ${{ secrets.SFU_SSH_USER }} + password: ${{ secrets.SFU_SSH_PASSWORD }} + port: ${{ secrets.SFU_SSH_PORT }} + source: "build/*" + target: ${{ secrets.SFU_DEPLOY_PATH }} + strip_components: 1 + rm: false + debug: true + flatten: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9095c75..a49d687 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ -.env .vscode -__debug* \ No newline at end of file +__debug* +build/.env +build/g365sfu \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..905872b --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +.PHONY: build + +build: + mkdir -p build + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o build/g365sfu . \ No newline at end of file diff --git a/build/Dockerfile b/build/Dockerfile new file mode 100644 index 0000000..60a6f76 --- /dev/null +++ b/build/Dockerfile @@ -0,0 +1,18 @@ +FROM alpine:3.20 + +RUN apk add --no-cache ca-certificates tzdata + +WORKDIR /app + +# Бинарь должен быть собран заранее в ./build/g365sfu +COPY g365sfu /app/g365sfu + +COPY .env /app/.env + +RUN chmod +x /app/g365sfu + +EXPOSE 1001 +EXPOSE 3478/tcp +EXPOSE 3478/udp + +ENTRYPOINT ["/app/g365sfu"] \ No newline at end of file diff --git a/build/docker-compose.yml b/build/docker-compose.yml new file mode 100644 index 0000000..73a4c0e --- /dev/null +++ b/build/docker-compose.yml @@ -0,0 +1,13 @@ +services: + g365sfu: + container_name: g365sfu + build: + context: . + dockerfile: Dockerfile + image: g365sfu:latest + restart: unless-stopped + env_file: + - .env + #Поддерживается только в Linux (на Windows и MacOS нужно использовать bridge сеть и проброс портов, но нельзя пробрасывать большие + #диапазоны портов, это может вызывать проблемы с работой Docker) + network_mode: host \ No newline at end of file