Send是非常好用的端到端加密的文件传送服务,界面简洁,非常好用。是Firefox Send停止维护后另有人接手开发的软件。
官方提供了docker-compose的配置文件和详细的教程。但是我本人部署过程中遇到了nginx-proxy和ssl证书配置出错的问题,所以自行配置了nginx相关的配置。

官方源码:[https://github.com/timvisee/send-docker-compose

我部署的过程:

  • 1 克隆到服务器 git clone https://github.com/timvisee/send-docker-compose && cd send-docker-compose
  • 2 运行cp .env.example .env和然后编辑.env文件

    
    #Host to expose Send on
    HOST=你的域名
    
    #Base URL for Send
    SEND_BASE_URL=你的域名
    
    #Optional: for LetsEncrypt SSL, same as HOST
    LETSENCRYPT_HOST=
    
    #Optional: for LetsEncrypt SSL, your email address
    LETSENCRYPT_EMAIL=
  • 3 编辑docker-compose.yaml文件,此处我没有使用nginx-proxy和ssl证书相关的配置。

    
    services:
      send:
        image: '${DOCKER_SEND_IMAGE}'
        restart: always
        ports:
          - '1234:1234'
        volumes:
          - ./uploads:/uploads
        environment:
          - VIRTUAL_HOST=${HOST}
          - VIRTUAL_PORT=1234
          - DHPARAM_GENERATION=false
          - LETSENCRYPT_HOST
          - LETSENCRYPT_EMAIL
          - NODE_ENV=production
          - BASE_URL=${SEND_BASE_URL}
          - PORT=1234
          - REDIS_HOST=redis
    
          #For local uploads storage
          - FILE_DIR=/uploads
    
          #For S3 object storage (disable volume and FILE_DIR variable)
          #- AWS_ACCESS_KEY_ID=
          #- AWS_SECRET_ACCESS_KEY=
          #- S3_BUCKET=
          #- S3_ENDPOINT=
    
          #To customize upload limits
          #- EXPIRE_TIMES_SECONDS=3600,86400,604800,2592000,31536000
          #- DEFAULT_EXPIRE_SECONDS=3600
          #- MAX_EXPIRE_SECONDS=31536000
          - DOWNLOAD_COUNTS=1,2,5,10,15,25,50,100
          - MAX_DOWNLOADS=100
          - MAX_FILE_SIZE=268435456
      
      redis:
        image: 'redis:alpine'
        restart: always
        volumes:
          - send-redis:/data
    
    volumes:
      send-redis:
      proxy-certs:
      proxy-vhost:
      proxy-html:
  • 4 自行配置nginx和ssl证书,我的nginx反代配置
server {
    listen      0.0.0.0:80;
    listen      0.0.0.0:443;
    server_name 你的域名;
    
    client_max_body_size 0;
    
    location /
{
    proxy_pass http://127.0.0.1:1234;
    proxy_set_header Host $host;
            # set headers to support websocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        set $upstream_app send;
        set $upstream_port 1234;
        set $upstream_proto http;
}

    ssl_certificate      /etc/letsencrypt/live/你的域名/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/你的域名/privkey.pem;
}

  • 5 运行docker-compose up -d等会打开你的域名就在运行了。

mastodon通过sidekiq处理通知、时间线、点赞和跟其他实例通讯的任务。当实例上的注册的人变多或者整个联邦宇宙交换的信息量变多时候sidekiq容易堵塞从而时间线会延迟。

解决办法是增加sidekiq进程和队列,默认是所有队列仅用一个sidekiq进程。
/etc/systemd/system/目录创建一个名为mastodon-sidekiq2.service的文件。
复制粘贴以下内容:

[Unit]
Description=mastodon-sid
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=20"
Environment="MALLOC_ARENA_MAX=2"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 20 -q default -q pull -q ingress
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

保存后运行
systemctl daemon-reload 重载systemd配置。
然后启动
systemctl start mastodon-sidekiq2
之后在mastodon后台里看到多一个有default,pull,ingress线程的sidekiq进程。
当然也可以单独拆分队列。但是线程总数量不能超过PostgreSQL数据库的最大连接数。并且保证只有一个scheduler进程。

friendica非常依赖worker进程来完成跟其他实例通讯,清理数据库,联系人同步等其他任务。
它可以通过cron计划任务定时工作,也可以通过守护进程进行完成。设置好守护进程可以立即发送任务,而不是等几分钟cron计划任务开始工作。

假设,系统是Ubuntu20.04 friendica的安装目录是/var/www/fedibar/

按照官方提供的教程运行 cd /var/www/fedibar/ php bin/daemon.php start时它会在 /run 目录创建一个PID。friendica会使用config/local.config.php文件system 下的pidfile目录配置。

'system' > [
     ...
  'pidfile' => '/run/friendica/daemon.pid',
     ...
  ],

我们将设置 systemd 以www-data用户身份运行该进程。但是只有root权在该/run目录中。所以我们创建一个 Friendica 指定的拥有www-data的子目录。当然可以手动创建,但是重启就消失。因此我们通过/etc/tmpfiles.d中的配置文件来执行此操作。首先通过命令在该目录创建 friendica.conf

sudo nano /etc/tmpfiles.d/friendica.conf

复制粘贴以下文件

d /run/friendica 0755 www-data www-data -

保存退出,这就systemd 可以通过www-data 用户组操作/run/friendica 的文件了。

如果现在执行

cd /var/www/fedibar/ php bin/daemon.php start

你会看到类似 信息

Starting worker daemon.
Child process started with pid 1276.

如果不是,您可能在config/local.config.php文件的 pidfile 目录填写错误了。
如果没有问题现在可以创建systemd文件了。

sudo nano /etc/systemd/system/friendica-daemon.service

复制粘贴以下文件

[Unit]
Description=Friendica daemon
After=network.target mariadb.service
Requires=network.target remote-fs.target nss-lookup.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/fedibar
Type=simple
StandardOutput=null
StandardError=syslog
ExecStart=/usr/bin/php ./bin/daemon.php start
ExecStop=/usr/bin/php ./bin/daemon.php stop
PIDFile=friendica/daemon.pid
PrivateTmp=true
InaccessibleDirectories=/home /root /boot /opt /mnt /media
ReadOnlyDirectories=/etc /usr
Restart=always

[Install]
WantedBy=multi-user.target

请注意,如果您使用的是MySQL 那第二行改成

After=network.target mysql.service

还有注意检查 WorkingDirectory 这是你安装friendica的目录。
确认没有问题后重新加载systemd配置

sudo systemctl daemon-reload

然后可以通过systemd启动守护进程了

sudo systemctl start friendica-daemon.service

检查状态

systemctl status friendica-daemon.service 

开机自动启动

systemctl enable friendica-daemon.service

搞定!

由于手上有一台闲置vps,于是想把mastodon实例的数据库分离出去,这样还能减轻服务器性能不足问题。

系 统 :Ubuntu20.04
数据库服务器IP :192.168.1.1
mastodon实例IP :192.168.1.111


1.给Postgres中mastodon帐户设置密码:
(我这台vps本身就装过mastodon,所以postgreSQL数据库都安装好直接给数据库账户设置密码就能用了。)

su - mastodon
psql -p 5432 -U mastodon mastodon_production -w

然后设置成password不同的密码:

ALTER USER mastodon WITH PASSWORD 'password';

如果是全新安装postgreSQL:

apt-get install postgresql                                        //安装数据库
sudo su - postgres                                                //切换到postgres用户
psql                                                              //登录控制台
CREATE USER mastodon WITH PASSWORD 'password';                    //创建带密码的数据库用户
CREATE DATABASE mastodon_production OWNER mastodon;               //创建数据库 
GRANT ALL PRIVILEGES ON DATABASE mastodon_production TO mastodon; //给mastodon用户对数据库操作权限
\q                                                                //退出

2.备份数据库并备份文件传送到数据库服务器:

su - mastodon
pg_dump mastodon_production > dump.sql

到数据库服务器创建空数据库并导入备份文件

createdb -T template0 mastodon_production
psql mastodon_production < dump.sql

如果是全新安装的数据库:

sudo su - postgres
psql mastodon_production < dump.sql

3.更改postgresql配置允许从指定IP访问:
在/etc/postgresql/12/main/ 目录的 postgresql.conf 文件中

listen_addresses = '*'                        //先去掉注释,这里填写数据库服务器监听IP,而不是实例IP;默认 
                                                是'localhost';  '*' 可监听所有IP。
                          
port = 5432                          //默认端口不用改

在/etc/postgresql/12/main/ 目录的 pg_hba.conf 文件中添加:

# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD
host    mastodon_production    mastodon    192.168.1.111/32    md5

这里填写的IP地址是mastodon实例IP,仅允许一个IP地址访问增加安全性。填写0.0.0.0/0则允许所有IP地址访问。

service postgresql restart

重启postgreSQL让更改的配置生效。

如果PostgreSQL没有用tls加密的话,两台服务器之间所有指令操作会明文传输,所有建议使用WireGuard两台vps组建内网加密传输。


4.在mastodon实例环境变量文件.env.production中更改数据库配置:

DB_HOST=192.168.1.1
DB_PORT=5432
DB_NAME=mastodon_production
DB_USER=mastodon
DB_PASS=password


5.重启mastodon服务

systemctl restart 'mastodon-*.service'

就能生效。
如果未生效要检查防火墙是否开放5432端口。


感谢岛站站长holgerhuo提供帮助。
感谢老兄提供帮助


参考文章:PostgreSQL新手入门 配置postgresql并远程登录

由于本人0经验操作折腾难免有错误,恳请各位大佬帮忙指正。

自从对Mastodon实例魔改,就避免不了碰到各种问题。


1.在服务器上拉取远程分支合并文件,显示有冲突怎么办?
答:立刻去git status,查看git状态。
它会提示那个文件有冲突。
解决完冲突git add 将内容从工作目录添加到暂存区.
然后,没有微合并的文件就添加 git commit 结束合并。


2.魔改之后怎么更新到官方最新Releases版本?
答:在GitHub桌面,左侧自己mastodon仓库上右键点 “open in command prompt”
然后:
git fetch --tags upstream
git merge v3.4.4(要升级的tag名)

如果提示有冲突,先解决冲突再 git push上去远程分支上。
再回到服务器上更新行~