Skip to content

Commit

Permalink
linux_hierarchy
Browse files Browse the repository at this point in the history
  • Loading branch information
epompeii committed Feb 7, 2024
1 parent ca0cd63 commit 5e2d792
Show file tree
Hide file tree
Showing 20 changed files with 80 additions and 66 deletions.
5 changes: 3 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ services:
ports:
- 61016:61016
volumes:
- "./services/api/data:/usr/bin/bencher/data"
# environment:
- "./services/api/etc:/etc/bencher"
- "./services/api/data:/var/lib/bencher/data"
# environment:
# Set configuration string or file path
# - BENCHER_CONFIG=
# - BENCHER_CONFIG_PATH=
Expand Down
7 changes: 4 additions & 3 deletions docker/docker-compose.amd64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ services:
ports:
- 61016:61016
volumes:
- "../services/api/data:/usr/bin/bencher/data"
- "../services/api/etc:/etc/bencher"
- "../services/api/data:/var/lib/bencher/data"
# environment:
# Set configuration string or filepath
# BENCHER_CONFIG: '{}'
# BENCHER_CONFIG_PATH: /usr/bin/bencher/data/bencher.json
# BENCHER_CONFIG:
# BENCHER_CONFIG_PATH:

bencher_console_compose:
build:
Expand Down
7 changes: 4 additions & 3 deletions docker/docker-compose.arm64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ services:
ports:
- 61016:61016
volumes:
- "../services/api/data:/usr/bin/bencher/data"
- "../services/api/etc:/etc/bencher"
- "../services/api/data:/var/lib/bencher/data"
# environment:
# Set configuration string or filepath
# BENCHER_CONFIG: '{}'
# BENCHER_CONFIG_PATH: /usr/bin/bencher/data/bencher.json
# BENCHER_CONFIG:
# BENCHER_CONFIG_PATH:

bencher_console_compose:
build:
Expand Down
3 changes: 2 additions & 1 deletion services/api/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*bencher.json
*bencher.json
*litestream.yml
51 changes: 29 additions & 22 deletions services/api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,23 @@ RUN apt-get update \
pkg-config libfreetype6-dev libfontconfig1-dev \
# Stipe
ca-certificates
ENV LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

WORKDIR /tmp/mold
ARG MOLD_VERSION
RUN curl -L --retry 10 --silent --show-error https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-$(uname -m)-linux.tar.gz | tar -C /usr/local --strip-components=1 -xzf -
RUN "$(realpath /usr/bin/ld)" != /usr/local/bin/mold && sudo ln -sf /usr/local/bin/mold "$(realpath /usr/bin/ld)"; true

WORKDIR /tmp/litestream
ARG LITESTREAM_VERSION
ARG LITESTREAM_ARCH
ARG LITESTREAM_BIN=litestream-v${LITESTREAM_VERSION}-linux-${LITESTREAM_ARCH}
RUN wget https://github.com/benbjohnson/litestream/releases/download/v${LITESTREAM_VERSION}/${LITESTREAM_BIN}.tar.gz
RUN tar -xzf ${LITESTREAM_BIN}.tar.gz
RUN cp -r /tmp/litestream /usr/bin/litestream

WORKDIR /usr/src/.cargo
WORKDIR /tmp/mold
ARG MOLD_VERSION
RUN curl -L --retry 10 --silent --show-error https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-$(uname -m)-linux.tar.gz | tar -C /usr/local --strip-components=1 -xzf -
RUN "$(realpath /usr/bin/ld)" != /usr/local/bin/mold && sudo ln -sf /usr/local/bin/mold "$(realpath /usr/bin/ld)"; true

WORKDIR /usr/src/bencher/.cargo
COPY .cargo/config.toml config.toml

WORKDIR /usr/src/lib
WORKDIR /usr/src/bencher/lib
COPY lib/bencher_adapter bencher_adapter
COPY lib/bencher_boundary bencher_boundary
COPY lib/bencher_comment bencher_comment
Expand All @@ -41,21 +39,21 @@ COPY lib/bencher_rbac bencher_rbac
COPY lib/bencher_token bencher_token
COPY lib/bencher_valid bencher_valid

WORKDIR /usr/src/plus
WORKDIR /usr/src/bencher/plus
COPY plus/bencher_billing bencher_billing
COPY plus/bencher_bing_index bencher_bing_index
COPY plus/bencher_license bencher_license
COPY plus/bencher_google_index bencher_google_index

