Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 111 additions & 76 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ KB_DEPLOY_NAME := coze-loop
KB_CHART_PATH :=./release/deployment/helm-chart/charts
KB_UMBRELLA_PATH :=./release/deployment/helm-chart/umbrella

DOCKER_COMPOSE_DIR := ./release/deployment/docker-compose
#demo-mini:
# kubectl -n ingress-nginx patch svc ingress-nginx-controller -p '{"spec":{"type":"LoadBalancer"}}' service/ingress-nginx-controller patched \
# kubectl -n ingress-nginx get svc ingress-nginx-controller -w # 夯住
Expand Down Expand Up @@ -89,6 +90,116 @@ kb-up-%:
kb-clean:
helm list -n $(KB_NAMESPACE) -q | xargs -r -n1 helm uninstall -n $(KB_NAMESPACE)

compose%:
@case "$*" in \
-up) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
up ;; \
-down) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down ;; \
-down-v) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down -v ;; \
-up-dev) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-dev.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
up --build ;; \
-down-dev) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-dev.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down ;; \
-down-v-dev) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-dev.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down -v ;; \
-up-debug) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-debug.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
up --build ;; \
-down-debug) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-debug.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down ;; \
-down-v-debug) \
docker compose \
-f $(DOCKER_COMPOSE_DIR)/docker-compose.yml \
-f $(DOCKER_COMPOSE_DIR)/docker-compose-debug.yml \
--env-file $(DOCKER_COMPOSE_DIR)/.env \
--profile "*" \
down -v ;; \
-help|*) \
echo "Usage:"; \
echo " make compose-up # up base"; \
echo " make compose-down # down base"; \
echo " make compose-down-v # down base + volumes"; \
echo " make compose-up-dev # up base + dev (build)"; \
echo " make compose-down-dev # down base + dev"; \
echo " make compose-down-v-dev # down base + dev + volumes"; \
echo " make compose-up-debug # up base + debug (build)"; \
echo " make compose-down-debug # down base + debug"; \
echo " make compose-down-v-debug # down base + debug + volumes"; \
echo; \
echo "Notes:"; \
echo " - '--profile \"*\"' is only meaningful for 'up'; it's not required for 'down'."; \
echo " - When you used multiple -f files for 'up', run 'down' with the same -f set."; \
exit 1 ;; \
esac

debug:
docker compose \
-f ./release/deployment/docker-compose/docker-compose.yml \
-f ./release/deployment/docker-compose/debug/docker-compose.yml \
--env-file ./release/deployment/docker-compose/.env \
--profile "*" \
up --build

debug-app:
docker compose \
-f ./release/deployment/docker-compose/docker-compose.yml \
-f ./release/deployment/docker-compose/debug/remote/docker-compose.yml \
--env-file ./release/deployment/docker-compose/.env \
--profile "app" \
up

debug-compose:
docker compose \
-f ./release/deployment/docker-compose/docker-compose.yml \
-f ./release/deployment/docker-compose/debug/remote/docker-compose.yml \
--profile "*" \
config

debug-down-v:
docker compose \
-f ./release/deployment/docker-compose/docker-compose.yml \
-f ./release/deployment/docker-compose/debug/docker-compose.yml \
--profile "*" \
down -v

up:
docker compose -f ./release/deployment/docker-compose/docker-compose.yml --env-file ./release/deployment/docker-compose/.env --profile "*" up

Expand Down Expand Up @@ -162,79 +273,3 @@ clean-all:
@echo "Pruning builder and system..."
@docker builder prune -a -f
@docker system prune -a --volumes -f

build_server:
@echo "Building image..."
@bash $(BUILD_SERVER_SCRIPT)

sync_db:
@echo "Syncing database..."
@docker compose -f $(COMPOSE_FILE) --env-file $(ENV_FILE) --profile mysql-setup up -d

dump_db: dump_sql_schema
@echo "Dumping database..."
@bash $(DUMP_DB_SCRIPT)

sql_init:
@echo "Init sql data..."
@docker compose -f $(COMPOSE_FILE) --env-file $(ENV_FILE) --profile mysql-setup up -d

middleware:
@echo "Start middleware docker environment for opencoze app"
@docker compose -f $(COMPOSE_FILE) --env-file $(ENV_FILE) --profile middleware up -d --wait


web:
@echo "Start web server in docker"
@docker compose -f $(COMPOSE_FILE) --env-file $(ENV_FILE) --profile '*' up -d --wait

#down:
# @echo "Stop all docker containers"
# @docker compose -f $(COMPOSE_FILE) --profile '*' down

clean: down
@echo "Remove docker containers and volumes data"
@rm -rf ./docker/data

python:
@echo "Setting up Python..."
@bash $(SETUP_PYTHON_SCRIPT)

