# bewCloud [](https://github.com/bewcloud/bewcloud/actions?workflow=Run+Tests) This is the [bewCloud app](https://bewcloud.com) built using [Fresh](https://fresh.deno.dev) and deployed using [docker compose](https://docs.docker.com/compose/). If you're looking for the desktop sync app, it's at [`bewcloud-desktop`](https://github.com/bewcloud/bewcloud-desktop). If you're looking for the mobile app, it's at [`bewcloud-mobile`](https://github.com/bewcloud/bewcloud-mobile). ## Self-host it! [](https://cloud.digitalocean.com/apps/new?repo=https://github.com/bewcloud/bewcloud) [](https://render.com/deploy?repo=https://github.com/bewcloud/bewcloud) [-51a4fb?style=for-the-badge)](https://buy.stripe.com/eVa01HgQk0Ap0eseVz) [-51a4fb?style=for-the-badge)](https://buy.stripe.com/fZu8wOb5RfIydj56FA1gs0J) Or on your own machine, start with these commands: ```sh $ mkdir data-files data-radicale # local directories for storing user-uploaded files and radicale data $ sudo chown -R 1993:1993 data-files # solves permission-related issues in the container with uploading files ``` > [!NOTE] > `1993:1993` below comes from deno's [docker image](https://github.com/denoland/deno_docker/blob/2abfe921484bdc79d11c7187a9d7b59537457c31/ubuntu.dockerfile#L20-L22) where `1993` is the default user id in it. It might change in the future since I don't control it. Now, download/copy the following configuration files (and tweak their contents as necessary, though no changes should yield a working — but very unsafe — setup): - [`docker-compose.yml`](/docker-compose.yml) - [`.env.sample`](/.env.sample) and save it as `.env` - [`bewcloud.config.sample.ts`](/bewcloud.config.sample.ts) and save it as `bewcloud.config.ts` - [`radicale-config/config`](/radicale-config/config) and save it as `radicale-config/config` (if you're using CalDav/CardDav/Contacts) Finally, run these commands: ```sh $ docker compose up -d # makes the app available at http://localhost:8000 $ docker compose run --rm website bash -c "cd /app && make migrate-db" # initializes/updates the database (only needs to be executed the first time and on any data updates) ``` If you're interested in building/contributing, check the [Development section below](#development). > [!IMPORTANT] > Even with signups disabled (`config.auth.allowSignups=false`), the first signup will work and become an admin. ## Sponsors These are the amazing entities or individuals who are sponsoring this project for this current month. If you'd like to show up here, [check the GitHub Sponsors page](https://github.com/sponsors/bewcloud) or [make a donation](https://donate.stripe.com/bIYeWBbw00Ape5iaFi) above $50 ($100 to show up on the website)!
## Development ### Requirements > [!IMPORTANT] > Don't forget to set up your `.env` file based on `.env.sample`. > Don't forget to set up your `bewcloud.config.ts` file based on `bewcloud.config.sample.ts`. - This was tested with [`Deno`](https://deno.land)'s version stated in the `.dvmrc` file, though other versions may work. - For the postgres dependency (used when running locally or in CI), you should have `Docker` and `docker compose` installed. ### Commands ```sh $ docker compose -f docker-compose.dev.yml up # (optional) runs docker with postgres, locally $ make migrate-db # runs any missing database migrations $ make start # runs the app $ make format # formats the code $ make test # runs tests ``` ### Other less-used commands ```sh $ make exec-db # runs psql inside the postgres container, useful for running direct development queries like `DROP DATABASE "bewcloud"; CREATE DATABASE "bewcloud";` $ make build # generates all static files for production deploy ``` ## Structure - Routes defined at `routes/`. - Static files are defined at `static/`. - Frontend-only components are defined at `components/`. - Isomorphic components are defined at `islands/`. - Cron jobs are defined at `crons/`. - Reusable bits of code are defined at `lib/`. - Database migrations are defined at `db-migrations/`. ## Deployment Just push to the `main` branch. ## How does Contacts/CardDav and Calendar/CalDav work? CalDav/CardDav is now available since [v2.3.0](https://github.com/bewcloud/bewcloud/releases/tag/v2.3.0), using [Radicale](https://radicale.org/v3.html) via Docker, which is already _very_ efficient (and battle-tested). The client for CardDav is available since [v2.4.0](https://github.com/bewcloud/bewcloud/releases/tag/v2.3.0) and for CalDav is not yet implemented. [Check this tag/release for custom-made server and clients where it was all mostly working, except for many edge cases](https://github.com/bewcloud/bewcloud/releases/tag/v0.0.1-self-made-carddav-caldav). In order to share a calendar, you can either have a shared user, or you can symlink the calendar to the user's own calendar (simply `ln -s /