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
|
||||
|
||||
# Token de autenticacion — dejar vacio para acceso solo en localhost (sin login)
|
||||
# Poner un valor para activar auth + acceso remoto (0.0.0.0)
|
||||
# Auth token. Empty = localhost only, no login.
|
||||
# Set a value = login enabled + remote access (0.0.0.0).
|
||||
AUTH_TOKEN=
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
# Persistencia
|
||||
# Persistence
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
|
||||
# Directorio donde se guardan archivos persistentes (SQLite de stats,
|
||||
# config Discord, container settings, posiciones de nodos, env file overrides).
|
||||
# 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.
|
||||
# Where SQLite, configs, node positions and env file overrides are stored.
|
||||
# Default native: ./data. In docker: /app/data (containerflow-data volume).
|
||||
# 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
|
||||
# pueda leer compose files fuera de los defaults (/home, /opt, /srv, /root).
|
||||
# Solo necesario si tus proyectos viven en una ruta no estandar.
|
||||
# Ejemplo: HOST_PROJECTS_DIR=/data/apps
|
||||
# Extra host path to mount so rebuild/remove can read compose files
|
||||
# outside /home, /opt, /srv, /root. Example: /data/apps
|
||||
# HOST_PROJECTS_DIR=
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
# Control de acceso por path (multi-usuario)
|
||||
# Access control (multi-tenant)
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
|
||||
# Lista separada por ":" de prefijos donde se permiten acciones
|
||||
# (start/stop/restart/rebuild/remove/exec). Visualizacion, stats y
|
||||
# logs siempre disponibles para todos los containers.
|
||||
#
|
||||
# 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
|
||||
# Empty = permissive (all actions allowed).
|
||||
# Set = strict (only containers under these paths are actionable; rest locked).
|
||||
# Colon-separated. Example: /home/jorge:/srv/myapp
|
||||
# ALLOWED_PATHS=
|
||||
|
||||
# Solo aplica cuando ALLOWED_PATHS esta activo. Si ALLOWED_PATHS esta
|
||||
# vacio, esta variable no tiene efecto (todo es accionable por default).
|
||||
#
|
||||
# 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.)
|
||||
# Only applies when ALLOWED_PATHS is active.
|
||||
# false = block actions on non-compose containers.
|
||||
# true = allow them (useful for watchtower, traefik, etc.).
|
||||
# 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
|
||||
# AI assistant context — internal, not for public repo
|
||||
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
|
||||
|
||||
No necesitas clonar el repo. Descarga la imagen pre-built desde GHCR:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/RGJorge/containerflow.git
|
||||
cd containerflow
|
||||
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/.env.example
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -29,16 +29,30 @@ Existing tools show you numbers. ContainerFlow also:
|
||||
|
||||
## Quick start
|
||||
|
||||
No clone needed. Pull the prebuilt image from GHCR:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/RGJorge/containerflow.git
|
||||
cd containerflow
|
||||
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/RGJorge/ContainerFlow/main/.env.example
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -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:
|
||||
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:
|
||||
- "${EXTERNAL_PORT:-9470}:9470"
|
||||
volumes:
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "containerflow",
|
||||
"version": "0.1.3",
|
||||
"version": "0.1.4",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"author": "Jorge Gonzalez D. (RGJorge)",
|
||||
"type": "module",
|
||||
|
||||
Reference in New Issue
Block a user