Docker部署Mastodon最新版v4.1.4

2023-10-19 20:59

本文主要是介绍Docker部署Mastodon最新版v4.1.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

只部署服务,不讲原理。

本机配置:MacBook Pro M2 Max 32 GB

Mastodon 介绍

Mastodon 是一个自由、开源的去中心化的微博客平台,类似于 Twitter,但是使用分布式的架构,用户可以在不同的实例(服务器)之间自由迁移,并且可以互相关注和互相交流。Mastodon 的用户可以发布短文本、图片、视频、音频等内容,并且可以使用标签来组织和浏览内容。

Mastodon 的用户界面简洁、易用,支持自定义主题和语言,同时也支持多种客户端应用程序,包括 Web、Android、iOS 等。Mastodon 的消息是加密的,用户可以选择公开或私密地发布消息,同时也可以选择将消息限制在特定的用户或实例之间。

Mastodon 的去中心化架构使得其具有较高的安全性和可靠性,不易受到单点故障和攻击。同时,Mastodon 的开源性质也使得其具有较高的灵活性和可扩展性,开发者可以根据自己的需求进行定制和扩展。

总之,Mastodon 是一个自由、开源、去中心化的微博客平台,为用户提供了更加安全、可靠、灵活的社交体验。

(介绍来自ChatGPT3.5)

部署实践

搜索Mastodon你会发现有很多容器化部署的文章,可以参考借鉴。从完全部署运行后给我的感觉,只要认真看过官方文档,就能顺利的进行部署。

需要注意的细节,写最前面了

1,本地没有build镜像,使用的是官方镜像:

docker pull ghcr.io/mastodon/mastodon

2,networks与官方不同,因为我本地容器服务internal_、external_被占用了。另外traefik网络是为了与反向代理服务进行互通。不了解的可以参考以前文章

官方:

    networks:- internal_network- external_network

本地配置:

    networks:- mastodon_networks- traefik

3,一定要保证容器之间是互通的,否则找不到服务,会导致启动失败。

4,.env.production 配置文件在初始化安装的时候不需要引入!

5,创建网卡

docker network create mastodon_networks
1,使用官方docker-compose进行配置拆分

官方docker-compose配置、官方README 根据官方的配置文件共分为db、es、web、streaming、sidekiq5个服务融合在一起,不利于后期维护和服务更新。下面进行配置拆分。共拆分为4个服务。

1.1,PostgreSQL 配置

保存以下配置文件名为:docker-compose.postgresql.yml

version: '3'
services:postgresql:restart: alwaysimage: postgres:14-alpineshm_size: 256mb# 可视化连接使用ports:- 54322:5432networks:- mastodon_networkshealthcheck:test: ['CMD', 'pg_isready', '-U', 'postgres']volumes:- ./postgres14:/var/lib/postgresql/dataenvironment:POSTGRES_HOST_AUTH_METHOD: trust# 设置个密码 可视化工具连接使用POSTGRESQL_PASSWORD: bitnami1
networks:mastodon_networks:external: true
1.2,Redis 配置

保存以下配置文件名为:docker-compose.redis.yml

version: '3'
services:redis:restart: alwaysimage: redis:7-alpinehealthcheck:test: ['CMD', 'redis-cli', 'ping']volumes:- ./redis:/datanetworks:- mastodon_networks
networks:mastodon_networks:external: true
1.3,Elasticsearch 配置

保存以下配置文件名为:docker-compose.elasticsearch.yml

version: '3'services:elasticsearch:restart: alwaysimage: docker.elastic.co/elasticsearch/elasticsearch:7.17.4environment:- "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"- "xpack.license.self_generated.type=basic"- "xpack.security.enabled=false"- "xpack.watcher.enabled=false"- "xpack.graph.enabled=false"- "xpack.ml.enabled=false"- "bootstrap.memory_lock=true"- "cluster.name=es-mastodon"- "discovery.type=single-node"- "thread_pool.write.queue_size=1000"networks:- mastodon_networkshealthcheck:test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]volumes:- ./elasticsearch:/usr/share/elasticsearch/dataulimits:memlock:soft: -1hard: -1nofile:soft: 65536hard: 65536ports:- '9200:9200'networks:mastodon_networks:external: true
1.4,服务web、streaming、sidekiq的配置

.env.production.sample 复制文件内容并保存为:.env.production

保存以下配置文件名为:docker-compose.start.yml

version: '3'
services:web:image: ghcr.io/mastodon/mastodonrestart: alwaysenv_file: .env.productionenvironment:RAILS_ENV: productioncommand: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"healthcheck:# prettier-ignoretest:['CMD-SHELL','wget -q --spider --proxy=off localhost:3000/health || exit 1']volumes:- ./public/system:/mastodon/public/systemnetworks:- mastodon_networks- traefikstreaming:image: ghcr.io/mastodon/mastodonrestart: alwaysenv_file: .env.productioncommand: node ./streamingenvironment:- "NODE_ENV=production"healthcheck:# prettier-ignoretest:['CMD-SHELL','wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']networks:- mastodon_networks- traefiksidekiq:image: ghcr.io/mastodon/mastodonrestart: alwaysenv_file: .env.productionenvironment:- "RAILS_ENV=production"command: bundle exec sidekiqnetworks:- mastodon_networks- traefikvolumes:- ./public/system:/mastodon/public/systemhealthcheck:test: [ 'CMD-SHELL', "ps aux | grep '[s]idekiq 6' || false" ]networks:mastodon_networks:external: truetraefik:external: true
1.5,配置前端代理服务

NGINX配置参考官方配置nginx-configuration,删除了一下其他配置。修改了client_max_body_size为100,解决上传大图片返回413错误。(自行调整)

保存以下配置文件名为:docker-compose.index.yml

version: "3.6"
services:mastodon-halobug:image: nginx:1.21.4-alpinerestart: alwaysexpose:- 80volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:ro- ./nginx.index.conf:/etc/nginx/conf.d/default.confnetworks:- traefik- mastodon_networkslabels:- "traefik.enable=true"- "traefik.docker.network=traefik"- "traefik.http.routers.mastodon-halobug.entrypoints=https"- "traefik.http.routers.mastodon-halobug.tls=true"- "traefik.http.routers.mastodon-halobug.rule=Host(`chat.halobug.cn`)"- "traefik.http.services.mastodon-halobug-backend.loadbalancer.server.scheme=http"- "traefik.http.services.mastodon-halobug-backend.loadbalancer.server.port=80"logging:driver: "json-file"options:max-size: "1m"
networks:mastodon_networks:external: truetraefik:external: true

保存以下配置文件名为:nginx.index.conf

map $http_upgrade $connection_upgrade {default upgrade;''      close;
}
server {listen 80;server_name default_server;keepalive_timeout    70;sendfile             on;client_max_body_size 100m;root /home/mastodon/live/public;gzip on;gzip_disable "msie6";gzip_vary on;gzip_proxied any;gzip_comp_level 6;gzip_buffers 16 8k;gzip_http_version 1.1;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;add_header Strict-Transport-Security "max-age=31536000";location / {try_files $uri @proxy;}location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {add_header Cache-Control "public, max-age=31536000, immutable";try_files $uri @proxy;}location /sw.js {add_header Cache-Control "public, max-age=0";try_files $uri @proxy;}location @proxy {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_set_header Proxy "";proxy_pass_header Server;proxy_pass http://web:3000;proxy_buffering on;proxy_redirect off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;tcp_nodelay on;}location /api/v1/streaming {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_set_header Proxy "";proxy_pass http://streaming:4000;proxy_buffering off;proxy_redirect off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;tcp_nodelay on;}
}
2,搭建文件存储服务
2.1,运行Minio

保存以下配置文件名为:docker-compose.minio.yml

version: "3"services:mastodon-minio-nginx:image: nginx:1.21.4-alpinevolumes:- ./nginx.minio.conf:/etc/nginx/conf.d/default.conf:roexpose:- 80environment:- NGINX_HOST=localhost- NGINX_PORT=80networks:- traefik- mastodon_networkslabels:- "traefik.enable=true"- "traefik.docker.network=traefik"- "traefik.http.routers.mastodon-oss-http.entrypoints=http"- "traefik.http.routers.mastodon-oss-http.rule=Host(`oss.halobug.cn`)"- "traefik.http.routers.mastodon-oss-https.entrypoints=https"- "traefik.http.routers.mastodon-oss-https.tls=true"- "traefik.http.routers.mastodon-oss-https.rule=Host(`oss.halobug.cn`)"- "traefik.http.services.mastodon-oss-backend.loadbalancer.server.scheme=http"- "traefik.http.services.mastodon-oss-backend.loadbalancer.server.port=80"depends_on:- miniominio:image: minio/minio:RELEASE.2022-01-08T03-11-54Zvolumes:- ./minio/data:/data:zcommand: minio server /data --address 0.0.0.0:80 --listeners 1  --console-address 0.0.0.0:9001environment:MINIO_ROOT_USER: umf3V1C3Hu5TzCDDqIXFbDDviYGhV627MINIO_ROOT_PASSWORD: OqIwA1GJADWgCf5yvlRTKTJ6bTYAhaO9exqX5lo3GlOlLfVcIbn4v2CsuamBMINIO_REGION_NAME: cn-homelab-1MINIO_BROWSER: onMINIO_BROWSER_REDIRECT_URL: https://mastodon-s3.halobug.cnMINIO_PROMETHEUS_AUTH_TYPE: publicrestart: alwaysports:- 9001:9001expose:- 80networks:- traefik- mastodon_networkslabels:- "traefik.enable=true"- "traefik.docker.network=traefik"- "traefik.http.middlewares.minio-gzip.compress=true"- "traefik.http.routers.minio-admin.middlewares=minio-gzip"- "traefik.http.routers.minio-admin.entrypoints=https"- "traefik.http.routers.minio-admin.tls=true"- "traefik.http.routers.minio-admin.rule=Host(`mastodon-s3.halobug.cn`)"- "traefik.http.routers.minio-admin.service=minio-admin-backend"- "traefik.http.services.minio-admin-backend.loadbalancer.server.scheme=http"- "traefik.http.services.minio-admin-backend.loadbalancer.server.port=80"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:80/minio/health/live"]interval: 3sretries: 12logging:driver: "json-file"options:max-size: "10m"
networks:traefik:external: truemastodon_networks:external: true

保存以下配置文件名为:nginx.minio.conf

server {listen 80;server_name localhost;keepalive_timeout 70;sendfile on;client_max_body_size 80m;location / {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 $scheme;proxy_set_header Host $http_host;proxy_connect_timeout 300;proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass http://minio/mastodon/;}location /health {access_log off;return 200 "ok";}
}

运行minio

 docker-compose -f docker-compose.minio.yml up -d

2.2,初始化Minio

保存以下配置文件名为:docker-compose.minio.init.yml

version: "3"
services:minio-client:image: minio/mc:RELEASE.2022-01-07T06-01-38Zentrypoint: >/bin/sh -c "/usr/bin/mc config host rm local;/usr/bin/mc config host add --quiet --api s3v4 local http://minio umf3V1C3Hu5TzCDDqIXFbDDviYGhV627 OqIwA1GJADWgCf5yvlRTKTJ6bTYAhaO9exqX5lo3GlOlLfVcIbn4v2CsuamB;/usr/bin/mc mb --quiet local/mastodon/;/usr/bin/mc policy set public local/mastodon;"      networks:- traefiknetworks:traefik:external: true

运行命令(运行一次即可)

 docker-compose -f docker-compose.minio.init.yml up

本地绑定hosts

127.0.0.1 mastodon-s3.halobug.cn oss.halobug.cn

浏览器访问 http://127.0.0.1:9001

初始化完成后查看Buckets

到此存储服务部署完成,下面开始启动基础服务。

所有配置文件

3,启动基础服务
3.1,运行PostgreSQL
docker-compose -f docker-compose.postgresql.yml up -d
3.2,运行Redis
docker-compose -f docker-compose.redis.yml up -d
3.3,运行Elasticsearch
docker-compose -f docker-compose.elasticsearch.yml up -d

全部使用官方镜像,启动成功后如下图所示:

4,安装Mastodon
4.1,容器内执行安装命令

上一步已经说了,安装的注意事项。再次提醒心急的同学们。

.env.production 配置文件在初始化安装的时候不需要引入

执行安装命令:

docker-compose -f docker-compose.start.yml run --rm web bundle exec rake mastodon:setup

按照安装引导进行配置

安装完成后的配置

# Generated with mastodon:setup on 2023-07-13 04:02:06 UTC# Some variables in this file will be interpreted differently whether you are
# using docker-compose or not.LOCAL_DOMAIN=chat.halobug.cn
SINGLE_USER_MODE=false
SECRET_KEY_BASE=d2f61bffbf601042a51bbbae7732ebb93a5803ac40713e3275220aa5894d1132bd4e0870c4fa3f17f99f5d7e06e7c83a46ec0f31b31c60b38242d8d07f042b96
OTP_SECRET=cecbae5d4595c57299b3d30eabc21f8c16c54d508a66547bbff107ad6d029a9129c252067aae6b9b725c7ce547a68b65a1eff5fc34efb112a35089fab193820d
VAPID_PRIVATE_KEY=9G4BjizL7_qyW8IwDhF-ILX_fdURffERFK8HT7sGrOs=
VAPID_PUBLIC_KEY=BIuyba_wWuguaTSZMqiFPOd6CzIv3wHKwdiD38oeOm5_IYfFIC0F3YOK7Muh7XO2EwLf3Og0ToprvQ-lejhsEpk=
DB_HOST=postgresql
DB_PORT=5432
DB_NAME=postgres
DB_USER=postgres
DB_PASS=bitnami1
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none
SMTP_ENABLE_STARTTLS=auto
SMTP_FROM_ADDRESS=Mastodon <notifications@chat.halobug.cn>

之后你会发现运行有个异常,因为docker-compose.start.yml文件里还有streaming、sidekiq这两个服务。并且到此使用的还是官方默认的配置文件、找不到对应的基础服务造成的。按照输出的配置重新修改即可。

4.2,将安装后配置参数值,复制至官方配置文件中

需要注意的是,安装引导没有Elasticsearch的指导。在配置文件中加上即可,ES_USER、ES_PASS设为空。

SMTP配置:我有阿里云服务所以直接配置了。(你也可以自己申请SMTP,自己搜索吧)

4.3,S3存储配置
S3_ENABLED=true
S3_PROTOCOL=https
S3_BUCKET=mastodon
S3_REGION=cn-homelab-1
S3_ALIAS_HOST=oss.halobug.cn
S3_ENDPOINT=https://mastodon-s3.halobug.cn
AWS_ACCESS_KEY_ID=umf3V1C3Hu5TzCDDqIXFbDDviYGhV627
AWS_SECRET_ACCESS_KEY=OqIwA1GJADWgCf5yvlRTKTJ6bTYAhaO9exqX5lo3GlOlLfVcIbn4v2CsuamB

因为是单机部署,容器间通讯用无法使用https,所以在docker-compose.start.yml中web、streaming、sidekiq 配置中增加extra_hosts。192.168.12.89 为局域网IP。

    extra_hosts:- "mastodon-s3.halobug.cn:192.168.12.89"

配置参考图:

4.4,将env_file的注释“打开”

4.1注释了配置文件,现在重新“打开” 

之后进入启动服务的流程

5,启动服务
5.1,运行Mastodon

启动命令:

docker-compose -f docker-compose.start.yml up -d

查看日志:

docker-compose -f docker-compose.start.yml logs -f

启动后如图所示

正常运行后,还差最后一步,即可对外提供服务。

5.2,启动 docker-compose.index.yml

自行配置https,可参考以前文章。

启动命令:

docker-compose -f docker-compose.index.yml up -d

本地绑定hosts。

127.0.0.1 chat.halobug.cn
6,注册使用
6.1,访问

浏览器访问 https://chat.halobug.cn

6.2,注册账号进行测试
6.3,邮件验证

过不了多久就收到一封邮件进行确认。

6.4,点开邮件中的连接,验证即可。成功后的页面
6.5,发布你的第一条动态吧。你好,世界!

到此服务搭建成功。

参考3.4版本的文章

这篇关于Docker部署Mastodon最新版v4.1.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242328

相关文章

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

Ubuntu20.04离线安装Docker

1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把3个离线安装包拷贝到ubuntu本地执行以下命令 sudo dpkg -i containerd.io_1.4.6-1_amd64.deb sudo dpkg -i docker-ce-c

利用Frp实现内网穿透(docker实现)

文章目录 1、WSL子系统配置2、腾讯云服务器安装frps2.1、创建配置文件2.2 、创建frps容器 3、WSL2子系统Centos服务器安装frpc服务3.1、安装docker3.2、创建配置文件3.3 、创建frpc容器 4、WSL2子系统Centos服务器安装nginx服务 环境配置:一台公网服务器(腾讯云)、一台笔记本电脑、WSL子系统涉及知识:docker、Frp

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d

青龙面板部署通用教程,含服务器、路由器、X86等部署方法

1. 拉取镜像/更新镜像 docker pull whyour/qinglong:latest 2. 删除镜像 docker rmi whyour/qinglong:latest 3. 启动容器 普通服务器 docker run -dit \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db:

宝塔面板部署青龙面板教程【简单易上手】

首先,你得有一台部署了宝塔面板的服务器(自己用本地电脑也可以)。 宝塔面板部署自行百度一下,很简单,这里就不走流程了,官网版本就可以,无需开心版。 首先,打开宝塔面板的软件商店,找到下图这个软件(Docker管理器)安装,青龙面板还是安装在docker里,这里依赖宝塔面板安装和管理docker。 安装完成后,进入SSH终端管理,输入代码安装青龙面板。ssh可以直接宝塔里操作,也可以安装ssh连接

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

[Centos7] 部署Zabbix5.0

目录 0 卸载 Zabbix1 准备工作1.1 关闭防火墙1.2 关闭SELinux1.3 重启服务器1.4 安装MySQL 2 配置 Zabbix yum 源2.1 安装zabbix的软件仓库配置包2.2 安装 Software Collections 仓库2.3 修改 Zabbix 仓库配置文件 3 安装 Zabbix3.1 遇到报错Requires: libmysqlclient.so

Docker Compose--安装Nginx--方法/实例

原文网址:Docker Compose--安装Nginx--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker Compose如何安装Nginx。 目录结构 ├── config│   ├── cert│   │   ├── xxx_bundle.pem│   │   └── xxx.key│   ├── conf.d│   └── nginx.co

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。