51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【好玩儿的Docker项目】10分钟搭建一个去中心化微博平台——Misskey |二次元风格、联邦宇宙

前言 {#前言}

这周上班上入魔了,礼拜五下班还以为是礼拜四,导致电脑忘记带回来了,里面正好有前一天还没剪辑的视频 = =

这段时间实在是没时间录视频(之后可能会越来越忙),今天趁着周末,更新一期。

素材来自留言区:

e6fd6051a8ee80b38bfe6592ab549d6e.png

咕咕尝试搜索了下,发现还挺好玩的,结合网上找的一些资料,分享一下Misskey+Nginx Proxy Manager的搭建经验。

image-20221016132025409

整个搭建过程一开始参考了官网的,发现稍微有点复杂,然后搜索到了下面两个小伙伴的经验分享,非常有帮助,感谢付出!

搭建分享:使用Docker最小化部署Misskey

本教程基本~~借鉴~~抄自上面的搭建教程 XD

使用分享:Fediverse不止Mastodon------Misskey介绍

  1. 简介 {#1-简介}

Misskey是由日本开发者しゅいろ(syuilo)所创立的去中心化社交网络服务,其官方实例是misskey.io。Misskey和Mastodon一样,采用了ActivityPub协议,因此可以与联邦宇宙Fediverse互通。

简单来说,它就是一个去中心化的微博!

image-20221016131540367

我们创建的则是一个实例,不同的实例是可以互相访问互动的。

image-20221016132327294

image-20221016132233386

image-20221016132251485

1.1 相关地址 {#11-相关地址}

官方实例地址:https://misskey.io/ (如果你不想自己搭建,可以直接加入官方的实例,不过貌似是日文的。)

image-20221016132708956

官方网站:https://misskey-hub.net/en/

GitHub地址:https://github.com/misskey-dev/misskey (3k star)

实例列表:https://join.misskey.page/zh-CN/instances (如果你不想自己搭建,也可以加入一个实例来使用)

  1. 项目展示 {#2-项目展示}

image-20221016133707047

  1. 搭建环境 {#3-搭建环境}

  • 服务器:~~腾讯香港轻量应用服务器24元/月VPS一台~~ 咕咕自己搭建用的是OVH的独立服务器,演示用的是卢森堡的BuyVM,如果你只是小范围使用,可以考虑用腾讯轻量购买链接的服务器,(最好是选非大陆(香港)的服务器 )如果是小白刚开始玩的话,还可以购买Racknerd的服务器,最低一年不到100块(不过这个建议选择1G内存以上的机器)(Racknerd服务器介绍:点击查看
  • 系统:Debian 10(DD脚本 非必需DD用原来的系统也OK,之后教程都是用Debian或者Ubuntu搭建~)
  • 安装好Docker、Docker-compose(相关脚本
  • 【非必需但建议】域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程
  • 【非必需】提前安装好宝塔面板海外版本aapanel,并安装好Nginx(安装地址
  • 【非必需本教程选用】安装好Nginx Proxy Manager(相关教程

服务器要求:此项目比较重量,内存至少1G以上,硬盘越大越好。

  1. 搭建视频 {#4-搭建视频}

YouTube:https://youtu.be/pjHEKwJVI1I

哔哩哔哩【高清版本可以点击去吐槽到B站观看】:

  1. 搭建方式 {#5-搭建方式}

安装系统(腾讯云轻量应用服务器) {#安装系统腾讯云轻量应用服务器}

e59713fba8726d3cb55ae11bca83fe3c.png

腾讯云轻量服务器最大的特点就是"轻量",相比CVM,更适合小白上手,这边我们之间选择Docker基础镜像,就可以省去后面安装Docker的步骤(如果你非要用国内的服务器,这边装的Docker镜像还会帮你配置好国内镜像源,让你加速访问docker镜像资源)。

登陆(腾讯云轻量应用服务器) {#登陆腾讯云轻量应用服务器}

2722040ee311eb4a9ebf2a4945bf38f4.png

c0b5d360053746c4095d592967ee401f.png

e0ba858f021b846ad0abc27acf5008c2.png

5.1 服务器前期配置 {#51-服务器前期配置}

服务器初始设置,参考:

新买了一台服务器"必须"要做的6件小事

保护好你的小鸡!保姆级服务器安全教程!

这边由于我们用的是腾讯云轻量应用服务器,系统默认就帮我们创建了名字是lighthouse的用户,系统后台也有防火墙(默认就开了几个常用的端口)

对小白用户来说,可以不用再去管繁琐的服务器安全的配置,大大降低了服务器防护的门槛。

【Docker系列】不用宝塔面板,小白一样可以玩转VPS服务器!

sudo -i # 切换到root用户

apt update -y # 升级packages

apt install wget curl sudo vim git -y # Debian系统比较干净,安装常用的软件


注意:VPS的内存如果过小,建议设置一下SWAP,一般为内存的1-1.5倍即可,可以让系统运行更流畅!

设置SWAP可以用脚本:

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

image-20220528185512488

选择18,然后输入你想要扩容的数值即可。 image-20220528185604586

使用腾讯云轻量应用服务器的小伙伴可以直接跳到5.2.4

5.2 安装Docker(使用腾讯云轻量应用服务器可跳过这一部分) {#52-安装docker使用腾讯云轻量应用服务器可跳过这一部分}

5.2.1 非大陆服务器Docker安装 {#521-非大陆服务器docker安装}

wget -qO- get.docker.com | bash
docker -v  #查看docker版本
systemctl enable docker  # 设置开机自动启动

修改Docker配置(可选)(来自烧饼博客

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):

cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

然后重启 Docker 服务:

systemctl restart docker

5.2.2 非大陆服务器Docker-compose安装 {#522-非大陆服务器docker-compose安装}

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version  #查看docker-compose版本

5.2.3 国内服务器安装docker {#523-国内服务器安装docker}

curl -sSL https://get.daocloud.io/docker | sh
docker -v  #查看docker版本
systemctl enable docker  # 设置开机自动启动

修改Docker配置(可选)(来自烧饼博客

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):

cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

然后重启 Docker 服务:

systemctl restart docker

5.2.4 国内服务器安装docker-compose {#524-国内服务器安装docker-compose}

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version #查看docker-compose版本


5.3 安装NginxProxyManager {#53-安装nginxproxymanager}

参考这边的内容:https://blog.laoda.de/archives/nginxproxymanager

5.4 创建安装目录 {#54-创建安装目录}

创建一下安装的目录:

sudo -i

mkdir -p /root/data/docker_data/misskey

cd /root/data/docker_data/misskey


这边我们直接用docker的方式安装。

vim docker-compose.yml

英文输入法下,按i

# Misskey minimal deploy config
version: "3"

services: web: restart: always # 自动重启,请注意如果您对您的配置没有信心,请不要开启这个选项,以避免进程崩溃反复重启耗费大量资源! image: misskey/misskey:latest # 这里使用了官方镜像,以避免本地构建时资源不足的问题 container_name: misskey_web # 容器名,方便管理,您可以自行修改为您觉得合适的内容 links:

  • db
  • redis ports:
  • "3001:3001" networks:
  • internal_network
  • external_network volumes:
  • ./config:/misskey/.config:ro # 用于映射配置文件,请根据您的实际配置来决定文件夹名称,设定为只读即可;
  • ./files:/misskey/files # 用户上传到本地的文件,如果您一开始就接入外部存储(如wasabi或是AWS S3)您可以忽略这块配置

redis: restart: always image: redis:latest container_name: misskey_redis networks:

  • internal_network volumes:
  • ./redis:/data # redis数据库的数据文件夹映射,创建后默认在 ./redis 文件夹中

db: restart: always image: postgres:12.2-alpine container_name: misskey_db networks:

  • internal_network env_file:
  • ./config/docker.env # 需要使用配置文件中设置的 Docker 环境变量 volumes:
  • ./db:/var/lib/postgresql/data # 主数据库的数据文件夹映射,创建后默认在 ./db 文件夹中

networks: internal_network: # 内部网络 internal: true external_network: # 外部网


按一下esc,然后:wq 保存退出,之后,

mkdir config
cd config
vim default.yml

复制下面的内容,填入:

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

┌─────┐

#───┘ URL └─────────────────────────────────────────────────────

Final accessible URL seen by a user.

url: https://gugu.ge/ # 注意改成自己最后反向代理想要的网址

ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE

URL SETTINGS AFTER THAT!

┌───────────────────────┐

#───┘ Port and TLS settings └───────────────────────────────────

Misskey requires a reverse proxy to support HTTPS connections.

+----- https://example.tld/ ------------+

+------+ |+-------------+ +----------------+|

| User | ---&gt; || Proxy (443) | ---&gt; | Misskey (3000) ||

+------+ |+-------------+ +----------------+|

+---------------------------------------+

You need to set up a reverse proxy. (e.g. nginx)

An encrypted connection with HTTPS is highly recommended

because tokens may be transferred in GET requests.

The port that your Misskey server should listen on.

port: 3001

┌──────────────────────────┐

#───┘ PostgreSQL configuration └────────────────────────────────

db: host: db port: 5432

Database name

db: misskey

Auth

user: example-misskey-user pass: example-misskey-pass

Whether disable Caching queries

#disableCache: true

Extra Connection options

#extra:

ssl: true

┌─────────────────────┐

#───┘ Redis configuration └─────────────────────────────────────

redis: host: redis port: 6379 #family: 0 # 0=Both, 4=IPv4, 6=IPv6 #pass: example-pass #prefix: example-prefix #db: 1

┌─────────────────────────────┐

#───┘ Elasticsearch configuration └─────────────────────────────

#elasticsearch:

host: localhost

port: 9200

ssl: false

user:

pass:

┌───────────────┐

#───┘ ID generation └───────────────────────────────────────────

You can select the ID generation method.

You don't usually need to change this setting, but you can

change it according to your preferences.

Available methods:

aid ... Short, Millisecond accuracy

meid ... Similar to ObjectID, Millisecond accuracy

ulid ... Millisecond accuracy

objectid ... This is left for backward compatibility

ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE

ID SETTINGS AFTER THAT!

id: 'aid'

┌─────────────────────┐

#───┘ Other configuration └─────────────────────────────────────

Whether disable HSTS

#disableHsts: true

Number of worker processes

#clusterLimit: 1

Job concurrency per worker

deliverJobConcurrency: 128

inboxJobConcurrency: 16

Job rate limiter

deliverJobPerSec: 128

inboxJobPerSec: 16

Job attempts

deliverJobMaxAttempts: 12

inboxJobMaxAttempts: 8

IP address family used for outgoing request (ipv4, ipv6 or dual)

#outgoingAddressFamily: ipv4

Syslog option

#syslog:

host: localhost

port: 514

Proxy for HTTP/HTTPS

#proxy: http://127.0.0.1:3128

#proxyBypassHosts: [

'example.com',

'192.0.2.8'

#]

Proxy for SMTP/SMTPS

#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT #proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4 #proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5

Media Proxy

#mediaProxy: https://example.com/proxy

Proxy remote files (default: false)

#proxyRemoteFiles: true

Sign to ActivityPub GET request (default: false)

#signToActivityPubGet: true

#allowedPrivateNetworks: [

'127.0.0.1/32'

#]

Upload or download file size limits (bytes)

#maxFileSize: 262144000


按一下esc,然后:wq 保存退出,之后,

vim docker.env

复制下面的内容,填入(密码如果修改的话注意和上面对应):

# db settings
POSTGRES_PASSWORD=example-misskey-pass
POSTGRES_USER=example-misskey-user
POSTGRES_DB=misskey

最后:

cd ..    # 来到dockercompose文件所在的文件夹下
docker-compose run --rm web yarn run init   # 初始化数据库
docker-compose up -d 

5.5 打开服务器防火墙并访问网页 {#55-打开服务器防火墙并访问网页}

打开防火墙的端口3001

腾讯云打开方法如下: image-20220630215240864 image-20220630220546335

图中示例填的是5230,备注填的是memos,这边我们填3001,示例填misskey ,确定即可(如果你在dockercompose文件里换了8081,这边就需要填8081,以此类推) image-20220819145844555

查看端口是否被占用(以3001为例),输入:

lsof -i:3001  #查看3001端口是否被占用,如果被占用,重新自定义一个端口

如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

如果出现:

-bash: lsof: command not found

运行:

apt install lsof  #安装lsof

如果端口没有被占用(被占用了就修改一下端口,比如改成8081,注意docker命令行里和防火墙都要改)

理论上我们就可以输入http://ip:3001访问了。

注意:

1、不知道服务器IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的IP。

2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。

由于Misskey是需要ssl访问的,所以我们需要一个域名。

而且最好是短一些的域名或者是有意义一点的域名。

奇怪后缀的域名可以到趣域这边搜索看看:https://www.quyu.net/

其他域名可以到namesilo上看看,namesilo上面xyz后缀的域名一年就7块钱,可以年抛。

如果想要长期使用,还是建议买com后缀的域名,更加正规一些,可以输入laodade来获得1美元的优惠(不知道现在还有没有)

namesilo自带隐私保护,咕咕一直在用这家,价格也是这些注册商里面比较低的,关键是他家不像其他家域名注册商,没有七七八八的套路!(就是后台界面有些~~丑~~古老 = =)

【域名购买】Namesilo优惠码和域名解析教程(附带服务器购买推荐和注意事项)

我们接着往下看!

5.6 更新 {#56-更新}

5.6.1 docker-compose部署 {#561-docker-compose部署}

cd /root/data/docker_data/misskey

docker-compose down

cp -r /root/data/docker_data/misskey /root/data/docker_data/misskey.archive # 万事先备份,以防万一,其实这边没必要,因为我们没有映射到本地文件夹

docker-compose pull

docker-compose up -d # 请不要使用docker-compose stop来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。

docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像


提示:

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] 

输入y

利用Docker搭建的应用,更新非常容易~

5.7 卸载 {#57-卸载}

cd /root/data/docker_data/misskey

docker-compose down

rm -rf /root/data/docker_data/misskey # 完全删除映射到本地的数据


可以卸载得很干净。

  1. 反向代理 {#6-反向代理}

6.1 利用Nginx Proxy Manager {#61-利用nginx-proxy-manager}

在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上域名购买、域名解析 视频教程

image-20221016140213282

之后,登陆Nginx Proxy Manager(不会的看这个:安装Nginx Proxy Manager相关教程))

注意:

Nginx Proxy Manager(以下简称NPM)会用到80443端口,所以本机不能占用(比如原来就有Nginx)

直接丢几张图: image-20220502123517401

image-20221016140258381

注意填写对应的域名IP端口,按文章来的话,应该是3001

IP填写:

如果Nginx Proxy Manager和Alltube在同一台服务器上,可以在终端输入:

ip addr show docker0

查看对应的Docker容器内部IP。

否则直接填misskey所在的服务器IP就行。 image-20220403104353185

再次打开,勾选这些:

image-20221016140356324

然后就可以用域名来安装访问了。

6.2 利用宝塔面板 {#62-利用宝塔面板}

发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:

直接新建一个站点,不要数据库,不要php,纯静态即可。

然后打开下面的配置,修改Nginx的配置。

image-20220819150345725

image-20220819150542867

代码如下:

    location / {
      proxy_pass http://127.0.0.1:3001/;       # 注意改成你实际使用的端口
      rewrite ^/(.*)$ /$1 break;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade-Insecure-Requests 1;
      proxy_set_header X-Forwarded-Proto https;
    }

此方法对90%的反向代理都能生效。

有同学可能会问,为什么不直接用宝塔自带的反向代理功能。

image-20220819150730128

也可以,不过咕咕自己之前遇到过当有多个网站需要反代的时候,在这边设置会报错的情况 = =

所以后来就不用了,直接用上面的方法来操作了。

  1. 使用教程 {#7-使用教程}

7.1 安装和配置 {#71-安装和配置}

见咕咕的视频。

详细使用参考:Fediverse不止Mastodon------Misskey介绍

  1. 目前遇到的问题 {#8-目前遇到的问题}

第一次打开速度非常慢 = =

  1. 结尾 {#9-结尾}

祝大家用得开心,有问题可以去GitHub提Issues,也可以在评论区互相交流探讨。

同时,项目处于刚开始阶段,有能力给项目做贡献的同学,也欢迎积极加入到项目中来,贡献自己的一份力量!

参考资料 {#参考资料}

搭建参考:使用Docker最小化部署Misskey

使用参考:Fediverse不止Mastodon------Misskey介绍

官方实例地址:https://misskey.io/

官方网站:https://misskey-hub.net/en/

GitHub地址:https://github.com/misskey-dev/misskey (3k star)

实例列表:https://join.misskey.page/zh-CN/instances (如果你不想自己搭建,也可以加入一个实例来使用)

赞(0)
未经允许不得转载:工具盒子 » 【好玩儿的Docker项目】10分钟搭建一个去中心化微博平台——Misskey |二次元风格、联邦宇宙