From 33a17779ddcf8199da87a56e26412654bb6604a5 Mon Sep 17 00:00:00 2001 From: okxlin Date: Mon, 17 Apr 2023 18:56:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0flarum=E7=9A=84=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flarum/metadata/app.json | 6 +- flarum/metadata/logo.png | Bin 37065 -> 9739 bytes flarum/versions/1.7.1/README.md | 285 ++++++------------------------- flarum/versions/latest/README.md | 285 ++++++------------------------- list.json | 6 +- 5 files changed, 104 insertions(+), 478 deletions(-) diff --git a/flarum/metadata/app.json b/flarum/metadata/app.json index 21860597..68e750c5 100644 --- a/flarum/metadata/app.json +++ b/flarum/metadata/app.json @@ -8,7 +8,7 @@ "type": "website", "limit": 0, "crossVersionUpdate": true, - "website": "https://github.com/crazy-max/docker-flarum", - "github": "https://github.com/crazy-max/docker-flarum", - "document": "https://github.com/crazy-max/docker-flarum" + "website": "https://flarum.org/", + "github": "https://github.com/flarum/flarum", + "document": "https://docs.flarum.org/" } diff --git a/flarum/metadata/logo.png b/flarum/metadata/logo.png index e3511daae97d860327d052cd9e7bdd9b71ca1cf4..fce38a703624c90bba3a687d2975ca1dd9649072 100644 GIT binary patch literal 9739 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 Z{|DUn)&JR!TG;>q002ovPDHLkV1fsRdKdrz literal 37065 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

+# 使用说明 +## 账户密码 +- 初始账户: flarum +- 初始密码: flarum + +## 中文语言包 + +> 中文语言包: +>> - https://github.com/flarum-lang/chinese-simplified + +使用说明: + +- Flarum v0.1.0-beta.8 及以上版本 + +进入容器终端运行以下安装中文语言包,详细可查看原项目文档。 +``` +composer require flarum-lang/chinese-simplified +php flarum cache:clear +``` + +## 所使用docker镜像相关: + +> 项目链接 +>> - https://hub.docker.com/r/crazymax/flarum +>> - https://github.com/crazy-max/docker-flarum + +# 原始相关

- Latest Version - Build Status - Docker Stars - Docker Pulls -
Become a sponsor - Donate Paypal +

-## About +

+Total Downloads +Latest Stable Version +License +

