From 7c4b3e9b893d6e39a7e4934f9388a4e179a6b8bb Mon Sep 17 00:00:00 2001 From: zhengkunwang223 Date: Mon, 27 Feb 2023 18:58:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20mariadb=20docker-r?= =?UTF-8?q?egistry=20nexus=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/docker-registry/metadata/logo.png | Bin 0 -> 7191 bytes apps/docker-registry/versions/2.8.1/README.md | 73 +++++++ .../versions/2.8.1/config.json | 12 ++ .../versions/2.8.1/docker-compose.yml | 16 ++ apps/list.json | 49 ++++- apps/mariadb/metadata/logo.png | Bin 0 -> 33880 bytes apps/mariadb/versions/10.9.5/README.md | 78 ++++++++ apps/mariadb/versions/10.9.5/config.json | 20 ++ .../versions/10.9.5/docker-compose.yml | 17 ++ apps/nexus/metadata/logo.png | Bin 0 -> 1245 bytes apps/nexus/versions/3.47.1/README.md | 184 ++++++++++++++++++ apps/nexus/versions/3.47.1/config.json | 12 ++ apps/nexus/versions/3.47.1/docker-compose.yml | 18 ++ 13 files changed, 477 insertions(+), 2 deletions(-) create mode 100644 apps/docker-registry/metadata/logo.png create mode 100644 apps/docker-registry/versions/2.8.1/README.md create mode 100644 apps/docker-registry/versions/2.8.1/config.json create mode 100644 apps/docker-registry/versions/2.8.1/docker-compose.yml create mode 100644 apps/mariadb/metadata/logo.png create mode 100644 apps/mariadb/versions/10.9.5/README.md create mode 100644 apps/mariadb/versions/10.9.5/config.json create mode 100644 apps/mariadb/versions/10.9.5/docker-compose.yml create mode 100644 apps/nexus/metadata/logo.png create mode 100644 apps/nexus/versions/3.47.1/README.md create mode 100644 apps/nexus/versions/3.47.1/config.json create mode 100644 apps/nexus/versions/3.47.1/docker-compose.yml diff --git a/apps/docker-registry/metadata/logo.png b/apps/docker-registry/metadata/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa75b2a7ad30dd168678a322e907a5c373fb8f3 GIT binary patch literal 7191 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 Z_ + +[![Build Status](https://github.com/distribution/distribution/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/distribution/distribution/actions?query=workflow%3ACI) +[![GoDoc](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/distribution/distribution) +[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) +[![codecov](https://codecov.io/gh/distribution/distribution/branch/main/graph/badge.svg)](https://codecov.io/gh/distribution/distribution) +[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Fdistribution.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Fdistribution?ref=badge_shield) +[![OCI Conformance](https://github.com/distribution/distribution/workflows/conformance/badge.svg)](https://github.com/distribution/distribution/actions?query=workflow%3Aconformance) + +This repository contains the following components: + +|**Component** |Description | +|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **registry** | An implementation of the [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec). | +| **libraries** | A rich set of libraries for interacting with distribution components. Please see [godoc](https://pkg.go.dev/github.com/distribution/distribution) for details. **Note**: The interfaces for these libraries are **unstable**. | +| **documentation** | Docker's full documentation set is available at [docs.docker.com](https://docs.docker.com). This repository [contains the subset](docs/) related just to the registry. | + +### How does this integrate with Docker, containerd, and other OCI client? + +Clients implement against the OCI specification and communicate with the +registry using HTTP. This project contains a client implementation which +is currently in use by Docker, however, it is deprecated for the +[implementation in containerd](https://github.com/containerd/containerd/tree/master/remotes/docker) +and will not support new features. + +### What are the long term goals of the Distribution project? + +The _Distribution_ project has the further long term goal of providing a +secure tool chain for distributing content. The specifications, APIs and tools +should be as useful with Docker as they are without. + +Our goal is to design a professional grade and extensible content distribution +system that allow users to: + +* Enjoy an efficient, secured and reliable way to store, manage, package and + exchange content +* Hack/roll their own on top of healthy open-source components +* Implement their own home made solution through good specs, and solid + extensions mechanism. + +## Contribution + +Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute +issues, fixes, and patches to this project. If you are contributing code, see +the instructions for [building a development environment](BUILDING.md). + +## Communication + +For async communication and long running discussions please use issues and pull requests on the github repo. +This will be the best place to discuss design and implementation. + +For sync communication we have a #distribution channel in the [CNCF Slack](https://slack.cncf.io/) +that everyone is welcome to join and chat about development. + +## Licenses + +The distribution codebase is released under the [Apache 2.0 license](LICENSE). +The README.md file, and files in the "docs" folder are licensed under the +Creative Commons Attribution 4.0 International License. You may obtain a +copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/. diff --git a/apps/docker-registry/versions/2.8.1/config.json b/apps/docker-registry/versions/2.8.1/config.json new file mode 100644 index 000000000..6dc000809 --- /dev/null +++ b/apps/docker-registry/versions/2.8.1/config.json @@ -0,0 +1,12 @@ +{ + "formFields": [ + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 5000, + "envKey": "PANEL_APP_PORT_HTTP" + } + ] +} \ No newline at end of file diff --git a/apps/docker-registry/versions/2.8.1/docker-compose.yml b/apps/docker-registry/versions/2.8.1/docker-compose.yml new file mode 100644 index 000000000..336866780 --- /dev/null +++ b/apps/docker-registry/versions/2.8.1/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' +services: + docker-registry: + image: registry:2.8.1 + restart: always + container_name: ${CONTAINER_NAME} + ports: + - ${PANEL_APP_PORT_HTTP}:5000 + networks: + - 1panel-network + volumes: + - ./data:/var/lib/registry + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/list.json b/apps/list.json index 3238f8a7f..57d055a93 100644 --- a/apps/list.json +++ b/apps/list.json @@ -3,11 +3,11 @@ "tags": [ { "key": "WebSite", - "name": "网站" + "name": "建站" }, { "key": "Server", - "name": "服务器" + "name": "Web 服务器" }, { "key": "Database", @@ -222,6 +222,51 @@ "website": "https://www.mongodb.com/", "github": "https://github.com/mongodb/mongo", "document": "https://www.mongodb.com/docs/" + }, + { + "key": "mariadb", + "name": "MariaDB", + "tags": ["Database"], + "versions": ["10.9.5"], + "shortDescZh": "MYSQL 复刻版", + "shortDescEn": "The open source relational database", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://mariadb.org/", + "github": "https://github.com/MariaDB/server/", + "document": "https://mariadb.org/documentation/" + }, + { + "key": "docker-registry", + "name": "Docker Registry", + "tags": ["CI/CD"], + "versions": ["2.8.1"], + "shortDescZh": "Docker 镜像的存储和分发系统", + "shortDescEn": "A storage and distribution system for named Docker images", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://hub.docker.com/_/registry", + "github": "https://github.com/distribution/distribution", + "document": "https://docs.docker.com/registry/" + }, + { + "key": "nexus", + "name": "Nexus Repository", + "tags": ["CI/CD"], + "versions": ["3.47.1"], + "shortDescZh": "开源存储库", + "shortDescEn": "An open source repository for build artifacts", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://www.sonatype.com/products/nexus-repository", + "github": "https://github.com/sonatype/docker-nexus3", + "document": "https://help.sonatype.com/repomanager3" } ] } \ No newline at end of file diff --git a/apps/mariadb/metadata/logo.png b/apps/mariadb/metadata/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..995c4cdb685051a02f6e4cde84e56cedba71e6c9 GIT binary patch literal 33880 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 NA7qrIYov@r{||>S+cW?G literal 0 HcmV?d00001 diff --git a/apps/mariadb/versions/10.9.5/README.md b/apps/mariadb/versions/10.9.5/README.md new file mode 100644 index 000000000..1f073deea --- /dev/null +++ b/apps/mariadb/versions/10.9.5/README.md @@ -0,0 +1,78 @@ +Code status: +------------ + +* [![Appveyor CI status](https://ci.appveyor.com/api/projects/status/4u6pexmtpuf8jq66?svg=true)](https://ci.appveyor.com/project/rasmushoj/server) ci.appveyor.com + +## MariaDB: The open source relational database + +MariaDB was designed as a drop-in replacement of MySQL(R) with more +features, new storage engines, fewer bugs, and better performance. + +MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. +Please read the CREDITS file for details about the MariaDB Foundation, +and who is developing MariaDB. + +MariaDB is developed by many of the original developers of MySQL who +now work for the MariaDB Corporation, the MariaDB Foundation and by +many people in the community. + +MySQL, which is the base of MariaDB, is a product and trademark of Oracle +Corporation, Inc. For a list of developers and other contributors, +see the Credits appendix. You can also run 'SHOW authors' to get a +list of active contributors. + +A description of the MariaDB project and a manual can be found at: + +https://mariadb.org + +https://mariadb.com/kb/en/ + +https://mariadb.com/kb/en/mariadb-vs-mysql-features/ + +https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/ + +https://mariadb.com/kb/en/new-and-old-releases/ + +Help +----- + +More help is available from the Maria Discuss mailing list +https://launchpad.net/~maria-discuss, MariaDB's Zulip +instance, https://mariadb.zulipchat.com/ + +Live QA for beginner contributors +---- +MariaDB has a dedicated time each week when we answer new contributor questions live on Zulip. +From 8:00 to 10:00 UTC on Mondays, and 10:00 to 12:00 UTC on Thursdays, +anyone can ask any questions they’d like, and a live developer will be available to assist. + +New contributors can ask questions any time, but we will provide immediate feedback during that interval. + +Licensing +--------- + +*************************************************************************** + +NOTE: + +MariaDB is specifically available only under version 2 of the GNU +General Public License (GPLv2). (I.e. Without the "any later version" +clause.) This is inherited from MySQL. Please see the README file in +the MySQL distribution for more information. + +License information can be found in the COPYING file. Third party +license information can be found in the THIRDPARTY file. + +*************************************************************************** + +Bug Reports +------------ + +Bug and/or error reports regarding MariaDB should be submitted at: +https://jira.mariadb.org + +For reporting security vulnerabilities see: +https://mariadb.org/about/security-policy/ + +The code for MariaDB, including all revision history, can be found at: +https://github.com/MariaDB/server diff --git a/apps/mariadb/versions/10.9.5/config.json b/apps/mariadb/versions/10.9.5/config.json new file mode 100644 index 000000000..3a420e71a --- /dev/null +++ b/apps/mariadb/versions/10.9.5/config.json @@ -0,0 +1,20 @@ +{ + "formFields": [ + { + "type": "password", + "labelZh": "root用户密码", + "labelEn": "Root Password", + "required": true, + "default": "random", + "envKey": "PANEL_DB_ROOT_PASSWORD" + }, + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 3306, + "envKey": "PANEL_APP_PORT_HTTP" + } + ] +} \ No newline at end of file diff --git a/apps/mariadb/versions/10.9.5/docker-compose.yml b/apps/mariadb/versions/10.9.5/docker-compose.yml new file mode 100644 index 000000000..943a67858 --- /dev/null +++ b/apps/mariadb/versions/10.9.5/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3' +services: + mariadb: + container_name: ${CONTAINER_NAME} + networks: + - 1panel-network + image: "mariadb:10.9.5" + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + volumes: + - ./db/data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ${PANEL_DB_ROOT_PASSWORD} + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/nexus/metadata/logo.png b/apps/nexus/metadata/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ec578d1a3922f2f7704d65423df7f376ef14ac GIT binary patch literal 1245 zcmV<31S0#1P)DO=Wi51haAg2tc42g3a^wOUVE_OGdr3q=RCwC$nOkTaRUF25vuSf_ zgN#3a~7 zehjY44WD0rq;;o*Q6GWWZy`qgJ(kb`RZK=ViIArtc~T+d6e8YW_IjcdPm2U2emkW0 zhakQO+z_=7MD#-PZ9kENgvkA4Bf`7Y#ASk7;&R9rAaz&8FmWURz`Rb zf_uOjg^)4Y4!OBZYk=3qv;OK4MEn%(wvZQQrE*LZGMx}yFOxVxz;P_~7y{bMuQawd z7C`(A_!#n+R%@k`Ho;mi`nH+9SG?)uvc~krX^RfIlt&dX2JyA*x^30oXV{tJh*%Bj z9QX`e=Zx0AbQchJDfQK(|M~71q*kF0j_J`yCkz#=V-4a1S zKOFw7xd0Mx>+EAQ$A~NV`-%U4q|pS7gI{L7H=KYOoCf>AM~x;x9-+75{T1^_;<^y< zt&<<=n&&E1FG)Po-W1Rj&=k-V&=e3wz&h}b1RL0M>;sD$Nut1`Il7wcE{5o{|fOZRCTG8wQ5N@&s~IFUZT<8iXaoRT0w{D3S5wM zF(4a=c}&r#tQ2m?$|5jeO7CwWaaYrLXNdCRQQh{|Yo@z2dV+e3!L7vD8)DY?GPpNs zmKT0GHf(nh9o*^H`c)l#smnVuV;~-K)aA8QKFH@j#)&(uok#su7JS>7;>QX0tD-Ym zdVCkrBH*4OMVlAEzlvDW!drAxBrCZluO#Se;2%Zje<0#X+9&^C7SCP3{-F5nB){E3 z+cjykO#QP0Las5wT{G=x=7x0pT>B|S`$Lew3maDd))G>!Kwk764k4r%!si=w)9tMN zR&TmV2s|@=Hx`|^wBqX|XkTohAAePO-%sQ)>%kdi{#P<*`P2Si{qd_GXS8+vKshTK)V7q$JqBJrG + +# Sonatype Nexus3 Docker: sonatype/nexus3 + +[![Join the chat at https://gitter.im/sonatype/nexus-developers](https://badges.gitter.im/sonatype/nexus-developers.svg)](https://gitter.im/sonatype/nexus-developers?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +A Dockerfile for Sonatype Nexus Repository Manager 3, starting with 3.18 the image is based on the [Red Hat Universal Base Image](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image) while earlier versions used CentOS. + +* [Contribution Guidlines](#contribution-guidelines) +* [Running](#running) +* [Building the Nexus Repository Manager image](#building-the-nexus-repository-manager-image) +* [Chef Solo for Runtime and Application](#chef-solo-for-runtime-and-application) +* [Testing the Dockerfile](#testing-the-dockerfile) +* [Red Hat Certified Image](#red-hat-certified-image) +* [Notes](#notes) + * [Persistent Data](#persistent-data) +* [Getting Help](#getting-help) + +## Contribution Guidelines + +Go read [our contribution guidelines](https://github.com/sonatype/docker-nexus3/blob/main/.github/CONTRIBUTING.md) to get a bit more familiar with how +we would like things to flow. + +## Running + +To run, binding the exposed port 8081 to the host, use: + +``` +$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3 +``` + +When stopping, be sure to allow sufficient time for the databases to fully shut down. + +``` +docker stop --time=120 +``` + + +To test: + +``` +$ curl http://localhost:8081/ +``` + +## Building the Nexus Repository Manager image + +To build a docker image from the [Dockerfile](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile) you can use this command: + +``` +$ docker build --rm=true --tag=sonatype/nexus3 . +``` + +The following optional variables can be used when building the image: + +- NEXUS_VERSION: Version of the Nexus Repository Manager +- NEXUS_DOWNLOAD_URL: Download URL for Nexus Repository, alternative to using `NEXUS_VERSION` to download from Sonatype +- NEXUS_DOWNLOAD_SHA256_HASH: Sha256 checksum for the downloaded Nexus Repository Manager archive. Required if `NEXUS_VERSION` + or `NEXUS_DOWNLOAD_URL` is provided + +## Chef Solo for Runtime and Application + +Chef Solo is used to build out the runtime and application layers of the Docker image. The Chef cookbook being used is available +on GitHub at [sonatype/chef-nexus-repository-manager](https://github.com/sonatype/chef-nexus-repository-manager). + +## Testing the Dockerfile + +We are using `rspec` as the test framework. `serverspec` provides a docker backend (see the method `set` in the test code) +to run the tests inside the docker container, and abstracts away the difference between distributions in the tests +(e.g. yum, apt,...). + + rspec [--backtrace] spec/Dockerfile_spec.rb + +## Red Hat Certified Image + +A Red Hat certified container image can be created using [Dockerfile.rh.ubi](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.ubi) which is built to be compliant with Red Hat certification. +The image includes additional meta data to comform with Kubernetes and OpenShift standards, a directory with the +licenses applicable to the software and a man file for help on how to use the software. It also uses an ENTRYPOINT +script the ensure the running user has access to the appropriate permissions for OpenShift 'restricted' SCC. + +The Red Hat certified container image is available from the +[Red Hat Container Catalog](https://access.redhat.com/containers/#/registry.connect.redhat.com/sonatype/nexus-repository-manager) +and qualified accounts can pull it from registry.connect.redhat.com. + +## Other Red Hat Images + +In addition to the Universal Base Image, we can build images based on: +* Red Hat Enterprise Linux: [Dockerfile.rh.el](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.el) +* CentOS: [Dockerfile.rh.centos](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.centos) + +## Notes + +* Our [system requirements](https://help.sonatype.com/display/NXRM3/System+Requirements) should be taken into account when provisioning the Docker container. +* Default user is `admin` and the uniquely generated password can be found in the `admin.password` file inside the volume. See [Persistent Data](#user-content-persistent-data) for information about the volume. + +* It can take some time (2-3 minutes) for the service to launch in a + new container. You can tail the log to determine once Nexus is ready: + +``` +$ docker logs -f nexus +``` + +* Installation of Nexus is to `/opt/sonatype/nexus`. + +* A persistent directory, `/nexus-data`, is used for configuration, + logs, and storage. This directory needs to be writable by the Nexus + process, which runs as UID 200. + +* There is an environment variable that is being used to pass JVM arguments to the startup script + + * `INSTALL4J_ADD_VM_PARAMS`, passed to the Install4J startup script. Defaults to `-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs`. + + This can be adjusted at runtime: + + ``` + $ docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/some-other-dir" sonatype/nexus3 + ``` + + Of particular note, `-Djava.util.prefs.userRoot=/some-other-dir` can be set to a persistent path, which will maintain + the installed Nexus Repository License if the container is restarted. + + Be sure to check the [memory requirements](https://help.sonatype.com/display/NXRM3/System+Requirements#SystemRequirements-MemoryRequirements) when deciding how much heap and direct memory to allocate. + +* Another environment variable can be used to control the Nexus Context Path + + * `NEXUS_CONTEXT`, defaults to / + + This can be supplied at runtime: + + ``` + $ docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3 + ``` + +### Persistent Data + +There are two general approaches to handling persistent storage requirements +with Docker. See [Managing Data in Containers](https://docs.docker.com/engine/tutorials/dockervolumes/) +for additional information. + +1. *Use a docker volume*. Since docker volumes are persistent, a volume can be created specifically for + this purpose. This is the recommended approach. + + ``` + $ docker volume create --name nexus-data + $ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3 + ``` + +2. *Mount a host directory as the volume*. This is not portable, as it + relies on the directory existing with correct permissions on the host. + However it can be useful in certain situations where this volume needs + to be assigned to certain specific underlying storage. + + ``` + $ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data + $ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3 + ``` + +## Getting Help + +Looking to contribute to our Docker image but need some help? There's a few ways to get information or our attention: + +* Chat with us on [Gitter](https://gitter.im/sonatype/nexus-developers) +* File an issue [on our public JIRA](https://issues.sonatype.org/projects/NEXUS/) +* Check out the [Nexus3](http://stackoverflow.com/questions/tagged/nexus3) tag on Stack Overflow +* Check out the [Nexus Repository User List](https://groups.google.com/a/glists.sonatype.com/forum/?hl=en#!forum/nexus-users) + +## License Disclaimer + +_Nexus Repository OSS is distributed with Sencha Ext JS pursuant to a FLOSS Exception agreed upon between Sonatype, Inc. and Sencha Inc. Sencha Ext JS is licensed under GPL v3 and cannot be redistributed as part of a closed source work._ diff --git a/apps/nexus/versions/3.47.1/config.json b/apps/nexus/versions/3.47.1/config.json new file mode 100644 index 000000000..f427c7f74 --- /dev/null +++ b/apps/nexus/versions/3.47.1/config.json @@ -0,0 +1,12 @@ +{ + "formFields": [ + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 8081, + "envKey": "PANEL_APP_PORT_HTTP" + } + ] +} \ No newline at end of file diff --git a/apps/nexus/versions/3.47.1/docker-compose.yml b/apps/nexus/versions/3.47.1/docker-compose.yml new file mode 100644 index 000000000..1fb40350c --- /dev/null +++ b/apps/nexus/versions/3.47.1/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + nexus: + image: sonatype/nexus3:3.47.1 + restart: always + container_name: ${CONTAINER_NAME} + environment: + - TZ=Asia/Shanghai + ports: + - ${PANEL_APP_PORT_HTTP}:8081 + volumes: + - ./data/nexus:/nexus-data + networks: + - 1panel-network + +networks: + 1panel-network: + external: true \ No newline at end of file