This commit is contained in:
2025-07-05 19:58:34 +02:00
commit 153dc866ff
56 changed files with 20264 additions and 0 deletions

189
README.md Normal file
View File

@ -0,0 +1,189 @@
# Unpub
> 🧪 This is a small adaption of [unpub](https://pub.dev/packages/unpub) to docker.
---
## 📦 About
Unpub is a self-hosted private Dart Pub server, designed for enterprise use.
It includes a simple web interface for browsing and searching package information.
---
## ⚠️ MongoDB Compatibility
> The latest version of Unpub is **v2.1.0**, which was released over 2 years ago.
> Using MongoDB version 4.4 in conjunction provides the most stable experience.
---
## 🚀 Publishing a Package
Make sure your `pubspec.yaml` contains the following:
```yaml
name: <package_name>
description: <short description>
version: <semantic_version>
repository: <unpub_server_url>/packages/<package_name>
publish_to: <unpub_server_url>
```
### 1. Publish using Dart:
```bash
dart pub publish
```
---
### 2. Authentication issues?
If you encounter problems during publishing, set a fake auth token:
Install and use [`unpub_auth`](https://pub.dev/documentation/unpub_auth/latest/):
```bash
dart pub global activate unpub_auth # install the auth tool
unpub_auth login # log in via provided URL
unpub_auth get | dart pub token add <unpub_server_url>
# add token to pub client
dart pub publish # then try again
```
> The email address used for login will be displayed on the packages webpage under the uploader section.
---
## 📥 Retrieving Packages
To use a package hosted on Unpub server, add the following to your `pubspec.yaml`:
```yaml
dependencies:
<package_name>:
hosted:
name: <package_name>
url: <unpub_server_url>
version: <semantic_version>
```
---
## 🐳 Docker Setup
This project includes a Docker-based deployment setup.
1. **Adjust** Unpub settings (especially the version) in `res/unpub/pubspec.yaml`
2. **Build the image:**
```bash
docker image build -t unpub .
```
3. **Start containers:**
```bash
docker-compose up -d
```
> 🔧 Make sure to adjust the `docker-compose.yaml` file according to your needs before running the containers.
---
## 🎨 Customizing the Web UI
To modify the web interface (e.g. logo, colors, layout):
- Edit the files in the `res/web` directory
- **Do this _before_ building the Docker image**, so your changes are included
---
## 💽 Backup & Restore Data
Packages are stored in the volume `volumes/packages-data`, the corresponding metadata in MongoDB (volume `volumes/db-data`). Make sure the volumes (see `docker-compose.yaml`) are **not deleted**.
In terms of prevent data lost, the volume `volumes/packages-data` has only be copied, but
just copying the volume `volumes/db-data` is not the best choice, additionally, you have the following options:
### 📦 Download a Package Archive
On the Unpub web interface, you can download an archive of any package version directly under the **Versions** section of the package page.
---
### 🔄 Create a MongoDB Backup
#### 1. Create a backup inside the container (e.g., under `/data/backup`)
```bash
docker exec mongo-unpub mongodump --out=/data/backup
```
#### 2. Copy the backup to the host machine
```bash
docker cp mongo-unpub:/data/backup ./mongo-backup
```
---
### ♻️ Restore a MongoDB Backup
#### 1. Copy the backup back into the container
```bash
docker cp ./mongo-backup mongo-unpub:/data/restore
```
#### 2. Start the restore process
```bash
docker exec mongo-unpub mongorestore /data/restore
```
🔁 Optional: Drop existing data before restoring:
```bash
docker exec mongo-unpub mongorestore --drop /data/restore
```
---
### 🗄️ Using the Provided Backup Service
A dedicated backup service is included to simplify data preservation. It performs a full backup by copying all unpub packages and dumping the MongoDB database in one step.
To run the backup, use the following command:
```bash
docker-compose run --rm backup
```
The resulting archive file will be saved in the `volumes/backups` directory.
---
## 🌐 Access
Once deployed, you can access the web interface via the unpub server address:
```
scheme://<unpub-server>/
```
Depending on the settings in `docker-compose.yaml` the uri can differ.
Without reverse proxy and other settings the server can be reached under the adress:
```
http://localhost:8080
```
---
## 👤 Author
Dennis Skupin
Based on the [unpub](https://pub.dev/packages/unpub) package by [Bytedance](https://pub.dev/packages/unpub)
Licensed under the [MIT License](LICENSE)
---