+11
-12
Dockerfile
+11
-12
Dockerfile
···
2
2
3
3
USER root
4
4
5
-
WORKDIR /deno-dir/
6
-
RUN chown -R deno:deno /deno-dir
5
+
# Create and set up directory
6
+
WORKDIR /app
7
+
RUN chown -R deno:deno /app
7
8
8
-
# We don't copy files here anymore - they will be copied at runtime
9
-
# from the read-only mounted volume
9
+
# Copy files at build time
10
+
COPY . /app/
10
11
11
-
# Cache dependencies
12
-
RUN mkdir -p /src
13
-
COPY deno.json /src/
14
-
WORKDIR /src
15
-
RUN deno cache -r deno.json
12
+
# Ensure Deno user has write permissions
13
+
RUN chown -R deno:deno /app
16
14
17
-
# Switch back to deno-dir (our actual runtime directory)
18
-
WORKDIR /deno-dir/
15
+
# Switch to deno user for better security
16
+
USER deno
19
17
20
18
EXPOSE 8000
21
19
22
-
# Command is now handled by docker-compose entrypoint
20
+
# Run the application
21
+
CMD ["run", "-A", "main.ts"]
+4
-16
docker-compose.yml
+4
-16
docker-compose.yml
···
2
2
services:
3
3
deno-app:
4
4
build: .
5
-
# Copy files from . to deno-code volume on start
6
-
entrypoint: >
7
-
sh -c "
8
-
echo 'Copying files from /src to /deno-dir...' &&
9
-
cp -R /src/. /deno-dir/ &&
10
-
echo 'Files copied. Contents of /deno-dir:' &&
11
-
ls -la /deno-dir/ &&
12
-
echo 'Running application...' &&
13
-
deno run -A /deno-dir/main.ts
14
-
"
15
-
# Mount source code as read-only at different path for copying
5
+
# Use named volume for persistent data
16
6
volumes:
17
-
- .:/src:ro
18
-
- deno-code:/deno-dir
7
+
- deno_data:/app/data
19
8
ports:
20
9
- "8001:8000"
21
10
environment:
22
11
- DENO_ENV=production
23
12
24
13
volumes:
25
-
deno-code:
26
-
# This ensures the volume is recreated each time
27
-
name: "deno-code-${COMPOSE_PROJECT_NAME:-default}"
14
+
deno_data:
15
+
name: "deno_data"