From fbe10684c1aadd1f578749455f3836ba312d3c0c Mon Sep 17 00:00:00 2001 From: Alexander Kharitonov Date: Wed, 6 Apr 2022 12:08:50 +0300 Subject: [PATCH] Use the Python script instead of the bash script. --- Dockerfile | 8 +++---- requirements.txt | 2 ++ src/devpisrv.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) create mode 100755 src/devpisrv.py diff --git a/Dockerfile b/Dockerfile index 30a18f5..aa29f29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,13 +2,13 @@ FROM python EXPOSE 3141 RUN apt update && apt upgrade -y RUN useradd -d /home/devpisrv -m -s /bin/bash -U devpisrv -RUN mkdir -p -m 750 /var/local/devpisrv && mkdir -m 750 /var/local/devpisrv/server && mkdir /var/local/devpisrv/install && chown -R devpisrv:devpisrv /var/local/devpisrv -COPY --chown=devpisrv:devpisrv .env* /var/local/devpisrv/install/ +RUN mkdir -p -m 750 /var/local/devpisrv && mkdir -m 750 /var/local/devpisrv/server && mkdir /var/local/devpisrv/config && chown -R devpisrv:devpisrv /var/local/devpisrv +COPY --chown=devpisrv:devpisrv .env* /var/local/devpisrv/config/ COPY requirements.txt /tmp/ USER devpisrv:devpisrv RUN pip3 install -U pip ENV PATH="/home/devpisrv/.local/bin:${PATH}" RUN pip install -U -r /tmp/requirements.txt -COPY src/devpisrv.sh /usr/local/bin/ -ENTRYPOINT ["devpisrv.sh"] +COPY src/devpisrv.py /usr/local/bin/ +ENTRYPOINT ["devpisrv.py"] diff --git a/requirements.txt b/requirements.txt index e23df16..90d0cc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ devpi-server>=6.5.0 devpi-web>=4.0.8 devpi-client>=5.2.3 +python-dotenv>=0.20.0 +PyYAML>=6.0 diff --git a/src/devpisrv.py b/src/devpisrv.py new file mode 100755 index 0000000..d05d21c --- /dev/null +++ b/src/devpisrv.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 + +import argparse +import os.path +import subprocess +from dotenv import dotenv_values +import yaml + +arg_parser = argparse.ArgumentParser(description="The script for start devpi-server") +arg_parser.add_argument( + '-d', + '--data-dir', + type=str, + default = '/var/local/devpisrv', + help = 'Path to the data directory' +) +args = arg_parser.parse_args() + +server_dir = os.path.join(args.data_dir, "server") +config_dir = os.path.join(args.data_dir, "config") +env_file = os.path.join(config_dir, ".env") +config_file = os.path.join(config_dir, "devpi.conf") + +if not os.path.exists(config_file): + config_data = { + 'devpi-server': { + 'serverdir': os.path.abspath(server_dir), + 'host': '0.0.0.0', + 'restrict-modify': 'root' + } + } + if os.path.isfile(env_file): + env_config_values = dotenv_values(env_file) + if 'ROOT_PASSWORD' in env_config_values.keys(): + config_data['devpi-server']['root-passwd'] = \ + env_config_values['ROOT_PASSWORD'] + with open(config_file, 'w') as file: + yaml.dump(config_data, file) + +if not os.path.exists(os.path.join(server_dir, ".nodeinfo")): + subprocess.run( + args=[ + 'devpi-init', + '--serverdir', server_dir, + '--configfile', config_file + ], + check=True + ) + +subprocess.run( + args=[ + 'devpi-server', + '--configfile', config_file + ], + check=True +) +