前言 {#前言}
这周上班上入魔了,礼拜五下班还以为是礼拜四,导致电脑忘记带回来了,里面正好有前一天还没剪辑的视频 = =
这段时间实在是没时间录视频(之后可能会越来越忙),今天趁着周末,更新一期。
素材来自留言区:
咕咕尝试搜索了下,发现还挺好玩的,结合网上找的一些资料,分享一下Misskey+Nginx Proxy Manager的搭建经验。
整个搭建过程一开始参考了官网的,发现稍微有点复杂,然后搜索到了下面两个小伙伴的经验分享,非常有帮助,感谢付出!
搭建分享:使用Docker最小化部署Misskey
本教程基本~~借鉴~~抄自上面的搭建教程 XD
使用分享:Fediverse不止Mastodon------Misskey介绍
- 简介 {#1-简介}
Misskey是由日本开发者しゅいろ(syuilo)所创立的去中心化社交网络服务,其官方实例是misskey.io。Misskey和Mastodon一样,采用了ActivityPub协议,因此可以与联邦宇宙Fediverse互通。
简单来说,它就是一个去中心化的微博!
我们创建的则是一个实例,不同的实例是可以互相访问互动的。
1.1 相关地址 {#11-相关地址}
官方实例地址:https://misskey.io/ (如果你不想自己搭建,可以直接加入官方的实例,不过貌似是日文的。)
官方网站:https://misskey-hub.net/en/
GitHub地址:https://github.com/misskey-dev/misskey (3k star)
实例列表:https://join.misskey.page/zh-CN/instances (如果你不想自己搭建,也可以加入一个实例来使用)
- 项目展示 {#2-项目展示}
- 搭建环境 {#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以上,硬盘越大越好。
- 搭建视频 {#4-搭建视频}
YouTube:https://youtu.be/pjHEKwJVI1I
哔哩哔哩【高清版本可以点击去吐槽到B站观看】:
- 搭建方式 {#5-搭建方式}
安装系统(腾讯云轻量应用服务器) {#安装系统腾讯云轻量应用服务器}
腾讯云轻量服务器最大的特点就是"轻量",相比CVM,更适合小白上手,这边我们之间选择Docker基础镜像,就可以省去后面安装Docker的步骤(如果你非要用国内的服务器,这边装的Docker镜像还会帮你配置好国内镜像源,让你加速访问docker镜像资源)。
登陆(腾讯云轻量应用服务器) {#登陆腾讯云轻量应用服务器}
5.1 服务器前期配置 {#51-服务器前期配置}
服务器初始设置,参考:
这边由于我们用的是腾讯云轻量应用服务器,系统默认就帮我们创建了名字是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
选择18
,然后输入你想要扩容的数值即可。
使用腾讯云轻量应用服务器的小伙伴可以直接跳到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 | ---> || Proxy (443) | ---> | 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
腾讯云打开方法如下:
图中示例填的是5230
,备注填的是memos
,这边我们填3001
,示例填misskey
,确定即可(如果你在dockercompose文件里换了8081
,这边就需要填8081
,以此类推)
查看端口是否被占用(以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 # 完全删除映射到本地的数据
可以卸载得很干净。
- 反向代理 {#6-反向代理}
6.1 利用Nginx Proxy Manager {#61-利用nginx-proxy-manager}
在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上 (域名购买、域名解析 视频教程)
之后,登陆Nginx Proxy Manager(不会的看这个:安装Nginx Proxy Manager (相关教程))
注意:
Nginx Proxy Manager(以下简称NPM)会用到
80
、443
端口,所以本机不能占用(比如原来就有Nginx)
直接丢几张图:
注意填写对应的
域名
、IP
和端口
,按文章来的话,应该是3001
IP填写:
如果Nginx Proxy Manager和Alltube在同一台服务器上,可以在终端输入:
ip addr show docker0
查看对应的Docker容器内部IP。
否则直接填misskey
所在的服务器IP就行。
再次打开,勾选这些:
然后就可以用域名来安装访问了。
6.2 利用宝塔面板 {#62-利用宝塔面板}
发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:
直接新建一个站点,不要数据库,不要php,纯静态即可。
然后打开下面的配置,修改Nginx的配置。
代码如下:
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%的反向代理都能生效。
有同学可能会问,为什么不直接用宝塔自带的反向代理功能。
也可以,不过咕咕自己之前遇到过当有多个网站需要反代的时候,在这边设置会报错的情况 = =
所以后来就不用了,直接用上面的方法来操作了。
- 使用教程 {#7-使用教程}
7.1 安装和配置 {#71-安装和配置}
见咕咕的视频。
详细使用参考:Fediverse不止Mastodon------Misskey介绍
- 目前遇到的问题 {#8-目前遇到的问题}
第一次打开速度非常慢 = =
- 结尾 {#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 (如果你不想自己搭建,也可以加入一个实例来使用)