sqlx
This commit is contained in:
49
Dockerfile
Normal file
49
Dockerfile
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
# ---- Frontend build (Vite + React, pnpm) ----
|
||||||
|
FROM node:20-alpine AS frontend-build
|
||||||
|
WORKDIR /app/frontend
|
||||||
|
|
||||||
|
# Enable pnpm via Corepack
|
||||||
|
RUN corepack enable
|
||||||
|
|
||||||
|
# Install deps (cache-friendly)
|
||||||
|
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# Build
|
||||||
|
COPY frontend/ ./
|
||||||
|
RUN pnpm build
|
||||||
|
|
||||||
|
# ---- Backend build (Rust + Actix) ----
|
||||||
|
FROM rust:1.92-bookworm AS backend-build
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Cache Rust deps
|
||||||
|
COPY Cargo.toml Cargo.lock ./
|
||||||
|
COPY src ./src
|
||||||
|
COPY scp_core ./scp_core
|
||||||
|
|
||||||
|
# If you have a workspace / extra crates, copy them too (adjust):
|
||||||
|
# COPY crates ./crates
|
||||||
|
|
||||||
|
RUN cargo build --release
|
||||||
|
|
||||||
|
# ---- Runtime image ----
|
||||||
|
FROM debian:bookworm-slim AS runtime
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends ca-certificates \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Adjust binary name
|
||||||
|
COPY --from=backend-build /app/target/release/myapp /app/myapp
|
||||||
|
|
||||||
|
# Match your Actix static path: ./frontend/dist
|
||||||
|
COPY --from=frontend-build /app/frontend/dist /app/frontend/dist
|
||||||
|
|
||||||
|
ENV RUST_LOG=info
|
||||||
|
ENV HOST=0.0.0.0
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["/app/myapp"]
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import logo from "../logo.svg";
|
|
||||||
|
|
||||||
export const Route = createFileRoute("/")({
|
export const Route = createFileRoute("/")({
|
||||||
component: App,
|
component: App,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
} from "@/components/ui/table";
|
} from "@/components/ui/table";
|
||||||
import type { MinimalServers } from "@/models/minimal_servers";
|
import type { MinimalServers } from "@/models/minimal_servers";
|
||||||
import { useQuery } from "@tanstack/react-query";
|
import { useQuery } from "@tanstack/react-query";
|
||||||
import { createFileRoute, Link, useNavigate } from "@tanstack/react-router";
|
import { createFileRoute, useNavigate } from "@tanstack/react-router";
|
||||||
|
|
||||||
export const Route = createFileRoute("/server_list")({
|
export const Route = createFileRoute("/server_list")({
|
||||||
component: RouteComponent,
|
component: RouteComponent,
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.parse::<u16>()
|
.parse::<u16>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let host = env::var("HOST").unwrap_or_else(|_| "127.0.0.1".to_string());
|
||||||
|
|
||||||
db::migrate().await.expect("Error migrating!");
|
db::migrate().await.expect("Error migrating!");
|
||||||
|
|
||||||
let rt_handle = tokio::runtime::Handle::current();
|
let rt_handle = tokio::runtime::Handle::current();
|
||||||
@@ -61,7 +63,7 @@ async fn main() -> std::io::Result<()> {
|
|||||||
)
|
)
|
||||||
.default_service(web::route().to(spa_fallback))
|
.default_service(web::route().to(spa_fallback))
|
||||||
})
|
})
|
||||||
.bind(("127.0.0.1", port))?
|
.bind((host, port))?
|
||||||
.run()
|
.run()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user