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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/halobug/article/details/131704066
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/242328

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它