2019-02-26 16:02:39 +00:00
# fediverse.space 🌐
2019-07-18 15:20:09 +00:00
2019-02-20 17:05:25 +00:00
The map of the fediverse that you always wanted.
2019-02-20 16:49:45 +00:00
2019-11-21 20:02:32 +00:00
Read the latest updates on Mastodon: [@fediversespace ](https://mastodon.social/@fediversespace )
2019-07-18 15:20:09 +00:00
2019-02-22 15:56:47 +00:00
![A screenshot of fediverse.space ](screenshot.png )
2019-11-21 20:02:32 +00:00
- [fediverse.space 🌐 ](#fediversespace-%f0%9f%8c%90 )
- [Requirements ](#requirements )
- [Running it ](#running-it )
- [Backend ](#backend )
- [Frontend ](#frontend )
- [Commands ](#commands )
- [Backend ](#backend-1 )
- [Frontend ](#frontend-1 )
- [Privacy ](#privacy )
- [Deployment ](#deployment )
- [Acknowledgements ](#acknowledgements )
2019-07-19 18:19:53 +00:00
2019-02-20 16:49:45 +00:00
## Requirements
2019-07-18 15:20:09 +00:00
2020-05-19 16:39:33 +00:00
Note: examples here use `podman` . In most cases you should be able to replace `podman` with `docker` .
2020-04-21 19:30:34 +00:00
Though containerized, backend development is easiest if you have the following installed.
2019-07-19 18:19:53 +00:00
2020-05-19 16:39:33 +00:00
- For the crawler + API:
2019-07-17 22:07:05 +00:00
- Elixir
- Postgres
2019-02-20 16:49:45 +00:00
- For laying out the graph:
- Java
- For the frontend:
2019-07-17 22:07:05 +00:00
- Node.js
2019-02-20 16:49:45 +00:00
- Yarn
2018-08-26 22:31:53 +00:00
## Running it
2019-07-18 15:20:09 +00:00
2019-02-20 16:49:45 +00:00
### Backend
2019-07-18 15:20:09 +00:00
2019-02-20 16:49:45 +00:00
- `cp example.env .env` and modify environment variables as required
2020-05-19 16:39:33 +00:00
- `podman build gephi && podman build phoenix`
- `podman run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.9`
- If you've `run` this container previously, use `podman start elasticsearch`
- `podman run --name postgres -e "POSTGRES_USER=postgres" -e "POSTGRES_PASSWORD=postgres" -p 5432:5432 postgres:12`
2020-04-21 19:30:34 +00:00
- `podman-compose -f compose.backend-services.yml -f compose.phoenix.yml`
2019-08-02 16:03:21 +00:00
- Create the elasticsearch index:
- `iex -S mix app.start`
- `Elasticsearch.Index.hot_swap(Backend.Elasticsearch.Cluster, :instances)`
2019-07-18 15:20:09 +00:00
2019-02-20 16:49:45 +00:00
### Frontend
2019-07-18 15:20:09 +00:00
2019-02-20 16:49:45 +00:00
- `cd frontend && yarn install`
- `yarn start`
## Commands
2019-07-18 15:20:09 +00:00
2019-02-20 16:49:45 +00:00
### Backend
2019-02-20 17:29:02 +00:00
2019-07-19 18:19:53 +00:00
`./gradlew shadowJar` compiles the graph layout program. `java -Xmx1g -jar build/libs/graphBuilder.jar` runs it.
2019-02-20 16:49:45 +00:00
### Frontend
2019-07-18 15:20:09 +00:00
2019-07-19 18:19:53 +00:00
- `yarn build` creates an optimized build for deployment
## Privacy
This project doesn't crawl personal instances: the goal is to understand communities, not individuals. The threshold for what makes an instance "personal" is defined in the [backend config ](backend/config/config.exs ) and the [graph builder SQL ](gephi/src/main/java/space/fediverse/graph/GraphBuilder.java ).
2018-09-01 13:32:04 +00:00
2019-07-20 10:45:34 +00:00
## Deployment
2019-07-27 13:55:00 +00:00
2019-07-20 10:45:34 +00:00
You don't have to follow these instructions, but it's one way to set up a continuous deployment pipeline. The following are for the backend; the frontend is just a static HTML/JS site that can be deployed anywhere.
2019-07-27 13:55:00 +00:00
2019-07-20 10:45:34 +00:00
1. Install [Dokku ](http://dokku.viewdocs.io/dokku/ ) on your web server.
2019-08-02 14:42:49 +00:00
2. Install [dokku-postgres ](https://github.com/dokku/dokku-postgres ), [dokku-monorepo ](https://github.com/notpushkin/dokku-monorepo ), [dokku-elasticsearch ](https://github.com/dokku/dokku-elasticsearch ), and [dokku-letsencrypt ](https://github.com/dokku/dokku-letsencrypt ).
2019-07-20 10:45:34 +00:00
3. Create the apps
2019-07-27 13:55:00 +00:00
- `dokku apps:create phoenix`
- `dokku apps:create gephi`
2019-07-20 10:45:34 +00:00
4. Create the backing database
2019-07-27 13:55:00 +00:00
- `dokku postgres:create fediversedb`
- `dokku postgres:link fediversedb phoenix`
- `dokku postgres:link fediversedb gephi`
2019-08-02 14:42:49 +00:00
5. Set up ElasticSearch
- `dokku elasticsearch:create fediverse`
- `dokku elasticsearch:link fediverse phoenix`
6. Update the backend configuration. In particular, change the `user_agent` in [config.exs ](/backend/config/config.exs ) to something descriptive.
7. Push the apps, e.g. `git push dokku@<DOMAIN>:phoenix` (note that the first push cannot be from the CD pipeline).
8. Set up SSL for the Phoenix app
2019-07-27 13:55:00 +00:00
- `dokku letsencrypt phoenix`
- `dokku letsencrypt:cron-job --add`
2019-08-02 14:42:49 +00:00
9. Set up a cron job for the graph layout (use the `dokku` user). E.g.
2019-07-27 13:55:00 +00:00
2019-07-20 10:45:34 +00:00
```
SHELL=/bin/bash
0 2 * * * /usr/bin/dokku run gephi java -Xmx1g -jar build/libs/graphBuilder.jar
```
2019-08-02 16:03:21 +00:00
Before the app starts running, make sure that the Elasticsearch index exists -- otherwise it'll create one called
`instances` , which should be the name of the alias. Then it won't be able to hot swap if you reindex in the future.
2019-07-19 18:19:53 +00:00
## Acknowledgements
2019-07-17 22:03:30 +00:00
2019-07-27 13:55:00 +00:00
[![NLnet logo ](/nlnet-logo.png )](https://nlnet.nl/project/fediverse_space/)
2019-07-17 22:03:30 +00:00
2019-07-18 15:20:09 +00:00
Many thanks to [NLnet ](https://nlnet.nl/project/fediverse_space/ ) for their support and guidance of this project.