WORKDIR /usr/src
WORKDIR /usr/src/bencher
COPY Cargo.toml Cargo.toml
COPY Cargo.lock Cargo.lock
RUN cargo init xtask

WORKDIR /usr/src/services
WORKDIR /usr/src/bencher/services
RUN cargo init cli

WORKDIR /usr/src/services/api
WORKDIR /usr/src/bencher/services/api
COPY services/api/migrations migrations
COPY services/api/src src
COPY services/api/Cargo.toml Cargo.toml
Expand All @@ -64,7 +62,7 @@ COPY services/api/swagger.json swagger.json

RUN cargo build --release

WORKDIR /usr/lib/bencher
WORKDIR /usr/local/bencher-deps
RUN cp /usr/lib/$(uname -m)-linux-gnu/libexpat.so.1 libexpat.so.1
RUN cp /usr/lib/$(uname -m)-linux-gnu/libfontconfig.so.1 libfontconfig.so.1
RUN cp /usr/lib/$(uname -m)-linux-gnu/libfreetype.so.6 libfreetype.so.6
Expand All @@ -73,20 +71,29 @@ RUN cp /usr/lib/$(uname -m)-linux-gnu/libbrotlicommon.so.1 libbrotlicommon.so.1
RUN cp /usr/lib/$(uname -m)-linux-gnu/libbrotlidec.so.1 libbrotlidec.so.1
RUN cp /usr/lib/$(uname -m)-linux-gnu/libz.so.1 libz.so.1

WORKDIR /usr/bin/bencher
RUN cp /usr/src/target/release/api api
RUN mkdir -p /usr/bin/bencher/data
WORKDIR /usr/lib/bencher
RUN cp /usr/src/bencher/target/release/api api
WORKDIR /var/lib/bencher/data

# https://github.com/GoogleContainerTools/distroless/blob/main/cc/README.md
FROM gcr.io/distroless/cc-debian12
COPY --from=builder /tmp/litestream/litestream /usr/bin/litestream

COPY --from=builder /etc/fonts /etc/fonts
COPY --from=builder /usr/include/fontconfig /usr/include/fontconfig
COPY --from=builder /usr/lib/bencher /usr/lib
COPY --from=builder /usr/local/bencher-deps /usr/lib
COPY --from=builder /usr/share/fonts /usr/share/fonts

COPY --from=builder /usr/bin/litestream/litestream /usr/bin/litestream
COPY --from=builder /usr/bin/bencher /usr/bin/bencher
# Executable
COPY --from=builder /usr/lib/bencher /usr/lib/bencher
# Configuration
VOLUME /etc/bencher
# Database
COPY --from=builder /var/lib/bencher/data /var/lib/bencher/data
VOLUME /var/lib/bencher
# Logs
VOLUME /var/log/bencher

ENV PORT 61016
EXPOSE 61016

CMD ["/usr/bin/bencher/api"]
CMD ["/usr/lib/bencher/api"]
3 changes: 3 additions & 0 deletions services/api/etc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*

!.gitignore
2 changes: 1 addition & 1 deletion services/api/fly/fly.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ image = "registry.fly.io/bencher-api"

[[mounts]]
source = "bencher_data_machines"
destination = "/usr/bin/bencher/data"
destination = "/var/lib/bencher/data"
processes = ["app"]

[[services]]
Expand Down
5 changes: 4 additions & 1 deletion services/api/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@ pub const API_NAME: &str = "Bencher API";
pub const BENCHER_CONFIG: &str = "BENCHER_CONFIG";
pub const BENCHER_CONFIG_PATH: &str = "BENCHER_CONFIG_PATH";

#[cfg(debug_assertions)]
const DEFAULT_CONFIG_PATH: &str = "bencher.json";
#[cfg(not(debug_assertions))]
const DEFAULT_CONFIG_PATH: &str = "/etc/bencher/bencher.json";
const DEFAULT_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));

// 1 megabyte or 1_048_576 bytes
const DEFAULT_MAX_BODY_SIZE: usize = 2 << 19;
#[cfg(debug_assertions)]
const DEFAULT_DB_PATH: &str = "data/bencher.db";
#[cfg(not(debug_assertions))]
const DEFAULT_DB_PATH: &str = "/usr/bin/bencher/data/bencher.db";
const DEFAULT_DB_PATH: &str = "/var/lib/bencher/data/bencher.db";
const DEFAULT_SMTP_PORT: u16 = 587;

