mirror of
https://github.com/RGJorge/ContainerFlow.git
synced 2026-08-03 07:21:42 +02:00
v0.1.4 — prebuilt Docker image on GHCR (closes #5)
Adds a GitHub Actions workflow that builds and pushes the Docker image to ghcr.io/rgjorge/containerflow on every tag push, so end users can run ContainerFlow without cloning the repo or building locally. - New workflow: .github/workflows/docker-release.yml - docker-compose.yml: uses the prebuilt image from GHCR by default - New docker-compose.local.yml: override for building from source (devs) - .env.example: simplified + adds COMPOSE_FILE toggle for local build - README EN + ES: quick-start updated to no-clone flow - .gitignore: ignore task/ planning notes dir
This commit is contained in:
+23
-37
@@ -1,60 +1,46 @@
|
|||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Servidor
|
# Server
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Puerto del servidor (por defecto: 9470)
|
|
||||||
PORT=9470
|
PORT=9470
|
||||||
|
|
||||||
# Token de autenticacion — dejar vacio para acceso solo en localhost (sin login)
|
# Auth token. Empty = localhost only, no login.
|
||||||
# Poner un valor para activar auth + acceso remoto (0.0.0.0)
|
# Set a value = login enabled + remote access (0.0.0.0).
|
||||||
AUTH_TOKEN=
|
AUTH_TOKEN=
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Persistencia
|
# Persistence
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Directorio donde se guardan archivos persistentes (SQLite de stats,
|
# Where SQLite, configs, node positions and env file overrides are stored.
|
||||||
# config Discord, container settings, posiciones de nodos, env file overrides).
|
# Default native: ./data. In docker: /app/data (containerflow-data volume).
|
||||||
# Default nativo: ./data (relativo al cwd). En docker-compose.yml se setea
|
|
||||||
# a /app/data (montado en el volumen containerflow-data).
|
|
||||||
# El directorio se crea automaticamente al startup si no existe.
|
|
||||||
# DATA_DIR=/app/data
|
# DATA_DIR=/app/data
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Acceso a compose files (rebuild / remove)
|
# Compose file access (rebuild / remove)
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Path adicional a montar en el container de ContainerFlow para que
|
# Extra host path to mount so rebuild/remove can read compose files
|
||||||
# pueda leer compose files fuera de los defaults (/home, /opt, /srv, /root).
|
# outside /home, /opt, /srv, /root. Example: /data/apps
|
||||||
# Solo necesario si tus proyectos viven en una ruta no estandar.
|
|
||||||
# Ejemplo: HOST_PROJECTS_DIR=/data/apps
|
|
||||||
# HOST_PROJECTS_DIR=
|
# HOST_PROJECTS_DIR=
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
# Control de acceso por path (multi-usuario)
|
# Access control (multi-tenant)
|
||||||
# ──────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Lista separada por ":" de prefijos donde se permiten acciones
|
# Empty = permissive (all actions allowed).
|
||||||
# (start/stop/restart/rebuild/remove/exec). Visualizacion, stats y
|
# Set = strict (only containers under these paths are actionable; rest locked).
|
||||||
# logs siempre disponibles para todos los containers.
|
# Colon-separated. Example: /home/jorge:/srv/myapp
|
||||||
#
|
|
||||||
# Vacio = modo permisivo (todas las acciones permitidas).
|
|
||||||
# Con valores = modo estricto (containers fuera de estas rutas
|
|
||||||
# aparecen con candado y acciones deshabilitadas).
|
|
||||||
#
|
|
||||||
# Ejemplo single-user:
|
|
||||||
# ALLOWED_PATHS=/home/jorge
|
|
||||||
#
|
|
||||||
# Ejemplo multi-path:
|
|
||||||
# ALLOWED_PATHS=/home/jorge:/srv/myapp:/opt/legacy
|
|
||||||
# ALLOWED_PATHS=
|
# ALLOWED_PATHS=
|
||||||
|
|
||||||
# Solo aplica cuando ALLOWED_PATHS esta activo. Si ALLOWED_PATHS esta
|
# Only applies when ALLOWED_PATHS is active.
|
||||||
# vacio, esta variable no tiene efecto (todo es accionable por default).
|
# false = block actions on non-compose containers.
|
||||||
#
|
# true = allow them (useful for watchtower, traefik, etc.).
|
||||||
# Cuando ALLOWED_PATHS esta activo, controla si containers no-compose
|
|
||||||
# (corridos con `docker run` directo, sin labels de compose) permiten
|
|
||||||
# acciones:
|
|
||||||
# false (default) = bloqueados, aparecen con candado
|
|
||||||
# true = permitidos (util para watchtower, traefik, etc.)
|
|
||||||
# ALLOW_NON_COMPOSE=false
|
# ALLOW_NON_COMPOSE=false
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
# Dev mode (build from source instead of pulling the image)
|
||||||
|
# ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# Uncomment, then run: docker compose up -d --build
|
||||||
|
# COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
name: Docker Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels)
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ghcr.io/${{ github.repository_owner }}/containerflow
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=raw,value=latest
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
@@ -18,3 +18,6 @@ recomendaciones.md
|
|||||||
docs/reddit.md
|
docs/reddit.md
|
||||||
# AI assistant context — internal, not for public repo
|
# AI assistant context — internal, not for public repo
|
||||||
CLAUDE.md
|
CLAUDE.md
|
||||||
|
|
||||||
|
# Planning notes — internal, not for public repo
|
||||||
|
task/
|
||||||
|
|||||||
+17
-3
@@ -29,16 +29,30 @@ Las herramientas existentes te muestran números. ContainerFlow además:
|
|||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
|
No necesitas clonar el repo. Descarga la imagen pre-built desde GHCR:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/RGJorge/containerflow.git
|
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/docker-compose.yml
|
||||||
cd containerflow
|
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/.env.example
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Abre `http://localhost:9470`. Listo.
|
Abre `http://localhost:9470`. Listo.
|
||||||
|
|
||||||
Para desarrollo nativo (hot reload): `bun install && bun run dev`.
|
### Build desde source
|
||||||
|
|
||||||
|
Si clonaste el repo y querés buildear local (porque modificaste el código):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/RGJorge/containerflow.git
|
||||||
|
cd containerflow
|
||||||
|
cp .env.example .env
|
||||||
|
# En .env, descomenta: COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
Para desarrollo nativo (hot reload, sin Docker): `bun install && bun run dev`.
|
||||||
|
|
||||||
## Documentación
|
## Documentación
|
||||||
|
|
||||||
|
|||||||
@@ -29,16 +29,30 @@ Existing tools show you numbers. ContainerFlow also:
|
|||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
|
No clone needed. Pull the prebuilt image from GHCR:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/RGJorge/containerflow.git
|
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/docker-compose.yml
|
||||||
cd containerflow
|
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/.env.example
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Open `http://localhost:9470`. Done.
|
Open `http://localhost:9470`. Done.
|
||||||
|
|
||||||
For native development (hot reload): `bun install && bun run dev`.
|
### Build from source instead
|
||||||
|
|
||||||
|
If you cloned the repo and want to build locally (e.g. you modified the code):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/RGJorge/containerflow.git
|
||||||
|
cd containerflow
|
||||||
|
cp .env.example .env
|
||||||
|
# In .env, uncomment: COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
For native development (hot reload, no Docker): `bun install && bun run dev`.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Override compose file for local development / building from source.
|
||||||
|
# Activated via COMPOSE_FILE env var in .env (see .env.example).
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# 1. In .env, set: COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
|
||||||
|
# 2. Run: docker compose up -d --build
|
||||||
|
#
|
||||||
|
# This overrides the `image:` from docker-compose.yml with a local build,
|
||||||
|
# tagging it as `containerflow:local` so it's distinguishable from
|
||||||
|
# prebuilt versions.
|
||||||
|
|
||||||
|
services:
|
||||||
|
containerflow:
|
||||||
|
build: .
|
||||||
|
image: containerflow:local
|
||||||
+3
-1
@@ -1,6 +1,8 @@
|
|||||||
services:
|
services:
|
||||||
containerflow:
|
containerflow:
|
||||||
build: .
|
# Pulls the latest prebuilt image from GHCR.
|
||||||
|
# To build from source locally instead, see docker-compose.local.yml + COMPOSE_FILE in .env.
|
||||||
|
image: ghcr.io/rgjorge/containerflow:latest
|
||||||
ports:
|
ports:
|
||||||
- "${EXTERNAL_PORT:-9470}:9470"
|
- "${EXTERNAL_PORT:-9470}:9470"
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "containerflow",
|
"name": "containerflow",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"author": "Jorge Gonzalez D. (RGJorge)",
|
"author": "Jorge Gonzalez D. (RGJorge)",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
Reference in New Issue
Block a user