Skip to content

Commit fa84735

Browse files
authored
Merge pull request #6 from OpenDataAnalytics/dockerize
Dockerize
2 parents 19ad17c + 131ba48 commit fa84735

14 files changed

Lines changed: 216 additions & 69 deletions

client/.env.production

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
VUE_APP_API_URL=http://localhost:9000/api/v1

docker/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
volumes/

docker/docker-compose.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
version: '3'
3+
services:
4+
mongo:
5+
image: mongo:latest
6+
volumes:
7+
- mongo_db:/data/db
8+
9+
girder:
10+
build:
11+
context: ../
12+
dockerfile: docker/girder.Dockerfile
13+
volumes:
14+
- girder_assetstore:/home/assetstore
15+
depends_on:
16+
- mongo
17+
ports:
18+
- "9000:8080"
19+
20+
nginx:
21+
build:
22+
context: ../
23+
dockerfile: docker/nginx.Dockerfile
24+
depends_on:
25+
- girder
26+
ports:
27+
- "9001:80"
28+
29+
provision:
30+
build:
31+
context: ../
32+
dockerfile: docker/provision.Dockerfile
33+
depends_on:
34+
- nginx
35+
36+
volumes:
37+
mongo_db:
38+
girder_assetstore:

docker/girder.Dockerfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM girder/girder:latest-py3
2+
3+
WORKDIR /home
4+
5+
COPY docker/provision provision
6+
COPY server /home/resonanteco
7+
8+
RUN pip install -e /home/resonanteco && girder build
9+
10+
ENTRYPOINT ["/home/provision/girder_entrypoint.sh"]

docker/nginx.Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM nginx:stable-alpine
2+
3+
COPY ./client/dist/ /usr/share/nginx/html
4+
5+
COPY ./docker/nginx.conf /etc/nginx/nginx.conf

docker/nginx.conf

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
events { worker_connections 1024; }
2+
3+
http {
4+
include /etc/nginx/mime.types;
5+
# include /etc/nginx/proxy.conf;
6+
# include /etc/nginx/fastcgi.conf;
7+
8+
upstream girder {
9+
server girder:8080;
10+
}
11+
12+
client_max_body_size 100M;
13+
14+
server {
15+
16+
root /usr/share/nginx/html;
17+
18+
listen 80;
19+
20+
location /api/ {
21+
proxy_set_header X-Real-IP $remote_addr;
22+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
23+
proxy_set_header X-NginX-Proxy true;
24+
proxy_pass http://girder/api/;
25+
proxy_ssl_session_reuse off;
26+
proxy_set_header Host $http_host;
27+
proxy_redirect off;
28+
}
29+
30+
location / {
31+
try_files $uri $uri/ /index.html;
32+
}
33+
}
34+
}

docker/provision.Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM python:3.7
2+
3+
RUN pip install girder-client
4+
5+
WORKDIR /home
6+
7+
COPY docker/provision provision
8+
9+
ENTRYPOINT ["/home/provision/provision_entrypoint.sh"]

docker/provision/girder.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import os
2+
3+
import girder_client
4+
import requests
5+
6+
ADMIN_USER = 'admin'
7+
ADMIN_PASS = 'letmein'
8+
9+
10+
def setGirderSetting(key, value, gc):
11+
return gc.put("/system/setting",
12+
parameters={
13+
"key" : key,
14+
"value": value
15+
}
16+
)
17+
18+
19+
def createInitialUser(apiUrl):
20+
# no try required here, just get a 400 on failure
21+
res = requests.post(
22+
'{}/user'.format(apiUrl),
23+
data={"login" : ADMIN_USER, "email": "admin@admin.com",
24+
"firstName": ADMIN_USER, "password": ADMIN_PASS,
25+
"lastName" : ADMIN_USER, "admin": True})
26+
27+
28+
def createIngestFolders(gc):
29+
try:
30+
collection = gc.createCollection('ResonantEco')
31+
except girder_client.HttpError as exc:
32+
collection = gc.resourceLookup('/collection/ResonantEco')
33+
datasetsFolder = gc.loadOrCreateFolder('datasets', collection['_id'], 'collection')
34+
gc.loadOrCreateFolder('LLNL', datasetsFolder['_id'], 'folder')
35+
gc.loadOrCreateFolder('JGI', datasetsFolder['_id'], 'folder')
36+
37+
38+
def createAssetstore(gc, name='assetstore', path='/home/assetstore'):
39+
try:
40+
res = gc.post("/assetstore",
41+
parameters={'name': name, 'type': 0,
42+
'root': path})
43+
except girder_client.HttpError as exc:
44+
print(exc)
45+
46+
47+
def check_admin_login(apiUrl):
48+
gc = girder_client.GirderClient(apiUrl=apiUrl)
49+
50+
try:
51+
gc.authenticate(ADMIN_USER, ADMIN_PASS)
52+
except girder_client.AuthenticationError:
53+
print('Cannot login admin, it probably does not exist')
54+
return False
55+
return True
56+
57+
58+
def run_girder_init(apiUrl):
59+
createInitialUser(apiUrl)
60+
gc = girder_client.GirderClient(apiUrl=apiUrl)
61+
gc.authenticate("admin", "letmein")
62+
setGirderSetting("core.cors.allow_origin", "http://localhost:8080, http://localhost:9001", gc)
63+
createAssetstore(gc)
64+
createIngestFolders(gc)
65+
66+
if __name__ == '__main__':
67+
GIRDER_INNER_HOST = 'girder'
68+
GIRDER_INNER_PORT = os.environ.get('GIRDER_INNER_PORT', 8080)
69+
if not GIRDER_INNER_PORT:
70+
raise RuntimeError('You must set the env variable GIRDER_INNER_PORT')
71+
72+
girder_url = "http://{host}:{port}/api/v1".format(host=GIRDER_INNER_HOST,
73+
port=GIRDER_INNER_PORT)
74+
run_girder_init(girder_url)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
girder serve --database mongodb://mongo:27017/girder --host 0.0.0.0
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
3+
sleep 10
4+
python3 /home/provision/girder.py

0 commit comments

Comments
 (0)