OpenMiInk/third_party/ci-notary-service/doc/websitepublisher.md
Hellings b8c8ff98e2 Hi
2026-10-16 09:05:56 -04:00

89 lines
3.1 KiB
Markdown

<!--
# SPDX-License-Identifier: BSD-2-Clause
# SPDX-FileCopyrightText: 2023 KDE e.V.
# SPDX-FileCopyrightText: 2023 Ben Cooksley <bcooksley@kde.org>
# SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
-->
# websitepublisher.py - A service to publish files securely to a either a local or remote location (usually for serving by a web server)
This service takes an archive of a website, unpacks it and transfers the contents
using rsync to a specified destination, which can be either local or remote.
## Prerequisites
The service needs an SFTP server for exchanging data with the clients.
Additionally `rsync` must be installed and available in path, as it is used
to transfer files to the final destination, whether local or remote.
For transfers to remote destinations, an SSH private key pair must be created
and authorised to access the remote system. The key pair must be available for
use without a password - either because the key has no password or because it
has been added to an SSH agent prior to the service being started. Use of SSH
password based authentication is not supported.
Should particular parameters (such as a non-standard port) be required to connect
to the remote system then this must be configured in ~/.ssh/config
## Installation
### Install the Service
Clone this repository on a server that shall provide the service,
create a virtual environment, and install the requirements.
```sh
git clone https://invent.kde.org/sysadmin/ci-notary-service.git websitepublisher
cd websitepublisher
python3 -m venv .venv
. .venv/bin/activate
pip3 install -r requirements.txt
```
### Configure the Service
Copy `websitepublisher.sample.ini` to `websitepublisher.ini` and replace the example values
with the appropriate values for your installation.
Then copy `websitepublisher-projects.sample.yaml` to `websitepublisher-projects.yaml` and
specify the settings for the projects you want to use service for.
## Run the Service
Activate the virtual environment and start `websitepublisher.py`.
```sh
cd ~/websitepublisher
. .venv/bin/activate
python3 websitepublisher.py --id workerA --config websitepublisher.ini
```
where you replace `workerA` with a unique alpha-numeric ID for each instance
of `websitepublisher.py` you start. You can run multiple instances, but the
behavior is undefined if multiple instances operate on the same destination.
Therefore, it's recommended to run only one service for a given Gitlab repository.
## Use the Service to Publish a Website
Clone this repository on the client, create a virtual environment, and install
the requirements.
```sh
git clone https://invent.kde.org/sysadmin/ci-notary-service.git websitepublisher
cd websitepublisher
python3 -m venv .venv
. .venv/bin/activate
pip3 install -r requirements.txt
```
Copy `publishwebsite.sample.ini` to `publishwebsite.ini` and replace the example values
with the appropriate values for your installation. In particular, the value
for `BasePath` must match the corresponding value in the settings of the
service.
Then run `publishwebsite.py` to sign and publish the website.
```sh
python3 publishwebsite.py --config publishwebsite.ini <path to files to be published remotely>
```