#[cfg(debug_assertions)]
Expand Down
11 changes: 5 additions & 6 deletions services/api/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#[cfg(feature = "sentry")]
use std::path::{Path, PathBuf};
use std::path::PathBuf;

use bencher_api::{
config::{config_tx::ConfigTx, Config},
Expand Down Expand Up @@ -179,11 +179,10 @@ fn run_litestream(
.map_err(LitestreamError::Database)?
.join(&config.database.file)
};
// The Litestream config file is always in the same directory as the database
let config_path = db_path
.parent()
.map_or(PathBuf::from("/"), Path::to_path_buf)
.join("litestream.yml");
#[cfg(debug_assertions)]
let config_path = PathBuf::from("litestream.yml");
#[cfg(not(debug_assertions))]
let config_path = PathBuf::from("/etc/litestream.yml");
let yaml = litestream
.into_yaml(db_path.clone(), config.logging.log.level())
.map_err(LitestreamError::Yaml)?;
Expand Down
32 changes: 15 additions & 17 deletions services/console/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ FROM rust:1.75.0-bookworm as wasm-builder

RUN curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

WORKDIR /usr/src/lib
WORKDIR /usr/src/bencher/lib
RUN cargo init --lib bencher_adapter
RUN cargo init --lib bencher_boundary
RUN cargo init --lib bencher_comment
Expand All @@ -15,33 +15,33 @@ RUN cargo init --lib bencher_rbac
RUN cargo init --lib bencher_token
COPY lib/bencher_valid bencher_valid

WORKDIR /usr/src/plus
WORKDIR /usr/src/bencher/plus
RUN cargo init --lib bencher_billing
RUN cargo init --lib bencher_bing_index
RUN cargo init --lib bencher_license
RUN cargo init --lib bencher_google_index

WORKDIR /usr/src
WORKDIR /usr/src/bencher
COPY Cargo.toml Cargo.toml
COPY Cargo.lock Cargo.lock
RUN cargo init xtask

WORKDIR /usr/src/services
WORKDIR /usr/src/bencher/services
RUN cargo init api
RUN cargo init cli

WORKDIR /usr/src/services/console
WORKDIR /usr/src/bencher/services/console
COPY services/console/build_wasm.sh build_wasm.sh
RUN chmod +x build_wasm.sh
RUN ./build_wasm.sh

# https://hub.docker.com/_/node
FROM node:20.11.0-bookworm as builder
COPY services/api/swagger.json /usr/src/services/api/swagger.json
COPY services/cli/templates/output /usr/src/services/cli/templates/output
COPY --from=wasm-builder /usr/src/lib/bencher_valid/pkg /usr/src/lib/bencher_valid/pkg
COPY services/api/swagger.json /usr/src/bencher/services/api/swagger.json
COPY services/cli/templates/output /usr/src/bencher/services/cli/templates/output
COPY --from=wasm-builder /usr/src/bencher/lib/bencher_valid/pkg /usr/src/bencher/lib/bencher_valid/pkg

WORKDIR /usr/src/services/console
WORKDIR /usr/src/bencher/services/console
COPY services/console/package-lock.json package-lock.json
COPY services/console/package.json package.json

Expand All @@ -58,24 +58,22 @@ RUN npm run node

# https://hub.docker.com/_/node
FROM node:20.11.0-bookworm as packager
COPY --from=builder /usr/src/services/console/dist /usr/src/services/console/dist
COPY --from=builder /usr/src/services/console/package-lock.json /usr/src/services/console/package-lock.json
COPY --from=builder /usr/src/services/console/package.json /usr/src/services/console/package.json
COPY --from=builder /usr/src/bencher/services/console/dist /usr/src/bencher/services/console/dist
COPY --from=builder /usr/src/bencher/services/console/package-lock.json /usr/src/bencher/services/console/package-lock.json
COPY --from=builder /usr/src/bencher/services/console/package.json /usr/src/bencher/services/console/package.json

WORKDIR /usr/src/services/console
WORKDIR /usr/src/bencher/services/console
# https://github.com/withastro/astro/issues/7247#issuecomment-1576200139
# https://github.com/GoogleContainerTools/distroless/blob/main/examples/nodejs/Dockerfile
RUN npm ci --omit=dev

# https://github.com/GoogleContainerTools/distroless/tree/main/nodejs
FROM gcr.io/distroless/nodejs20-debian12
COPY --from=packager /usr/src/services/console /usr/bin/bencher

WORKDIR /usr/bin/bencher
COPY --from=packager /usr/src/bencher/services/console /usr/src/bencher

ENV HOST=0.0.0.0
ENV PORT=3000
ENV BENCHER_API_URL=http://localhost:61016
EXPOSE 3000

CMD ["/usr/bin/bencher/dist/server/entry.mjs"]
CMD ["/usr/src/bencher/dist/server/entry.mjs"]
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Dieser Abschnitt basiert auf der [Dropshot Logging Konfiguration](https://github

| Name | Beispiel | Standard | Erforderlich | Beschreibung |
| :--------------------------: | :---------------------------------------------------------------------------: | :--------------------------------: | :------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| file | "pfad/zu/database.db" | "/usr/bin/bencher/data/bencher.db" | Ja | Legt fest, wo die Serverdatenbank hingehen soll. |
| file | "pfad/zu/database.db" | "/var/lib/bencher/data/bencher.db" | Ja | Legt fest, wo die Serverdatenbank hingehen soll. |
| data_store.service | "aws_s3" | --- | Nein | Gibt den entfernten Datenspeicherdienst an. Gültige Werte sind "aws_s3". |
| data_store.access_key_id | "ABC123DoRemMiABC123" | --- | Nur wenn data_store.service = "aws_s3" | Wenn data_store.service "aws_s3" ist, gibt diese Eigenschaft die AWS-Zugangsschlüssel-ID an. Siehe auch data_store.service. |
| data_store.secret_access_key | "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7" | --- | Nur wenn data_store.service = "aws_s3" | Wenn data_store.service "aws_s3" ist, gibt diese Eigenschaft den AWS geheimen Zugangsschlüssel an. Siehe auch data_store.service. Im Protokoll erscheint es als `************`. |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This section is based on the [Dropshot logging configuration](https://github.com

| Name | Example | Default | Required | Description |
| :--------------------------: | :---------------------------------------------------------------------------: | :--------------------------------: | :-----------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| file | "path/to/database.db" | "/usr/bin/bencher/data/bencher.db" | Yes | Controls where server database will go. |
| file | "path/to/database.db" | "/var/lib/bencher/data/bencher.db" | Yes | Controls where server database will go. |
| data_store.service | "aws_s3" | --- | No | Specifies the remote data store service. Valid values are "aws_s3". |
| data_store.access_key_id | "ABC123DoRemMiABC123" | --- | Only if data_store.service = "aws_s3" | If data_store.service = "aws_s3", this property specifies the AWS access key ID. See also data_store.service. |
| data_store.secret_access_key | "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7" | --- | Only if data_store.service = "aws_s3" | If data_store.service = "aws_s3", this property specifies the AWS secret access key. See also data_store.service. Whenever logged, it will appear obfuscated as `************`. |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Esta sección se basa en la [configuración de registro de Dropshot](https://git

| Nombre | Ejemplo | Default | Requerido | Descripción |
| :--------------------------: | :--------------------------------------------------------------------------------------------: | :--------------------------------: | :-----------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| file | "ruta/hacia/database.db" | "/usr/bin/bencher/data/bencher.db" || Controla hacia donde irá la base de datos del servidor. |
| file | "ruta/hacia/database.db" | "/var/lib/bencher/data/bencher.db" || Controla hacia donde irá la base de datos del servidor. |
| data_store.service | "aws_s3" | --- | No | Especifica el servicio de almacenamiento de datos remoto. Los valores válidos son "aws_s3". |
| data_store.access_key_id | "ABC123DoRemMiABC123" | --- | Solo si data_store.service = "aws_s3" | Si data_store.service = "aws_s3", esta propiedad especifica el ID de clave de acceso de AWS. Ver también data_store.service. |
| data_store.secret_access_key | "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7" | --- | Solo si data_store.service = "aws_s3" | Si data_store.service = "aws_s3", esta propiedad especifica la clave de acceso secreta de AWS. Ver también data_store.service. Cuando se registra, aparecerá ofuscado como `************`. |
Expand Down
Loading

0 comments on commit 5e2d792

Please sign in to comment.