From 361e2a53ede2181efdaaf7a503966b789cfd865a Mon Sep 17 00:00:00 2001 From: okxlin Date: Sun, 27 Aug 2023 01:19:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0fossbilling=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8(=E6=84=9F=E8=B0=A2=E7=BD=91=E5=8F=8B?= =?UTF-8?q?=E5=8C=85=E5=AD=90=E5=8F=94=E7=9A=84=E6=8A=95=E7=A8=BF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fossbilling/README.md | 118 +++++++++++++++++++++ apps/fossbilling/data.yml | 20 ++++ apps/fossbilling/latest/.env.sample | 2 + apps/fossbilling/latest/data.yml | 10 ++ apps/fossbilling/latest/docker-compose.yml | 21 ++++ apps/fossbilling/logo.png | Bin 0 -> 9624 bytes 6 files changed, 171 insertions(+) create mode 100644 apps/fossbilling/README.md create mode 100644 apps/fossbilling/data.yml create mode 100644 apps/fossbilling/latest/.env.sample create mode 100644 apps/fossbilling/latest/data.yml create mode 100644 apps/fossbilling/latest/docker-compose.yml create mode 100644 apps/fossbilling/logo.png diff --git a/apps/fossbilling/README.md b/apps/fossbilling/README.md new file mode 100644 index 00000000..f13a1f63 --- /dev/null +++ b/apps/fossbilling/README.md @@ -0,0 +1,118 @@ +# 使用说明 + +- 要求`MySQL8`或以上。 + +- 注意默认资料以存储卷方式存储的。 + +# 原始相关 +*** + +

+
+ + + + FOSSBilling logo + + +
+

+ +
+ +Download button + +[![PHP Composer](https://github.com/FOSSBilling/FOSSBilling/actions/workflows/php-ci.yml/badge.svg)](https://github.com/FOSSBilling/FOSSBilling/actions/workflows/php-ci.yml) +[![Download Latest](https://img.shields.io/github/downloads/FOSSBilling/FOSSBilling/total)](https://github.com/FOSSBilling/FOSSBilling/releases/latest) +[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua) +[![Discord](https://img.shields.io/discord/747432407757488179?color=%237289FA&logo=discord&logoColor=%23FFF)](https://fossbilling.org/discord) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md) +[![CodeFactor](https://www.codefactor.io/repository/github/FOSSBilling/FOSSBilling/badge)](https://www.codefactor.io/repository/github/fossbilling/fossbilling) +[![Financial Contributors](https://opencollective.com/FOSSBilling/tiers/badge.svg?color=brightgreen)](https://opencollective.com/fossbilling) +[![Crowdin](https://badges.crowdin.net/e/c70c78b4ab1e71424ce53dcf6bca9b12/localized.svg)](https://fossbilling.crowdin.com/FOSSBilling) +[![huntr](https://cdn.huntr.dev/huntr_security_badge_mono.svg)](https://huntr.dev/repos/fossbilling/fossbilling/) + +
+ +> **Warning** +> FOSSBilling is under active development but is currently very much beta software. This means that there may be stability or security issues and it is not yet recommended for use in active production environments! Also please be aware that we are not currently strictly following SemVer, and there may be breaking changes at any time. Be careful and make sure you read changelogs before updates! + +**FOSSBilling** is a free open source, billing and client management solution. Whatever the size of your online services business, whether a startup or established, FOSSBilling can help you to automate your invoicing, incoming payments, and client management and communication. + +If you run a web hosting business and are looking for an open-source alternative for billing and client management, then FOSSBilling is the answer. Although it is mostly used as a solution for hosting businesses, there is no reason why you can't use FOSSBilling for any other kind of online business, like digital downloads. + +FOSSBilling is designed to be extensible and to integrate easily with your favorite server management software and payment gateways. + +📥 This is self-hosted software that is free for anyone to install — All you need is a some basic knowledge, a web server, running PHP and a MySQL database. For more details, check the [requirements](#requirements) section. + +## Contents + +- [使用说明](#使用说明) +- [原始相关](#原始相关) + - [Contents](#contents) + - [Requirements](#requirements) + - [Installation](#installation) + - [Contributing](#contributing) + - [Star History](#star-history) + - [Licensing](#licensing) + - [Links](#links) + +## Requirements + +The following environment is highly recommended for running FOSSBilling. It *may* be possible to install and run the software in other environments, but it will be untested and unsupported. + +- A suitable web server (Apache/nginx/LSWS) +- PHP 8.0, 8.1 or 8.2 +- MySQL 8 (or higher), or MariaDB 10.3 (or higher) *Other direct MySQL compatible DBs should also work but are not supported.* +- The Following PHP extensions: + - curl (optional, but recommended) + - intl + - mbstring (optional, but recommended) + - openssl + - pdo_mysql + - xml + - zlib + +## Installation + +For instructions on installing FOSSBilling, check out our [getting started guide](https://fossbilling.org/docs/getting-started). + +## Contributing + +🖥️ Welcome, fellow developer! 🙂 + +First of all, thank you for your interest, and for taking your time to contribute to FOSSBilling. + +FOSSBilling is undergoing a revival and major code update. We are making steps forward day by day but there is still a lot of work to do, and we are happy to welcome new contributors. + +We have a set of guidelines for those wishing to contribute to FOSSBilling, and we encourage you to take a look at them here: **[contributors' guidelines](https://github.com/FOSSBilling/FOSSBilling/blob/master/CONTRIBUTING.md)**. + +Your [pull requests](https://github.com/FOSSBilling/FOSSBilling/pulls) will be highly welcomed. If you're looking for something to start with, you can check the [open issues](https://github.com/FOSSBilling/FOSSBilling/issues) on our GitHub repository. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=FOSSBilling/FOSSBilling&type=Date)](https://star-history.com/#FOSSBilling/FOSSBilling&Date) + +**Got questions? Found a bug? Ideas for improvements?** + +Don't hesitate to create an [issue](https://github.com/FOSSBilling/FOSSBilling/issues), start a discussion in the [FOSSBilling Forum](https://forum.fossbilling.org/), or join us on [Discord](https://fossbilling.org/discord) to say hi. + +⭐ Not a developer? Feel free to help by starring the repository. It helps us catch the attention of new developers who'd like to contribute. + +## Licensing + +FOSSBilling is open source software and is released under the Apache v2.0 license. See [LICENSE](https://github.com/FOSSBilling/FOSSBilling/blob/master/LICENSE) for the full license terms. + +This product includes the following third party work: + +- GeoLite2 data created by MaxMind, available from [https://www.maxmind.com](https://www.maxmind.com). +- Open Source Iconography by [Pictogrammers](https://pictogrammers.com/) licensed under the [Pictogrammers Free License](https://pictogrammers.com/docs/general/license/). + +## Links + +- [Website](https://www.fossbilling.org/) +- [Documentation](https://fossbilling.org/docs) +- [Forum](https://forum.fossbilling.org) +- [Twitter](https://twitter.com/FOSSBilling) +- [Discord](https://fossbilling.org/discord) diff --git a/apps/fossbilling/data.yml b/apps/fossbilling/data.yml new file mode 100644 index 00000000..2177a55f --- /dev/null +++ b/apps/fossbilling/data.yml @@ -0,0 +1,20 @@ +name: FOSSBilling +tags: + - 建站 +title: 一款用于高效计费和客户管理的免费开源解决方案 +type: 建站 +description: 一款用于高效计费和客户管理的免费开源解决方案 +additionalProperties: + key: fossbilling + name: FOSSBilling + tags: + - WebSite + shortDescZh: 一款用于高效计费和客户管理的免费开源解决方案 + shortDescEn: A free open source, billing and client management solution + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://fossbilling.org + github: https://github.com/FOSSBilling/FOSSBilling + document: https://fossbilling.org/docs diff --git a/apps/fossbilling/latest/.env.sample b/apps/fossbilling/latest/.env.sample new file mode 100644 index 00000000..91695fb9 --- /dev/null +++ b/apps/fossbilling/latest/.env.sample @@ -0,0 +1,2 @@ +CONTAINER_NAME="fossbilling" +PANEL_APP_PORT_HTTP="40125" diff --git a/apps/fossbilling/latest/data.yml b/apps/fossbilling/latest/data.yml new file mode 100644 index 00000000..a3e549bd --- /dev/null +++ b/apps/fossbilling/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 40125 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/apps/fossbilling/latest/docker-compose.yml b/apps/fossbilling/latest/docker-compose.yml new file mode 100644 index 00000000..52c482c7 --- /dev/null +++ b/apps/fossbilling/latest/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3' +services: + fossbilling: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:80" + volumes: + - fossbilling:/var/www/html + image: fossbilling/fossbilling:latest + labels: + createdBy: "Apps" + +volumes: + fossbilling: + +networks: + 1panel-network: + external: true diff --git a/apps/fossbilling/logo.png b/apps/fossbilling/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a41d90cdbcd3092f1c5d7d0723df2cfcc009cac GIT binary patch literal 9624 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 O0000