Integrating the client and datastore into the main repo:
- Added each service as a submodule for development - Added conventions for naming environment variables - Added required targets in makefiles of services
This commit is contained in:
parent
f7a18cef65
commit
4484d1e4ef
3
.gitignore
vendored
3
.gitignore
vendored
@ -14,6 +14,7 @@ __pycache__
|
||||
bower_components
|
||||
client
|
||||
make
|
||||
openslides*
|
||||
openslides_*
|
||||
openslides
|
||||
personal_data
|
||||
tests
|
||||
|
8
.gitmodules
vendored
Normal file
8
.gitmodules
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
[submodule "openslides-datastore-service"]
|
||||
path = openslides-datastore-service
|
||||
url = git@github.com:OpenSlides/openslides-datastore-service.git
|
||||
branch = master
|
||||
[submodule "openslides-client"]
|
||||
path = openslides-client
|
||||
url = git@github.com:OpenSlides/openslides-client.git
|
||||
branch = master
|
97
DEVELOPMENT.md
Normal file
97
DEVELOPMENT.md
Normal file
@ -0,0 +1,97 @@
|
||||
# Development of OpenSlides 4
|
||||
|
||||
## First time checkout
|
||||
|
||||
After cloning the repository you need to initialize all submodules, before you can start the development setup
|
||||
|
||||
$ git submodule update --init
|
||||
$ make run-dev
|
||||
|
||||
## Running tests
|
||||
|
||||
To run all tests of all services, execute `run-service-tests`. TODO: Systemtests in this repo.
|
||||
|
||||
## Adding a new Service
|
||||
|
||||
$ git submodule add <git@myrepo.git>
|
||||
|
||||
Append `branch = master` to the new entry in the `.gitmodules` file. Verify,
|
||||
that it is there (the folder should have 160000 permissions: Submodule) with the
|
||||
current commit:
|
||||
|
||||
$ git diff --cached
|
||||
|
||||
Than, commit changes and create a pull request.
|
||||
|
||||
## Work in submodules
|
||||
|
||||
- Create your own fork at github.
|
||||
- Remove the upstream (main) repo as the origin in the submodule:
|
||||
$ cd <submodule>
|
||||
$ git remote remove origin
|
||||
|
||||
- Add your fork and the main repo as origin and upstream
|
||||
$ git remote add origin <your fork>
|
||||
$ git remote add upstream <main repo>
|
||||
|
||||
## Requirements for services
|
||||
|
||||
### Environment variables
|
||||
- `PORT`: The port, the service is running on
|
||||
- `<FOREIGN_SERVICE>_HOST`: The host from a required service
|
||||
- `<FOREIGN_SERVICE>_PORT`: The port from a required service
|
||||
|
||||
Required services can be `MESSAGE_BUS`, `DATASTORE_WRITER`, `PERMISSION`, `AUTOUPDATE`,
|
||||
etc. For private services (e.g. a database dedicated to exactly one service),
|
||||
use the following syntax: `<SERVICE>_<PRIV_SERVICE>_<ATTRIBUTE>`, e.g. the
|
||||
Postgresql user for the datastore: `DATASTORE_POSTGRESQL_USER`.
|
||||
|
||||
### Makefile
|
||||
|
||||
A makefile must be provided at the root-level of the service. The currently
|
||||
required (phony) targets are:
|
||||
|
||||
- `run-tests`: Execute all tests from the submodule
|
||||
- `build-dev`: Build an image with the tag `openslides-<service>-dev`
|
||||
|
||||
## Developing on a single service
|
||||
|
||||
Go to the serivce and create a new branch (from master):
|
||||
|
||||
$ cd my-service
|
||||
$ git status # -> on master?
|
||||
$ git checkout -b my-feature
|
||||
|
||||
Run OpenSlides in development mode (e.g. in a new terminal):
|
||||
|
||||
$ make run-dev
|
||||
|
||||
After making some changes in my-service, create a commit and push to your fork
|
||||
|
||||
$ git add -A
|
||||
$ git commit -m "A meaningful commit message here"
|
||||
$ git push origin my-feature
|
||||
|
||||
As the last step, you can create a PR on Github. After merging, these steps are
|
||||
required to be executed in the main repo:
|
||||
|
||||
$ cd my-service
|
||||
$ git pull upstream master
|
||||
$ cd ..
|
||||
$ git diff # -> commit hash changed for my-service
|
||||
|
||||
If the update commit should be a PR:
|
||||
$ git checkout -b updated-my-service
|
||||
$ git commit -am "Updated my-service"
|
||||
$ git push origin updated-my-service
|
||||
|
||||
Or a direct push on master:
|
||||
$ git commit -am "Updated my-service"
|
||||
$ git push origin master
|
||||
|
||||
## A useful command
|
||||
|
||||
After working in many services with different branches, this command checks
|
||||
out `master` (or the given branch in the .gitmodules) in all submodules:
|
||||
|
||||
$ git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
|
20
Makefile
Normal file
20
Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
# TESTS
|
||||
|
||||
run-system-tests:
|
||||
echo "TODO: write complete system tests"
|
||||
|
||||
run-service-tests:
|
||||
git submodule foreach 'make run-tests'
|
||||
|
||||
build-dev:
|
||||
git submodule foreach 'make build-dev'
|
||||
make -C haproxy build-dev
|
||||
|
||||
run-dev: | build-dev
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml -p 127.0.0.1:8000:8000/tcp up
|
||||
|
||||
build-prod:
|
||||
docker-compose -f docker-compose.yml -f docker-compose.prod.yml build
|
||||
|
||||
run-prod: | build-prod
|
||||
docker-compose -f docker-compose.yml -f docker-compose.prod.yml -p 127.0.0.1:8000:8000/tcp up
|
11
README.md
11
README.md
@ -18,7 +18,16 @@ Read more about our [concept of OpenSlides 4.0](https://github.com/OpenSlides/Op
|
||||
|
||||
## Installation
|
||||
|
||||
__TODO (Installation with docker-compose)__
|
||||
Required software: Docker, docker-compose, make, git
|
||||
|
||||
For a non-development setup, clone this repo and run it via docker compose. The make command is a handy shortcut for this:
|
||||
|
||||
$ git clone git@github.com:OpenSlides/OpenSlides.git
|
||||
$ cd OpenSlides
|
||||
$ git checkout openslides4-dev # needed, until OS4 is released
|
||||
$ make run-prod
|
||||
|
||||
For a development setup, refer to [the development docs](DEVELOPMENT.md)
|
||||
|
||||
|
||||
## Used software
|
||||
|
14
docker-compose.dev.yml
Normal file
14
docker-compose.dev.yml
Normal file
@ -0,0 +1,14 @@
|
||||
version: '3'
|
||||
services:
|
||||
datastore-writer:
|
||||
image: openslides-datastore-writer-dev
|
||||
volumes:
|
||||
- ./openslides-datastore-service/writer/writer:/app/writer
|
||||
haproxy:
|
||||
image: openslides-haproxy-dev
|
||||
volumes:
|
||||
- ./haproxy/src:/usr/local/etc/haproxy
|
||||
client:
|
||||
image: openslides-client-dev
|
||||
volumes:
|
||||
- ./openslides-client/client/src:/app/src
|
11
docker-compose.prod.yml
Normal file
11
docker-compose.prod.yml
Normal file
@ -0,0 +1,11 @@
|
||||
version: '3'
|
||||
services:
|
||||
datastore-writer:
|
||||
build: https://github.com/OpenSlides/openslides-datastore-service.git#:writer
|
||||
image: openslides-datastore-writer
|
||||
client:
|
||||
build: https://github.com/OpenSlides/openslides-client.git
|
||||
image: openslides-client
|
||||
haproxy:
|
||||
build: ./haproxy
|
||||
image: openslides-haproxy
|
56
docker-compose.yml
Normal file
56
docker-compose.yml
Normal file
@ -0,0 +1,56 @@
|
||||
version: '3'
|
||||
services:
|
||||
# DATASTORE SECTION
|
||||
datastore-writer:
|
||||
depends_on:
|
||||
- datastore-postgresql
|
||||
- message-bus
|
||||
environment:
|
||||
- DATASTORE_DATABASE_HOST=datastore-postgresql
|
||||
- DATASTORE_DATABASE_USER=openslides
|
||||
- DATASTORE_DATABASE_PASSWORD=openslides
|
||||
- DATASTORE_DATABASE_NAME=openslides
|
||||
env_file: services.env
|
||||
networks:
|
||||
- datastore-postgresql
|
||||
- message-bus
|
||||
datastore-postgresql:
|
||||
image: sameersbn/postgresql:10
|
||||
labels:
|
||||
org.openslides.role: "postgres"
|
||||
environment:
|
||||
- DB_USER=openslides
|
||||
- DB_PASS=openslides
|
||||
- DB_NAME=openslides
|
||||
networks:
|
||||
- datastore-postgresql
|
||||
|
||||
# CLIENT
|
||||
client:
|
||||
networks:
|
||||
- backend
|
||||
|
||||
# SHARED
|
||||
message-bus:
|
||||
image: redis:alpine
|
||||
networks:
|
||||
- message-bus
|
||||
|
||||
# UPLINK
|
||||
haproxy:
|
||||
depends_on:
|
||||
- client
|
||||
ports:
|
||||
- "8000:8000"
|
||||
networks:
|
||||
- uplink
|
||||
- backend
|
||||
|
||||
networks:
|
||||
uplink:
|
||||
datastore-postgresql:
|
||||
internal: true
|
||||
message-bus:
|
||||
internal: true
|
||||
backend:
|
||||
internal: true
|
4
haproxy/Dockerfile
Normal file
4
haproxy/Dockerfile
Normal file
@ -0,0 +1,4 @@
|
||||
FROM haproxy:2.0.8-alpine
|
||||
COPY src/haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
|
||||
COPY src/prod-haproxy.cfg /usr/local/etc/haproxy/prod-haproxy.cfg
|
||||
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg", "-f", "/usr/local/etc/haproxy/prod-haproxy.cfg"]
|
4
haproxy/Dockerfile.dev
Normal file
4
haproxy/Dockerfile.dev
Normal file
@ -0,0 +1,4 @@
|
||||
FROM haproxy:2.0.8-alpine
|
||||
COPY src/haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
|
||||
COPY src/dev-haproxy.cfg /usr/local/etc/haproxy/dev-haproxy.cfg
|
||||
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg", "-f", "/usr/local/etc/haproxy/dev-haproxy.cfg"]
|
2
haproxy/Makefile
Normal file
2
haproxy/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
build-dev:
|
||||
docker build -t openslides-haproxy-dev -f Dockerfile.dev .
|
5
haproxy/src/dev-haproxy.cfg
Normal file
5
haproxy/src/dev-haproxy.cfg
Normal file
@ -0,0 +1,5 @@
|
||||
backend backend_client
|
||||
mode http
|
||||
server client client:4200 resolvers docker_resolver no-check
|
||||
timeout server 60s
|
||||
timeout connect 60s
|
38
haproxy/src/haproxy.cfg
Normal file
38
haproxy/src/haproxy.cfg
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
frontend http
|
||||
bind *:8000
|
||||
mode http
|
||||
option http-keep-alive
|
||||
default_backend backend_client
|
||||
|
||||
timeout client 60s
|
||||
|
||||
#acl auth path_beg -i /auth/
|
||||
#use_backend backend_auth if auth
|
||||
|
||||
#acl todolist path_beg -i /todo
|
||||
#use_backend backend_todolist if todolist
|
||||
|
||||
stats enable
|
||||
stats uri /stats
|
||||
stats refresh 10s
|
||||
stats auth admin:admin
|
||||
|
||||
resolvers docker_resolver
|
||||
nameserver dns 127.0.0.11:53
|
||||
|
||||
# backend backend_auth
|
||||
# mode http
|
||||
|
||||
# server auth1 auth:8080 resolvers docker_resolver check
|
||||
|
||||
# timeout connect 60s
|
||||
# timeout server 60s
|
||||
|
||||
# backend backend_todolist
|
||||
# mode http
|
||||
|
||||
# server todolist1 todolist:8000 resolvers docker_resolver check
|
||||
|
||||
# timeout connect 60s
|
||||
# timeout server 60s
|
5
haproxy/src/prod-haproxy.cfg
Normal file
5
haproxy/src/prod-haproxy.cfg
Normal file
@ -0,0 +1,5 @@
|
||||
backend backend_client
|
||||
mode http
|
||||
server client client:80 resolvers docker_resolver check
|
||||
timeout server 60s
|
||||
timeout connect 60s
|
1
openslides-client
Submodule
1
openslides-client
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit e75e72b50c66cd59ca6aac8cea1cf8c6c998d954
|
1
openslides-datastore-service
Submodule
1
openslides-datastore-service
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 51af334ddc7c7a57616263e8d56e27c21c0e5e65
|
4
services.env
Normal file
4
services.env
Normal file
@ -0,0 +1,4 @@
|
||||
MESSAGE_BUS_HOST=message-bus
|
||||
MESSAGE_BUS_PORT=6379
|
||||
DATASTORE_WRITER_HOST=datastore-writer
|
||||
DATASTORE_WRITER_PORT=8000
|
Loading…
Reference in New Issue
Block a user