Synology Package Repository
- Install docker and docker-compose
 - Install python and poetry
 - Optionally install direnv and a working poetry layout as described here in your 
~/.config/direnv/direnvrc 
- Run postgres, e.g. using docker with 
docker compose up db - Install dependencies with 
poetry install - Run the next commands in the virtual environment 
poetry shell - Create the tables with 
flask db upgrade - Populate the database with some fake packages with 
flask spkrepo populate_db - Add a user with 
flask spkrepo create_user -u admin -e [email protected] -p adminadmin - Grant the created user with Administrator permissions 
flask roles add [email protected] admin - Grant the created user with Package Administrator permissions 
flask roles add [email protected] package_admin - Grant the created user with Developer permissions 
flask roles add [email protected] developer 
To clean data created by fake packages, run flask spkrepo depopulate_db
- Start postgres with 
docker compose up db - Start the development server with 
flask run - Website is available at http://localhost:5000
 - Admin interface is available at http://localhost:5000/admin
 - NAS interface is available at http://localhost:5000/nas
 - API is available at http://localhost:5000/api
 - Run the test suite with 
pytest -v 
- If you also want to run the app in docker you can with 
docker compose up app - You can run both postgres and the app with 
docker compose up 
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= "SimpleCache"
# For signing packages
GNUPG_PATH= "/usr/local/bin/gpg"Example usage:
docker run -it --rm --name spkrepo -v $(pwd)/data:/data -p 8000:8000 ghcr.io/synocommunity/spkrepoAdditional 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/spkrepoServe app via a WSGI server.
Example:
pip install gunicorn
SPKREPO_CONFIG="$PWD/config.py" gunicorn -w 4 'wsgi:app'cd migrations/
alembic revision -m "update build path length"