fix(docker): Dockerfile workspace-aware + db.rs create_if_missing

- Contexte de build depuis la racine du workspace Cargo
- Rust 1.86 pour edition 2024
- Layer cache avec stubs membres du workspace
- Création répertoire /data dans l'image
- SQLite create_if_missing(true) pour créer la DB au premier démarrage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-19 07:02:54 +02:00
parent 20eb495357
commit 27c62fa54c
3 changed files with 26 additions and 9 deletions
+18 -5
View File
@@ -1,13 +1,26 @@
FROM rust:1.82-alpine AS builder
FROM rust:1.86-alpine AS builder
RUN apk add --no-cache musl-dev
WORKDIR /app
COPY Cargo.toml Cargo.lock* ./
COPY src ./src
RUN cargo build --release
# Workspace
COPY Cargo.toml Cargo.lock ./
COPY backend/Cargo.toml ./backend/Cargo.toml
COPY agents/agent-scan-network/Cargo.toml ./agents/agent-scan-network/Cargo.toml
COPY agents/agent-metric/Cargo.toml ./agents/agent-metric/Cargo.toml
# Stubs pour cacher les dépendances
RUN mkdir -p backend/src agents/agent-scan-network/src agents/agent-metric/src \
&& echo 'fn main(){}' > backend/src/main.rs \
&& echo 'fn main(){}' > agents/agent-scan-network/src/main.rs \
&& echo 'fn main(){}' > agents/agent-metric/src/main.rs \
&& cargo build --release -p sentinelmesh-backend
# Sources réelles (les stubs agents restent en place)
COPY backend/src ./backend/src
COPY backend/migrations ./backend/migrations
RUN touch backend/src/main.rs && cargo build --release -p sentinelmesh-backend
FROM alpine:3.21
RUN apk add --no-cache ca-certificates
RUN apk add --no-cache ca-certificates && mkdir -p /data
WORKDIR /app
COPY --from=builder /app/target/release/sentinelmesh-backend .
COPY --from=builder /app/backend/migrations ./migrations
EXPOSE 8080
CMD ["./sentinelmesh-backend"]
+6 -2
View File
@@ -1,9 +1,13 @@
use sqlx::{sqlite::SqlitePoolOptions, SqlitePool};
use sqlx::{sqlite::{SqliteConnectOptions, SqlitePoolOptions}, SqlitePool};
use std::str::FromStr;
pub async fn connect(database_url: &str) -> anyhow::Result<SqlitePool> {
let opts = SqliteConnectOptions::from_str(database_url)?
.create_if_missing(true);
let pool = SqlitePoolOptions::new()
.max_connections(5)
.connect(database_url)
.connect_with(opts)
.await?;
sqlx::migrate!("./migrations").run(&pool).await?;
+2 -2
View File
@@ -1,8 +1,8 @@
services:
backend:
build:
context: ./backend
dockerfile: Dockerfile
context: .
dockerfile: backend/Dockerfile
image: sentinelmesh-backend:latest
container_name: sentinelmesh-backend
ports: