Setting Up a Database for Local Development in Akash Console: 3 Proven Methods
Akash Console supports three interchangeable PostgreSQL setups for local development: letting Docker Compose automatically provision and seed a sandbox database, connecting to an existing local PostgreSQL instance via the --no-db flag, or manually restoring from a production backup dump.
Setting up a database for local development in Akash Console requires configuring PostgreSQL to support the API, indexer, and web applications. The akash-network/console repository provides flexible infrastructure-as-code configurations that accommodate different development workflows, from fully containerized environments to external database connections.
Option 1: Let Docker Compose Spin Up PostgreSQL Automatically
The default development mode uses Docker Compose to create a fully configured PostgreSQL container with pre-seeded sandbox data.
How the Automated Docker DB Works
When you run the development command, the dc.sh helper script processes docker-compose.dev.yml and starts a db service. The container executes packages/docker/script/prepare-and-seed-postgres.sh, which:
- Creates databases listed in the
POSTGRES_DBSenvironment variable - Imports the sandbox backup unless
POSTGRES_SKIP_IMPORT=trueis set - Configures schemas required by the API and indexer
The credentials and database names are sourced from packages/docker/.env.sandbox.docker-compose-dev, which defines variables like POSTGRES_USER, POSTGRES_PASSWORD, and POSTGRES_DBS_FOR_IMPORT.
Starting the Development Environment
Use the helper script or npm shortcuts to launch all services including the database:
# Using the dc.sh helper script
./dc.sh up:dev
# Or using the npm shortcut
npm run dc:up:dev
This command blocks until the database is ready and seeded, making it the fastest way for new developers to obtain a working sandbox environment.
Option 2: Connect to a Local PostgreSQL Instance (No-DB Mode)
For developers who prefer to run PostgreSQL natively or need to connect to an existing server, Akash Console supports a "no-db" mode that excludes the Docker database container.
Configuring the Connection
Start the services with the --no-db flag or set SKIP_DC_DB=true to remove the db service from the compose graph:
# Using the helper script with the no-db flag
./dc.sh up:dev --no-db
# Or using the npm shortcut that sets the environment variable
npm run console:dev:no-db
In this mode, the API, indexer, and other services expect to find a PostgreSQL instance at a host-accessible address.
Environment Variables Setup
Create an apps/api/env/.env.local file (or modify your loaded environment) to provide connection strings:
# Primary user database
POSTGRES_DB_URI=postgres://postgres:password@localhost:5432/console-users
# Chain indexer database (sandbox or mainnet)
CHAIN_INDEXER_POSTGRES_DB_URI=postgres://postgres:password@localhost:5432/console-akash-sandbox
The application code in apps/api/src/core/providers/postgres.provider.ts consumes these variables via the Zod-validated configuration in env.config.ts, instantiating the postgres client with the provided URI.
Option 3: Restore From a Production Backup
When you need a specific data snapshot—such as the latest mainnet state—or want to persist data outside Docker containers, you can manually restore from public database dumps.
Downloading and Importing Backups
The repository provides public backup URLs documented in the top-level README.md. Download and restore a backup using standard PostgreSQL tools:
# Download the sandbox backup
curl -O https://storage.googleapis.com/console-postgresql-backups/console-akash-sandbox.sql.gz
# Restore into a local database named "console-akash"
gunzip -c console-akash-sandbox.sql.gz | \
psql --host localhost --port 5432 --username postgres --dbname console-akash
After restoration, configure the services to use this database by setting POSTGRES_DB_URI (and related variables) to point to the restored database, following the same pattern as Option 2.
How Database Configuration Works Under the Hood
Understanding the internal wiring helps troubleshoot connection issues and customize setups.
The dc.sh script located in packages/docker/ acts as the primary entry point. It processes the --no-db flag to conditionally include or exclude the db service from docker-compose.dev.yml【1†L14-L20】.
When the Docker database starts, it executes packages/docker/script/prepare-and-seed-postgres.sh. This shell script reads POSTGRES_DBS (a comma-separated list) to create databases, then checks POSTGRES_DBS_FOR_IMPORT to determine which backups to import unless POSTGRES_SKIP_IMPORT is set to true【3†L3-L35】.
At runtime, the API server loads database configuration through apps/api/src/core/providers/postgres.provider.ts, which validates environment variables like POSTGRES_DB_URI using Zod schemas defined in the configuration layer【4†L13-L30】. This provider instantiates the postgres client that the indexer and API services use to execute queries.
Summary
- Docker-managed database: Run
./dc.sh up:devfor the fastest setup with automatic seeding viaprepare-and-seed-postgres.shandpackages/docker/.env.sandbox.docker-compose-dev. - External PostgreSQL: Use
./dc.sh up:dev --no-dbornpm run console:dev:no-dbwithPOSTGRES_DB_URIconfigured inapps/api/env/.env.localto connect to a native PostgreSQL installation. - Backup restoration: Download public dumps from Google Cloud Storage and restore with
gunzip | psql, then point services to the restored database using standard environment variables.
Frequently Asked Questions
Can I use MySQL or another database instead of PostgreSQL?
No. The Akash Console codebase is tightly coupled to PostgreSQL. The postgres client is hardcoded in apps/api/src/core/providers/postgres.provider.ts, and SQL migrations use PostgreSQL-specific syntax. You must use PostgreSQL version 14 or higher for compatibility with the schema definitions.
How do I reset the database to a clean state?
When using the Docker-managed option, run ./dc.sh down:dev to remove all containers and volumes, then ./dc.sh up:dev again. This re-runs prepare-and-seed-postgres.sh and re-imports the sandbox backup. For external databases, drop and recreate the databases manually, or restore from a fresh backup dump.
Where are the database backups stored and how current are they?
Public backups are hosted on Google Cloud Storage at storage.googleapis.com/console-postgresql-backups/. The repository typically provides console-akash-sandbox.sql.gz and console-akash-mainnet.sql.gz. According to the README.md, these dumps are generated periodically from production snapshots, though you should check the repository's latest documentation for the exact refresh schedule.
Do I need to run migrations manually when using the Docker setup?
No. When using the Docker-managed database, the prepare-and-seed-postgres.sh script handles schema creation and data seeding automatically when the container starts. The API and indexer services will connect to an already-initialized database. However, if you switch to an external database (Option 2), you may need to ensure migrations run depending on how your specific service version handles schema initialization.
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 →