Compare commits
16 Commits
main
...
eb5af0f243
| Author | SHA1 | Date | |
|---|---|---|---|
| eb5af0f243 | |||
| d341cccc8a | |||
| 96385d85a8 | |||
| f438d2cd7a | |||
| 3cea9cf789 | |||
| db2c67747d | |||
| 02a353a80c | |||
| 2e71f37d48 | |||
| c23ffed003 | |||
| 9cd826bed2 | |||
| d44070f892 | |||
| dd8e9071ed | |||
| dd2606b27d | |||
| 3034faafae | |||
| 70596445a6 | |||
| 5c682041e0 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -25,4 +25,6 @@ dist/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
.MAIN-APP-REFERENCE/
|
.MAIN-APP-REFERENCE/
|
||||||
|
|
||||||
|
.project-vesper-plan.md
|
||||||
@@ -1,5 +1,17 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
&& curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz \
|
||||||
|
| tar -xz --strip-components=1 -C /usr/local/bin docker/docker \
|
||||||
|
&& curl -fsSL "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-linux-x86_64" \
|
||||||
|
-o /usr/local/bin/docker-compose \
|
||||||
|
&& chmod +x /usr/local/bin/docker-compose \
|
||||||
|
&& mkdir -p /usr/local/lib/docker/cli-plugins \
|
||||||
|
&& ln -s /usr/local/bin/docker-compose /usr/local/lib/docker/cli-plugins/docker-compose \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
|
|||||||
@@ -43,22 +43,22 @@ async def deploy(request: Request):
|
|||||||
logger.info("Auto-deploy triggered via Gitea webhook")
|
logger.info("Auto-deploy triggered via Gitea webhook")
|
||||||
|
|
||||||
project_path = settings.deploy_project_path
|
project_path = settings.deploy_project_path
|
||||||
cmd = f"cd {project_path} && git pull origin main && docker compose up -d --build"
|
cmd = (
|
||||||
try:
|
f"git config --global --add safe.directory {project_path} && "
|
||||||
proc = await asyncio.create_subprocess_shell(
|
f"cd {project_path} && "
|
||||||
cmd,
|
f"git fetch origin main && "
|
||||||
stdout=asyncio.subprocess.PIPE,
|
f"git reset --hard origin/main && "
|
||||||
stderr=asyncio.subprocess.STDOUT,
|
f"docker-compose up -d --build"
|
||||||
)
|
)
|
||||||
stdout, _ = await asyncio.wait_for(proc.communicate(), timeout=300)
|
|
||||||
output = stdout.decode(errors="replace") if stdout else ""
|
|
||||||
|
|
||||||
if proc.returncode != 0:
|
# Fire and forget — run deploy in background so we can respond before
|
||||||
logger.error(f"Deploy failed (exit {proc.returncode}):\n{output}")
|
# the container restarts (which would kill this very process).
|
||||||
raise HTTPException(status_code=500, detail=f"Deploy script failed:\n{output[-500:]}")
|
await asyncio.create_subprocess_shell(
|
||||||
|
cmd,
|
||||||
|
stdout=asyncio.subprocess.DEVNULL,
|
||||||
|
stderr=asyncio.subprocess.DEVNULL,
|
||||||
|
start_new_session=True,
|
||||||
|
)
|
||||||
|
|
||||||
logger.info(f"Deploy succeeded:\n{output[-300:]}")
|
logger.info("Auto-deploy started in background")
|
||||||
return {"ok": True, "output": output[-1000:]}
|
return {"ok": True, "message": "Deploy started"}
|
||||||
|
|
||||||
except asyncio.TimeoutError:
|
|
||||||
raise HTTPException(status_code=504, detail="Deploy timed out after 300 seconds")
|
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ services:
|
|||||||
- ./data/built_melodies:/app/storage/built_melodies
|
- ./data/built_melodies:/app/storage/built_melodies
|
||||||
- ./data/firmware:/app/storage/firmware
|
- ./data/firmware:/app/storage/firmware
|
||||||
- ./data/firebase-service-account.json:/app/firebase-service-account.json:ro
|
- ./data/firebase-service-account.json:/app/firebase-service-account.json:ro
|
||||||
|
# Auto-deploy: project root and Docker socket
|
||||||
|
- /home/bellsystems/bellsystems-cp:/home/bellsystems/bellsystems-cp
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
depends_on: []
|
depends_on: []
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default function Header() {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<h2 className="text-lg font-semibold" style={{ color: "var(--text-heading)" }}>
|
<h2 className="text-lg font-semibold" style={{ color: "var(--text-heading)" }}>
|
||||||
BellSystems - Control Panel
|
BellCloud™ - Console 3
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export default defineConfig({
|
|||||||
server: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
port: 5173,
|
port: 5173,
|
||||||
|
allowedHosts: ['console.bellsystems.net'],
|
||||||
hmr: {
|
hmr: {
|
||||||
clientPort: 80,
|
clientPort: 80,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ events {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http {
|
http {
|
||||||
|
client_max_body_size 10m;
|
||||||
|
|
||||||
upstream backend {
|
upstream backend {
|
||||||
server backend:8000;
|
server backend:8000;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user