Skip to content

Commit c53a9f0

Browse files
committed
fxx
1 parent 95cb760 commit c53a9f0

File tree

2 files changed

+94
-135
lines changed

2 files changed

+94
-135
lines changed

Dockerfile

+72-120
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,72 @@
1-
#!/bin/bash
2-
3-
# Enable error checking and debugging
4-
set -e # Exit on any error
5-
set -x # Print each command before executing
6-
7-
# Log startup for debugging
8-
echo "Starting initialization script..."
9-
10-
# Check if directory exists first and show current permissions
11-
echo "Checking current state..."
12-
ls -la /mnt || true
13-
ls -la /mnt/stateful_partition || true
14-
15-
# Try creating base directory first
16-
echo "Creating base directory..."
17-
if ! sudo mkdir -p /mnt/stateful_partition; then
18-
echo "Failed to create /mnt/stateful_partition"
19-
# Try to identify the issue
20-
df -h
21-
mount | grep /mnt
22-
ls -la /mnt
23-
exit 1
24-
fi
25-
26-
# Try alternative locations if stateful_partition isn't working
27-
if [ ! -d "/mnt/stateful_partition" ]; then
28-
echo "Using alternative directory /var/lib/qi-agents"
29-
sudo mkdir -p /var/lib/qi-agents || {
30-
echo "Failed to create alternative directory"
31-
exit 1
32-
}
33-
AGENT_DATA_DIR="/var/lib/qi-agents"
34-
else
35-
AGENT_DATA_DIR="/mnt/stateful_partition/qi-agents"
36-
# Create qi-agents directory
37-
sudo mkdir -p "$AGENT_DATA_DIR" || {
38-
echo "Failed to create qi-agents directory"
39-
exit 1
40-
}
41-
fi
42-
43-
# Create data directory
44-
echo "Creating data directory in $AGENT_DATA_DIR..."
45-
sudo mkdir -p "$AGENT_DATA_DIR/data" || {
46-
echo "Failed to create data directory"
47-
exit 1
48-
}
49-
50-
# Set permissions with verbose output
51-
echo "Setting directory permissions..."
52-
sudo chmod -Rv 777 "$AGENT_DATA_DIR" || {
53-
echo "Failed to set permissions"
54-
exit 1
55-
}
56-
57-
# Verify directory structure and permissions
58-
echo "Verifying directory structure..."
59-
ls -la "$AGENT_DATA_DIR"
60-
ls -la "$AGENT_DATA_DIR/data"
61-
62-
# Pull latest image with verification
63-
echo "Pulling latest image..."
64-
if ! docker pull us-central1-docker.pkg.dev/${PROJECT_ID}/${FULL_NAME}:${version}; then
65-
echo "Failed to pull image"
66-
exit 1
67-
fi
68-
69-
# Get secrets from Secret Manager
70-
echo "Fetching secrets..."
71-
SMALL_GOOGLE_MODEL=$(gcloud secrets versions access latest --secret="small-google-model") || {
72-
echo "Failed to fetch small-google-model secret"
73-
exit 1
74-
}
75-
MEDIUM_GOOGLE_MODEL=$(gcloud secrets versions access latest --secret="medium-google-model") || {
76-
echo "Failed to fetch medium-google-model secret"
77-
exit 1
78-
}
79-
GOOGLE_GENERATIVE_AI_API_KEY=$(gcloud secrets versions access latest --secret="google-generative-ai-key") || {
80-
echo "Failed to fetch google-generative-ai-key secret"
81-
exit 1
82-
}
83-
84-
# Debug existing environment variables
85-
echo "Debug: Checking existing environment variables:"
86-
echo "AGENTS_BUCKET_NAME from environment: ${AGENTS_BUCKET_NAME}"
87-
echo "CHARACTER_FILE from environment: ${CHARACTER_FILE}"
88-
89-
# Run container with persistent storage and restart policy
90-
echo "Starting container with environment variables..."
91-
docker run -d \
92-
--name ${FULL_NAME} \
93-
--restart=always \
94-
-v "$AGENT_DATA_DIR/data":/app/agent/data \
95-
-e AGENTS_BUCKET_NAME="${AGENTS_BUCKET_NAME}" \
96-
-e CHARACTER_FILE="${CHARACTER_FILE}" \
97-
-e SMALL_GOOGLE_MODEL="${SMALL_GOOGLE_MODEL}" \
98-
-e MEDIUM_GOOGLE_MODEL="${MEDIUM_GOOGLE_MODEL}" \
99-
-e GOOGLE_GENERATIVE_AI_API_KEY="${GOOGLE_GENERATIVE_AI_API_KEY}" \
100-
-e PORT="8080" \
101-
-e SERVER_PORT="8080" \
102-
us-central1-docker.pkg.dev/${PROJECT_ID}/${FULL_NAME}:${version}
103-
104-
# Verify container is running and check logs
105-
echo "Checking container status and logs..."
106-
sleep 5 # Give container a moment to start
107-
if ! docker ps | grep ${FULL_NAME}; then
108-
echo "Container failed to start. Checking logs:"
109-
docker logs ${FULL_NAME}
110-
exit 1
111-
fi
112-
113-
# Show container logs and verify environment variables
114-
echo "Container environment variables:"
115-
docker exec ${FULL_NAME} env | grep -E 'AGENTS_BUCKET_NAME|CHARACTER_FILE'
116-
117-
echo "Initial container logs:"
118-
docker logs ${FULL_NAME}
119-
120-
echo "Startup script completed successfully"
1+
# Use Node.js 23.3.0 as specified in package.json
2+
FROM node:23.3.0-slim AS builder
3+
4+
# Install pnpm globally and install necessary build tools
5+
RUN npm install -g pnpm@9.4.0 && \
6+
apt-get update && \
7+
apt-get install -y git python3 make g++ && \
8+
apt-get clean && \
9+
rm -rf /var/lib/apt/lists/*
10+
11+
# Set Python 3 as the default python
12+
RUN ln -s /usr/bin/python3 /usr/bin/python
13+
14+
# Set the working directory
15+
WORKDIR /app
16+
17+
# Copy all workspace files first
18+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc turbo.json ./
19+
COPY packages ./packages
20+
COPY agent ./agent
21+
COPY scripts ./scripts
22+
23+
# Install dependencies and build the project
24+
RUN pnpm install && \
25+
pnpm build-docker && \
26+
pnpm prune --prod
27+
28+
# Create a new stage for the final image
29+
FROM node:23.3.0-slim
30+
31+
# Install runtime dependencies and Google Cloud SDK
32+
RUN npm install -g pnpm@9.4.0 && \
33+
apt-get update && \
34+
apt-get install -y git python3 curl gnupg && \
35+
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
36+
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
37+
apt-get update && \
38+
apt-get install -y google-cloud-sdk && \
39+
apt-get clean && \
40+
rm -rf /var/lib/apt/lists/*
41+
42+
WORKDIR /app
43+
44+
# Copy built artifacts and production dependencies from the builder stage
45+
COPY --from=builder /app/package.json ./
46+
COPY --from=builder /app/pnpm-workspace.yaml ./
47+
COPY --from=builder /app/.npmrc ./
48+
COPY --from=builder /app/turbo.json ./
49+
COPY --from=builder /app/node_modules ./node_modules
50+
COPY --from=builder /app/agent ./agent
51+
COPY --from=builder /app/packages ./packages
52+
COPY --from=builder /app/scripts ./scripts
53+
54+
# Create characters directory
55+
RUN mkdir -p characters
56+
57+
# Add debugging and error handling to startup command
58+
CMD sh -c '\
59+
echo "Debug: Starting container" && \
60+
echo "Debug: AGENTS_BUCKET_NAME=${AGENTS_BUCKET_NAME}" && \
61+
echo "Debug: CHARACTER_FILE=${CHARACTER_FILE}" && \
62+
echo "Debug: Full GCS path=gs://${AGENTS_BUCKET_NAME}/${CHARACTER_FILE}" && \
63+
if [ -z "${AGENTS_BUCKET_NAME}" ]; then \
64+
echo "Error: AGENTS_BUCKET_NAME is empty" && exit 1; \
65+
fi && \
66+
if [ -z "${CHARACTER_FILE}" ]; then \
67+
echo "Error: CHARACTER_FILE is empty" && exit 1; \
68+
fi && \
69+
echo "Debug: Attempting to copy character file..." && \
70+
gsutil cp gs://${AGENTS_BUCKET_NAME}/${CHARACTER_FILE} characters/${CHARACTER_FILE} && \
71+
echo "Debug: Starting application..." && \
72+
pnpm start --non-interactive --characters=characters/${CHARACTER_FILE}'

startup.sh

+22-15
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,14 @@ echo "Verifying directory structure..."
5959
ls -la "$AGENT_DATA_DIR"
6060
ls -la "$AGENT_DATA_DIR/data"
6161

62-
# Get secrets from Secret Manager with error checking
62+
# Pull latest image with verification
63+
echo "Pulling latest image..."
64+
if ! docker pull us-central1-docker.pkg.dev/${PROJECT_ID}/${FULL_NAME}:${version}; then
65+
echo "Failed to pull image"
66+
exit 1
67+
fi
68+
69+
# Get secrets from Secret Manager
6370
echo "Fetching secrets..."
6471
AGENTS_BUCKET_NAME=$(gcloud secrets versions access latest --secret="agents-bucket-name") || {
6572
echo "Failed to fetch agents-bucket-name secret"
@@ -78,25 +85,22 @@ GOOGLE_GENERATIVE_AI_API_KEY=$(gcloud secrets versions access latest --secret="g
7885
exit 1
7986
}
8087

81-
# Debug environment variables
82-
echo "Debug: Environment variables:"
83-
echo "AGENTS_BUCKET_NAME: ${AGENTS_BUCKET_NAME:-not set}"
84-
echo "CHARACTER_FILE: ${CHARACTER_FILE:-not set}"
85-
echo "SMALL_GOOGLE_MODEL: ${SMALL_GOOGLE_MODEL:0:5}... (truncated)"
86-
echo "MEDIUM_GOOGLE_MODEL: ${MEDIUM_GOOGLE_MODEL:0:5}... (truncated)"
87-
echo "GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY:0:5}... (truncated)"
88+
# Debug existing environment variables
89+
echo "Debug: Checking existing environment variables:"
90+
echo "AGENTS_BUCKET_NAME from environment: ${AGENTS_BUCKET_NAME}"
91+
echo "CHARACTER_FILE from environment: ${CHARACTER_FILE}"
8892

8993
# Run container with persistent storage and restart policy
90-
echo "Starting container..."
94+
echo "Starting container with environment variables..."
9195
docker run -d \
9296
--name ${FULL_NAME} \
9397
--restart=always \
9498
-v "$AGENT_DATA_DIR/data":/app/agent/data \
95-
-e AGENTS_BUCKET_NAME="${AGENTS_BUCKET_NAME:?'AGENTS_BUCKET_NAME not set'}" \
96-
-e CHARACTER_FILE="${CHARACTER_FILE:?'CHARACTER_FILE not set'}" \
97-
-e SMALL_GOOGLE_MODEL="${SMALL_GOOGLE_MODEL:?'SMALL_GOOGLE_MODEL not set'}" \
98-
-e MEDIUM_GOOGLE_MODEL="${MEDIUM_GOOGLE_MODEL:?'MEDIUM_GOOGLE_MODEL not set'}" \
99-
-e GOOGLE_GENERATIVE_AI_API_KEY="${GOOGLE_GENERATIVE_AI_API_KEY:?'GOOGLE_GENERATIVE_AI_API_KEY not set'}" \
99+
-e AGENTS_BUCKET_NAME="${AGENTS_BUCKET_NAME}" \
100+
-e CHARACTER_FILE="${CHARACTER_FILE}" \
101+
-e SMALL_GOOGLE_MODEL="${SMALL_GOOGLE_MODEL}" \
102+
-e MEDIUM_GOOGLE_MODEL="${MEDIUM_GOOGLE_MODEL}" \
103+
-e GOOGLE_GENERATIVE_AI_API_KEY="${GOOGLE_GENERATIVE_AI_API_KEY}" \
100104
-e PORT="8080" \
101105
-e SERVER_PORT="8080" \
102106
us-central1-docker.pkg.dev/${PROJECT_ID}/${FULL_NAME}:${version}
@@ -110,7 +114,10 @@ if ! docker ps | grep ${FULL_NAME}; then
110114
exit 1
111115
fi
112116

113-
# Show container logs
117+
# Show container logs and verify environment variables
118+
echo "Container environment variables:"
119+
docker exec ${FULL_NAME} env | grep -E 'AGENTS_BUCKET_NAME|CHARACTER_FILE'
120+
114121
echo "Initial container logs:"
115122
docker logs ${FULL_NAME}
116123

0 commit comments

Comments
 (0)