一个符合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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b205a859d883e1e97db5996220b97ffc051f8a9dfc00752ae99e419e7583fc0a |
|
MD5 | 6ee49c475b365d32ae77f9f7f90c23ad |
|
BLAKE2b-256 | 97870ecaa92d3525f64dce03fca59f159f7f72031256b202d5c6c9db8738b5c1 |
epicyon-1.3.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 02557383c2ad4325a8f1eba1c519de76ef1fcc9d3db5de7f70f618728a9fbf04 |
|
MD5 | d12cc86ddcd249d66a0aa96a89351c1f |
|
BLAKE2b-256 | 5dcb096998d6623a5432339f2f27d6da132ad60aef9f7fafdfcec81d6e062a92 |