dump_sql_schema:
@echo "Dumping mysql schema to $(MYSQL_SCHEMA)..."
@. $(ENV_FILE); \
{ echo "SET NAMES utf8mb4;\nCREATE DATABASE IF NOT EXISTS opencoze COLLATE utf8mb4_unicode_ci;"; atlas schema inspect -u $$ATLAS_URL --format "{{ sql . }}" --exclude "atlas_schema_revisions,table_*" | sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g'; } > $(MYSQL_SCHEMA)
@sed -I '' -E 's/(\))[[:space:]]+CHARSET utf8mb4/\1 ENGINE=InnoDB CHARSET utf8mb4/' $(MYSQL_SCHEMA)
@echo "Dumping mysql schema to helm/charts/opencoze/files/mysql ..."
@cp $(MYSQL_SCHEMA) ./helm/charts/opencoze/files/mysql/
@cp $(MYSQL_INIT_SQL) ./helm/charts/opencoze/files/mysql/

atlas-hash:
@echo "Rehash atlas migration files..."
@(cd ./docker/atlas && atlas migrate hash)

setup_es_index:
@echo "Setting up Elasticsearch index..."
@bash $(ES_SETUP_SCRIPT) --index-dir $(ES_INDEX_SCHEMA) --docker-host false

help:
@echo "Usage: make [target]"
@echo ""
@echo "Targets:"
@echo " debug - Start the debug environment."
@echo " env - Setup env file."
@echo " fe - Build the frontend."
@echo " server - Build and run the server binary."
@echo " build_server - Build the server binary."
@echo " sync_db - Sync opencoze_latest_schema.hcl to the database."
@echo " dump_db - Dump the database to opencoze_latest_schema.hcl and migrations files."
@echo " sql_init - Init sql data..."
@echo " dump_sql_schema - Dump the database schema to sql file."
@echo " middleware - Setup middlewares docker environment, but exclude the server app."
@echo " web - Setup web docker environment, include middlewares docker."
@echo " down - Stop the docker containers."
@echo " clean - Stop the docker containers and clean volumes."
@echo " python - Setup python environment."
@echo " atlas-hash - Rehash atlas migration files."
@echo " setup_es_index - Setup elasticsearch index."
@echo " help - Show this help message."
1 change: 1 addition & 0 deletions release/deployment/docker-compose/.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ COZE_LOOP_APP_IMAGE_REGISTRY=compose-cn-beijing.cr.volces.com
COZE_LOOP_APP_IMAGE_REPOSITORY=coze
COZE_LOOP_APP_IMAGE_NAME=coze-loop
COZE_LOOP_APP_IMAGE_TAG=latest
COZE_LOOP_APP_DEBUG_PORT=40000

# redis
COZE_LOOP_REDIS_IMAGE_REGISTRY=docker.io
Expand Down
50 changes: 50 additions & 0 deletions release/deployment/docker-compose/docker-compose-debug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
services:
app:
build:
context: ../../..
dockerfile: ./release/image/debug.Dockerfile
image: "coze/coze-loop:debug"
ports:
- "${COZE_LOOP_APP_DEBUG_PORT}:40000"
entrypoint:
- sh
- -c
- |
exec 2>&1
set -e

print_banner() {
msg="$$1"
side=30
content=" $$msg "
content_len=$${#content}
line_len=$$((side * 2 + content_len))

line=$$(printf '*%.0s' $$(seq 1 "$$line_len"))
side_eq=$$(printf '*%.0s' $$(seq 1 "$$side"))

printf "%s\n%s%s%s\n%s\n" "$$line" "$$side_eq" "$$content" "$$side_eq" "$$line"
}

print_banner "Starting..."

export ROCKETMQ_GO_LOG_LEVEL=error

(
while true; do
if sh /coze-loop/bootstrap/healthcheck.sh; then
print_banner "Completed!"
break
else
sleep 1
fi
done
)&

exec dlv \
exec /coze-loop/bin/main \
--headless \
--listen=:40000 \
--api-version=2 \
--accept-multiclient \
--log
7 changes: 7 additions & 0 deletions release/deployment/docker-compose/docker-compose-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
services:

app:
build:
context: ../../..
dockerfile: ./release/image/Dockerfile
image: "coze/coze-loop:dev"
2 changes: 1 addition & 1 deletion release/deployment/docker-compose/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ services:
volumes:
- nginx_data:/coze-loop/resources
- ./bootstrap/app:/coze-loop/bootstrap
- ./bootstrap/app/model_config.yaml:/coze-loop/conf/model_config.yaml
- ./model_config.yaml:/coze-loop/conf/model_config.yaml
depends_on:
redis:
condition: service_healthy
Expand Down
28 changes: 28 additions & 0 deletions release/image/debug.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# golang极简镜像,编译拿到服务端产物
FROM golang:1.24-alpine AS backend_builder

# 1. 安装git(用于下载go mod依赖)
RUN apk add --no-cache git

# 2. 安装dlv(用于调试)
RUN go install "github.com/go-delve/delve/cmd/dlv@v1.25.1"

WORKDIR /coze-loop

# 2. 下载并缓存go mod依赖
COPY ./backend/go.mod ./backend/go.sum /coze-loop/src/backend/
RUN go mod download -C ./src/backend -x

# 3. 编译服务端
COPY ./backend/ /coze-loop/src/backend/
RUN mkdir -p ./bin && \
go -C /coze-loop/src/backend build -gcflags="all=-N -l" -buildvcs=false -o /coze-loop/bin/main "./cmd"

# 最终镜像(coze-loop),极简镜像
FROM compose-cn-beijing.cr.volces.com/coze/coze-loop:latest

WORKDIR /coze-loop

# 抽产物
COPY --from=backend_builder /coze-loop/bin/main /coze-loop/bin/main
COPY --from=backend_builder /go/bin/dlv /usr/local/bin/dlv