Skip to content

快速参考

  • 维护者:
    努普拉菲尔

  • 获取帮助的途径:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签和相应的 Dockerfile 链接

快速参考(续)

什么是 Friendica?

Friendica 是一个去中心化的通信平台,集成了社交通信。我们的平台链接到独立的社交项目和企业服务。

logo

如何使用此图像

这些图像被设计用于微服务环境。您可以选择两种类型的图像。

apache 标签包含一个完整的 Friendica 安装,包括一个 apache 网络服务器。它的设计易于使用,可以让您快速运行。这也是 latest 标签和未进一步指定的版本标签的默认设置。

第二种选择是一个 fpm 容器。它基于 php-fpm 映像,并运行一个为您的 Friendica 服务器提供服务的 fastCGI 进程。要使用此映像,必须将其与任何可以将 http 请求代理到容器的 FastCGI 端口的 Web 服务器结合使用。

Try in PWD (管理员电子邮件: root@friendica.local

使用 apache 图像

您需要至少一个其他的 mariadb/mysql-container 来将其链接到 Friendica。

apache 镜像包含一个 Web 服务器并暴露 80 端口。要启动容器,请输入:

$ docker run -d -p 8080:80 --network some-network friendica

现在,您可以从主机系统访问 Friendica 安装向导,地址为 http://localhost:8080/。

使用 fpm 镜像

要使用 fpm 镜像,您需要一个额外的 Web 服务器,该服务器可以将 http 请求代理到容器的 fpm 端口。对于 fpm 连接,此容器公开端口 9000。在大多数情况下,您可能希望使用另一个容器或主机作为代理。如果您使用主机,则可以直接在端口 9000 上访问您的 Friendica 容器。如果您使用另一个容器,请确保将它们添加到同一个 Docker 网络中(通过 docker run --network <NAME> ...docker-compose 文件)。在这两种情况下,您都不想将 fpm 端口映射到您的主机。

$ docker run -d friendica:fpm

由于 fastCGI 进程无法提供静态文件(样式表、图像等),因此 Web 服务器需要访问这些文件。这可以通过 volumes-from 选项实现。您可以在 docker-compose 部分找到更多信息。

后台任务

Friendica 需要后台任务来获取和发送各种消息并维护完整的实例。此设置对 Friendica 节点至关重要。有两种方法可以为 Friendica 启用后台任务:

  • 使用默认图像并手动设置后台任务(请参阅 Friendica 安装)
  • 使用默认镜像(apache、fpm、fpm-alpine)并启动一个专用的 cron 实例,并使用 cron.sh 作为启动命令(如本示例)

可能的环境变量

Friendica 设置

  • FRIENDICA_URL Friendica 的完整 URL,包括协议、域名和子路径(例如:https://friendica.local/sub/)。
  • FRIENDICA_TZ Friendica 服务器的默认本地化。
  • FRIENDICA_LANG Friendica 服务器的默认语言。
  • FRIENDICA_SITENAME Friendica 服务器的站点名称。
  • FRIENDICA_NO_VALIDATION 如果设置为 true ,则 URL 和电子邮件验证将被禁用。
  • FRIENDICA_DATA 设置存储提供程序的名称(例如 Filesystem 以使用文件系统),默认是数据库后端。
  • FRIENDICA_DATA_DIR Friendica 服务器的数据目录(默认:/var/www/data)。
  • FRIENDICA_UPGRADE 强制启动 Friendica 更新,即使是相同版本(默认: false )。

Friendica 日志记录

  • FRIENDICA_DEBUGGING 如果设置为 true ,则启用 Friendica 的日志记录。
  • FRIENDICA_LOGFILE (可选)日志文件的路径(默认:/var/www/friendica.log)。
  • FRIENDICA_LOGLEVEL (可选)要记录的日志级别(默认:通知)。
  • FRIENDICA_LOGGER (可选)设置类型 - 流、系统日志、单一日志(默认:流)。
  • FRIENDICA_SYSLOG_FLAGS (可选)如果使用 syslog,请设置相应的标志(默认: LOG_PID | LOG_ODELAY | LOG_CONS | LOG_PERROR )。
  • FRIENDICA_SYSLOG_FACTORY (可选)如果使用 syslog,请设置相应的工厂(默认值: LOG_USER )。

数据库(安装时需要)

  • MYSQL_USER 使用 mysql / mariadb 的数据库用户的用户名。
  • MYSQL_PASSWORD 使用 mysql / mariadb 的数据库用户密码。
  • MYSQL_DATABASE 使用 mysql / mariadb 的数据库名称。
  • MYSQL_HOST 使用 mysql / mariadb 的数据库服务器的主机名。
  • MYSQL_PORT 使用 mysql / mariadb 的数据库服务器端口(默认: 3306

锁定驱动程序(Redis)

  • REDIS_HOST Redis 实例的主机名(在锁定的情况下)。
  • REDIS_PORT (可选)redis 实例的端口(用于锁定的情况)。
  • REDIS_PW (可选)redis 实例的密码(用于锁定的情况)。
  • REDIS_DB (可选)redis 实例的数据库实例(在锁定的情况下)。

PHP 限制

  • PHP_MEMORY_LIMIT (默认 512M )这设置了脚本允许分配的最大内存量(以字节为单位)。这旨在帮助防止编写不当的脚本占用所有可用内存,但如果设置得太紧,可能会阻止正常操作。
  • PHP_UPLOAD_LIMIT (默认 512M )这设置了大文件的上传限制( post_max_sizeupload_max_filesize )。请注意,您可能需要根据您的客户端、Web 服务器或操作系统更改其他限制。

管理员账户

因为 Friendica 将管理员账户链接到特定的邮件地址,所以您必须为 MAILNAME 设置一个有效的地址。

邮件设置

二进制的 ssmtp 用于 Friendica 的 mail() 支持。

您必须正确设置 --hostname/-h 参数,以便为 mail() 命令使用正确的域名。

您必须为 SMTP 环境变量设置有效的 SMTP-MTA,以在 Friendica 中启用邮件支持。例如,有效的 SMTP-MTA 可以是 mx.example.org

以下是 SMTP 示例可能使用的环境变量。

  • SMTP SMTP 邮件网关的地址。(必填)
  • SMTP_PORT SMTP 邮件网关的端口。(默认:587)
  • SMTP_DOMAIN 发送方域。(必填 - 例如 friendica.local
  • SMTP_FROM 发送者用户部分的地址。(默认: no-reply - 例如 no-reply@friendica.local)
  • SMTP_TLS 使用 TLS 连接 SMTP 邮件网关。(默认:空)
  • SMTP_STARTTLS 使用 STARTTLS 连接 SMTP 邮件网关。(默认: On
  • SMTP_AUTH SMTP 邮件网关的身份验证模式。(默认值: On
  • SMTP_AUTH_USER SMTP 邮件网关的用户名。(默认:空)
  • SMTP_AUTH_PASS SMTP 邮件网关的密码。(默认:空)

添加到 STARTTLS

tls_starttls 设置要么是 On ,要么是 Off ,但永远不会未设置。这是因为如果未设置, starttls 将默认激活(这需要额外的配置,如单独的端口)。

数据库设置

您必须将 Friendica 容器添加到与正在运行的数据库容器相同的网络中,例如 --network some-network ,然后在设置时使用 mysql 作为数据库主机。

持久数据

Friendica 安装和所有超出数据库(文件上传等)的数据都存储在未命名的 Docker 卷 volume /var/www/html 中。Docker 守护进程将在 Docker 目录 /var/lib/docker/volumes/... 中存储该数据。这意味着即使容器崩溃、停止或删除,您的数据也会被保存。要使您的数据在升级时保持持久并获得备份访问权限,请使用命名的 Docker 卷或挂载主机文件夹。要实现这一点,您需要为数据库容器和 Friendica 创建一个卷。

Friendica:

  • /var/www/html/ 存放所有 Friendica 数据的文件夹

    $ docker run -d \ -v friendica-vol-1:/var/www/html \ --network some-network friendica

数据库:

  • /var/lib/mysql MySQL / MariaDB 数据

    $ docker run -d \ -v mysql-vol-1:/var/lib/mysql \ --network some-network mariadb

自动安装

Friendica 镜像支持通过环境变量进行自动配置。您可以在首次运行时预先配置安装页面上要求的所有内容。要启用自动安装,您必须设置以下环境变量:

  • FRIENDICA_URL Friendica 的完整 URL,包括协议、域名和子路径(例如:https://friendica.local/sub/)。
  • FRIENDICA_ADMIN_MAIL 管理员的电子邮件地址。
  • MYSQL_USER 使用 mysql / mariadb 的数据库用户的用户名。
  • MYSQL_PASSWORD 使用 mysql / mariadb 的数据库用户密码。
  • MYSQL_DATABASE 使用 mysql / mariadb 的数据库名称。
  • MYSQL_HOST 使用 mysql / mariadb 的数据库服务器的主机名。

Docker 机密

作为通过环境变量传递敏感信息的替代方法,可以将 _FILE 添加到前面列出的环境变量中,从而导致初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/ 文件中的 Docker 机密加载密码。例如:

version: '3.2'

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
       - MYSQL_DATABASE_FILE=/run/secrets/mysql_database
       - MYSQL_USER_FILE=/run/secrets/mysql_user
       - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
    secrets:
      - mysql_database
      - mysql_password
      - mysql_user

  app:
    image: friendica
    restart: always
    volumes:
      - friendica:/var/www/html
    ports:
      - "8080:80"
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE_FILE=/run/secrets/mysql_database
      - MYSQL_USER_FILE=/run/secrets/mysql_user
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - FRIENDICA_ADMIN_MAIL_FILE=/run/secrets/friendica_admin_mail
    depends_on:
      - db
    secrets:
      - friendica_admin_mail
      - mysql_database
      - mysql_password
      - mysql_user

volumes:
  db:
  friendica:

secrets:
  friendica_admin_mail:
    file: ./friendica_admin_mail.txt # put admin email to this file
  mysql_database:
    file: ./mysql_database.txt # put mysql database name to this file
  mysql_password:
    file: ./mysql_password.txt # put mysql password to this file
  mysql_user:
    file: ./mysql_user.txt # put mysql username to this file

当前,这仅支持 FRIENDICA_ADMIN_MAILMYSQL_DATABASEMYSQL_PASSWORDMYSQL_USER

图像维护

更新到较新版本

您必须从中心( docker pull friendica )拉取最新的映像。稳定分支在每次启动时都会被检查,如果没有找到安装或使用了新的映像,它将被更新。

使用 docker-compose 运行此镜像

使用 docker-compose 文件是获得功能齐全且功能正常的设置的最简单方法。设置系统的可能性太多了,因此这里仅提供一些您需要注意的示例。

首先,请确保您选择了正确的基础镜像(fpm 或 apache)并添加了您想要的功能(见下文)。在任何情况下,您都需要添加一个数据库容器和 Docker 卷,以便轻松访问您的持久数据。如果您希望您的服务器可以从互联网访问,则必须添加 HTTPS 加密!更多信息请见下文。

基础版本 - apache

此版本将使用 apache 镜像并添加一个 mariaDB 容器。卷设置为保持数据持久化。此设置不提供 ssl 加密,旨在在代理后面运行。

在运行此安装程序之前,请确保设置变量 MYSQL_PASSWORD

version: '2'

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_USER=friendica
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=friendica
      - MYSQL_RANDOM_ROOT_PASSWORD=yes

  app:
    image: friendica
    restart: always
    volumes:
      - friendica:/var/www/html
    ports:
      - "8080:80"
    environment:
      - MYSQL_HOST=db
      - MYSQL_USER=friendica
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=friendica
      - FRIENDICA_ADMIN_MAIL=root@friendica.local      
    depends_on:
      - db

volumes:
  db:
  friendica:

然后运行 docker-compose up -d ,现在您可以从您的系统在 http://localhost:8080/ 访问 Friendica。

基础版本 - FPM

使用 FPM 映像时,您需要另一个容器在端口 80 上充当 Web 服务器,并将请求代理到 Friendica 容器。在此示例中,一个简单的 nginx 容器与 Friendica-fpm 映像和 MariaDB 数据库容器结合使用。数据存储在 Docker 卷中。nginx 容器还需要访问 Friendica 安装中的静态文件。它通过 volumes_from 选项访问挂载到 Friendica 的所有卷。nginx 的配置存储在配置文件 nginx.conf 中,该文件被挂载到容器中。

在示例部分可以找到一个示例。

由于此设置不包括加密,因此应在代理后面运行。

此示例的前提条件:

  • 在运行安装程序之前,请确保设置变量 MYSQL_PASSWORDMYSQL_USER
  • 在与 docker-compose.yml 文件相同的目录中创建一个 nginx.conf (从示例中获取)

    version: '2'

    services: db: image: mariadb restart: always volumes: - db:/var/lib/mysql environment: - MYSQL_USER=friendica - MYSQL_PASSWORD= - MYSQL_DATABASE=friendica - MYSQL_RANDOM_ROOT_PASSWORD=yes

    app: image: friendica:fpm restart: always volumes: - friendica:/var/www/html
    environment: - MYSQL_HOST=db - MYSQL_USER=friendica - MYSQL_PASSWORD= - MYSQL_DATABASE=friendica - FRIENDICA_ADMIN_MAIL=root@friendica.local networks: - proxy-tier - default

    web: image: nginx ports: - 8080:80 links: - app volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro
    restart: always networks: - proxy-tier

    volumes: db: friendica:

    networks: proxy-tier:

然后运行 docker-compose up -d ,现在您可以从您的系统在 http://localhost:8080/ 访问 Friendica。

DEV/RC 映像的特殊设置

*-dev*-rc 分支在每次 Docker 启动时直接下载并验证,以确保使用最新的源。参数 FRIENDICA_UPGRADE 需要为 true (默认值: false )才能激活此行为。

问题/事项

如果您在使用图像时遇到任何问题,请访问我们的 Github 存储库并提交问题。

图像变体

friendica 图像有多种类型,每种都针对特定的用例进行了设计。

friendica:<version>

这是默认的镜像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以用作构建其他镜像的基础。

friendica:<version>-alpine

该镜像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中使用。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此通常会生成更精简的镜像。

当您主要关注最终图像大小尽可能小时,此变体很有用。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 等,因此软件通常会根据其 libc 要求/假设的深度遇到问题。有关可能出现的问题以及使用基于 Alpine 的映像的一些优缺点比较的更多讨论,请参阅此 Hacker News 评论线程。

为了最小化镜像大小,在基于 Alpine 的镜像中包含额外的相关工具(如 gitbash )是不常见的。使用此镜像作为基础,在您自己的 Dockerfile 中添加您需要的东西(如果您不熟悉如何安装软件包,请参阅 alpine 镜像描述中的示例)。

许可证

查看此映像中包含的软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证的约束(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 friendica/ 目录中找到。

对于任何预构建的映像使用,映像用户有责任确保对此映像的任何使用都符合其中包含的所有软件的任何相关许可证。