Merge "Rewrite/clarify non-docker dev env instructions"
This commit is contained in:
commit
fcb04495a0
@ -191,117 +191,245 @@ This will start 5 workers to listen for events and create any relevant
|
|||||||
notifications.
|
notifications.
|
||||||
|
|
||||||
|
|
||||||
Installing and Upgrading the API server
|
Manual Installation
|
||||||
=======================================
|
===================
|
||||||
|
|
||||||
1. To start the API server, make sure you have the following packages installed
|
1. Install dependencies
|
||||||
locally:
|
-----------------------
|
||||||
|
|
||||||
* build-essential
|
To start the API server, make sure you have the following packages installed
|
||||||
* python3-dev
|
locally:
|
||||||
* python3-pip
|
|
||||||
* MySQL
|
|
||||||
|
|
||||||
::
|
* build-essential
|
||||||
|
* python3-dev
|
||||||
|
* python3-pip
|
||||||
|
* MySQL
|
||||||
|
|
||||||
sudo apt update
|
::
|
||||||
sudo apt install build-essential python3-dev python3-pip
|
|
||||||
sudo apt install mysql-server-5.7 # Here you will be asked to set a password
|
|
||||||
mysql --version
|
|
||||||
|
|
||||||
.. note:: MySQL must be >= 5.6, to support fulltext indexes on InnoDB tables
|
sudo apt update
|
||||||
|
sudo apt install build-essential python3-dev python3-pip
|
||||||
|
sudo apt install mysql-server-5.7 # Here you should be asked to set a password
|
||||||
|
mysql --version
|
||||||
|
|
||||||
|
.. note:: MySQL must be >= 5.6, to support fulltext indexes on InnoDB tables
|
||||||
|
|
||||||
|
.. warning:: On Ubuntu 17.10 or newer mysql won't ask to set a root
|
||||||
|
password. You'll need to manually set one, which you can read how to
|
||||||
|
do `here
|
||||||
|
<https://websiteforstudents.com/mysql-server-installed-without-password-for-root-on-ubuntu-17-10-18-04/>`_.
|
||||||
|
|
||||||
|
|
||||||
2. Clone the StoryBoard repository::
|
2. Get the code
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The code is stored using git, so you'll need to have git installed::
|
||||||
|
|
||||||
|
sudo apt install git
|
||||||
|
|
||||||
|
The code for the API and webclient can then be cloned::
|
||||||
|
|
||||||
|
|
||||||
git clone https://git.openstack.org/openstack-infra/storyboard
|
git clone https://git.openstack.org/openstack-infra/storyboard
|
||||||
|
git clone https://git.openstack.org/openstack-infra/storyboard-webclient
|
||||||
cd storyboard
|
cd storyboard
|
||||||
|
|
||||||
|
|
||||||
3. Create database:
|
3. Create database
|
||||||
|
------------------
|
||||||
|
|
||||||
.. note::
|
StoryBoard requires a single database. These commands create one called
|
||||||
|
``storyboard``, and delete any existing database with the same name.
|
||||||
|
|
||||||
You will need to replace the ``$DB_USER`` with ``root``. It
|
::
|
||||||
will prompt for a password; this is the password you set when
|
|
||||||
you ran ``sudo apt-get mysql-server-5.7`` in step 1.
|
|
||||||
|
|
||||||
::
|
mysql -u root -p -e 'DROP DATABASE IF EXISTS storyboard;'
|
||||||
|
mysql -u root -p -e 'CREATE DATABASE storyboard;'
|
||||||
|
|
||||||
mysql -u $DB_USER -p -e 'DROP DATABASE IF EXISTS storyboard;'
|
.. note:: If you want to use a non-root user, change ``root`` to the
|
||||||
mysql -u $DB_USER -p -e 'CREATE DATABASE storyboard;'
|
desired username.
|
||||||
|
|
||||||
|
|
||||||
4. Copy the sample configuration file::
|
4. Create a config file
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
StoryBoard needs a configuration file to run. The minimum useable
|
||||||
|
configuration needs to contain an uncommented ``connection`` line
|
||||||
|
in addition to the sample content, to allow a database connection.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
cp ./etc/storyboard.conf.sample ./etc/storyboard.conf
|
cp ./etc/storyboard.conf.sample ./etc/storyboard.conf
|
||||||
|
|
||||||
|
To make this into a useable config file, some changes are needed.
|
||||||
|
Edit ``./etc/storyboard.conf`` and make the following changes:
|
||||||
|
|
||||||
5. Edit ``./etc/storyboard.conf`` and make the following changes:
|
- Update the ``connection`` line in the ``database`` section to replace
|
||||||
|
``root:pass`` with the username and password you're using to connect
|
||||||
|
to the database. This is likely ``root`` and the password you chose
|
||||||
|
when installing MySQL.
|
||||||
|
|
||||||
* in the ``oauth`` section, add your IP Address to the list of ``valid_oauth_clients``
|
Uncomment this line by removing the ``#``, ensuring there is no
|
||||||
* in the ``database`` section, on the line which reads
|
whitespace at the start of the line.
|
||||||
``# connection = mysql+pymysql://root:pass@127.0.0.1:3306/storyboard?charset=utf8mb4``,
|
|
||||||
replace the ``pass`` with your password (the same as used in the above
|
|
||||||
steps)
|
|
||||||
|
|
||||||
Uncomment both of these lines by removing the ``#``.
|
.. warning:: If you are running the API in a VM, and plan to access it
|
||||||
|
remotely, ie. by its IP address or hostname, you also need to add
|
||||||
|
that IP address or hostname to the ``valid_oauth_clients`` line in
|
||||||
|
the ``oauth`` section. Uncomment this line too.
|
||||||
|
|
||||||
|
|
||||||
6. Install tox::
|
5. Install tox
|
||||||
|
--------------
|
||||||
|
|
||||||
sudo pip3 install tox
|
StoryBoard uses tox for both running tests and managing a virtualenv
|
||||||
|
for running the development servers.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pip3 install --user tox
|
||||||
|
|
||||||
|
.. note:: If this is your first time passing ``--user`` to pip, you
|
||||||
|
will likely need to add ``~/.local/bin`` to your PATH.
|
||||||
|
|
||||||
|
|
||||||
7. Upgrade DB schema to the latest version::
|
6. Migrate the database
|
||||||
|
-----------------------
|
||||||
|
|
||||||
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf upgrade head
|
At this point you could run StoryBoard, but its useless with an empty
|
||||||
|
database. The migrations are run using the ``storyboard-db-manage``
|
||||||
|
script, which you can run using tox in the root of the ``storyboard``
|
||||||
|
repository::
|
||||||
|
|
||||||
|
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf upgrade head
|
||||||
|
|
||||||
|
This command runs all the database migrations in order. Under the hood
|
||||||
|
it uses `alembic <https://alembic.sqlalchemy.org/en/latest/>`_, and
|
||||||
|
has a similar CLI.
|
||||||
|
|
||||||
|
|
||||||
8. Start the API server::
|
7. Run the API
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The API is run using the ``storyboard-api`` command. Again this can
|
||||||
|
be run using tox in the root of the ``storyboard`` repository::
|
||||||
|
|
||||||
|
tox -e venv -- storyboard-api --config-file ./etc/storyboard.conf
|
||||||
|
|
||||||
|
The output of this command should finish with something like::
|
||||||
|
|
||||||
|
2019-03-20 11:25:44.862 22047 INFO storyboard.api.app [-] Starting server in PID 22047
|
||||||
|
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] Configuration:
|
||||||
|
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] serving on 0.0.0.0:8080, view at http://127.0.0.1:8080
|
||||||
|
|
||||||
|
At that point, the API is running successfully. You can stop it using
|
||||||
|
Ctrl+C or by closing your terminal.
|
||||||
|
|
||||||
|
|
||||||
|
8. Serve the webclient
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The storyboard-webclient repository provides a tox target which builds
|
||||||
|
the webclient and serves it using a development server. You can run it
|
||||||
|
using tox in the root of the ``storyboard-webclient`` repository::
|
||||||
|
|
||||||
|
tox -e grunt_no_api -- serve
|
||||||
|
|
||||||
|
This will take a little while to run as it obtains the required dependencies
|
||||||
|
using ``npm``, and builds node-sass.
|
||||||
|
|
||||||
|
The output of this command should finish with something like::
|
||||||
|
|
||||||
|
Running "connect:livereload" (connect) task
|
||||||
|
Started connect web server on http://localhost:9000
|
||||||
|
|
||||||
|
Running "watch" task
|
||||||
|
Waiting...
|
||||||
|
|
||||||
|
At that point the webclient is being served successfully. You can stop it
|
||||||
|
using Ctrl+C or by closing the terminal. Any changes to existing files in
|
||||||
|
the codebase will cause it to automatically rebuild the webclient and
|
||||||
|
refresh the page in your browser, to help streamline the development
|
||||||
|
workflow.
|
||||||
|
|
||||||
|
You can view it in a browser at ``http://localhost:9000/``. You should also
|
||||||
|
be able to log in here. The provided configuration file uses Ubuntu One as
|
||||||
|
the OpenID provider, so you'll need an Ubuntu One account to do so.
|
||||||
|
|
||||||
|
|
||||||
|
Optional: Enable notifications
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Notifications in StoryBoard are handled by workers which subscribe to
|
||||||
|
events on a message queue. Currently only RabbitMQ is supported.
|
||||||
|
|
||||||
|
|
||||||
|
1. Install rabbitmq on your development machine
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The first step to enable notifications is to get RabbitMQ installed
|
||||||
|
on your development instance.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo apt install rabbitmq-server
|
||||||
|
|
||||||
|
|
||||||
|
2. Set up rabbitmq
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Create a rabbitmq user/password for StoryBoard (more information
|
||||||
|
can be found in the `rabbitmq manpages`_)::
|
||||||
|
|
||||||
|
# (username) (password)
|
||||||
|
sudo rabbitmqctl add_user storyboard storyboard
|
||||||
|
sudo rabbitmqctl set_permissions -p / storyboard ".*" ".*" ".*"
|
||||||
|
|
||||||
|
.. _rabbitmq manpages: https://www.rabbitmq.com/rabbitmqctl.8.html#User_Management
|
||||||
|
|
||||||
|
|
||||||
|
3. Configure notifications
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
StoryBoard needs various keys set in its configuration file to know
|
||||||
|
how to use RabbitMQ, and the notifications functionality needs to be
|
||||||
|
explicitly enabled.
|
||||||
|
|
||||||
|
Set the following configuration in your storyboard.conf file, replacing
|
||||||
|
the userid and password as needed if you used something different in
|
||||||
|
the previous step::
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
enable_notifications = True
|
||||||
|
|
||||||
|
[notifications]
|
||||||
|
rabbit_host=127.0.0.1
|
||||||
|
rabbit_login_method = AMQPLAIN
|
||||||
|
rabbit_userid = storyboard
|
||||||
|
rabbit_password = storyboard
|
||||||
|
rabbit_port = 5672
|
||||||
|
rabbit_virtual_host = /
|
||||||
|
|
||||||
|
|
||||||
|
4. Restart the API
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If the API is running, restart it now to pick up the configuration
|
||||||
|
changes. Use Ctrl+C to stop the existing process, and again use tox
|
||||||
|
in the root of the ``storyboard`` repository::
|
||||||
|
|
||||||
tox -e venv -- storyboard-api --config-file ./etc/storyboard.conf
|
tox -e venv -- storyboard-api --config-file ./etc/storyboard.conf
|
||||||
|
|
||||||
|
|
||||||
Installing the Javascript-based web client
|
5. Run the workers
|
||||||
==========================================
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To run the workers so that notifications are actually created, use tox
|
||||||
|
in the root of the ``storyboard`` repository::
|
||||||
|
|
||||||
1. To build and start the web client, you will need this dependency set
|
tox -e storyboard-worker-daemon --config-file ./etc/storyboard.conf
|
||||||
installed locally:
|
|
||||||
|
|
||||||
* tox
|
This will start 5 workers to listen for events and create any relevant
|
||||||
* Node.js v0.10.29 or newer (see https://nodejs.org/en/download/package-manager/
|
notifications.
|
||||||
for more information on getting the right package for your distribution)
|
|
||||||
* npm v1.3.10 or newer (this will be bundled with Node.js)
|
|
||||||
|
|
||||||
|
|
||||||
2. Clone the StoryBoard webclient::
|
|
||||||
|
|
||||||
git clone https://git.openstack.org/openstack-infra/storyboard-webclient
|
|
||||||
cd storyboard-webclient
|
|
||||||
|
|
||||||
|
|
||||||
3. Do **one** of the following that applies to you.
|
|
||||||
|
|
||||||
a. Run a local development server, which uses the localhost API.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
tox -egrunt_no_api -- serve
|
|
||||||
|
|
||||||
b. Run a local development server, which binds to a specific IP and
|
|
||||||
consumes the localhost API.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
tox -egrunt_no_api -- serve --hostname 0.0.0.0
|
|
||||||
|
|
||||||
c. Run a local development server, which uses the production API.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
tox -egrunt_no_api -- serve:prod
|
|
||||||
|
|
||||||
|
|
||||||
Using your development StoryBoard
|
Using your development StoryBoard
|
||||||
@ -311,17 +439,21 @@ Once the API and the webclient development server are running, you can
|
|||||||
use your development instance of StoryBoard in a few ways.
|
use your development instance of StoryBoard in a few ways.
|
||||||
|
|
||||||
By default, the webclient development server uses port 9000, and so
|
By default, the webclient development server uses port 9000, and so
|
||||||
can be accessed by navigating to `http://localhost:9000/` in a web browser.
|
can be accessed by navigating to http://localhost:9000/ in a web browser
|
||||||
In order to log in, the hostname or IP address being used here will need to
|
running on the same machine.
|
||||||
be in the `valid_oauth_clients` key of `./etc/storyboard.conf` for the API.
|
|
||||||
|
If your browser is on a different machine, the hostname or IP address of the
|
||||||
|
machine running the API will need to be in the ``valid_oauth_clients`` key of
|
||||||
|
``./etc/storyboard.conf`` for the API in order to log in.
|
||||||
|
|
||||||
By default, the API server uses port 8080, and so the API can be accessed
|
By default, the API server uses port 8080, and so the API can be accessed
|
||||||
at `http://localhost:8080/`. That will produce a 404 as the API doesn't
|
at http://localhost:8080/. That will produce a 404 as the API doesn't
|
||||||
actually serve anything on the `/` endpoint. The API endpoints that are
|
actually serve anything on the ``/`` endpoint, but that counter-intuitively
|
||||||
available are documented on the :doc:`../webapi/v1` page.
|
means its probably working. The API endpoints that are available are documented
|
||||||
|
on the :doc:`../webapi/v1` page.
|
||||||
|
|
||||||
The webclient server also forwards `/api` to the API server, so it is also
|
The webclient server also forwards ``/api`` to the API server, so it is also
|
||||||
possible to use the API by sending requests to `http://localhost:9000/api/`.
|
possible to use the API by sending requests to http://localhost:9000/api/.
|
||||||
|
|
||||||
|
|
||||||
Make user an admin - current bug
|
Make user an admin - current bug
|
||||||
@ -361,41 +493,3 @@ Optional steps: Seed database with base data
|
|||||||
4. Create the projects and projectgroups in the DB::
|
4. Create the projects and projectgroups in the DB::
|
||||||
|
|
||||||
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf load_projects ./etc/projects.yaml
|
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf load_projects ./etc/projects.yaml
|
||||||
|
|
||||||
|
|
||||||
Optional steps: Set up the notifications daemon
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
1. Install rabbitmq on your development machine::
|
|
||||||
|
|
||||||
sudo apt install rabbitmq-server
|
|
||||||
|
|
||||||
2. Create a rabbitmq user/password for StoryBoard (more information
|
|
||||||
can be found in the `rabbitmq manpages`_)::
|
|
||||||
|
|
||||||
# (username) (password)
|
|
||||||
sudo rabbitmqctl add_user storyboard storyboard
|
|
||||||
sudo rabbitmqctl set_permissions -p / storyboard ".*" ".*" ".*"
|
|
||||||
|
|
||||||
.. _rabbitmq manpages: https://www.rabbitmq.com/rabbitmqctl.8.html#User_Management
|
|
||||||
|
|
||||||
3. Set up your storyboard.conf file for notifications using rabbitmq::
|
|
||||||
|
|
||||||
[DEFAULT]
|
|
||||||
enable_notifications = True
|
|
||||||
|
|
||||||
[notifications]
|
|
||||||
rabbit_host=127.0.0.1
|
|
||||||
rabbit_login_method = AMQPLAIN
|
|
||||||
rabbit_userid = storyboard
|
|
||||||
rabbit_password = storyboard
|
|
||||||
rabbit_port = 5672
|
|
||||||
rabbit_virtual_host = /
|
|
||||||
|
|
||||||
4. Restart your API server (if it is running)::
|
|
||||||
|
|
||||||
tox -e venv "storyboard-api --config-file ./etc/storyboard.conf"
|
|
||||||
|
|
||||||
5. Run the worker daemon::
|
|
||||||
|
|
||||||
tox -e venv "storyboard-worker-daemon --config-file ./etc/storyboard.conf"
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user