• Stars
    star
    152
  • Rank 244,685 (Top 5 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 10 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Synology Package Repository

spkrepo

Synology Package Repository

Build Discord

Development

Installation

  1. Install dependencies with poetry install
  2. Run the next commands in the virtual environment poetry shell
  3. Create the tables with python manage.py create
  4. Populate the database with some fake packages with python manage.py populate
  5. Add an user with python manage.py user create -u Admin -e [email protected] -p adminadmin
  6. Grant the created user with Administrator permissions python manage.py roles add [email protected] admin
  7. Grant the created user with Package Administrator permissions python manage.py roles add [email protected] package_admin
  8. Grant the created user with Developer permissions python manage.py roles add [email protected] developer

To reset the environment, clean up with python manage.py clean.

Run

  1. Start the development server with python manage.py run
  2. Website is available at http://localhost:5000
  3. Admin interface is available at http://localhost:5000/admin
  4. NAS interface is available at http://localhost:5000/nas
  5. API is available at http://localhost:5000/api
  6. Run the test suite with poetry run pytest -v

Docker Compose Run

It is also possible to start a development environment with postgres database using docker compose:

  1. Build and run docker-compose up --build
  2. On first run you can apply database migrations with docker exec spkrepo_spkrepo_1 python manage.py db upgrade. Also run any other command that you need (populate the databse, create user) as mentioned above but by prefixing with docker exec {container_id} [...].
  3. Browse to http://localhost:5000
  4. To tear down the environment, run docker-compose down --remove

Deployment

Configuration

Create a config file ./config.py to disable debug logs, connect to a database, set a secure key and optionally set a cache:

Use LC_CTYPE=C tr -cd '[:print:]' < /dev/urandom | head -c 64 or base64 < /dev/urandom | head -c 64 to get a random string

DEBUG = False
TESTING = False
SECRET_KEY = "Please-change-me-to-some-random-string"
SQLALCHEMY_ECHO = False
SQLALCHEMY_DATABASE_URI = "postgresql://user:pass@localhost/dbname"
# https://pythonhosted.org/Flask-Caching/#configuring-flask-caching
CACHE_TYPE= "simple"
# For signing packages
GNUPG_PATH= "/usr/local/bin/gpg"

Docker

Example usage:

docker run -it --rm --name spkrepo -v $(pwd)/data:/data -p 8000:8000 ghcr.io/synocommunity/spkrepo

Additional configuration can be mounted in the container and loaded by putting the path into SPKREPO_CONFIG environment variable.

e.g.

docker run -it --rm --name spkrepo -v $(pwd)/data:/data -v $(pwd)/docker-config.py:/docker-config.py -e SPKREPO_CONFIG=/docker-config.py -p 8000:8000 ghcr.io/synocommunity/spkrepo

Serve app via a WSGI server.

Example:

pip install gunicorn
SPKREPO_CONFIG="$PWD/config.py" gunicorn -w 4 'wsgi:app'

Add migration

cd migrations/
alembic revision -m "update build path length"