Skip to main content

实现 S2S 和 C2S 协议的现代 ActivityPub 兼容服务器。

项目描述

Epicyon,意思是“不仅仅是一条狗”。20-500 万年前生活在北美的最大的食蚁兽科。

Epicyon 是现代ActivityPub兼容服务器,实现 S2S 和 C2S 协议,适合安装在单板计算机上。它包括审核工具、帖子过期、内容警告、图像描述、新闻提要和针对对手的外围防御等功能。它不包含 javascript,并使用带有 Python 后端的 HTML+CSS。

项目目标-命令行界面-自定义-行为准则

矩阵室:#epicyon:matrix.freedombone.net

包括由OpenMoji设计的表情符号——开源表情符号和图标项目。许可证:CC BY-SA 4.0。Blob Cat Emoji 和 Meowmoji 由 Nitro Blob Hub 制作,在Apache 2.0下获得许可。Digital Pets 表情符号由 Tomcat94 制作并在 CC0 下获得许可。

包依赖

您将需要 python 版本 3.7 或更高版本。

在拱门/抛物线:

sudo pacman -S tor python-pip python-pysocks python-cryptography \
               imagemagick python-requests \
	       perl-image-exiftool python-dateutil \
	       certbot flake8 bandit
sudo pip3 install pyqrcode pypng

或者在 Debian 上:

sudo apt install -y \
    tor python3-socks imagemagick \
    python3-setuptools \
    python3-cryptography \
    python3-dateutil \
    python3-idna python3-requests \
    python3-django-timezone-field \
    libimage-exiftool-perl python3-flake8 \
    python3-pyqrcode python3-png python3-bandit \
    certbot nginx wget

安装

在最常见的情况下,您将使用 systemd 设置一个守护进程来运行服务器。

以下说明将 Epicyon 安装到/opt目录。它不必安装在那里,它可以在任何其他首选目录中。

添加一个专用用户,这样我们就不必以 root 身份运行。

adduser --system --home=/opt/epicyon --group epicyon

链接新闻镜像:

mkdir /var/www/YOUR_DOMAIN
mkdir -p /opt/epicyon/accounts/newsmirror
ln -s /opt/epicyon/accounts/newsmirror /var/www/YOUR_DOMAIN/newsmirror

编辑/etc/systemd/system/epicyon.service并添加以下内容:

[Unit]
Description=epicyon
After=syslog.target
After=network.target

[Service]
Type=simple
User=epicyon
Group=epicyon
WorkingDirectory=/opt/epicyon
ExecStart=/usr/bin/python3 /opt/epicyon/epicyon.py --port 443 --proxy 7156 --domain YOUR_DOMAIN --registration open
Environment=USER=epicyon
Environment=PYTHONUNBUFFERED=true
Restart=always
StandardError=syslog

[Install]
WantedBy=multi-user.target

此处服务器安装到/opt/epicyon,但您可以将其更改为安装它的任何位置。

然后运行守护进程:

systemctl enable epicyon
chown -R epicyon:epicyon /opt/epicyon
systemctl start epicyon

使用以下命令检查守护程序的状态:

systemctl status epicyon

如果它没有运行,那么您还可以查看日志:

journalctl -u epicyon

您还需要设置 Web 服务器配置。对于 Nginx 编辑/etc/nginx/sites-available/YOUR_DOMAIN如下:

server {
    listen 80;
    listen [::]:80;
    server_name YOUR_DOMAIN;
    access_log /dev/null;
    error_log /dev/null;
    client_max_body_size 31m;
    client_body_buffer_size 128k;

    index index.html;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
    listen 443 ssl;
    server_name YOUR_DOMAIN;

    ssl_stapling off;
    ssl_stapling_verify off;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN/privkey.pem;
    #ssl_dhparam /etc/ssl/certs/YOUR_DOMAIN.dhparam;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_session_timeout 60m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
    add_header Strict-Transport-Security max-age=15768000;

    access_log /dev/null;
    error_log /dev/null;

    index index.html;

    location /newsmirror {
        root /var/www/YOUR_DOMAIN;
        try_files $uri =404;
    }

    location / {
        proxy_http_version 1.1;
        client_max_body_size 31M;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_temp_file_write_size 64k;
        proxy_connect_timeout 10080s;
        proxy_send_timeout 10080;
        proxy_read_timeout 10080;
        proxy_buffer_size 64k;
        proxy_buffers 16 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect off;
        proxy_request_buffering on;
        proxy_buffering on;
        proxy_pass http://localhost:7156;
    }
}

根据需要更改您的域名。激活配置:

ln -s /etc/nginx/sites-available/YOUR_DOMAIN /etc/nginx/sites-enabled/

生成 LetsEncrypt 证书。

certbot certonly -n --server https://acme-v02.api.letsencrypt.org/directory --standalone -d YOUR_DOMAIN --renew-by-default --agree-tos --email YOUR_EMAIL

并重新启动 Web 服务器:

systemctl restart nginx

如果您使用的是Caddy Web 服务器,请参阅caddy.example.conf

运行静态分析

静态分析可以运行:

./static_analysis

运行安全审计

要运行安全审核:

./security_audit

请注意,并非所有已确定的问题都必然与该项目相关。将其输出视为可能可以调查但通常结果不相关的事物的列表。

在 Onion 或 i2p 域上安装

如果您无法访问 clearnet,或者不想使用它,那么可以从您的笔记本电脑轻松运行 Epicyon 实例。目录中有一些脚本deploy可用于在 Debian 或 Arch/Parabola 操作系统上安装实例。通过对包名称进行一些修改,它们也可以与其他发行版一起使用。

请注意,此类安装不会与 clearnet 上的普通 fediverse 实例联合,除非这些实例经过特殊修改。但是洋葱实例将与其他洋葱实例和 i2p 实例与其他 i2p 实例联合。

自定义字体

如果要使用特定字体,请将其复制到字体目录中,将其重命名为custom.ttf/woff/woff2/otf,然后重新启动 epicyon 守护进程。

systemctl restart epicyon

自定义网站图标

如果您想使用自己的 favicon,请将您的favicon.ico文件复制到安装 Epicyon 的基本目录。

改变主题

更改主题时,您可能需要确保清除 nginx 缓存 (/var/www/cache/*) 并清除站点的本地浏览器缓存 (Shift + Reload)。否则可能会保留上一个主题的图像和图标。

添加主题

如果要添加新主题,请先将主题名称添加到翻译文件中。

theme目录中创建一个以您的主题名称命名的目录并添加图标和横幅。作为一种快速的开始方式,您可以复制 的内容theme/default,然后编辑图形。保持图像的大小尽可能小,以避免创建滞后的用户界面。

epicyon.css在正在运行的实例上,您可以通过编辑然后重新加载网页来试验颜色或字体。一旦您对结果感到满意,您就可以更新文件中更改的变量值theme/yourtheme/theme.json

Epicyon 通常使用一组 CSS 文件,然后根据主题更改其变量。如果您想使用完全定制的 CSS,请复制epicyon-*.css到您的主题目录并根据您的要求对其进行编辑。这将被使用而不是默认的 CSS 文件。请注意,如果您自己维护 CSS 文件,那么您可能需要跟上上游发生的任何更改,否则您的用户界面将会中断。

运行单元测试

要运行单元测试:

python3 epicyon.py --tests

运行网络测试。这些模拟实例交换消息。

python3 epicyon.py --testsnetwork

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

epicyon-1.3.0.tar.gz (22.9 MB 查看哈希

已上传 source

内置分布

epicyon-1.3.0-py3-none-any.whl (24.4 MB 查看哈希

已上传 py3