How to Run the Docker Setup for Local Development of the AI Website Cloner
You can launch the AI Website Cloner locally by executing docker compose up dev --build for hot-reload development or docker compose up app --build for production testing, with both services defined in docker-compose.yml orchestrating the multi-stage builds specified in Dockerfile and Dockerfile.dev.
The JCodesMore/ai-website-cloner-template repository ships with a complete containerized environment that eliminates the need to install Node.js or other dependencies on your host system. This guide explains how to run the docker setup for local development of the AI website cloner using the provided production and development Dockerfiles alongside the compose orchestration layer.
Understanding the Docker Architecture
The repository provides three container definitions that work together to support both production and development workflows.
Production Multi-Stage Build
The Dockerfile implements a secure, multi-stage build process that minimizes the final image size. The build progresses through three distinct stages:
- Dependencies stage – Installs packages using the lockfile to ensure reproducible builds.
- Builder stage – Executes
npm run buildto compile the Next.js application. - Runner stage – Copies only the compiled assets from
.next/standaloneand thepublicdirectory into a minimal Node.js runtime, then runs as the non-root usernode(see lines 12-14, 76-84, and 91-101 ofDockerfile).
This architecture ensures the production container exposes port 3000 with only the essential files required to serve the application.
Development Image
The Dockerfile.dev uses the lightweight node:24-alpine base image to provide a fast, iterative development environment. Unlike the production build, this configuration:
- Copies
package.jsonandpackage-lock.jsonbefore runningnpm install - Executes
npm run devto enable Next.js hot-reloading - Works in conjunction with the compose file's volume mount (
volumes: - .:/app) to reflect your local code changes instantly without rebuilding the container
The development service maps to port 3001 by default (configurable via the $DEV_PORT environment variable) while the internal Next.js process still listens on port 3000.
Compose Orchestration
The docker-compose.yml file defines two services under the services: key that handle environment injection and health monitoring:
appservice: Builds fromDockerfileand runs the production-optimized server.devservice: Builds fromDockerfile.devwith source code mounted for live editing.- Health checks: Both services use
wgetto pollhttp://localhost:3000/and verify the application is responding. - Environment files: Optionally loads
.env.localand.envfiles if present; the container starts successfully even if these files are absent.
Step-by-Step Setup Guide
Follow these commands to get the AI Website Cloner running locally in your preferred mode.
1. Clone the Repository
First, obtain the source code from the JCodesMore/ai-website-cloner-template repository.
git clone https://github.com/JCodesMore/ai-website-cloner-template.git
cd ai-website-cloner-template
2. Configure Environment Variables (Optional)
Create a .env file in the project root if your implementation requires custom API keys or configuration values. The Docker setup will automatically detect and load .env and .env.local files if they exist.
3. Run the Development Container
For active development with hot-reloading, build and start the dev service.
docker compose up dev --build
This command mounts your current directory into the container at /app, allowing you to edit files on your host system while the Next.js development server watches for changes. Access the application at http://localhost:3001 (or the port specified in $DEV_PORT).
4. Run the Production Container
To test the optimized production build locally, execute:
docker compose up app --build
This builds the multi-stage image and starts the compiled Next.js server on port 3000. Visit http://localhost:3000 to verify the production behavior.
5. Stop and Clean Up
When finished, stop all running containers and remove the associated networks.
docker compose down
Add the -v flag to docker compose down -v if you need to remove named volumes as well.
6. Rebuild After Dependency Changes
If you modify package.json or the lockfile, you must rebuild the image to install the new dependencies.
docker compose up app --build
For code-only changes in development mode, hot-reload handles recompilation automatically without requiring a rebuild.
Key Files Reference
Understanding the role of each Docker configuration file helps troubleshoot issues and customize the environment.
Dockerfile– Defines the multi-stage production build (dependencies → builder → runner) with non-root user security.Dockerfile.dev– Lightweight development configuration usingnode:24-alpineandnpm run devfor hot-reloading.docker-compose.yml– Orchestrates theappanddevservices, manages port mappings (3000 for production, 3001 for development), and configures health checks usingwget.README.md– Contains quick-reference commands for Docker usage (lines 46-52).
Summary
- The JCodesMore/ai-website-cloner-template provides separate Dockerfiles for production (
Dockerfile) and development (Dockerfile.dev) to optimize for security and iteration speed respectively. - Use
docker compose up dev --buildto start a hot-reload development environment on port 3001. - Use
docker compose up app --buildto run the production-optimized build on port 3000. - The
docker-compose.ymlhandles service orchestration, optional environment file injection, and health checks viawget. - Rebuild containers only when dependencies change; code changes in development mode reflect immediately via volume mounts.
Frequently Asked Questions
How do I switch between development and production modes?
Stop any running containers with docker compose down, then start the desired service. Run docker compose up dev --build for development with hot-reloading on port 3001, or docker compose up app --build for the production build on port 3000. Both services can run simultaneously because they bind to different host ports.
Do I need Node.js installed on my local machine?
No. The Docker setup encapsulates the entire Node.js 24 runtime and all dependencies within the containers. You only need Docker and Docker Compose installed. The development container mounts your local source code and handles all JavaScript execution internally.
Why does the development service use port 3001 while the production service uses port 3000?
The docker-compose.yml maps the internal Next.js port 3000 to host port 3000 for the production app service. For the dev service, it maps internal port 3000 to host port 3001 (or $DEV_PORT if set) to prevent conflicts when running both services simultaneously. You can customize this by setting the DEV_PORT environment variable before running the compose command.
How do I persist data or environment variables across container restarts?
Place environment variables in .env or .env.local files in the project root. The docker-compose.yml includes these files in the service definitions, making them available inside the containers. If you modify these files while the container is running, restart the service with docker compose up dev --build (or app) to reload the configuration.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →