Configuration Requirements for Deploying CodeWiki: Complete Setup Guide
Deploying CodeWiki requires Python 3.9+, three mandatory API keys (GitHub, Gemini, and Google), and environment variables configured in a .env file before starting the FastAPI server with Uvicorn.
CodeWiki is a FastAPI-based backend service that generates AI-driven system diagrams and wikis from GitHub repositories. To deploy it successfully, you must configure runtime dependencies, environment variables, and static configuration constants. This guide covers the complete configuration requirements for deploying CodeWiki based on the source code in quangdungluong/codewiki.
Runtime Environment Requirements
CodeWiki requires Python 3.9 or higher and several Python packages defined throughout the import statements in the codebase.
Required Dependencies
The following packages must be installed (as referenced in api/main.py, api/stream_chat.py, and utils/repository_structure.py):
- FastAPI – Web framework
- Uvicorn – ASGI server
- httpx – Async HTTP client
- requests – Synchronous HTTP client
- python-dotenv – Environment variable loading
- pydantic – Data validation
Installation Commands
# Clone the repository
git clone https://github.com/quangdungluong/codewiki.git
cd codewiki
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install fastapi uvicorn httpx requests python-dotenv pydantic
Environment Variables Configuration
CodeWiki requires specific environment variables defined in a .env file at the project root. The python-dotenv loader is called in api/main.py (lines 9-11) to load these variables.
Mandatory API Keys
| Variable | Purpose | Source File Reference |
|---|---|---|
GITHUB_API_KEY |
Token for accessing private GitHub repositories | Used in utils/repository_structure.py |
GEMINI_API_KEY |
Google Gemini model key for AI content generation | Read in api/services/gemini_service.py (line 13) |
GOOGLE_API_KEY |
Google AI key for the chat streaming endpoint | Read in api/stream_chat.py (line 14) |
Server Configuration
PORT– Port on which the FastAPI server listens (default:8001). Defined inapi/main.py(line 17).
Sample .env File
# .env - Local development configuration
GITHUB_API_KEY=ghp_YourPersonalAccessTokenHere
GEMINI_API_KEY=AIzaSyYourGeminiApiKeyHere
GOOGLE_API_KEY=AIzaSyYourGoogleApiKeyHere
PORT=8001
Note: The .env file is automatically excluded from repository processing (see config.py lines 63-66) to prevent accidental exposure of secrets.
Static Configuration
Beyond environment variables, CodeWiki uses static configuration files for internal behavior.
Target Server URL
The TARGET_SERVER_BASE_URL constant in utils/constants.py (line 4) defines the base URL that internal components use to call the API. Default value:
# utils/constants.py
TARGET_SERVER_BASE_URL = "http://localhost:8001"
Change this if running behind a reverse proxy or on a different host:
TARGET_SERVER_BASE_URL = "https://wiki.mycompany.com"
File Exclusion Lists
The config.py file defines default exclusions for repository scanning to avoid processing unnecessary files:
DEFAULT_EXCLUDED_DIRS– Directories to ignore (e.g.,.git,node_modules,__pycache__)DEFAULT_EXCLUDED_FILES– File patterns to skip (e.g.,package-lock.json,.env)
These are defined in config.py (lines 4-66) and used by the RepositoryStructureFetcher class in utils/repository_structure.py.
Starting the Server
Once configuration is complete, start the FastAPI application using Uvicorn.
Basic Startup Command
uvicorn api.main:app --host 0.0.0.0 --port 8001 --workers 2
The entry point api/main.py invokes uvicorn.run("api.api:app", ...) after loading environment variables (lines 11-19).
Docker Deployment Example
docker run -d \
-p 8001:8001 \
-v "$(pwd)/.cache:/app/.cache" \
-v "$(pwd)/.env:/app/.env:ro" \
--name codewiki \
python:3.11-slim bash -c "\
pip install fastapi uvicorn httpx requests python-dotenv pydantic && \
uvicorn api.main:app --host 0.0.0.0 --port \${PORT:-8001} --workers 2"
Volume mounts explained:
./.cache– Persists wiki and diagram caches across container restarts./.env– Read-only mount for environment configuration
Production Considerations
For production deployments of CodeWiki, implement the following optimizations:
Process Management
Use Gunicorn with Uvicorn workers instead of running Uvicorn directly:
gunicorn api.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8001
TLS Termination
Place CodeWiki behind an HTTPS-terminating reverse proxy (NGINX, Traefik, or Caddy). Update TARGET_SERVER_BASE_URL in utils/constants.py to reflect the public HTTPS address.
Scaling Characteristics
The codebase uses httpx.AsyncClient for asynchronous GitHub API calls and implements limited concurrency for page generation. Additional worker processes can be added to handle more simultaneous requests, but monitor the Google Gemini API rate limits.
Cache Persistence
Wiki and diagram caches are stored in:
./.cache/wiki_cache./.cache/diagram_cache
As defined in utils/constants.py (lines 6-9). Mount these to persistent volumes in containerized environments to avoid regenerating content after restarts.
Logging
All modules emit structured logs via utils/logger.py. Forward stdout and stderr to your centralized logging system (ELK, Loki, or CloudWatch).
Summary
Deploying CodeWiki requires careful attention to three configuration layers:
- Runtime Environment: Python 3.9+ with FastAPI, Uvicorn, and HTTP client libraries installed
- Environment Variables: Mandatory API keys for GitHub (
GITHUB_API_KEY), Gemini (GEMINI_API_KEY), and Google (GOOGLE_API_KEY), plus optionalPORTconfiguration - Static Configuration:
TARGET_SERVER_BASE_URLinutils/constants.pyfor internal routing, and exclusion lists inconfig.pyfor repository scanning
Once configured, start the service with uvicorn api.main:app and verify health via the /api/language_config endpoint.
Frequently Asked Questions
What happens if I don't set the GEMINI_API_KEY environment variable?
The application will fail to initialize the Gemini service wrapper in api/services/gemini_service.py (line 13), causing AI-driven wiki generation and diagram creation to fail. You must provide a valid Google Gemini API key for the core functionality to work.
Can I deploy CodeWiki without a GitHub API key?
You can deploy the service without GITHUB_API_KEY, but you will only be able to process public repositories. The GITHUB_API_KEY is required in utils/repository_structure.py to authenticate against the GitHub API and access private repositories or avoid rate limiting on public ones.
How do I change the default port from 8001?
Set the PORT environment variable in your .env file or export it before starting the server. The value is read in api/main.py (line 17) and passed to the Uvicorn server. Alternatively, override it directly in the Uvicorn command line with --port 8080.
Where are the generated wikis and diagrams cached?
Generated content is stored in ./.cache/wiki_cache and ./.cache/diagram_cache as defined in utils/constants.py (lines 6-9). In production deployments, mount these directories to persistent volumes to ensure cache survival across container restarts.
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 →