跳转到主要内容

一个符合ActivityPub的现代服务器,实现了S2S和C2S协议。

项目描述

Epicyon,意为"不仅仅是狗"。北美20-5000万年前最大的Borophaginae

Epicyon是一个符合ActivityPub的现代服务器,实现了S2S和C2S协议,适用于安装到单板计算机上。它包括诸如管理工具、帖子过期、内容警告、图片描述、新闻源和针对对手的周边防御等功能。它不包含javascript,并使用Python后端配合HTML+CSS。

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

Matrix房间: #epicyon:matrix.freedombone.net

包含由OpenMoji设计的表情符号——开源表情符号和图标项目。许可证:CC BY-SA 4.0。Blob Cat Emoji和Meowmoji由Nitro Blob Hub制作,许可证为Apache 2.0。《数字宠物》表情符号由Tomcat94制作,许可证为CC0。

包依赖关系

您需要Python 3.7或更高版本。

在Arch/Parabola上

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/

生成 Let's Encrypt 证书。

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 域上安装

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

请注意,此类安装不会与清网上的普通 fediverse 实例进行联合,除非这些实例被特别修改以实现联合。但 onion 实例将与其他 onion 实例进行联合,i2p 实例将与其他 i2p 实例进行联合。

自定义字体

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

systemctl restart epicyon

自定义 Favicon

如果您想使用自己的 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 查看哈希值)

上传时间 源代码

构建分发

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

上传时间 Python 3

由以下组织支持