2024-10-20 00:55:16 +02:00
|
|
|
Vervis is a **free, open-source federated forge backend server**:
|
|
|
|
|
|
|
|
- A platform for hosting and collaboration on software projects
|
|
|
|
- A reference implementation of the [ForgeFed][] forge federation protocol,
|
|
|
|
which is an extension of ActivityPub, the protocol that drives the Fediverse
|
|
|
|
- A decentralized network in which people on one server can seamlessly
|
|
|
|
collaborate with people from another server, including non-Vervis software
|
|
|
|
that implements ForgeFed
|
|
|
|
- Vervis is still in **pre-alpha phase** and not ready for production use!
|
|
|
|
- Provides a temporary static UI, to be replaced by the [Anvil][] frontend
|
|
|
|
client
|
|
|
|
|
|
|
|
## Navigation
|
|
|
|
|
|
|
|
- [Project on Codeberg][Repo]
|
|
|
|
- Support the development via [Liberapay][] or [OpenCollective][]
|
|
|
|
- [Official Docker image][Image]
|
|
|
|
- Demo instances:
|
|
|
|
- [Fig][]
|
|
|
|
- [Grape][]
|
|
|
|
- [Walnut][]
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
The current focus is the classic core features for collaboration:
|
|
|
|
|
|
|
|
- Repositories
|
|
|
|
- Git
|
|
|
|
- Darcs
|
|
|
|
- Issue tracking
|
|
|
|
- Pull requests
|
|
|
|
- And of course federation! Including, eventually, with other forge projects
|
|
|
|
working on implementing federation, such as [Forgejo][] and [GitLab][]
|
|
|
|
|
|
|
|
## SSH Client Config
|
|
|
|
|
|
|
|
Vervis comes with its own SSH server, which usually requires some configuration
|
|
|
|
to be set in your SSH client, if you'd like to be able to push and pull repos
|
|
|
|
via SSH.
|
|
|
|
|
|
|
|
Add the following to your `~/.ssh/config` file (or create it if it doesn't
|
|
|
|
exist), replacing the Host with your instance's domain:
|
|
|
|
|
|
|
|
```
|
|
|
|
Host fig.fr33domlover.site
|
|
|
|
KexAlgorithms +diffie-hellman-group1-sha1
|
|
|
|
ControlMaster no
|
|
|
|
ForwardAgent no
|
|
|
|
ForwardX11 no
|
|
|
|
Ciphers +aes256-cbc
|
|
|
|
MACs +hmac-sha1
|
|
|
|
PubkeyAcceptedKeyTypes +ssh-rsa
|
|
|
|
HostKeyAlgorithms +ssh-rsa
|
|
|
|
```
|
2018-03-31 16:39:12 +02:00
|
|
|
|
|
|
|
Cloning repositories works over (unauthenticated) HTTPS and (authenticated)
|
|
|
|
SSH.
|
|
|
|
|
|
|
|
**HTTPS clone:**
|
|
|
|
|
2023-05-25 12:54:03 +02:00
|
|
|
$ git clone https://vervis.peers.community/repos/rjQ3E vervis
|
2018-03-31 16:39:12 +02:00
|
|
|
|
|
|
|
**SSH clone and push:**
|
|
|
|
|
|
|
|
If your system username and Vervis username are identical:
|
|
|
|
|
2023-05-25 12:54:03 +02:00
|
|
|
$ git clone vervis.peers.community:rjQ3E vervis
|
2018-03-31 16:39:12 +02:00
|
|
|
|
|
|
|
If usernames are different:
|
|
|
|
|
2023-05-25 12:54:03 +02:00
|
|
|
$ git clone luke@vervis.peers.community:rjQ3E vervis
|
2018-03-31 16:39:12 +02:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
## Deployment
|
2018-03-31 16:39:12 +02:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
### Tech stack
|
2019-05-05 13:15:51 +02:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
- **Haskell** programming language
|
|
|
|
- **Yesod** web framework
|
|
|
|
- **PostgreSQL** database for most data
|
|
|
|
- Some data in **SQLite** databases
|
|
|
|
- The work-in-progress [Anvil][] frontend uses:
|
|
|
|
- **Svelte**
|
|
|
|
- **Skeleton**
|
|
|
|
- **Tauri**
|
|
|
|
|
|
|
|
### Requirements
|
|
|
|
|
|
|
|
- **PostgreSQL** 9.5+
|
|
|
|
|
|
|
|
### Docker
|
|
|
|
|
|
|
|
The repository includes deployment configurations for **Docker and
|
|
|
|
docker-compose**.
|
|
|
|
|
|
|
|
1. Install [Docker][]
|
|
|
|
2. In `create-db.sql`, update the `vervis` DB user's password
|
|
|
|
3. Create and edit `config/settings.yml` based on
|
|
|
|
`config/settings-sample-prod.yml`, remember to set the same DB password here
|
|
|
|
4. In `docker-compose.yml`, update the database superuser password (it's the
|
|
|
|
password for the `postgres` superuser, not `vervis`)
|
|
|
|
5. Create initial state: `./prepare-state.sh`
|
|
|
|
6. Ready for launch! `docker-compose up -d`
|
2019-05-05 13:15:51 +02:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
```shell
|
|
|
|
sudo apt install docker-compose docker.io
|
|
|
|
vim create-db.sql
|
|
|
|
cp config/settings-sample-prod.yml config/settings.yml
|
|
|
|
vim config/settings.yml
|
|
|
|
vim docker-compose.yml
|
|
|
|
./prepare-state.sh
|
|
|
|
docker-compose up -d
|
|
|
|
```
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
### Manual Installation
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
For manual/custom installation steps, see [INSTALL.md](INSTALL.md).
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
## Development
|
2016-01-28 15:15:54 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
To prepare a development environment, follow the instructions in
|
|
|
|
[INSTALL.md](INSTALL.md).
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
## Federation & API
|
|
|
|
|
|
|
|
See `FEDERATION.md` & `API.md`.
|
|
|
|
|
|
|
|
## Contributing
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 01:03:15 +02:00
|
|
|
Vervis is **free, open-source software** licensed under **AGPLv3**.
|
2018-03-31 16:39:12 +02:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
You can open issues for bugs you've found or features you think are missing.
|
|
|
|
You can also submit pull requests to this repository.
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
**Matrix room**: [#general-forgefed:matrix.batsense.net][Matrix]
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
### Finding your way in the codebase
|
2022-09-01 11:13:16 +02:00
|
|
|
|
2022-09-24 11:12:45 +02:00
|
|
|
Folders:
|
|
|
|
|
2022-09-01 11:13:16 +02:00
|
|
|
- `app`:
|
|
|
|
*main* functions of the web app, for regular build and for development modes
|
|
|
|
- `config`:
|
|
|
|
Settings the app reads when it launches, some defined by a human and some
|
|
|
|
auto-generated
|
2023-05-25 12:54:03 +02:00
|
|
|
- `.git`:
|
|
|
|
Internal version control data of this repo
|
2022-09-01 11:13:16 +02:00
|
|
|
- `embed`:
|
|
|
|
Files embedded into the app source code at build time (using TH)
|
|
|
|
- `hook-darcs` & `hook-git`:
|
|
|
|
*main* functions for VCS hook programs to be inserted into every repo hosted
|
|
|
|
by the app
|
|
|
|
- `migrations`:
|
|
|
|
Helper files for DB migrations: New entities added & model files for
|
|
|
|
migrations involving data manipulation
|
|
|
|
- `src`:
|
|
|
|
Web app Haskell source code, built as a library whose modules are used by the
|
|
|
|
various executables
|
|
|
|
- `static`:
|
|
|
|
Static files (such as CSS and fonts) served by the web app (no such files at
|
|
|
|
the moment)
|
|
|
|
- `templates`:
|
|
|
|
UI page and widget templates (`.hamlet` for HTML, `.cassius` for CSS)
|
|
|
|
- `test`:
|
|
|
|
No tests have been written yet
|
|
|
|
- `th`:
|
|
|
|
Domain-specific language snippets, from which code is generated using TH
|
|
|
|
|
2022-09-24 11:12:45 +02:00
|
|
|
Files:
|
|
|
|
|
2023-05-25 12:54:03 +02:00
|
|
|
- `.gitignore`
|
2022-09-24 11:12:45 +02:00
|
|
|
- `th/routes`
|
|
|
|
- `th/models`
|
|
|
|
- `update-deps.sh`
|
|
|
|
- `bindist.sh`
|
|
|
|
|
|
|
|
Haskell modules in `src`:
|
|
|
|
|
|
|
|
- Non-`Vervis` modules:
|
|
|
|
- Modules ending with `Local`:
|
|
|
|
- The rest:
|
|
|
|
- `Vervis.Data`
|
|
|
|
- `Vervis.Persist`
|
|
|
|
- `Vervis.Fetch`
|
2024-05-16 14:19:01 +02:00
|
|
|
- `Vervis.Serve`
|
2022-09-24 11:12:45 +02:00
|
|
|
- `Vervis.Query`
|
|
|
|
- `Vervis.Web`
|
|
|
|
- Primary web app support modules:
|
|
|
|
- `Vervis.Foundation`
|
|
|
|
- `Vervis.Application`
|
|
|
|
- `Vervis.Settings`
|
|
|
|
- `Vervis.Model`
|
|
|
|
- `Vervis.Migration`
|
|
|
|
- Primary web app logic modules:
|
2024-05-16 14:19:01 +02:00
|
|
|
- `Vervis.Actor`
|
2022-09-24 11:12:45 +02:00
|
|
|
- `Vervis.Handler`
|
|
|
|
- `Vervis.Client`
|
|
|
|
- `Vervis.Ssh`
|
|
|
|
|
2024-10-21 13:41:13 +02:00
|
|
|
### Testing the production image
|
|
|
|
|
|
|
|
When Vervis is built in development mode (the flag is set in `stack.yml` and
|
|
|
|
can be overriden when running `stack build`), it works with plain HTTP, but in
|
|
|
|
production mode (e.g. when using the official prebuilt image), it requires
|
|
|
|
HTTPS, a domain, and the standard HTTP(S) ports.
|
|
|
|
|
|
|
|
Instructions for testing a production image, assuming we'll use `dev.example`
|
|
|
|
as the server's domain name:
|
|
|
|
|
|
|
|
1. The usual `./prepare-state.sh` and
|
|
|
|
`cp config/settings-sample-prod.yml config/settings.yml`
|
|
|
|
2. On the host system, edit `/etc/hosts`, adding the line
|
|
|
|
`127.0.0.1 dev.example`
|
|
|
|
3. In `config/settings.yml`, set the domain to `dev.example`
|
|
|
|
4. Run `./create-self-cert.sh` to generate a self-signed certificate for
|
|
|
|
`dev.example`
|
|
|
|
5. In `docker-compose.yml`, uncomment the `nginx` service
|
|
|
|
6. In `nginx.conf`, update the domain to `dev.example` and uncomment the
|
|
|
|
self-signed cert paths
|
|
|
|
7. `docker-compose up`
|
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
## License
|
2016-03-05 04:54:37 +01:00
|
|
|
|
2024-10-20 00:55:16 +02:00
|
|
|
AGPLv3+. See `COPYING`.
|
2024-04-11 15:17:54 +02:00
|
|
|
|
|
|
|
## Funding
|
|
|
|
|
|
|
|
This project is funded through the
|
|
|
|
[NGI Zero Entrust Fund](https://nlnet.nl/entrust), a fund established by
|
|
|
|
[NLnet](https://nlnet.nl) with financial support from the European Commission's
|
|
|
|
[Next Generation Internet](https://ngi.eu) program. Learn more at the
|
|
|
|
[NLnet project page](https://nlnet.nl/project/ForgeFed-RPC).
|
|
|
|
|
|
|
|
[<img src="https://nlnet.nl/logo/banner.png" alt="NLnet foundation logo" width="20%" />](https://nlnet.nl)
|
|
|
|
[<img src="https://nlnet.nl/image/logos/NGI0Entrust_tag.svg" alt="NGI Zero Entrust Logo" width="20%" />](https://nlnet.nl/entrust)
|
2024-10-20 00:55:16 +02:00
|
|
|
|
|
|
|
[Anvil]: https://codeberg.org/Anvil/Anvil
|
|
|
|
[Docker]: https://docs.docker.com
|
|
|
|
[ForgeFed]: https://forgefed.org
|
|
|
|
[Forgejo]: https://forgejo.org
|
|
|
|
[GitLab]: https://gitlab.com
|
|
|
|
[Image]: https://codeberg.org/ForgeFed/Vervis/packages
|
|
|
|
[Liberapay]: https://liberapay.com/ForgeFed
|
|
|
|
[Matrix]: https://matrix.to/#/#general-forgefed:matrix.batsense.net
|
|
|
|
[OpenCollective]: https://opencollective.com/forgefed
|
2024-10-20 00:57:51 +02:00
|
|
|
[Repo]: https://codeberg.org/ForgeFed/Vervis
|
2024-10-20 00:55:16 +02:00
|
|
|
[fig]: https://fig.fr33domlover.site
|
|
|
|
[grape]: https://grape.fr33domlover.site
|
|
|
|
[walnut]: https://walnut.fr33domlover.site
|