add some dagster files
This commit is contained in:
20
dagster/Dockerfile.code
Executable file
20
dagster/Dockerfile.code
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
# Checkout and install dagster libraries needed to run the gRPC server
|
||||||
|
# exposing your repository to dagit and dagster-daemon, and to load the DagsterInstance
|
||||||
|
|
||||||
|
COPY dagster-requirements.txt requirements.txt
|
||||||
|
RUN pip install uv
|
||||||
|
RUN uv pip install -r requirements.txt --system
|
||||||
|
RUN uv pip install polars-lts-cpu --system
|
||||||
|
|
||||||
|
# Add repository code
|
||||||
|
WORKDIR /opt/dagster/home
|
||||||
|
|
||||||
|
# Run dagster gRPC server on port 4000
|
||||||
|
EXPOSE 4000
|
||||||
|
|
||||||
|
# CMD allows this to be overridden from run launchers or executors that want
|
||||||
|
# to run other commands against your repository
|
||||||
|
#CMD ["dagster", "api", "grpc", "-h", "0.0.0.0", "-p", "4000", "-f", "repo.py"]
|
||||||
|
CMD ["dagster", "code-server", "start", "-h", "0.0.0.0", "-p", "4000", "-f", "repo.py"]
|
||||||
18
dagster/Dockerfile.system
Executable file
18
dagster/Dockerfile.system
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
# Dagster libraries to run both dagit and the dagster-daemon. Does not
|
||||||
|
# need to have access to any pipeline code.
|
||||||
|
|
||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
COPY dagster-requirements.txt requirements.txt
|
||||||
|
RUN pip install uv
|
||||||
|
RUN uv pip install -r requirements.txt --system
|
||||||
|
RUN uv pip install polars-lts-cpu --system
|
||||||
|
|
||||||
|
# Set $DAGSTER_HOME and copy dagster instance and workspace YAML there
|
||||||
|
ENV DAGSTER_HOME=/opt/dagster/home/
|
||||||
|
|
||||||
|
RUN mkdir -p $DAGSTER_HOME
|
||||||
|
|
||||||
|
COPY dagster.yaml workspace.yaml $DAGSTER_HOME
|
||||||
|
|
||||||
|
WORKDIR $DAGSTER_HOME
|
||||||
69
dagster/dagster.yaml
Normal file
69
dagster/dagster.yaml
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
telemetry:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
default_op_concurrency_limit: 2
|
||||||
|
|
||||||
|
run_coordinator:
|
||||||
|
module: dagster.core.run_coordinator
|
||||||
|
class: QueuedRunCoordinator
|
||||||
|
|
||||||
|
run_launcher:
|
||||||
|
module: dagster_docker
|
||||||
|
class: DockerRunLauncher
|
||||||
|
config:
|
||||||
|
env_vars:
|
||||||
|
- DAGSTER_POSTGRES_USER
|
||||||
|
- DAGSTER_POSTGRES_PASSWORD
|
||||||
|
- DAGSTER_POSTGRES_DB
|
||||||
|
network: dagster
|
||||||
|
container_kwargs:
|
||||||
|
volumes:
|
||||||
|
- /opt/dagster/src/app/:/opt/dagster/home/app/
|
||||||
|
- /opt/dagster/src/repo.py:/opt/dagster/home/repo.py
|
||||||
|
|
||||||
|
# - /opt/dagster/storage/:/opt/dagster/home/storage/
|
||||||
|
- /opt/dagster/storage/import/:/opt/dagster/home/storage/import/
|
||||||
|
- /opt/dagster/storage/deals/:/opt/dagster/home/storage/deals/
|
||||||
|
|
||||||
|
run_storage:
|
||||||
|
module: dagster_postgres.run_storage
|
||||||
|
class: PostgresRunStorage
|
||||||
|
config:
|
||||||
|
postgres_db:
|
||||||
|
hostname: postgresql
|
||||||
|
username:
|
||||||
|
env: DAGSTER_POSTGRES_USER
|
||||||
|
password:
|
||||||
|
env: DAGSTER_POSTGRES_PASSWORD
|
||||||
|
db_name:
|
||||||
|
env: DAGSTER_POSTGRES_DB
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
schedule_storage:
|
||||||
|
module: dagster_postgres.schedule_storage
|
||||||
|
class: PostgresScheduleStorage
|
||||||
|
config:
|
||||||
|
postgres_db:
|
||||||
|
hostname: postgresql
|
||||||
|
username:
|
||||||
|
env: DAGSTER_POSTGRES_USER
|
||||||
|
password:
|
||||||
|
env: DAGSTER_POSTGRES_PASSWORD
|
||||||
|
db_name:
|
||||||
|
env: DAGSTER_POSTGRES_DB
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
event_log_storage:
|
||||||
|
module: dagster_postgres.event_log
|
||||||
|
class: PostgresEventLogStorage
|
||||||
|
config:
|
||||||
|
postgres_db:
|
||||||
|
hostname: postgresql
|
||||||
|
username:
|
||||||
|
env: DAGSTER_POSTGRES_USER
|
||||||
|
password:
|
||||||
|
env: DAGSTER_POSTGRES_PASSWORD
|
||||||
|
db_name:
|
||||||
|
env: DAGSTER_POSTGRES_DB
|
||||||
|
port: 5432
|
||||||
47
dagster/docker-compose.code.yaml
Normal file
47
dagster/docker-compose.code.yaml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
x-dagster-env: &dagster_env
|
||||||
|
DAGSTER_POSTGRES_USER: ${POSTGRES_USER}
|
||||||
|
DAGSTER_POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
DAGSTER_POSTGRES_DB: ${POSTGRES_DB}
|
||||||
|
DAGSTER_CURRENT_IMAGE: ${DAGSTER_CURRENT_IMAGE}
|
||||||
|
|
||||||
|
x-volumes: &volumes
|
||||||
|
volumes:
|
||||||
|
#- /opt/dagster/storage/:/opt/dagster/home/storage/
|
||||||
|
- /opt/dagster/storage/import/:/opt/dagster/home/storage/import/
|
||||||
|
- /opt/dagster/storage/deals/:/opt/dagster/home/storage/deals/
|
||||||
|
- /opt/dagster/src/app/:/opt/dagster/home/app/
|
||||||
|
- /opt/dagster/src/repo.py:/opt/dagster/home/repo.py
|
||||||
|
|
||||||
|
services:
|
||||||
|
# This service runs the gRPC server that loads your user code, in both dagit
|
||||||
|
# and dagster-daemon. By setting DAGSTER_CURRENT_IMAGE to its own image, we tell the
|
||||||
|
# run launcher to use this same image when launching runs in a new container as well.
|
||||||
|
# Multiple containers like this can be deployed separately - each just needs to run on
|
||||||
|
# its own port, and have its own entry in the workspace.yaml file that's loaded by dagit.
|
||||||
|
user_code:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.code
|
||||||
|
container_name: user_code
|
||||||
|
image: user_code_image
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
<<: *dagster_env
|
||||||
|
<<: *volumes
|
||||||
|
networks:
|
||||||
|
- dagster
|
||||||
|
|
||||||
|
other_image:
|
||||||
|
profiles: [ disabled ]
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: other_image
|
||||||
|
image: user_code_image
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
<<: *dagster_env
|
||||||
|
DAGSTER_CURRENT_IMAGE: something_else
|
||||||
|
<<: *volumes
|
||||||
|
networks:
|
||||||
|
- dagster
|
||||||
90
dagster/docker-compose.system.yaml
Normal file
90
dagster/docker-compose.system.yaml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
x-postgres-env: &postgres_env
|
||||||
|
POSTGRES_USER: ${POSTGRES_USER}
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
POSTGRES_DB: ${POSTGRES_DB}
|
||||||
|
x-aws-env: &aws_env
|
||||||
|
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
|
||||||
|
x-dagster-env: &dagster_env
|
||||||
|
DAGSTER_POSTGRES_USER: ${POSTGRES_USER}
|
||||||
|
DAGSTER_POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
DAGSTER_POSTGRES_DB: ${POSTGRES_DB}
|
||||||
|
DAGSTER_CURRENT_IMAGE: ${DAGSTER_CURRENT_IMAGE}
|
||||||
|
|
||||||
|
x-volumes: &volumes
|
||||||
|
volumes:
|
||||||
|
- /opt/dagster/dagster.yaml:/opt/dagster/home/dagster.yaml
|
||||||
|
- /opt/dagster/workspace.yaml:/opt/dagster/home/workspace.yaml
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
|
#- /opt/dagster/storage/:/opt/dagster/home/storage/
|
||||||
|
- /opt/dagster/storage/import/:/opt/dagster/home/storage/import/
|
||||||
|
- /opt/dagster/storage/deals/:/opt/dagster/home/storage/deals/
|
||||||
|
|
||||||
|
- /opt/dagster/src/app/:/opt/dagster/home/app/
|
||||||
|
- /opt/dagster/src/repo.py:/opt/dagster/home/repo.py
|
||||||
|
# - /opt/homebrew/Caskroom/mambaforge/base/envs:/opt/homebrew/Caskroom/mambaforge/base/envs
|
||||||
|
|
||||||
|
# Towel
|
||||||
|
# - /opt/dagster/src/towel.py:/opt/dagster/home/towel.py
|
||||||
|
# - /Users/rik/Seafile/Code/company/navara/Klanten/Eneco/towel/towel:/opt/dagster/home/app/towel
|
||||||
|
# - /Users/rik/Library/Caches/pypoetry/virtualenvs/towel-V7mtCF2c-py3.9:/venv/towel
|
||||||
|
|
||||||
|
services:
|
||||||
|
# This service runs the postgres DB used by dagster for run storage, schedule storage,
|
||||||
|
# and event log storage.
|
||||||
|
postgresql:
|
||||||
|
image: postgres:11
|
||||||
|
container_name: postgresql
|
||||||
|
environment:
|
||||||
|
<<: *postgres_env
|
||||||
|
networks:
|
||||||
|
- dagster
|
||||||
|
|
||||||
|
# This service runs dagit, which loads your user code from the user code container.
|
||||||
|
# Since our instance uses the QueuedRunCoordinator, any runs submitted from dagit will be put on
|
||||||
|
# a queue and later dequeued and launched by dagster-daemon.
|
||||||
|
dagit:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.system
|
||||||
|
entrypoint:
|
||||||
|
- dagster-webserver
|
||||||
|
- -h
|
||||||
|
- "0.0.0.0"
|
||||||
|
- -p
|
||||||
|
- "3000"
|
||||||
|
- -w
|
||||||
|
- workspace.yaml
|
||||||
|
container_name: dagit
|
||||||
|
expose:
|
||||||
|
- "3000"
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
environment:
|
||||||
|
<<: *dagster_env
|
||||||
|
<<: *volumes
|
||||||
|
networks:
|
||||||
|
- dagster
|
||||||
|
depends_on:
|
||||||
|
- postgresql
|
||||||
|
- user_code
|
||||||
|
|
||||||
|
# This service runs the dagster-daemon process, which is responsible for taking runs
|
||||||
|
# off of the queue and launching them, as well as creating runs from schedules or sensors.
|
||||||
|
daemon:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.system
|
||||||
|
entrypoint:
|
||||||
|
- dagster-daemon
|
||||||
|
- run
|
||||||
|
container_name: daemon
|
||||||
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: [ *dagster_env, *aws_env ]
|
||||||
|
<<: *volumes
|
||||||
|
networks:
|
||||||
|
- dagster
|
||||||
|
depends_on:
|
||||||
|
- postgresql
|
||||||
8
dagster/docker-compose.yaml
Normal file
8
dagster/docker-compose.yaml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
networks:
|
||||||
|
dagster:
|
||||||
|
driver: bridge
|
||||||
|
name: dagster
|
||||||
|
|
||||||
|
include:
|
||||||
|
- docker-compose.system.yaml
|
||||||
|
- docker-compose.code.yaml
|
||||||
75
dagster/pyproject.toml
Executable file
75
dagster/pyproject.toml
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
[project]
|
||||||
|
requires-python = "==3.12"
|
||||||
|
name = "dev"
|
||||||
|
authors = [
|
||||||
|
{ name = "Rik Veenboer", email = "rik.veenboer@gmail.com" }
|
||||||
|
]
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"fastapi",
|
||||||
|
"gitpython",
|
||||||
|
"kubernetes",
|
||||||
|
"matplotlib",
|
||||||
|
"seaborn",
|
||||||
|
"openpyxl",
|
||||||
|
"xlsxwriter",
|
||||||
|
"pandas",
|
||||||
|
"pyarrow",
|
||||||
|
"pydantic[email]",
|
||||||
|
"pydantic-settings",
|
||||||
|
"pyyaml",
|
||||||
|
"requests",
|
||||||
|
"s3fs[boto3]",
|
||||||
|
"structlog",
|
||||||
|
"uvicorn",
|
||||||
|
"duckdb",
|
||||||
|
"geopandas",
|
||||||
|
"lxml",
|
||||||
|
"networkx",
|
||||||
|
"Pint",
|
||||||
|
"Pint-Pandas",
|
||||||
|
"boto3",
|
||||||
|
"influxdb-client",
|
||||||
|
"requests[socks]",
|
||||||
|
"beautifulsoup4",
|
||||||
|
"fastparquet",
|
||||||
|
"icecream"
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
dev = [
|
||||||
|
"black",
|
||||||
|
"isort",
|
||||||
|
"nbstripout",
|
||||||
|
"pip-tools",
|
||||||
|
"pre-commit",
|
||||||
|
"ruff",
|
||||||
|
"mypy"
|
||||||
|
]
|
||||||
|
local = [
|
||||||
|
"ipykernel",
|
||||||
|
"ipywidgets"
|
||||||
|
]
|
||||||
|
dagster = [
|
||||||
|
"dagster",
|
||||||
|
"dagster-graphql",
|
||||||
|
"dagster-postgres",
|
||||||
|
"dagster-docker",
|
||||||
|
"dagster-aws",
|
||||||
|
"dagster-polars",
|
||||||
|
"dagster-duckdb",
|
||||||
|
"dagster-duckdb-pandas",
|
||||||
|
"dagit"
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.poetry]
|
||||||
|
name = "dev"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Rik Veenboer <rik.veenboer@gmail.com>"]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
seven = "^1.0.0"
|
||||||
|
|
||||||
|
[tool.ruff]
|
||||||
|
builtins = ["ic"]
|
||||||
4
dagster/workspace.yaml
Normal file
4
dagster/workspace.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
load_from:
|
||||||
|
- grpc_server:
|
||||||
|
host: user_code
|
||||||
|
port: 4000
|
||||||
Reference in New Issue
Block a user