spkrepo


Namespkrepo JSON
Version 0.2.7 PyPI version JSON
download
home_pagehttps://synocommunity.com
SummarySynology Package Repository
upload_time2025-02-09 04:12:47
maintainerNone
docs_urlNone
authorAntoine Bertin
requires_python<4.0,>=3.10
licenseMIT
keywords synology package repository
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # spkrepo
Synology Package Repository

![Build](https://img.shields.io/github/actions/workflow/status/SynoCommunity/spkrepo/build.yml?branch=main&style=for-the-badge)
[![Discord](https://img.shields.io/discord/732558169863225384?color=7289DA&label=Discord&logo=Discord&logoColor=white&style=for-the-badge)](https://discord.gg/nnN9fgE7EF)


## Development
### Requirements
1. Install docker and docker-compose
2. Install python and poetry
3. Optionally install direnv and a working poetry layout as described [here](https://github.com/direnv/direnv/issues/592#issuecomment-856227234) in your `~/.config/direnv/direnvrc`

### Installation
1. Run postgres, e.g. using docker with `docker compose up db`
2. Install dependencies with `poetry install`
3. Run the next commands in the virtual environment `poetry shell`
4. Create the tables with `flask db upgrade`
5. Populate the database with some fake packages with `flask spkrepo populate_db`
6. Add a user with `flask spkrepo create_user -u admin -e admin@synocommunity.com -p adminadmin`
7. Grant the created user with Administrator permissions `flask roles add admin@synocommunity.com admin`
8. Grant the created user with Package Administrator permissions `flask roles add admin@synocommunity.com package_admin`
9. Grant the created user with Developer permissions `flask roles add admin@synocommunity.com developer`

To clean data created by fake packages, run `flask spkrepo depopulate_db`

### Run
1. Start postgres with `docker compose up db`
2. Start the development server with `flask run`
3. Website is available at http://localhost:5000
4. Admin interface is available at http://localhost:5000/admin
5. NAS interface is available at http://localhost:5000/nas
6. API is available at http://localhost:5000/api
7. Run the test suite with `pytest -v`

## Docker Compose Run
- 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`


## 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

```python
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"
```


### Docker
Example usage:

```bash
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.
```bash
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](https://flask.palletsprojects.com/en/1.1.x/deploying/).
Example:

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

## Add migration

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

            

Raw data

            {
    "_id": null,
    "home_page": "https://synocommunity.com",
    "name": "spkrepo",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": "synology, package, repository",
    "author": "Antoine Bertin",
    "author_email": "diaoulael@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/8c/27/4351538d9602ef7af435215e3df7fb81ee96c291c64cf700422e4dc544a3/spkrepo-0.2.7.tar.gz",
    "platform": null,
    "description": "# spkrepo\nSynology Package Repository\n\n![Build](https://img.shields.io/github/actions/workflow/status/SynoCommunity/spkrepo/build.yml?branch=main&style=for-the-badge)\n[![Discord](https://img.shields.io/discord/732558169863225384?color=7289DA&label=Discord&logo=Discord&logoColor=white&style=for-the-badge)](https://discord.gg/nnN9fgE7EF)\n\n\n## Development\n### Requirements\n1. Install docker and docker-compose\n2. Install python and poetry\n3. Optionally install direnv and a working poetry layout as described [here](https://github.com/direnv/direnv/issues/592#issuecomment-856227234) in your `~/.config/direnv/direnvrc`\n\n### Installation\n1. Run postgres, e.g. using docker with `docker compose up db`\n2. Install dependencies with `poetry install`\n3. Run the next commands in the virtual environment `poetry shell`\n4. Create the tables with `flask db upgrade`\n5. Populate the database with some fake packages with `flask spkrepo populate_db`\n6. Add a user with `flask spkrepo create_user -u admin -e admin@synocommunity.com -p adminadmin`\n7. Grant the created user with Administrator permissions `flask roles add admin@synocommunity.com admin`\n8. Grant the created user with Package Administrator permissions `flask roles add admin@synocommunity.com package_admin`\n9. Grant the created user with Developer permissions `flask roles add admin@synocommunity.com developer`\n\nTo clean data created by fake packages, run `flask spkrepo depopulate_db`\n\n### Run\n1. Start postgres with `docker compose up db`\n2. Start the development server with `flask run`\n3. Website is available at http://localhost:5000\n4. Admin interface is available at http://localhost:5000/admin\n5. NAS interface is available at http://localhost:5000/nas\n6. API is available at http://localhost:5000/api\n7. Run the test suite with `pytest -v`\n\n## Docker Compose Run\n- If you also want to run the app in docker you can with `docker compose up app`\n- You can run both postgres and the app with `docker compose up`\n\n\n## Deployment\n### Configuration\nCreate a config file `./config.py` to disable debug logs, connect to a database, set a secure key and optionally set a cache:\n\nUse `LC_CTYPE=C tr -cd '[:print:]' < /dev/urandom | head -c 64` or `base64 < /dev/urandom | head -c 64` to get a random string\n\n```python\nDEBUG = False\nTESTING = False\nSECRET_KEY = \"Please-change-me-to-some-random-string\"\nSQLALCHEMY_ECHO = False\nSQLALCHEMY_DATABASE_URI = \"postgresql://user:pass@localhost/dbname\"\n# https://pythonhosted.org/Flask-Caching/#configuring-flask-caching\nCACHE_TYPE= \"SimpleCache\"\n# For signing packages\nGNUPG_PATH= \"/usr/local/bin/gpg\"\n```\n\n\n### Docker\nExample usage:\n\n```bash\ndocker run -it --rm --name spkrepo -v $(pwd)/data:/data -p 8000:8000 ghcr.io/synocommunity/spkrepo\n```\n\nAdditional configuration can be mounted in the container and loaded by putting\nthe path into `SPKREPO_CONFIG` environment variable.\n\ne.g.\n```bash\ndocker 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\n```\n\n\n### Serve app via [a WSGI server](https://flask.palletsprojects.com/en/1.1.x/deploying/).\nExample:\n\n```bash\npip install gunicorn\nSPKREPO_CONFIG=\"$PWD/config.py\" gunicorn -w 4 'wsgi:app'\n```\n\n## Add migration\n\n```\ncd migrations/\nalembic revision -m \"update build path length\"\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Synology Package Repository",
    "version": "0.2.7",
    "project_urls": {
        "Homepage": "https://synocommunity.com",
        "Repository": "https://github.com/SynoCommunity/spkrepo"
    },
    "split_keywords": [
        "synology",
        " package",
        " repository"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d01cb6e923db7fa907d4823228ed0ef4bccfc9e99e5b13d2e5ca7db129bcb383",
                "md5": "5703a80c6d03ab815ada8c66677b8a79",
                "sha256": "557a78fde2734f4386b83d258d0561170be1737553e13b9f6d88bde5a8a98020"
            },
            "downloads": -1,
            "filename": "spkrepo-0.2.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5703a80c6d03ab815ada8c66677b8a79",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 200461,
            "upload_time": "2025-02-09T04:12:45",
            "upload_time_iso_8601": "2025-02-09T04:12:45.232536Z",
            "url": "https://files.pythonhosted.org/packages/d0/1c/b6e923db7fa907d4823228ed0ef4bccfc9e99e5b13d2e5ca7db129bcb383/spkrepo-0.2.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8c274351538d9602ef7af435215e3df7fb81ee96c291c64cf700422e4dc544a3",
                "md5": "801910f9013655042bf684baf36e4d6d",
                "sha256": "e5b659b0d698ba1da40a760cbae698c78ff0fe3c99b79e3f4ed014c29abba3d9"
            },
            "downloads": -1,
            "filename": "spkrepo-0.2.7.tar.gz",
            "has_sig": false,
            "md5_digest": "801910f9013655042bf684baf36e4d6d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 190403,
            "upload_time": "2025-02-09T04:12:47",
            "upload_time_iso_8601": "2025-02-09T04:12:47.426346Z",
            "url": "https://files.pythonhosted.org/packages/8c/27/4351538d9602ef7af435215e3df7fb81ee96c291c64cf700422e4dc544a3/spkrepo-0.2.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-09 04:12:47",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "SynoCommunity",
    "github_project": "spkrepo",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "spkrepo"
}
        
Elapsed time: 2.63466s