pypi server README.md changes
This commit is contained in:
69
README.md
69
README.md
@@ -6,6 +6,7 @@ This repository defines a private, self-hosted DevOps stack running on Raspberry
|
|||||||
* **Drone** for CI/CD automation
|
* **Drone** for CI/CD automation
|
||||||
* **Docker Registry** with **Registry UI**
|
* **Docker Registry** with **Registry UI**
|
||||||
* **Drone Runner** for build execution
|
* **Drone Runner** for build execution
|
||||||
|
* **PyPI Server** for private Python package hosting
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -18,6 +19,7 @@ This repository defines a private, self-hosted DevOps stack running on Raspberry
|
|||||||
| **drone-runner** | Executes Drone pipelines on local Docker host | — | drone-server |
|
| **drone-runner** | Executes Drone pipelines on local Docker host | — | drone-server |
|
||||||
| **registry** | Private Docker registry | 6005 | — |
|
| **registry** | Private Docker registry | 6005 | — |
|
||||||
| **registry-ui** | Web UI for browsing and managing the registry images | 6001 | registry |
|
| **registry-ui** | Web UI for browsing and managing the registry images | 6001 | registry |
|
||||||
|
| **pypi-server** | Private Python package index and repository | 6006 | — |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -210,6 +212,57 @@ Executes pipeline steps on the Docker host using the Drone RPC secret.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 🐍 **PyPI Server**
|
||||||
|
|
||||||
|
Private Python package index for hosting internal packages and dependencies.
|
||||||
|
|
||||||
|
#### Ports
|
||||||
|
|
||||||
|
* **6006 → 8080** — Accessible via browser or pip client.
|
||||||
|
|
||||||
|
#### Mounts
|
||||||
|
|
||||||
|
* `/mnt/omnissiah-vault/data/pypiserver:/data` — Package storage directory.
|
||||||
|
* `/mnt/omnissiah-vault/data/pypiserver/auth:/auth (ro)` — Authentication credentials.
|
||||||
|
|
||||||
|
#### Environment
|
||||||
|
|
||||||
|
* **PYPISERVER_AUTH=update,download,list** — Enables controlled access.
|
||||||
|
|
||||||
|
#### Command
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
command:
|
||||||
|
- -P
|
||||||
|
- /auth/htpasswd
|
||||||
|
- -a
|
||||||
|
- update,download,list
|
||||||
|
- /data/packages
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
To upload packages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install twine
|
||||||
|
TWINE_USERNAME=<username> TWINE_PASSWORD=<password> twine upload --repository-url https://pip.aetoskia.com dist/*
|
||||||
|
```
|
||||||
|
|
||||||
|
To install packages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install --index-url https://<username>:<password>@pip.aetoskia.com/simple <package-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Notes
|
||||||
|
|
||||||
|
* Make sure `/data/packages` exists inside the container.
|
||||||
|
* The `htpasswd` file controls user access levels.
|
||||||
|
* Test the endpoint in browser: [https://pip.aetoskia.com](https://pip.aetoskia.com)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🧬 Network Integration
|
## 🧬 Network Integration
|
||||||
|
|
||||||
Ensure `/etc/hosts` on all relevant devices (Pi nodes, local dev systems) includes:
|
Ensure `/etc/hosts` on all relevant devices (Pi nodes, local dev systems) includes:
|
||||||
@@ -218,6 +271,7 @@ Ensure `/etc/hosts` on all relevant devices (Pi nodes, local dev systems) includ
|
|||||||
192.168.1.111 git.aetoskia.com
|
192.168.1.111 git.aetoskia.com
|
||||||
192.168.1.111 drone.aetoskia.com
|
192.168.1.111 drone.aetoskia.com
|
||||||
192.168.1.111 dcr.aetoskia.com
|
192.168.1.111 dcr.aetoskia.com
|
||||||
|
192.168.1.111 pip.aetoskia.com
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -230,18 +284,19 @@ Ensure `/etc/hosts` on all relevant devices (Pi nodes, local dev systems) includ
|
|||||||
docker compose --profile private-pi up -d
|
docker compose --profile private-pi up -d
|
||||||
```
|
```
|
||||||
* Drone and Gitea must both trust the same SSL certificate chain under `/home/aetos/certs`.
|
* Drone and Gitea must both trust the same SSL certificate chain under `/home/aetos/certs`.
|
||||||
* The `registry-ui` and `drone-runner` depend on hostname resolution between internal services, so avoid using raw IPs in environment variables.
|
* The `registry-ui`, `drone-runner`, and `pypi-server` depend on hostname resolution between internal services.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ Quick Test Checklist
|
## ✅ Quick Test Checklist
|
||||||
|
|
||||||
| Component | URL | Expected Result |
|
| Component | URL | Expected Result |
|
||||||
| ---------------- |-----------------------------------------------------------------------------------| ------------------------------------- |
|
| ---------------- |------------------------------------------------------------------------------| ------------------------------------- |
|
||||||
| **Gitea** | [https://git.aetoskia.com](https://git.aetoskia.com) | Gitea login page |
|
| **Gitea** | [https://git.aetoskia.com](https://git.aetoskia.com) | Gitea login page |
|
||||||
| **Drone** | [https://drone.aetoskia.com](https://drone.aetoskia.com) | Drone CI UI linked to Gitea |
|
| **Drone** | [https://drone.aetoskia.com](https://drone.aetoskia.com) | Drone CI UI linked to Gitea |
|
||||||
| **Registry UI** | [https://registry.aetoskia.com](https://registry.aetoskia.com) | Authenticated Docker registry browser |
|
| **Registry UI** | [https://registry.aetoskia.com](https://registry.aetoskia.com) | Authenticated Docker registry browser |
|
||||||
| **Registry API** | [https://dcr.aetoskia.com/v2/_catalog](https://dcr.aetoskia.com/v2/_catalog) | JSON listing of repositories |
|
| **Registry API** | [https://dcr.aetoskia.com/v2/_catalog](https://dcr.aetoskia.com/v2/_catalog) | JSON listing of repositories |
|
||||||
|
| **PyPI Server** | [https://pip.aetoskia.com/simple](https://pip.aetoskia.com/simple) | Simple index page |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user