Compare commits

...

9 commits

Author SHA1 Message Date
Kiara Grouwstra
deb70be70b
replace nixos wiki link with official one 2025-02-18 19:37:22 +01:00
65782c65ba add debug toolbar 2025-02-18 18:25:37 +01:00
857e1b12f5 add more fresh-start instructions (#151)
Reviewed-on: Fediversity/Fediversity#151
Reviewed-by: kiara Grouwstra <kiara@procolix.eu>
2025-02-18 18:21:58 +01:00
6513150abd list goals, actors; add glossary (#132)
Reviewed-on: Fediversity/Fediversity#132
2025-02-18 17:56:31 +01:00
a3365eb508 more conventional naming for views and templates 2025-02-18 17:29:06 +01:00
73c9c884d7 redirect to current page after login/logout 2025-02-18 17:15:55 +01:00
6d0fdd0834
Bump nixpkgs 2025-02-18 16:44:06 +01:00
488fbcc131
Exit Forgejo LTS 2025-02-18 16:44:06 +01:00
ed4912800f Add page showing account info
Co-authored-by: lois <lois@procolix.eu>
Co-authored-by: Kiara Grouwstra <kiara.grouwstra@gmail.com>
2025-02-18 15:44:15 +01:00
13 changed files with 211 additions and 24 deletions

111
README.md
View file

@ -4,7 +4,116 @@ This repository contains all the code and code-related files having to do with
[the Fediversity project](https://fediversity.eu/), with the notable exception
of [NixOps4 that is hosted on GitHub](https://github.com/nixops4/nixops4).
## Content of this repository
## Goals
Decentralise the operational responsibility for social media.
Enable a more robust market of hosting providers, by making it easy to migrate operations and data to different providers.
Note that Fediversity is not about self-hosting.
There already exist solutions for self-hosting, but they're not suitable for what we're trying to do.
The ones we're aware of require substantial technical knowledge and time commitment by operators, especially for scaling to thousands of users.
Not everyone has the expertise and time to run their own server.
## Actors
- Fediversity project team
The group working on this repository.
We are creating the deployment workflows and service configurations.
The project partners for Fediversity are:
- [NLnet Foundation](https://nlnet.nl/)
- Open Internet Discourse Foundation
- [NORDUnet](https://nordu.net/)
- [Tweag](https://www.tweag.io/)
Refer to [fediversity.eu](https://fediversity.eu) for more details about the project.
- Hosting provider
They provide and maintain the physical infrastructure, and run the software in this repository, through which operators interact with their deployments.
Hosting providers are technical administrators for these deployments, ensuring availability and appropriate performance.
We target small- to medium-scale hosting providers with 20+ physical machines.
- Operator
They select the applications they want to run (Mastodon, Pixelfed, Matrix, etc.).
They don't need to own hardware or deal with operations.
Operators administer their services in a non-technical fashion, e.g. as moderators.
They pay the hosting provider for registering a domain name, maintaining physical resources, and monitoring deployments.
Initially, Fediversity is targeted at organisations, such as universities.
- User
They are individuals that are not necessarily affiliated with any organisation.
They register an account on services (e.g. Mastodon) run by the operators, and e.g. post content.
Users dont need to administrate anything.
Given initial operators will be universities, users would be staff or students.
## Glossary
- [Fediverse](https://en.wikipedia.org/wiki/Fediverse)
A collection of social networking services that can communicate with each other using a common protocol.
- Service
A Fediverse application run by the hosting provider for an operator.
- Configuration
A collection of settings for a machine running NixOS.
> Example: Configurations are deployed to VMs.
- Provision
Make a resource, such as a virtual machine, available for use.
> Example: We use [Proxmox](https://www.proxmox.com) to provision VMs for services run by operators.
- Deploy
Put software, such as services, onto computers.
The software includes technical configuration that links software components.
Most user-facing configuration remains untouched by the deployment process.
> Example: NixOps4 is used to deploy [Pixelfed](https://pixelfed.org).
- Migrate
Move service configurations and user data to a different hosting provider.
- [NixOps4](https://github.com/nixops4/nixops4)
A tool for deploying and managing resources through the Nix language.
NixOps4 development is supported by the Fediversity project
- Resource
A [resource for NixOps4](https://nixops.dev/manual/development/concept/resource.html) is any external entity that can be declared with NixOps4 expressions and manipulated with NixOps4, such as a virtual machine, an active NixOS configuration, a DNS entry, or customer database.
- Resource provider
A resource provider for NixOps4 is an executable that communicates between a resource and NixOps4 using a standardised protocol, allowing [CRUD operations](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) on the resources to be performed by NixOps4.
Refer to the [NixOps4 manual](https://nixops.dev/manual/development/resource-provider/index.html) for details.
> Example: We need a resource provider for obtaining deployment secrets from a database.
## Development
All the code made for this project is freely licenced under [EUPL](https://en.m.wikipedia.org/wiki/European_Union_Public_Licence).
This means, anyone can use the work here to learn from it or change it according to their needs.
You can even read up on [development proceedings](https://git.fediversity.eu/Fediversity/meta).
Contact the project team if you have questions or suggestions, or if you're interested in using Fediversity software for your operations:
- E-mail: <mailto:contact@fediversity.eu>
- Mastodon: <https://mastodon.fediversity.eu/@fediversity>
### Content of this repository
Most of the directories in this repository have their own README going into more
details as to what they are for. As an overview:

6
flake.lock generated
View file

@ -991,11 +991,11 @@
},
"nixpkgs_7": {
"locked": {
"lastModified": 1738163270,
"narHash": "sha256-B/7Y1v4y+msFFBW1JAdFjNvVthvNdJKiN6EGRPnqfno=",
"lastModified": 1739758141,
"narHash": "sha256-uq6A2L7o1/tR6VfmYhZWoVAwb3gTy7j4Jx30MIrH0rE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "59e618d90c065f55ae48446f307e8c09565d5ab0",
"rev": "c618e28f70257593de75a7044438efc1c1fc0791",
"type": "github"
},
"original": {

View file

@ -1,10 +1,17 @@
{ config, pkgs, ... }:
let
domain = "git.fediversity.eu";
in
{
services.forgejo = {
enable = true;
## NOTE: By default, the Forgejo service features Forgejo LTS. However, we
## want some more recent features, so we rely on a more recent one.
package = pkgs.forgejo;
lfs.enable = true;
settings = {
service = {

View file

@ -27,20 +27,31 @@ The Fediversity Panel is a web service for managing Fediversity deployments with
manage
```
- Run the server locally
- With a fresh database, run:
```
manage migrate
```
- Run the server locally:
```shell-session
manage runserver
```
- Whenever you add a field in the database schema, run:
- Create an admin user:
```console
```shell-session
manage createsuperuser
```
and log in at <http://localhost:8000/admin>.
- After changing the database schema, add migrations and apply them:
```shell-session
manage makemigrations
```
Then before starting the server again, run:
```
manage migrate
```
- Use the [Django Debug Toolbar](https://github.com/django-commons/django-debug-toolbar) for troubleshooting in the browser

View file

@ -1,11 +1,13 @@
{
lib,
buildPythonPackage,
setuptools,
django_4,
django-compressor,
django-libsass,
dj-database-url,
django-compressor,
django-debug-toolbar,
django-libsass,
django_4,
setuptools,
sqlite,
}:
let
src =
@ -41,11 +43,13 @@ buildPythonPackage {
'';
propagatedBuildInputs = [
setuptools
django_4
django-compressor
django-libsass
dj-database-url
django-compressor
django-debug-toolbar
django-libsass
django_4
setuptools
sqlite
];
postInstall = ''

View file

@ -58,10 +58,13 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'debug_toolbar',
'compressor',
]
MIDDLEWARE = [
# https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#add-the-middleware
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
@ -71,6 +74,12 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#configure-internal-ips
INTERNAL_IPS = [
"127.0.0.1",
"[::1]",
]
ROOT_URLCONF = 'panel.urls'
TEMPLATES = [
@ -119,6 +128,9 @@ AUTH_PASSWORD_VALIDATORS = [
},
]
LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = '/' # Redirect to homepage after login
LOGOUT_REDIRECT_URL = '/' # Redirect to homepage after logout
# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/

View file

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<h1>{{ user.username }}</h1>
<dl>
<dt>e-mail</dt><dd>{{ user.email}}</dd>
</dl>
{% endblock %}

View file

@ -17,9 +17,9 @@
<body>
<header>
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}!</p>
<p>Welcome, {{ user.username }}! <a href="{% url 'logout' %}?next={{ request.path }}">Logout</a></p>
{% else %}
<p>You are not logged in.</p>
<p><a href="{% url 'login' %}?next={{ request.path }}">Login</a></p>
{% endif %}
</header>
{% block navigation %}

View file

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% endblock %}

View file

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block content %}
<h1>Fediverse services</h1>
<dl>
<dt>Hello world service</dt>
<dd>Nothing to see here</dd>
</dl>
{% endblock %}

View file

@ -15,10 +15,14 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.urls import include, path
from panel import views
urlpatterns = [
path('admin/', admin.site.urls),
path("debug/", include("debug_toolbar.urls")),
path('', views.Index.as_view(), name='index'),
path("", include("django.contrib.auth.urls")),
path("account/", views.AccountDetail.as_view(), name='account_detail'),
path("services/", views.ServiceList.as_view(), name='service_list'),
]

View file

@ -1,4 +1,16 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User
from django.views.generic import TemplateView
from django.views.generic import DetailView
class Index(TemplateView):
template_name = 'index.html'
class AccountDetail(LoginRequiredMixin, DetailView):
model = User
template_name = 'account_detail.html'
def get_object(self):
return self.request.user
class ServiceList(TemplateView):
template_name = 'service_list.html'

View file

@ -97,7 +97,7 @@ nix build .#checks.<system>.<test>.driverInteractive
- Tutorial for setting up better logging: https://krisztianfekete.org/self-hosting-mastodon-on-nixos-a-proof-of-concept/
- Setting up mastodon development environment: https://docs.joinmastodon.org/dev/setup/
- Tutorial for PeerTube that doesn't use `createLocally`: https://nixos.wiki/wiki/PeerTube
- Tutorial for PeerTube that doesn't use `createLocally`: https://wiki.nixos.org/wiki/PeerTube
- garage settings for specific apps: https://garagehq.deuxfleurs.fr/documentation/connect/apps/