The documented flow started web (with Solid Queue in Puma) before the databases existed, and required manually creating the 389ds back-end and seeding the LDAP directory and databases. Automate it: - add an ldap-init one-shot service that creates the 389ds back-end if it does not exist - add a web entrypoint that seeds LDAP and the databases on first start, and runs db:prepare on later boots - update README and AGENTS accordingly, including the reset steps
Akkounts
This app allows Kosmos/LDAP users to manage their accounts, including credentials, invites, donations, etc..
Development
Quick Start
The easiest way to get a working development setup is using Docker Compose like so:
- Make sure Docker Compose is installed and Docker is running (included in Docker Desktop)
- Run
docker compose up --buildand wait until all services have started (389ds might take an extra minute to be ready). This will take a while when running for the first time, so you might want to do something else in the meantime.
On the first start, the ldap-init service creates the 389ds back-end, and the
web container then seeds the LDAP directory and the databases automatically.
On every start, web also applies any pending database migrations.
After these steps, you should have a working Rails app with a handful of test users running on http://localhost:3000. Log in with username "admin" and password "admin is admin". All users listed on http://localhost:3000/admin/users have the password "user is user".
Rails app
Note: when using Docker Compose, prefix the following commands with docker-compose run web.
Installing dependencies:
bundle install
bun install
Migrating the local database (after schema changes):
bundle exec rails db:migrate
Running the dev server, and auto-building CSS files on change (automatic with Docker Compose):
bin/dev
Running the background workers (requires Redis) (automatic with Docker Compose):
bundle exec sidekiq -C config/sidekiq.yml
Running the test suite:
bundle exec rspec
Running the test suite with Docker Compose requires overriding the Rails environment:
docker-compose exec -e "RAILS_ENV=test" web rspec
Docker Compose
Services/containers are configured in docker-compose.yml.
You can run services selectively, for example if you want to run the Rails app
and test suite on the host machine. Just add the service names of the
containers you want to run to the up command, like so:
docker-compose up ldap redis
LDAP server
On first start, the ldap-init service creates the dirsrv back-end
automatically, and the web container then seeds it with development entries.
To do either step manually (for example, after changing the setup), run:
docker compose exec ldap dsconf localhost backend create --suffix="dc=kosmos,dc=org" --be-name="dev"
docker compose run --rm web bin/rails ldap:setup
The setup task will first delete any existing entries in the directory tree ("dc=kosmos,dc=org"), and then create our development entries.
Note that all 389ds data is stored in the 389ds-data volume. So if you want
to start over with a fresh installation, delete both that volume as well as the
container.
To reset the development environment completely, remove all volumes plus the generated database files and the first-run marker, then start over:
docker compose down -v
rm -f db/*.sqlite3 tmp/.setup-complete
docker compose up --build
Minio / remoteStorage
If you want to run remoteStorage accounts locally, you will have to create the
respective bucket first. With the minio container running (run by default
when using Docker Compose), follow these steps:
docker compose up web redis minio liquor-cabinet- Head to http://localhost:9001 and log in with user
minioadmin, passwordminioadmin - Create a new bucket called
remotestorage(or whatever you change theS3_BUCKETconfig to) - Create a new key with ID "dev-key" and secret "123456789" (or whatever you
change
S3_ACCESS_KEYandS3_SECRET_KEYto). Leave the policy field empty, as it will automatically allow access to the bucket you created.
Adding npm modules to use with Stimulus controllers
The following command downloads the specified npm module to vendor/javascript
and adds an entry for it to config/importmap.rb.
bin/importmap pin bech32 --download
Solargraph
Solargraph is a Ruby language server, which you may use with your editor to add features like auto-completion and syntax validation. You can add inline documentation for bundled gems with this command:
bundle exec yard gems