In the Preview Section, we have been running all of the application in docker containers. This saves you the trouble of installing the instance on your host and gets something visible fast. Now, we will run the application locally and the database and other services in containers. It's the best compromise between getting up and running with relevant services fast, while allowing you to iterate on your local instance quickly.
Before going on, let's move into the project directory:
Install for development¶
To run the application locally, we will need to install it and its dependencies
first. For this release, we need to add
--pre, since we do have to
install alpha releases. Be patient, it might take some time to build.
Pre-requisite: FLASK_ENV is available via invenio-cli flags
You do not need to export
FLASK_ENV anymore. Just call the commands with
-d. This will instruct the different commands to create
symbolic links to your files, so the changes are easily propagated. There are
two operations that require this flag:
invenio-cli packages lock --pre --dev invenio-cli install --pre --development
# Summarized output Checking if dependencies are locked. Dependencies are locked Installing python dependencies... Please be patient, this operation might take some time... 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 202/202 All dependencies are now up-to-date! Updating instance path... Instance path successfully. Symlinking 'invenio.cfg'... Symlinking 'templates'... Symlinking 'app_data'... Creating symbolic link for app_data folder... Collecting statics and assets... Cleaned webpack project. Created webpack project. Installing JS dependencies... Installed webpack project. Copying project statics and assets... Symlinking assets... Building assets... Built webpack project. Assets and statics updated. Dependencies installed successfully.
As a result, the Python dependencies for the project have been installed in a new virtualenv for the application and many of the files in your project directory have been symlinked inside it.
Setup the database, Elasticsearch, Redis and RabbitMQ¶
We need to initialize the database, the indices and so on. For this, we use
services command. The first time this command is run, the services will be
setup correctly and the containers running them will even restart upon a reboot
of your machine. If you stop and restart those containers, your data will still
be there. Upon running this command again, the initial setup is skipped.
invenio-cli services setup
Making sure containers are up... Creating network "development-instance_default" with the default driver Creating development-instance_cache_1 ... done Creating development-instance_es_1 ... done Creating development-instance_db_1 ... done Creating development-instance_mq_1 ... done Creating database postgresql+psycopg2://development-instance:development-instance@localhost/development-instance Creating all tables! INFO [alembic.runtime.migration] Context impl PostgresqlImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. Created all tables! Location default-location /your/path/to/var/instance/data as default True created Role "admin" created successfully. Creating indexes... Putting templates...
In case you want to wipe out the data that was there (say to start fresh),
you can use
--force and nuke the content!
invenio-cli services setup --force
Making sure containers are up... development-instance_mq_1 is up-to-date development-instance_db_1 is up-to-date development-instance_cache_1 is up-to-date development-instance_es_1 is up-to-date Cache cleared Destroying database postgresql+psycopg2://development-instance:development-instance@localhost/development-instance Destroying indexes... Indexing queue has been initialized. Indexing queue has been purged. Creating database postgresql+psycopg2://development-instance:development-instance@localhost/development-instance Creating all tables! [####################################] 100% INFO [alembic.runtime.migration] Context impl PostgresqlImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. Created all tables! Location default-location /your/path/to/var/instance/data as default True created Role "admin" created successfully. Creating indexes... Putting templates...
To import vocabularies such as licenses or languages in your instance do the following:
pipenv run invenio vocabularies import languages licenses
(Don't) Populate the database¶
Demo records now come by default! If you want to avoid having them when setting up your instance, pass the
--no-demo-data flag to the
invenio-cli services setup --no-demo-data