Repository navigation
Installation
This page explains the setup options that exist in the repository today and which one to pick.
| Goal | Recommended path |
|---|---|
| Run Egroo locally for the first time | Manual .NET plus PostgreSQL setup |
| Contribute to the codebase | Manual setup plus the Development Setup guide |
| Run only the backend in containers | src/Egroo.Server/docker-compose.yaml |
| Deploy prebuilt web and API images into an existing Docker environment | docker-compose-egroo.yml |
For most newcomers, start with the manual path.
git clone https://github.com/jihadkhawaja/Egroo.git
cd EgrooCREATE DATABASE egroo_local;
CREATE USER egroo_local_user WITH PASSWORD 'change-me';
GRANT ALL PRIVILEGES ON DATABASE egroo_local TO egroo_local_user;Edit src/Egroo.Server/appsettings.Development.json.
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=5432;User Id=egroo_local_user;Password=change-me;Database=egroo_local;"
},
"Secrets": {
"Jwt": "development-jwt-secret-at-least-32-characters"
},
"Encryption": {
"Key": "12345678901234567890123456789012",
"IV": "1234567890123456"
}
}dotnet build src/Egroo.slnx --configuration DebugTerminal 1:
dotnet watch --project src/Egroo.Server/Egroo.Server.csprojTerminal 2:
dotnet watch --project src/Egroo/Egroo/Egroo.csproj- Web app:
http://localhost:5068 - API Swagger:
http://localhost:5175/swagger
After sign-in, the client can publish a device encryption key for end-to-end encrypted message delivery. If you clear browser storage later, regenerate the device key from the app settings on that device.
The repository includes src/Egroo.Server/docker-compose.yaml, which starts:
- PostgreSQL
- the API container built from
src/Egroo.Server/Dockerfile
Run it from src/Egroo.Server:
docker compose up --buildNotes:
- this compose file is centered on the API, not the full end-user stack
- it exposes the API on
http://localhost:5175 - it uses a development-style PostgreSQL setup and should be reviewed before using it outside local experiments
The root docker-compose-egroo.yml uses:
jihadkhawaja/egroo-server-prod:latestjihadkhawaja/egroo-client-prod:latest
Important caveats:
- it does not provision PostgreSQL
- it assumes an external Docker network named
internal - it is better suited to an environment where networking, reverse proxying, and persistent configuration are already managed
If you use it:
- Create the external network:
docker network create internal-
Make sure the required application configuration is provided to the containers.
-
Start the stack:
docker compose -f docker-compose-egroo.yml up -dFrom the repository root:
docker build -f src/Egroo.Server/Dockerfile -t egroo-server .
docker build -f src/Egroo/Egroo/Dockerfile -t egroo-web .This is useful when you want local images without pulling from a registry.
Your setup is ready when all of these are true:
- PostgreSQL is reachable with the connection string you configured.
-
http://localhost:5175/swaggeropens in development. -
http://localhost:5068loads the UI. - You can sign up and sign in.
- You can send a message successfully after sign-in.
- Continue with Configuration to understand every setting.
- Continue with Development Setup if you plan to change code.
- Continue with Deployment if you are preparing a hosted environment.