自托管社交媒体管理软件Mixpost

本文软件应网友 ilikeit 的要求而折腾;

什么是 Mixpost ?

Mixpost 是一款强大且多功能的社交媒体管理软件,旨在简化社交媒体操作并增强内容营销策略。可以让您轻松地在一个地方创建、安排、发布和管理社交媒体内容,没有任何限制或每月订阅费。

软件特点:

  • 简化的社交帐户管理: 将所有社交媒体帐户集中在一个地方,以实现更智能、更高效的管理。

  • 高级分析: 深入了解受众的行为和偏好。Mixpost 根据共享的数据为每个平台提供详细的分析。

  • 帖子版本和条件: 为每个社交网络定制您的内容,并自动对高性能帖子进行后续评论,以增强参与度和影响力。

  • 高效媒体库: 快速访问和重复使用图像、GIF 和视频等媒体文件,并与库存图像源集成以获取多样化内容。

  • 团队协作和工作区: 通过专用工作区促进团队协作。讨论想法、管理任务和监控绩效,所有这些都在一个集中的平台上完成。

  • 队列和日历管理: 建立自然的内容发布时间表,并通过易于使用的日历直观地展示您的策略。

  • 可定制的帖子模板: 通过可重复使用的帖子模板提高效率,非常适合保持整个社交媒体渠道的一致性。

  • 动态变量和主题标签组: 插入动态文本并战略性地组织主题标签,以提高帖子效果。

准备

Mixpost 只支持 SSL 协议,比如你访问 http://群晖IP:9020 会自动t跳转到 https://群晖IP:9020/mixpost/login,从而导致错误

最近 cloudflared 总是总是连不上,所以这次用了 tailscale + npm 来验证,这是个内网的方案,所以本文只有安装,不涉及功能

文章传送门:用自定义域名访问tailscale节点

反向代理

假设我们实际访问地址为: https://mixpost.xxsu.cf

域名 局域网地址 备注
mixpost.xxsu.cf http://192.168.0.197:9020 Mixpost 的访问地址

在 npm 中的设置

SSL 都勾选了

安装

在群晖上以 Docker 方式安装。

mixpost 有三个版本,分别是 Mixpost LiteMixpost ProMixpost Enterprise,后两个都需要先申请 license

在注册表中搜索 mixpost ,选择第一个 inovector/mixpost,版本选择 latest

本文写作时, Lite 版的latest 版本对应为 v1.7.1

涉及到 3 个容器,采用 docker-compose 方式安装,参照了官方的文档:https://docs.mixpost.app/enterprise/installation/docker

env.txt

改名是为了方便在 Filestation 编辑修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# The name of your application.  
APP_NAME=Mixpost

# Key used to encrypt and decrypt sensitive data. Generate this using the following tool:
# https://mixpost.app/tools/encryption-key-generator
APP_KEY=base64:vrBakOK2znbnc+z9IegfB6yn9yKpXnNybSDJlw7Q9Tk=

# Debug mode setting. Set to `false` for production environments.
APP_DEBUG=false

# Your app's domain or subdomain, without the 'http://' or 'https://' prefix.
APP_DOMAIN=mixpost.xxsu.cf

# Full application URL is automatically configured; no modification required.
APP_URL=https://${APP_DOMAIN}

# MySQL connection setup.
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=mixpost_db
DB_USERNAME=mixpost_user
DB_PASSWORD=mixpost_123456

# Specify the email address to be used for SSL certificate registration and notifications.
# SSL_EMAIL=wbsu2003@gmail.com

变量都有说明,捡主要的说一下

  • APP_DOMAIN:填入我们在前面设置的域名
  • APP_KEY:有两种方式生成,一种是直接访问 https://mixpost.app/tools/encryption-key-generator ,将生成的 key 替换到 APP_KEY

另一种是直接留空,等容器启动后,进入容器后执行

1
2
# 生成应用程序密钥  
php artisan key:generate

相对来说,第一种更简单一些

更多环境变量的说明,请参考官方文档:https://docs.mixpost.app/lite/configuration/environment-variables

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
version: '3.1'

services:
mixpost:
image: inovector/mixpost:latest
container_name: mixpost-app
restart: unless-stopped
env_file:
- env.txt
ports:
- 9020:80
volumes:
- ./storage:/var/www/html/storage/app
- ./logs:/var/www/html/storage/logs
depends_on:
- mysql
- redis

mysql:
#image: 'mysql/mysql-server:8.0'
image: 'mysql:8.0'
container_name: mixpost-mysql
restart: unless-stopped
# ports:
# - 3309:3306
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p ${DB_PASSWORD}"]
retries: 3
timeout: 5s

redis:
image: 'redis:latest'
container_name: mixpost-redis
restart: unless-stopped
command: redis-server --appendonly yes --replica-read-only no
volumes:
- ./redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
retries: 3
timeout: 5s

为了省事,数据库老苏没用 mysql/mysql-server:8.0,而是用了机器中已有的 mysql:8.0,这两个镜像有什么区别?是否会导致问题,老苏也不是太清楚。如果不放心,建议还是更换成官方要求的镜像吧

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 mixpost 和 子目录
mkdir -p /volume1/docker/mixpost/{logs,mysql,redis,storage}

# 进入 mixpost 目录
cd /volume1/docker/mixpost

# 修改目录权限
chmod -R 775 storage

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

按我们前面 APP_DOMAIN 中的设置,在浏览器中输入 https://域名 就能看到登录界面

系统提供了一个默认用户

1
2
Email:admin@example.com
Password:changeme

如果你想用自己的用户名登录,可以执行下面的操作

1
2
3
4
5
# 进入容器  
docker exec --user root -it mixpost-app /bin/bash

# 创建一个用户
php artisan mixpost-auth:create

登录成功后的主界面

ADD ACCOUNTS 添加社交账号

  • CONFIGURE SERVICES 设置第三方服务的凭证

  • Add account 设置 Mastodon

故障排除

如果出现异常情况

  • 首先应该查看容器的状态是否正常

  • 其次查看容器的日志

  • 最后要看看 laravel.log

Timed out

多容器启动时,比较容易出现超时,尤其是老苏这种机械硬盘的老机器

可以将 COMPOSE_HTTP_TIMEOUT 的值设大一点

1
2
# 默认值是 60
export COMPOSE_HTTP_TIMEOUT=1200

Internal error

登录后显示下面这种情况

经查 laravel.log ,显示是数据库 Connection refused,说明数据库没有连上,需要检查 DB_HOSTDB_PORT 等数据库的相关设置是否正确

登录失败

这个说明数据库连接没问题,但是数据库中没有相应的表单和记录,原因不清楚,可以进容器做 migrate

1
2
3
4
5
# 进入容器  
docker exec --user root -it mixpost-app /bin/bash

# 运行数据库迁移
php artisan migrate

老苏只能列一些自己遇到的问题,其他的请查阅官方的问题排查指南:https://docs.mixpost.app/troubleshooting/

参考文档

inovector/mixpost: Mixpost - Self-hosted social media management software (Buffer alternative)
地址:https://github.com/inovector/mixpost

Self-hosted, Open Source Social Media Management - Mixpost
地址:https://mixpost.app/

Mixpost: Comprehensive Self-hosted Social Media Management Software
地址:https://docs.mixpost.app/