Misskey 与 Mastodon 类似,界面更 “Modern Design”,主题也更 “二次元”
下文将展示 Debian 10 下无域名的 Misskey 搭建方式(使用 IP 访问)
环境
- Debian 10
参考
- Misskey
- 依赖安装
步骤
安装依赖
使用 root 用户进行以下步骤,其他用户酌情添加 sudo
Node.js
运行以下指令将安装 Node.js 14
curl -sL https://deb.nodesource.com/setup_14.x | bash - apt-get install -y nodejs
Postgresql
运行以下指令将安装最新版 postgresql
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - apt update apt -y install postgresql
Redis
redis 没有版本要求,所以直接用 apt 安装即可
apt install redis
Yarn
需要先安装 Node.js
npm install -g yarn
FFmpeg
apt install ffmpeg
其他
Debian 10 下默认安装了 python 和 build-essential,如果没有则执行指令
apt install python build-essential
设置数据库
Misskey 需要新建数据库和数据库管理账户
使用 root 用户进行以下步骤
- 切换到 postgre 用户
su - postgres
- 配置数据库
- 进入 postgresql
psql
- 新建数据库
CREATE DATABASE misskey;
- 新建管理账户
CREATE USER [你的用户名] WITH PASSWORD '[你的密码]';
- 新建账户获取管理权限
GRANT ALL PRIVILEGES ON DATABASE misskey TO [你的用户名];
- 进入 postgresql
获取 Misskey
使用 root 用户进行以下步骤
- 新建 misskey 用户
adduser --disabled-password --disabled-login misskey
- 切换到 misskey 用户
su - misskey
- 获取 Misskey
git clone -b master git://github.com/syuilo/misskey.git
- 安装 Node 依赖
cd misskey git checkout master yarn
配置 Misskey
使用 misskey 用户进行以下步骤
- 复制模板配置文件,在 misskey 根目录下运行
cp .config/example.yml .config/default.yml
- 编辑 default.yml
- 首先更改 URL:如果不使用域名,则将 https 改为 http,并将域名更改为 IP 地址,如果使用域名则只需更改域名
- 选择一个运行方式:Misskey 提供了两种运行模式——Web 服务器反代 + Misskey模式和独立运行模式,这里选择第一种,可以避免很多问题,取消注释 port:3000 行
关于第二种模式:第二种模式需要 root 权限运行才可以绑定端口,使用第一种模式可以避免更多由系统权限产生的问题
- 配置数据库信息:编辑用户名和密码
- (可选)设置集群数量:这里我设置了 Misskey 最大子进程到 8,默认为 1,值越高占用的系统资源越多
- 首先更改 URL:如果不使用域名,则将 https 改为 http,并将域名更改为 IP 地址,如果使用域名则只需更改域名
生成 Misskey
使用 misskey 用户进行以下步骤
- 在 misskey 根目录下执行
NODE_ENV=production yarn build
- 数据库初始化
- 执行
yarn run init
- 执行
运行 Misskey
测试运行
使用 misskey 用户在 misskey 根目录下执行
NODE_ENV=production npm start
如果无误会输出类似下图的信息,这时访问 IP + 端口已经可以使用了
设置系统服务
为方便后台运行和管理进程,将 Misskey 设置为系统服务
使用 root 用户在 /etc/systemd/system 下新建配置文件 misskey.service,写入以下内容
[Unit] Description=Misskey daemon [Service] Type=simple User=misskey ExecStart=/usr/bin/npm start WorkingDirectory=/home/misskey/misskey Environment="NODE_ENV=production" TimeoutSec=60 StandardOutput=syslog StandardError=syslog SyslogIdentifier=misskey Restart=always [Install] WantedBy=multi-user.target
之后就可以使用 systemctl 或 service 指令启动/停止/查看 Misskey
(可选)Nginx 反向代理
经过以上步骤已经可以通过 IP + 端口使用 Misskey,设置 Nginx 反代是为了反代而反代使用其他端口/模拟域名的配置步骤
使用 root 用户进行以下步骤
- 新建配置文件
- 在 /etc/nginx/sites-available 下新建配置文件 misskey,并写入以下内容(不使用域名)
map $http_upgrade $connection_upgrade { default upgrade; '' close; } proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off; server { listen 81; listen [::]:81; server_name _; client_max_body_size 80m; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_http_version 1.1; proxy_redirect off; # For WebSocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # Cache settings proxy_cache cache1; proxy_cache_lock on; proxy_cache_use_stale updating; add_header X-Cache $upstream_cache_status; } }
注意:不知为何 Misskey 无法在 80 端口下正常使用,所以需要设置为 81 (非 80)端口,80 端口下会无限加载,如下图
- 如果使用域名并开启了 SSL,则使用官方配置文件
map $http_upgrade $connection_upgrade { default upgrade; '' close; } proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off; server { listen 80; listen [::]:80; server_name example.tld; # For SSL domain validation root /var/www/html; location /.well-known/acme-challenge/ { allow all; } location /.well-known/pki-validation/ { allow all; } location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.tld; ssl_session_cache shared:ssl_session_cache:10m; # To use Let's Encrypt certificate ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem; # To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate) #ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; # SSL protocol settings ssl_protocols TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA; ssl_prefer_server_ciphers on; # Change to your upload limit client_max_body_size 80m; # Proxy to Node location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_http_version 1.1; proxy_redirect off; # For WebSocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # Cache settings proxy_cache cache1; proxy_cache_lock on; proxy_cache_use_stale updating; add_header X-Cache $upstream_cache_status; } }
- 在 /etc/nginx/sites-available 下新建配置文件 misskey,并写入以下内容(不使用域名)
- 新建软连接
ln -s /etc/nginx/sites-available/misskey /etc/nginx/sites-enabled
- 测试并运行 nginx
nginx -t nginx -s reload
效果
设置管理员账户
主界面
发布动态
新用户注册
动态中 @ 用户
发布 @ 用户的动态
收到 @ 的用户