mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-05-04 10:33:47 +01:00
docs: add self hosting registries guide
This commit is contained in:
parent
a4a444220e
commit
3152e4534b
1 changed files with 190 additions and 0 deletions
190
docs/src/content/docs/guides/self-hosting-registries.mdx
Normal file
190
docs/src/content/docs/guides/self-hosting-registries.mdx
Normal file
|
@ -0,0 +1,190 @@
|
|||
---
|
||||
title: Self Hosting Registries
|
||||
description: Learn how to self host registries for pesde.
|
||||
---
|
||||
|
||||
You can self host registries for pesde. This is useful if you want a private
|
||||
registry or if you a separate registry for other reasons.
|
||||
|
||||
## Making the index repository
|
||||
|
||||
The index is a repository that contains metadata about all the packages in the
|
||||
registry.
|
||||
|
||||
An index contains a `config.toml` file with configuration options.
|
||||
|
||||
To create an index, create a new repository and add a `config.toml` file with
|
||||
the following content:
|
||||
|
||||
```toml title="config.toml"
|
||||
# The URL of the registry API
|
||||
api = "https://registry.acme.local/"
|
||||
|
||||
# Package download URL (optional)
|
||||
download = "{API_URL}/v0/packages/{PACKAGE}/{PACKAGE_VERSION}/{PACKAGE_TARGET}"
|
||||
|
||||
# the client ID of the GitHub OAuth app (optional)
|
||||
github_oauth_client_id = "a1d648966fdfbdcd9295"
|
||||
|
||||
# whether to allow packages with Git dependencies (default: false)
|
||||
git_allowed = true
|
||||
|
||||
# whether to allow packages which depend on packages from other registries
|
||||
# (default: false)
|
||||
other_registries_allowed = true
|
||||
|
||||
# whether to allow packages with Wally dependencies (default: false)
|
||||
wally_allowed = false
|
||||
|
||||
# the maximum size of the archive in bytes (default: 4MB)
|
||||
max_archive_size = 4194304
|
||||
```
|
||||
|
||||
- **api**: The URL of the registry API. See below for more information.
|
||||
|
||||
- **download**: The URL to download packages from. This is optional and
|
||||
defaults to the correct URL for the official pesde registry implementation.
|
||||
You only need this if you are using a custom registry implementation.
|
||||
|
||||
This string can contain the following placeholders:
|
||||
|
||||
- `{API_URL}`: The API URL (as specified in the `api` field).
|
||||
- `{PACKAGE}`: The package name.
|
||||
- `{PACKAGE_VERSION}`: The package version.
|
||||
- `{PACKAGE_TARGET}`: The package target.
|
||||
|
||||
Defaults to `{API_URL}/v0/packages/{PACKAGE}/{PACKAGE_VERSION}/{PACKAGE_TARGET}`.
|
||||
|
||||
- **github_oauth_client_id**: This is required if you use GitHub OAuth for
|
||||
authentication. See below for more information.
|
||||
|
||||
- **git_allowed**: Whether to allow packages with Git dependencies. This is
|
||||
optional and defaults to `false`.
|
||||
|
||||
- **other_registries_allowed**: Whether to allow packages which depend on
|
||||
packages from other registries. This is optional and defaults to `false`.
|
||||
|
||||
- **wally_allowed**: Whether to allow packages with Wally dependencies. This is
|
||||
optional and defaults to `false`.
|
||||
|
||||
- **max_archive_size**: The maximum size of the archive in bytes. This is
|
||||
optional and defaults to `4194304` (4MB).
|
||||
|
||||
You should then push this repository to [GitHub](https://github.com/).
|
||||
|
||||
## Configuring the registry
|
||||
|
||||
The registry is a web server that provides package downloads and the ability to
|
||||
publish packages.
|
||||
|
||||
The official registry implementation is available in the
|
||||
[pesde GitHub repository](https://github.com/daimond113/pesde/tree/0.5/registry).
|
||||
|
||||
Configuring the registry is done using environment variables. In order to allow
|
||||
the registry to access the index repository, you must use a personal access
|
||||
token of a GitHub account that has access to the index repository. We recommend
|
||||
using a separate GitHub account for this purpose.
|
||||
|
||||
For instructions on how to create a personal access token, see the
|
||||
[GitHub documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).
|
||||
The access token must have read and write access to the index repository.
|
||||
|
||||
### General configuration
|
||||
|
||||
- **INDEX_REPO_URL**: The URL of the index repository. This is required.\
|
||||
Example: `https://github.com/daimond113/pesde-index.git`
|
||||
|
||||
- **GITHUB_USERNAME**: The username of the GitHub account that has access to the
|
||||
index repository. This is required.
|
||||
|
||||
- **GITHUB_PAT**: The personal access token of the GitHub account specified by
|
||||
`GITHUB_USERNAME`. This is required.
|
||||
|
||||
### Authentication configuration
|
||||
|
||||
The registry supports multiple authentication methods, which are documented
|
||||
below.
|
||||
|
||||
#### General configuration
|
||||
|
||||
- **READ_NEEDS_AUTH**: If set to any value, reading data requires
|
||||
authentication. If not set, anyone can read from the registry.
|
||||
This is optional.
|
||||
|
||||
#### Single token authentication
|
||||
|
||||
Allows read and write access to the registry using a single token.
|
||||
|
||||
- **ACCESS_TOKEN**: The token to use for authentication.
|
||||
|
||||
#### Multiple token authentication
|
||||
|
||||
Allows read and write access to the registry using different tokens.
|
||||
|
||||
- **READ_ACCESS_TOKEN**: The token that grants read access.
|
||||
- **WRITE_ACCESS_TOKEN**: The token that grants write access.
|
||||
|
||||
#### GitHub OAuth authentication
|
||||
|
||||
Allows clients to get read and write access to the registry using GitHub OAuth.
|
||||
This requires a GitHub OAuth app, instructions to create one can be found
|
||||
in the [GitHub documentation](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app).
|
||||
|
||||
- **GITHUB_CLIENT_SECRET**: The client secret of the GitHub OAuth app.
|
||||
|
||||
#### No authentication
|
||||
|
||||
If none of the above variables are set, **anyone** will be able to read and
|
||||
write to the registry.
|
||||
|
||||
### Storage configuration
|
||||
|
||||
The registry supports multiple storage backends, which are documented below.
|
||||
|
||||
#### File system storage
|
||||
|
||||
Stores packages on the file system.
|
||||
|
||||
- **FS_STORAGE_ROOT**: The root directory where packages are stored.
|
||||
|
||||
#### S3 storage
|
||||
|
||||
Stores packages on an S3 compatible storage service, such as
|
||||
[Amazon S3](https://aws.amazon.com/s3/) or
|
||||
[Cloudflare R2](https://www.cloudflare.com/r2/).
|
||||
|
||||
- **S3_ENDPOINT**: The endpoint of the S3 bucket to store packages in.
|
||||
- **S3_BUCKET_NAME**: The name of the bucket.
|
||||
- **S3_REGION**: The region of the bucket.
|
||||
- **S3_ACCESS_KEY**: The access key to use.
|
||||
- **S3_SECRET_KEY**: The secret key to use.
|
||||
|
||||
### Sentry configuration
|
||||
|
||||
The registry supports [Sentry](https://sentry.io/) for error tracking.
|
||||
|
||||
- **SENTRY_URL**: The URL of the Sentry instance.
|
||||
|
||||
## Running the registry
|
||||
|
||||
First clone the repository and navigate to the repository directory:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/daimond113/pesde.git
|
||||
cd pesde
|
||||
```
|
||||
|
||||
You can then build the registry using the following command:
|
||||
|
||||
```sh
|
||||
cargo build --release -p pesde-registry
|
||||
```
|
||||
|
||||
This will build the registry. The resulting binary will be located at
|
||||
`target/release/pesde-registry` or `target/release/pesde-registry.exe`.
|
||||
|
||||
After setting the environment variables, you can run the registry using the
|
||||
by executing the binary.
|
||||
|
||||
The registry must be exposed at the URL specified in the `api` field of the
|
||||
index repository configuration.
|
Loading…
Add table
Reference in a new issue