-Docker image for [Flarum](https://flarum.org/), the next-generation forum -software that makes online discussion fun. +## About Flarum -> **Note** -> -> Want to be notified of new releases? Check out 🔔 [Diun (Docker Image Update Notifier)](https://github.com/crazy-max/diun) -> project! +**[Flarum](https://flarum.org/) is a delightfully simple discussion platform for your website.** It's fast and easy to use, with all the features you need to run a successful community. It is designed to be: -___ +* **Fast and simple.** No clutter, no bloat, no complex dependencies. Flarum is built with PHP so it’s quick and easy to deploy. The interface is powered by Mithril, a performant JavaScript framework with a tiny footprint. -- [About](#about) -- [Features](#features) -- [Build locally](#build-locally) -- [Image](#image) -- [Environment variables](#environment-variables) - - [General](#general) - - [Flarum](#flarum) - - [Database](#database) -- [Volumes](#volumes) -- [Ports](#ports) -- [Usage](#usage) - - [Docker Compose](#docker-compose) - - [Command line](#command-line) -- [Upgrade](#upgrade) -- [Notes](#notes) - - [First launch](#first-launch) - - [Manage extensions](#manage-extensions) - - [Sending mails with SMTP](#sending-mails-with-smtp) -- [Contributing](#contributing) -- [License](#license) +* **Beautiful and responsive.** This is forum software for humans. Flarum is carefully designed to be consistent and intuitive across platforms, out-of-the-box. -## Features +* **Powerful and extensible.** Customize, extend, and integrate Flarum to suit your community. Flarum’s architecture is amazingly flexible, with a powerful Extension API. -* Run as non-root user -* Multi-platform image -* [s6-overlay](https://github.com/just-containers/s6-overlay/) as process supervisor -* [msmtpd SMTP relay](https://github.com/crazy-max/docker-msmtpd) image to send emails -* [Traefik](https://github.com/containous/traefik-library-image) as reverse proxy and creation/renewal of Let's Encrypt certificates (see [this template](examples/traefik)) +![screenshot](https://flarum.org/assets/img/home-screenshot.png) -## Build locally +## Installation -```shell -git clone https://github.com/crazy-max/docker-flarum.git -cd docker-flarum - -# Build image and output to docker (default) -docker buildx bake - -# Build multi-platform image -docker buildx bake image-all -``` - -## Image - -| Registry | Image | -|--------------------------------------------------------------------------------------------------|---------------------------------| -| [Docker Hub](https://hub.docker.com/r/crazymax/flarum/) | `crazymax/flarum` | -| [GitHub Container Registry](https://github.com/users/crazy-max/packages/container/package/flarum) | `ghcr.io/crazy-max/flarum` | - -Following platforms for this image are available: - -``` -$ docker run --rm mplatform/mquery crazymax/flarum:latest -Image: crazymax/flarum:latest - * Manifest List: Yes - * Supported platforms: - - linux/amd64 - - linux/arm/v6 - - linux/arm/v7 - - linux/arm64 -``` - -## Environment variables - -### General - -* `TZ`: The timezone assigned to the container (default `UTC`) -* `PUID`: Flarum user id (default `1000`) -* `PGID`: Flarum group id (default `1000`) -* `MEMORY_LIMIT`: PHP memory limit (default `256M`) -* `UPLOAD_MAX_SIZE`: Upload max size (default `16M`) -* `CLEAR_ENV`: Clear environment in FPM workers (default `yes`) -* `OPCACHE_MEM_SIZE`: PHP OpCache memory consumption (default `128`) -* `LISTEN_IPV6`: Enable IPv6 for Nginx (default `true`) -* `REAL_IP_FROM`: Trusted addresses that are known to send correct replacement addresses (default `0.0.0.0/32`) -* `REAL_IP_HEADER`: Request header field whose value will be used to replace the client address (default `X-Forwarded-For`) -* `LOG_IP_VAR`: Use another variable to retrieve the remote IP address for access [log_format](http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) on Nginx. (default `remote_addr`) - -### Flarum - -* `FLARUM_DEBUG`: Enables or disables debug mode, used to troubleshoot issues (default `false`) -* `FLARUM_BASE_URL`: The URL to your Flarum installation **required** -* `FLARUM_FORUM_TITLE`: Flarum forum title, only used during first installation (default `Flarum Dockerized`) -* `FLARUM_API_PATH`: Flarum api path (default `api`) -* `FLARUM_ADMIN_PATH`: Flarum admin path (default `admin`) -* `FLARUM_POWEREDBY_HEADER`: Set Flarum's `X-Powered-By` header (default `true`) -* `FLARUM_REFERRER_POLICY`: Referrer policy (default `same-origin`) -* `FLARUM_COOKIE_SAMESITE`: Set `SameSite` attribute of `Set-Cookie` (default `lax`) - -### Database - -* `DB_HOST`: MySQL database hostname / IP address **required** -* `DB_PORT`: MySQL database port (default `3306`) -* `DB_NAME`: MySQL database name (default `flarum`) -* `DB_USER`: MySQL user (default `flarum`) -* `DB_PASSWORD`: MySQL password -* `DB_PREFIX`: MySQL database prefix (default `flarum_`) -* `DB_NOPREFIX`: Enforce no prefix for the MySQL database (default `false`) -* `DB_TIMEOUT`: Time in seconds after which we stop trying to reach the MySQL server (useful for clusters, default `60`) - -> 💡 `DB_USER_FILE` and `DB_PASSWORD_FILE` can be used to fill in the value from a file, especially for Docker's -> secrets feature. - -## Volumes - -* `/data`: Contains assets, extensions and storage - -> :warning: Note that the volume should be owned by the user/group with the specified `PUID` and `PGID`. If you -> don't give the volume correct permissions, the container may not start. - -## Ports - -* `8000`: HTTP port - -## Usage - -### Docker Compose - -Docker compose is the recommended way to run this image. You can use the following -[docker compose template](examples/compose/docker-compose.yml), then run the container: - -```bash -docker-compose up -d -docker-compose logs -f -``` - -### Command line - -You can also use the following minimal command: - -```bash -docker run -d -p 8000:8000 --name flarum \ - -v $(pwd)/data:/data \ - -e "DB_HOST=db" \ - -e "FLARUM_BASE_URL=http://127.0.0.1:8000" \ - crazymax/flarum:latest -``` - -> `-e "DB_HOST=db"`
-> :warning: `db` must be a running MySQL instance - -## Upgrade - -You can upgrade Flarum automatically through the UI, it works well. But I recommend to recreate the container -whenever I push an update: - -```bash -docker-compose pull -docker-compose up -d -``` - -## Notes - -### First launch - -On first launch, an initial administrator user will be created: - -| Login | Password | -|----------|----------| -| `flarum` | `flarum` | - -### Manage extensions - -You can install [Flarum extensions](https://extiverse.com/) from the command line using a -[specially crafted script](rootfs/usr/local/bin/extension) with this image: - -`docker-compose exec flarum extension require ` - -To remove an extension: - -`docker-compose exec flarum extension remove ` - -To list all extensions: - -`docker-compose exec flarum extension list` - -Example with [`fof/upload`](https://extiverse.com/extension/fof/upload) extension: - -``` -$ docker-compose exec flarum extension require fof/upload -Using version ^1.0 for fof/upload -./composer.json has been updated -Running composer update fof/upload -Loading composer repositories with package information -Updating dependencies -Lock file operations: 5 installs, 0 updates, 0 removals - - Locking fof/upload (1.0.0) - - Locking guzzlehttp/guzzle (7.3.0) - - Locking guzzlehttp/promises (1.4.1) - - Locking psr/http-client (1.0.1) - - Locking softcreatr/php-mime-detector (3.2.0) -Writing lock file -Installing dependencies from lock file (including require-dev) -Package operations: 5 installs, 0 updates, 0 removals - - Downloading softcreatr/php-mime-detector (3.2.0) - - Downloading psr/http-client (1.0.1) - - Downloading guzzlehttp/promises (1.4.1) - - Downloading guzzlehttp/guzzle (7.3.0) - - Downloading fof/upload (1.0.0) - - Installing softcreatr/php-mime-detector (3.2.0): Extracting archive - - Installing psr/http-client (1.0.1): Extracting archive - - Installing guzzlehttp/promises (1.4.1): Extracting archive - - Installing guzzlehttp/guzzle (7.3.0): Extracting archive - - Installing fof/upload (1.0.0): Extracting archive -2 package suggestions were added by new dependencies, use `composer suggest` to see details. -Generating autoload files -70 packages you are using are looking for funding. -Use the `composer fund` command to find out more! -fof/upload extension added -Clearing the cache... -``` - -> :warning: You cannot use [Bazaar marketplace extension](https://discuss.flarum.org/d/5151-bazaar-the-extension-marketplace) -> to install extensions for now. - -### Sending mails with SMTP - -You can use our SMTP relay `msmtpd` service published on port `2500` and declared in our [`docker-compose.yml`](examples/compose/docker-compose.yml): - -![](.github/smtp-settings.png) +Read the **[Installation guide](https://docs.flarum.org/install)** to get started. For support, refer to the [documentation](https://docs.flarum.org/), and ask questions on the [community forum](https://discuss.flarum.org/) or [Discord chat](https://flarum.org/discord/). ## Contributing -Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You -can also support this project by [**becoming a sponsor on GitHub**](https://github.com/sponsors/crazy-max) or by making -a [Paypal donation](https://www.paypal.me/crazyws) to ensure this journey continues indefinitely! +Thank you for considering contributing to Flarum! Please read the **[Contributing guide](https://docs.flarum.org/contributing)** to learn how you can help. -Thanks again for your support, it is much appreciated! :pray: +This repository only holds the Flarum skeleton application. Most development happens in [flarum/core](https://github.com/flarum/core). + +## Security Vulnerabilities + +If you discover a security vulnerability within Flarum, please follow our [security policy](https://github.com/flarum/core/security/policy) so we can address it promptly. ## License -MIT. See `LICENSE` for more details. +Flarum is open-source software licensed under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE). + diff --git a/flarum/versions/latest/README.md b/flarum/versions/latest/README.md index 77220bc1..5fad07f3 100644 --- a/flarum/versions/latest/README.md +++ b/flarum/versions/latest/README.md @@ -1,256 +1,69 @@ -

+# 使用说明 +## 账户密码 +- 初始账户: flarum +- 初始密码: flarum + +## 中文语言包 + +> 中文语言包: +>> - https://github.com/flarum-lang/chinese-simplified + +使用说明: + +- Flarum v0.1.0-beta.8 及以上版本 + +进入容器终端运行以下安装中文语言包,详细可查看原项目文档。 +``` +composer require flarum-lang/chinese-simplified +php flarum cache:clear +``` + +## 所使用docker镜像相关: + +> 项目链接 +>> - https://hub.docker.com/r/crazymax/flarum +>> - https://github.com/crazy-max/docker-flarum + +# 原始相关

- Latest Version - Build Status - Docker Stars - Docker Pulls -
Become a sponsor - Donate Paypal +

-## About +

+Total Downloads +Latest Stable Version +License +

-Docker image for [Flarum](https://flarum.org/), the next-generation forum -software that makes online discussion fun. +## About Flarum -> **Note** -> -> Want to be notified of new releases? Check out 🔔 [Diun (Docker Image Update Notifier)](https://github.com/crazy-max/diun) -> project! +**[Flarum](https://flarum.org/) is a delightfully simple discussion platform for your website.** It's fast and easy to use, with all the features you need to run a successful community. It is designed to be: -___ +* **Fast and simple.** No clutter, no bloat, no complex dependencies. Flarum is built with PHP so it’s quick and easy to deploy. The interface is powered by Mithril, a performant JavaScript framework with a tiny footprint. -- [About](#about) -- [Features](#features) -- [Build locally](#build-locally) -- [Image](#image) -- [Environment variables](#environment-variables) - - [General](#general) - - [Flarum](#flarum) - - [Database](#database) -- [Volumes](#volumes) -- [Ports](#ports) -- [Usage](#usage) - - [Docker Compose](#docker-compose) - - [Command line](#command-line) -- [Upgrade](#upgrade) -- [Notes](#notes) - - [First launch](#first-launch) - - [Manage extensions](#manage-extensions) - - [Sending mails with SMTP](#sending-mails-with-smtp) -- [Contributing](#contributing) -- [License](#license) +* **Beautiful and responsive.** This is forum software for humans. Flarum is carefully designed to be consistent and intuitive across platforms, out-of-the-box. -## Features +* **Powerful and extensible.** Customize, extend, and integrate Flarum to suit your community. Flarum’s architecture is amazingly flexible, with a powerful Extension API. -* Run as non-root user -* Multi-platform image -* [s6-overlay](https://github.com/just-containers/s6-overlay/) as process supervisor -* [msmtpd SMTP relay](https://github.com/crazy-max/docker-msmtpd) image to send emails -* [Traefik](https://github.com/containous/traefik-library-image) as reverse proxy and creation/renewal of Let's Encrypt certificates (see [this template](examples/traefik)) +![screenshot](https://flarum.org/assets/img/home-screenshot.png) -## Build locally +## Installation -```shell -git clone https://github.com/crazy-max/docker-flarum.git -cd docker-flarum - -# Build image and output to docker (default) -docker buildx bake - -# Build multi-platform image -docker buildx bake image-all -``` - -## Image - -| Registry | Image | -|--------------------------------------------------------------------------------------------------|---------------------------------| -| [Docker Hub](https://hub.docker.com/r/crazymax/flarum/) | `crazymax/flarum` | -| [GitHub Container Registry](https://github.com/users/crazy-max/packages/container/package/flarum) | `ghcr.io/crazy-max/flarum` | - -Following platforms for this image are available: - -``` -$ docker run --rm mplatform/mquery crazymax/flarum:latest -Image: crazymax/flarum:latest - * Manifest List: Yes - * Supported platforms: - - linux/amd64 - - linux/arm/v6 - - linux/arm/v7 - - linux/arm64 -``` - -## Environment variables - -### General - -* `TZ`: The timezone assigned to the container (default `UTC`) -* `PUID`: Flarum user id (default `1000`) -* `PGID`: Flarum group id (default `1000`) -* `MEMORY_LIMIT`: PHP memory limit (default `256M`) -* `UPLOAD_MAX_SIZE`: Upload max size (default `16M`) -* `CLEAR_ENV`: Clear environment in FPM workers (default `yes`) -* `OPCACHE_MEM_SIZE`: PHP OpCache memory consumption (default `128`) -* `LISTEN_IPV6`: Enable IPv6 for Nginx (default `true`) -* `REAL_IP_FROM`: Trusted addresses that are known to send correct replacement addresses (default `0.0.0.0/32`) -* `REAL_IP_HEADER`: Request header field whose value will be used to replace the client address (default `X-Forwarded-For`) -* `LOG_IP_VAR`: Use another variable to retrieve the remote IP address for access [log_format](http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) on Nginx. (default `remote_addr`) - -### Flarum - -* `FLARUM_DEBUG`: Enables or disables debug mode, used to troubleshoot issues (default `false`) -* `FLARUM_BASE_URL`: The URL to your Flarum installation **required** -* `FLARUM_FORUM_TITLE`: Flarum forum title, only used during first installation (default `Flarum Dockerized`) -* `FLARUM_API_PATH`: Flarum api path (default `api`) -* `FLARUM_ADMIN_PATH`: Flarum admin path (default `admin`) -* `FLARUM_POWEREDBY_HEADER`: Set Flarum's `X-Powered-By` header (default `true`) -* `FLARUM_REFERRER_POLICY`: Referrer policy (default `same-origin`) -* `FLARUM_COOKIE_SAMESITE`: Set `SameSite` attribute of `Set-Cookie` (default `lax`) - -### Database - -* `DB_HOST`: MySQL database hostname / IP address **required** -* `DB_PORT`: MySQL database port (default `3306`) -* `DB_NAME`: MySQL database name (default `flarum`) -* `DB_USER`: MySQL user (default `flarum`) -* `DB_PASSWORD`: MySQL password -* `DB_PREFIX`: MySQL database prefix (default `flarum_`) -* `DB_NOPREFIX`: Enforce no prefix for the MySQL database (default `false`) -* `DB_TIMEOUT`: Time in seconds after which we stop trying to reach the MySQL server (useful for clusters, default `60`) - -> 💡 `DB_USER_FILE` and `DB_PASSWORD_FILE` can be used to fill in the value from a file, especially for Docker's -> secrets feature. - -## Volumes - -* `/data`: Contains assets, extensions and storage - -> :warning: Note that the volume should be owned by the user/group with the specified `PUID` and `PGID`. If you -> don't give the volume correct permissions, the container may not start. - -## Ports - -* `8000`: HTTP port - -## Usage - -### Docker Compose - -Docker compose is the recommended way to run this image. You can use the following -[docker compose template](examples/compose/docker-compose.yml), then run the container: - -```bash -docker-compose up -d -docker-compose logs -f -``` - -### Command line - -You can also use the following minimal command: - -```bash -docker run -d -p 8000:8000 --name flarum \ - -v $(pwd)/data:/data \ - -e "DB_HOST=db" \ - -e "FLARUM_BASE_URL=http://127.0.0.1:8000" \ - crazymax/flarum:latest -``` - -> `-e "DB_HOST=db"`
-> :warning: `db` must be a running MySQL instance - -## Upgrade - -You can upgrade Flarum automatically through the UI, it works well. But I recommend to recreate the container -whenever I push an update: - -```bash -docker-compose pull -docker-compose up -d -``` - -## Notes - -### First launch - -On first launch, an initial administrator user will be created: - -| Login | Password | -|----------|----------| -| `flarum` | `flarum` | - -### Manage extensions - -You can install [Flarum extensions](https://extiverse.com/) from the command line using a -[specially crafted script](rootfs/usr/local/bin/extension) with this image: - -`docker-compose exec flarum extension require ` - -To remove an extension: - -`docker-compose exec flarum extension remove ` - -To list all extensions: - -`docker-compose exec flarum extension list` - -Example with [`fof/upload`](https://extiverse.com/extension/fof/upload) extension: - -``` -$ docker-compose exec flarum extension require fof/upload -Using version ^1.0 for fof/upload -./composer.json has been updated -Running composer update fof/upload -Loading composer repositories with package information -Updating dependencies -Lock file operations: 5 installs, 0 updates, 0 removals - - Locking fof/upload (1.0.0) - - Locking guzzlehttp/guzzle (7.3.0) - - Locking guzzlehttp/promises (1.4.1) - - Locking psr/http-client (1.0.1) - - Locking softcreatr/php-mime-detector (3.2.0) -Writing lock file -Installing dependencies from lock file (including require-dev) -Package operations: 5 installs, 0 updates, 0 removals - - Downloading softcreatr/php-mime-detector (3.2.0) - - Downloading psr/http-client (1.0.1) - - Downloading guzzlehttp/promises (1.4.1) - - Downloading guzzlehttp/guzzle (7.3.0) - - Downloading fof/upload (1.0.0) - - Installing softcreatr/php-mime-detector (3.2.0): Extracting archive - - Installing psr/http-client (1.0.1): Extracting archive - - Installing guzzlehttp/promises (1.4.1): Extracting archive - - Installing guzzlehttp/guzzle (7.3.0): Extracting archive - - Installing fof/upload (1.0.0): Extracting archive -2 package suggestions were added by new dependencies, use `composer suggest` to see details. -Generating autoload files -70 packages you are using are looking for funding. -Use the `composer fund` command to find out more! -fof/upload extension added -Clearing the cache... -``` - -> :warning: You cannot use [Bazaar marketplace extension](https://discuss.flarum.org/d/5151-bazaar-the-extension-marketplace) -> to install extensions for now. - -### Sending mails with SMTP - -You can use our SMTP relay `msmtpd` service published on port `2500` and declared in our [`docker-compose.yml`](examples/compose/docker-compose.yml): - -![](.github/smtp-settings.png) +Read the **[Installation guide](https://docs.flarum.org/install)** to get started. For support, refer to the [documentation](https://docs.flarum.org/), and ask questions on the [community forum](https://discuss.flarum.org/) or [Discord chat](https://flarum.org/discord/). ## Contributing -Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You -can also support this project by [**becoming a sponsor on GitHub**](https://github.com/sponsors/crazy-max) or by making -a [Paypal donation](https://www.paypal.me/crazyws) to ensure this journey continues indefinitely! +Thank you for considering contributing to Flarum! Please read the **[Contributing guide](https://docs.flarum.org/contributing)** to learn how you can help. -Thanks again for your support, it is much appreciated! :pray: +This repository only holds the Flarum skeleton application. Most development happens in [flarum/core](https://github.com/flarum/core). + +## Security Vulnerabilities + +If you discover a security vulnerability within Flarum, please follow our [security policy](https://github.com/flarum/core/security/policy) so we can address it promptly. ## License -MIT. See `LICENSE` for more details. +Flarum is open-source software licensed under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE). + diff --git a/list.json b/list.json index fadb8a17..99c9a2e4 100644 --- a/list.json +++ b/list.json @@ -108,9 +108,9 @@ "type": "website", "limit": 0, "crossVersionUpdate": true, - "website": "https://github.com/crazy-max/docker-flarum", - "github": "https://github.com/crazy-max/docker-flarum", - "document": "https://github.com/crazy-max/docker-flarum" + "website": "https://flarum.org/", + "github": "https://github.com/flarum/flarum", + "document": "https://docs.flarum.org/" } ] }