Getting Started
Get your Oracle 26ai database with APEX and ORDS running locally in just a few minutes. This guide will walk you through the complete setup process.
Prerequisites
Section titled “Prerequisites”Before you begin, make sure you have the following installed:
- Docker or Podman — both are natively supported. The scripts auto-detect which engine is installed (preferring
dockerif both are present). - Compose — either
docker compose(v2 plugin, or the legacydocker-composev1) or the nativepodman composesubcommand. - SQLcl with “sql” command in PATH
- Bash-compatible shell
Platform-Specific Notes
Section titled “Platform-Specific Notes”macOS Users
Section titled “macOS Users”If you’re using macOS, read the Podman setup guide for additional configuration steps.
Windows Users
Section titled “Windows Users”We recommend using WSL2 (Windows Subsystem for Linux) for the best experience. Follow these guides:
Quick Setup
Section titled “Quick Setup”1. Clone the Repository
Section titled “1. Clone the Repository”git clone https://github.com/United-Codes/uc-local-apex-dev.gitcd uc-local-apex-dev2. Make Scripts Executable
Section titled “2. Make Scripts Executable”chmod +x ./install.sh ./local-26ai.sh ./setup.sh ./scripts/*.sh3. Run the Installer
Section titled “3. Run the Installer”./install.shThe installer does the full bootstrap end-to-end: it generates an .env file with a random SYS password, pulls the images, starts the containers, waits for the database, installs APEX with dev-friendly defaults, and configures ORDS. The whole flow takes roughly 15–20 minutes on a typical machine, mostly waiting on the Oracle DB to come up. When it finishes you’ll see a === Done === banner with the next steps.
What install.sh does in detail
- Checks that a container engine (
dockerorpodman) with a compose command,sql(SQLcl),unzipandcurl/wgetare on yourPATH. - Runs
./setup.shto generate.envwith a random Oracle SYS password (skipped if.envalready exists and contains all required keys). - Pulls the DB + ORDS container images.
- Starts the stack with
<engine> compose up -d. - Waits for the database to be ready (up to 25 min) and for ORDS to finish its first-boot install (up to 15 min).
- Sets the ORDS PL/SQL gateway mode to
proxied(the recommended setting for APEX). - Runs
./scripts/after-first-db-start.shnon-interactively — installs APEX, applies dev-friendly defaults (disables archive logs, relaxes APEX password rules), and sets the APEXINTERNAL/ADMINpassword to the sameORACLE_PASSWORDvalue from.env. - Restarts the ORDS container so it picks up the new APEX module + config change, and waits for it to come back.
4. Log into APEX
Section titled “4. Log into APEX”Visit http://localhost:8181/ords/apex and log in to the INTERNAL workspace with user ADMIN and the ORACLE_PASSWORD value from the generated .env file.
If you get an “Account Is Locked” message:
./scripts/unexpire-accounts.shIf you don’t want APEX to force you to change passwords:
./scripts/disable-password-expiration.shOptionally set up local SSL/HTTPS for ORDS, or save disk space by removing the apex install folder:
rm -rf ./apex5. PATH Configuration
Section titled “5. PATH Configuration”For easier script access, add the repository to your PATH:
# Add to ~/.zshrc or ~/.bashrcexport PATH="/Users/username/path/to/uc-local-apex-dev:$PATH"Then use scripts from anywhere:
local-26ai.sh create-user newprojectlocal-26ai.sh backup-alllocal-26ai.sh stopNext Steps
Section titled “Next Steps”Now that your environment is running:
- Create your first workspace:
local-26ai.sh create-user myproject— see Creating Users - See everything this project can do: check the Command Reference or run
local-26ai.sh --help - Start developing your APEX applications
Access Your Environment
Section titled “Access Your Environment”Once setup is complete, you can access:
- APEX: http://localhost:8181/ords/apex
- ORDS Landing: http://localhost:8181/ords/\_/landing
- Database: localhost:1521 (Service: FREEPDB1)
Default APEX Credentials
Section titled “Default APEX Credentials”- INTERNAL workspace:
ADMIN/ value ofORACLE_PASSWORDin.env - Your own workspaces (created with
create-user):ADMINor the schema name /Welcome_1
The database schema password is different from the APEX login: it’s the generated <NAME>_USER_PASSWORD value in .env.