Use Amazon S3 or Minio<https://minio.io/> as a filestore for resources.
Requires CKAN 2.9+
When installing this extension on CKAN versions prior 2.9 please use ckan-2.8 branch.
To install ckanext-s3filestore:
Activate your CKAN virtual environment, for example:
. /usr/lib/ckan/default/bin/activate
Install the ckanext-s3filestore Python package into your virtual environment:
pip install ckanext-s3filestore
Add
s3filestoreto theckan.pluginssetting in your CKAN config file (by default the config file is located at/etc/ckan/default/ckan.ini).Restart CKAN. For example if you've deployed CKAN with Apache on Ubuntu:
sudo service apache2 reload
Required:
ckanext.s3filestore.aws_bucket_name = a-bucket-to-store-your-stuff ckanext.s3filestore.region_name= region-name ckanext.s3filestore.signature_version = s3v4
Conditional:
ckanext.s3filestore.aws_access_key_id = Your-Access-Key-ID ckanext.s3filestore.aws_secret_access_key = Your-Secret-Access-Key Or: ckanext.s3filestore.aws_use_ami_role = true
Optional:
# An optional path to prepend to keys ckanext.s3filestore.aws_storage_path = my-site-name # An optional setting to fallback to filesystem for downloads ckanext.s3filestore.filesystem_download_fallback = true # The ckan storage path option must also be set correctly for the fallback to work ckan.storage_path = path/to/storage/directory # An optional setting to change the acl of the uploaded files. Default public-read. ckanext.s3filestore.acl = private # An optional setting to specify which addressing style to use. This controls whether the bucket name is in the hostname or is part of the URL. Default auto. ckanext.s3filestore.addressing_style = path # Set this parameter only if you want to use Minio as a filestore service instead of S3. ckanext.s3filestore.host_name = http://minio-service.com # To mask the S3 endpoint with your own domain/endpoint when serving URLs to end users. # This endpoint should be capable of serving S3 objects as if it were an actual bucket. # The real S3 endpoint will still be used for uploading files. ckanext.s3filestore.download_proxy = https://example.com/my-bucket # Defines how long a signed URL is valid (default 1 hour). ckanext.s3filestore.signed_url_expiry = 3600 # Don't check for access on each startup ckanext.s3filestore.check_access_on_startup = false
To upload all local resources located in ckan.storage_path location dir to the configured S3 bucket use:
ckan -c /etc/ckan/default/ckan.ini s3-upload
To upload all local group/organization assets (pics) located in ckan.storage_path location dir to the configured S3 bucket use:
ckan -c /etc/ckan/default/ckan.ini s3-assets
To install ckanext-s3filestore for development, activate your CKAN virtualenv and do:
git clone https://github.com/okfn/ckanext-s3filestore.git cd ckanext-s3filestore python setup.py develop pip install -r dev-requirements.txt pip install -r requirements.txt
To run the tests, do:
nosetests --ckan --nologcapture --with-pylons=test.ini
To run the tests and produce a coverage report, first make sure you have
coverage installed in your virtualenv (pip install coverage) then run:
nosetests --ckan --nologcapture --with-pylons=test.ini --with-coverage --cover-package=ckanext.s3filestore --cover-inclusive --cover-erase --cover-tests
ckanext-s3filestore should be available on PyPI as https://pypi.python.org/pypi/ckanext-s3filestore. If that link doesn't work, then you can register the project on PyPI for the first time by following these steps:
Create a source distribution of the project:
python setup.py sdist
Register the project:
python setup.py register
Upload the source distribution to PyPI:
python setup.py sdist upload
Tag the first release of the project on GitHub with the version number from the
setup.pyfile. For example if the version number insetup.pyis 0.0.1 then do:git tag 0.0.1 git push --tags
ckanext-s3filestore is available on PyPI as https://pypi.python.org/pypi/ckanext-s3filestore. To publish a new version to PyPI follow these steps:
Update the version number in the
setup.pyfile. See PEP 440 for how to choose version numbers.Create a source distribution of the new version:
python setup.py sdist
Upload the source distribution to PyPI:
python setup.py sdist upload
Tag the new release of the project on GitHub with the version number from the
setup.pyfile. For example if the version number insetup.pyis 0.0.2 then do:git tag 0.0.2 git push --tags