diff --git a/.dockerignore b/.dockerignore index abd3761..e00f0ad 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,3 +2,4 @@ Dockerfile compose.yaml target +!target/release/server diff --git a/.github/workflows/push-image.yml b/.github/workflows/push-image.yml new file mode 100644 index 0000000..4cc02f6 --- /dev/null +++ b/.github/workflows/push-image.yml @@ -0,0 +1,46 @@ +name: Create and publish a Docker image + +on: + push: + branches: + - main + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Setup rust + uses: actions-rs/toolchain@v1.0.6 + with: + profile: minimal + toolchain: stable + - name: Checkout repository + uses: actions/checkout@v4 + - name: Build release + run: cargo build --release --bin server + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Build and push Docker image + id: push + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index 341fd20..a9d37c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -graph.db3 target -Cargo.lock \ No newline at end of file +Cargo.lock diff --git a/Dockerfile b/Dockerfile index 4201299..d8ad0eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,10 @@ -FROM rust:1.74 as builder -WORKDIR /crates -COPY ./ ./ -RUN --mount=type=cache,target=/usr/local/cargo/git \ - --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,sharing=private,target=/crates/target \ - cargo install --path server - FROM debian:bookworm-slim -RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/* -WORKDIR /server -COPY --from=builder /usr/local/cargo/bin/server . -COPY --from=builder /crates/templates ./templates -COPY --from=builder /crates/graph.db3 . -CMD ["/server/server"] + +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates sqlite3 +RUN update-ca-certificates + +COPY graph.db3 . +COPY templates/ templates/ +COPY target/release/server . + +CMD ["./server"] diff --git a/graph.db3 b/graph.db3 new file mode 100644 index 0000000..f859949 Binary files /dev/null and b/graph.db3 differ diff --git a/server/src/main.rs b/server/src/main.rs index 00b316e..08a7f65 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,6 +1,7 @@ use invoice_detective::{InvoiceDetective, RecipientNode, ServiceKind}; -use rocket::{get, launch, routes}; +use rocket::{get, launch, routes, Config}; use rocket_dyn_templates::{context, Template}; +use std::net::Ipv4Addr; use thousands::Separable; #[get("/")] @@ -75,8 +76,13 @@ fn format_msat(msat: Option) -> String { #[launch] fn rocket() -> _ { - // TODO: Customize template directory. - rocket::build() + let config = Config { + port: 8000, + address: Ipv4Addr::new(0, 0, 0, 0).into(), + log_level: rocket::config::LogLevel::Normal, + ..Config::debug_default() + }; + rocket::custom(&config) .mount("/", routes![index, invoice]) .attach(Template::fairing()) } diff --git a/templates/base.html.tera b/templates/base.html.tera index 5192382..6686d08 100644 --- a/templates/base.html.tera +++ b/templates/base.html.tera @@ -182,7 +182,9 @@