Reapply "Add Gitea image publishing workflow and Portainer runner stacks"
All checks were successful
Testar e publicar imagem Docker / publish (push) Successful in 15s
All checks were successful
Testar e publicar imagem Docker / publish (push) Successful in 15s
This reverts commit 282ba08c818b057c65bb06849383fb3fc855aed8.
This commit is contained in:
parent
282ba08c81
commit
febc807ad9
44
.gitea/workflows/container.yaml
Normal file
44
.gitea/workflows/container.yaml
Normal file
@ -0,0 +1,44 @@
|
||||
name: Testar e publicar imagem Docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: botflow-docker
|
||||
env:
|
||||
IMAGE: gitea.zol.oixb.run/oixb.run/ts6-botflow
|
||||
steps:
|
||||
- name: Preparar ferramentas
|
||||
run: apk add --no-cache git nodejs ca-certificates
|
||||
|
||||
- name: Obter codigo
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Testar autenticacao
|
||||
run: docker build --target test -t ts6-botflow-tests:${{ gitea.sha }} .
|
||||
|
||||
- name: Construir imagem
|
||||
run: |
|
||||
docker build --pull --target runtime \
|
||||
--label org.opencontainers.image.source=https://gitea.zol.oixb.run/oixb.run/ts6-botflow \
|
||||
--label org.opencontainers.image.revision=${{ gitea.sha }} \
|
||||
-t "$IMAGE:${{ gitea.sha }}" -t "$IMAGE:latest" .
|
||||
|
||||
- name: Publicar no registry Gitea
|
||||
env:
|
||||
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
||||
run: |
|
||||
set -eu
|
||||
test -n "$REGISTRY_USER" || { echo 'Falta o secret REGISTRY_USER'; exit 1; }
|
||||
test -n "$REGISTRY_TOKEN" || { echo 'Falta o secret REGISTRY_TOKEN'; exit 1; }
|
||||
export DOCKER_CONFIG="$(mktemp -d)"
|
||||
trap 'rm -rf "$DOCKER_CONFIG"' EXIT
|
||||
printf '%s' "$REGISTRY_TOKEN" | docker login gitea.zol.oixb.run -u "$REGISTRY_USER" --password-stdin
|
||||
docker push "$IMAGE:${{ gitea.sha }}"
|
||||
docker push "$IMAGE:latest"
|
||||
@ -1,8 +1,15 @@
|
||||
FROM node:22-bookworm-slim
|
||||
FROM node:22-bookworm-slim AS base
|
||||
WORKDIR /app
|
||||
COPY --chown=node:node package.json server.mjs ./
|
||||
COPY --chown=node:node public ./public
|
||||
RUN mkdir /app/data && chown node:node /app/data
|
||||
|
||||
FROM base AS test
|
||||
COPY --chown=node:node auth.test.mjs ./
|
||||
USER node
|
||||
RUN npm test
|
||||
|
||||
FROM base AS runtime
|
||||
USER node
|
||||
ENV PORT=3080 DATA_DIR=/app/data
|
||||
EXPOSE 3080
|
||||
|
||||
@ -6,7 +6,9 @@ O editor de flows e o motor de bots ainda não estão implementados nesta versã
|
||||
|
||||
## Docker / Portainer
|
||||
|
||||
Usar `compose.yaml` a partir deste repositório. O serviço é construído pelo Dockerfile, porta 3080, volume persistente `botflow-data`.
|
||||
Para **Web editor com imagem construida no Gitea**, seguir [deploy/README.md](deploy/README.md). O workflow `.gitea/workflows/container.yaml` testa e publica a imagem a cada push em main. As stacks prontas estao em `deploy/runner-stack.yaml` e `deploy/bot-stack.yaml`.
|
||||
|
||||
Para construcao local por Docker Compose, usar `compose.yaml` a partir deste repositório. O serviço é construído pelo Dockerfile, porta 3080, volume persistente `botflow-data`.
|
||||
|
||||
Configurar as quatro variáveis nas Environment variables da stack (ou copiar `.env.example` para `.env` quando executado por Docker Compose):
|
||||
|
||||
|
||||
48
deploy/README.md
Normal file
48
deploy/README.md
Normal file
@ -0,0 +1,48 @@
|
||||
# Gitea Actions → imagem Docker → Portainer Web editor
|
||||
|
||||
## 1. Ativar Actions no repositorio
|
||||
|
||||
No repositorio ts6-botflow, Configuracoes → Unidades (ou Avancado), ativar Actions. Nao e preciso alterar o servidor Gitea se Actions ja estiver disponivel.
|
||||
|
||||
## 2. Registar o runner
|
||||
|
||||
No mesmo repositorio, Configuracoes → Actions → Runners → Criar novo runner. Copiar o token de registo do **repositorio**, para limitar este runner ao ts6-botflow.
|
||||
|
||||
No Portainer, criar stack `ts6-botflow-runner` no Web editor e colar `runner-stack.yaml`. Adicionar variavel `RUNNER_TOKEN` com o token de registo. Fazer deploy. O runner deve aparecer Online no Gitea com a label `botflow-docker`.
|
||||
|
||||
O runner usa o socket Docker para construir as imagens. Os workflows deste repositorio podem controlar o Docker dessa maquina; manter a escrita no repositorio limitada a pessoas de confianca. O runner nao precisa de portas publicadas. Se o Docker estiver num LXC sem permissoes para Docker-in-Docker, esta configuracao usa o daemon ja existente.
|
||||
|
||||
## 3. Autorizar a publicacao da imagem
|
||||
|
||||
Na conta Gitea com acesso de escrita aos packages de `oixb.run`, Definicoes → Aplicacoes → Gerar token. Permissao `write:package` (inclui leitura). Nao reutilizar o segredo Discord nem o token de registo do runner.
|
||||
|
||||
No repositorio, Configuracoes → Actions → Secrets, criar:
|
||||
|
||||
- `REGISTRY_USER`: nome de login da conta Gitea dona do token. Se `oixb.run` for uma organizacao, usar a conta membro com permissao de escrita aos seus packages.
|
||||
- `REGISTRY_TOKEN`: token pessoal criado acima.
|
||||
|
||||
Os tokens ficam nas configuracoes Gitea/Portainer, nunca no Git.
|
||||
|
||||
## 4. Fazer o primeiro build
|
||||
|
||||
Abrir Actions → Testar e publicar imagem Docker → Run workflow, branch main. Se nao aparecer o botao, enviar um novo commit para main ou repetir a execucao que ficou pendente apos o envio do workflow.
|
||||
|
||||
O workflow instala as ferramentas no job, obtem o commit, executa os testes de autenticacao numa etapa Docker Node 22 e constroi/publica a imagem. O log so deve mostrar publicacao depois de os testes passarem. Sao criadas tags `latest` e o SHA completo do commit.
|
||||
|
||||
Imagem: `gitea.zol.oixb.run/oixb.run/ts6-botflow:latest`.
|
||||
|
||||
## 5. Arrancar o bot no Web editor
|
||||
|
||||
Esperar pelo primeiro workflow verde. Se o package for privado, adicionar em Portainer → Registries → Add registry → Custom registry o dominio `gitea.zol.oixb.run`, com uma conta/token que tenha `read:package`. Dar acesso ao ambiente Docker se o Portainer o pedir.
|
||||
|
||||
Criar stack `ts6-botflow`, colar `bot-stack.yaml` e adicionar `DISCORD_CLIENT_SECRET` nas variaveis de ambiente. Fazer deploy. Abrir http://192.168.88.99:3080.
|
||||
|
||||
## Atualizacoes
|
||||
|
||||
Cada push em main testa, constroi e publica uma imagem. A stack Web editor nao e atualizada apenas pelo push: no Portainer fazer Update the stack com a opcao de voltar a descarregar a imagem e recriar o container. `pull_policy: always` pede o download em cada deploy. Restart sozinho nao descarrega uma imagem nova.
|
||||
|
||||
A automatizacao de deployment pode ser adicionada depois com webhook Portainer, se essa funcao estiver disponivel na edicao instalada. Esta versao automatiza o build e a publicacao, nao o deployment. O volume preserva os dados quando o container e recriado.
|
||||
|
||||
## Validacao
|
||||
|
||||
As stacks e o workflow sao verificados localmente. O build real e o login no registry so podem ser confirmados depois de registar o runner e configurar os secrets. As imagens Docker nao sao publicadas apenas por enviar este ficheiro.
|
||||
25
deploy/bot-stack.yaml
Normal file
25
deploy/bot-stack.yaml
Normal file
@ -0,0 +1,25 @@
|
||||
services:
|
||||
ts6-botflow:
|
||||
image: gitea.zol.oixb.run/oixb.run/ts6-botflow:latest
|
||||
pull_policy: always
|
||||
container_name: ts6-botflow
|
||||
ports:
|
||||
- "3080:3080"
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
PORT: "3080"
|
||||
DATA_DIR: /app/data
|
||||
APP_URL: http://192.168.88.99:3080
|
||||
DISCORD_CLIENT_ID: "477999574804594708"
|
||||
DISCORD_CLIENT_SECRET: ${DISCORD_CLIENT_SECRET:?Define DISCORD_CLIENT_SECRET}
|
||||
OWNER_DISCORD_ID: "376768118535749633"
|
||||
volumes:
|
||||
- ts6_botflow_data:/app/data
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "fetch('http://localhost:3080/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
volumes:
|
||||
ts6_botflow_data:
|
||||
15
deploy/runner-stack.yaml
Normal file
15
deploy/runner-stack.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
services:
|
||||
gitea-runner:
|
||||
image: gitea/runner:3
|
||||
container_name: ts6-botflow-runner
|
||||
environment:
|
||||
GITEA_INSTANCE_URL: https://gitea.zol.oixb.run
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN:?Define RUNNER_TOKEN do repositorio}
|
||||
GITEA_RUNNER_NAME: ts6-botflow-runner
|
||||
GITEA_RUNNER_LABELS: botflow-docker:docker://docker:27-cli
|
||||
volumes:
|
||||
- runner-data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
runner-data:
|
||||
Loading…
x
Reference in New Issue
Block a user