##// END OF EJS Templates
multiple changes...
super-admin -
Show More
@@ -0,0 +1,12 b''
1 Put any custom overrides and compose files here.
2
3 e.g
4
5 - docker-compose-services.override.yaml
6 - docker-compose-router.override.yaml
7 - docker-compose-metrics.override.yaml
8 - docker-compose-apps.override.yaml
9
10 Passing variables to containers
11
12 .runtime.env No newline at end of file
@@ -0,0 +1,31 b''
1 version: '3.9'
2
3 services:
4
5 rhodecode:
6 ports:
7 - "10020:10020"
8 environment:
9 DB_UPGRADE: 0 # run the DB upgrade
10 SETUP_APP: 0 # run the application default settings setup, can be turned off after initial run
11
12 deploy:
13 replicas: 1
14
15 vcsserver:
16 environment:
17 {}
18 deploy:
19 replicas: 1
20
21 sshd:
22 {}
23
24 svn:
25 {}
26
27 celery-beat:
28 {}
29
30 celery:
31 {}
@@ -0,0 +1,31 b''
1 version: '3.9'
2
3 services:
4
5 promtail:
6 {}
7
8 loki:
9 labels:
10 - "traefik.enable=false"
11 # - "traefik.http.services.loki.loadbalancer.server.port=3100"
12 # - "traefik.http.services.loki.loadbalancer.server.port=9095"
13
14 prometheus:
15 {}
16
17 node-exporter:
18 {}
19
20 statsd-exporter:
21 {}
22
23 grafana:
24
25 labels:
26 # SSL + proxy prefix
27 - "traefik.http.routers.grafana-rt.service=grafana-ssl"
28 - "traefik.http.routers.grafana-rt.entrypoints=https"
29 - "traefik.http.routers.grafana-rt.rule=Host(`your-domain.com`) && PathPrefix(`/_grafana`)"
30 - "traefik.http.routers.grafana-rt.tls=true"
31 - "traefik.http.services.grafana-ssl.loadbalancer.server.port=3000" No newline at end of file
@@ -0,0 +1,43 b''
1 version: '3.9'
2
3 ## docker network create -d overlay lb-net
4 services:
5
6 traefik:
7
8 volumes:
9 # So that Traefik can listen to the Docker events
10 - /var/run/docker.sock:/var/run/docker.sock
11 # custom traefik config, enable SSL etc..
12 - $PWD/.custom/traefik_custom:/etc/traefik
13
14 portainer:
15 # Run with COMPOSE_PROFILES=portainer
16 # to access portainer set HEADER `X-Docker-Host=portainer`
17 image: portainer/portainer-ce:latest
18 restart: always
19 volumes:
20 - portainer_data:/data
21 - /var/run/docker.sock:/var/run/docker.sock
22 deploy:
23 mode: replicated
24 replicas: 1
25 placement:
26 constraints:
27 # limit swarm deploy to MANAGER only
28 - node.role == manager
29
30 networks:
31 - rhodecode_network
32 labels:
33 - "traefik.enable=true"
34 - "traefik.http.routers.portainer.entrypoints=https"
35 - "traefik.http.routers.portainer.rule=Headers(`X-Docker-Host`, `portainer`)"
36 - "traefik.http.services.portainer.loadbalancer.server.port=9000"
37
38 profiles:
39 ["portainer"]
40
41 volumes:
42 portainer_data:
43 external: true No newline at end of file
@@ -0,0 +1,24 b''
1 version: '3.9'
2 ## This is a final override file for services stack
3 ## Add your own customizations
4
5 ## docker network create -d overlay lb-net
6 services:
7
8 database:
9 {}
10
11 database-mysql:
12 {}
13
14 redis:
15 {}
16
17 elasticsearch:
18 {}
19
20 nginx:
21 {}
22
23 channelstream:
24 {} No newline at end of file
@@ -9,8 +9,8 b' RC_VERSION="4.28.0.REL20221120_SOURCE"'
9
9
10 # ce, or ee
10 # ce, or ee
11 RC_EDITION=ee
11 RC_EDITION=ee
12 RC_IMAGE_CE="rhodecode/rhodecode-ee:$RC_VERSION"
12 RC_IMAGE_CE="rhodecode/rhodecode-ce:$RC_VERSION"
13 RC_IMAGE_EE="rhodecode/rhodecode-ce:$RC_VERSION"
13 RC_IMAGE_EE="rhodecode/rhodecode-ee:$RC_VERSION"
14
14
15 # Database bootstrap/access credentials
15 # Database bootstrap/access credentials
16 DB_NAME=rhodecode
16 DB_NAME=rhodecode
@@ -6,8 +6,9 b''
6 # Source code downloaded
6 # Source code downloaded
7 .source/*
7 .source/*
8
8
9 # Custom / override wont be tracked
9 # Custom / override wont be tracked, except README file
10 .custom/*
10 .custom/*
11 !.custom/README.md
11
12
12 # LOGS
13 # LOGS
13 logs/*.log
14 logs/*.log
@@ -19,5 +20,4 b' logs/postgres/*.log'
19 .idea
20 .idea
20 config/_shared/.rcmetadata.json
21 config/_shared/.rcmetadata.json
21
22
22 .rccontrol-bootstrap
23 .rccontrol.ini No newline at end of file
23 .rccontrol.ini
@@ -41,6 +41,7 b' log_format json_log_custom escape=json'
41 '"remote_user":"$remote_user",'
41 '"remote_user":"$remote_user",'
42 '"time_local":"$time_local",'
42 '"time_local":"$time_local",'
43 '"remote_addr":"$remote_addr",'
43 '"remote_addr":"$remote_addr",'
44 '"host":"$host",'
44 '"proxy_x_forwarded_for":"$proxy_add_x_forwarded_for",'
45 '"proxy_x_forwarded_for":"$proxy_add_x_forwarded_for",'
45 '"request":"$request",'
46 '"request":"$request",'
46 '"status": "$status",'
47 '"status": "$status",'
@@ -49,6 +50,7 b' log_format json_log_custom escape=json'
49 '"request_time":"$request_time",'
50 '"request_time":"$request_time",'
50 '"upstream_response_time":"$upstream_response_time",'
51 '"upstream_response_time":"$upstream_response_time",'
51 '"http_referrer":"$http_referer",'
52 '"http_referrer":"$http_referer",'
53 '"http_scheme":"$scheme",'
52 '"http_user_agent":"$http_user_agent"'
54 '"http_user_agent":"$http_user_agent"'
53 '}';
55 '}';
54
56
@@ -56,7 +58,7 b' log_format json_log_custom escape=json'
56 server {
58 server {
57 listen 80 default;
59 listen 80 default;
58 # ensure we get the proper Docker DNS resolver for load balancing.
60 # ensure we get the proper Docker DNS resolver for load balancing.
59 resolver 127.0.0.11 ipv6=off;
61 resolver 127.0.0.11 ipv6=off valid=10s;
60 server_name localhost 127.0.0.1;
62 server_name localhost 127.0.0.1;
61 access_log /dev/stdout json_log_custom;
63 access_log /dev/stdout json_log_custom;
62 error_log /dev/stdout;
64 error_log /dev/stdout;
@@ -68,6 +70,11 b' server {'
68 # maximum number and size of buffers for large headers to read from client request
70 # maximum number and size of buffers for large headers to read from client request
69 large_client_header_buffers 16 256k;
71 large_client_header_buffers 16 256k;
70
72
73 location /_health {
74 add_header 'Content-Type' 'application/json';
75 return 200 '{"status":"UP"}';
76 }
77
71 ## serve static files by nginx, recommended
78 ## serve static files by nginx, recommended
72 location /_static/rhodecode {
79 location /_static/rhodecode {
73 gzip on;
80 gzip on;
@@ -84,6 +91,7 b' server {'
84
91
85 ## channelstream location handler, if channelstream live chat and notifications
92 ## channelstream location handler, if channelstream live chat and notifications
86 ## are enable this will proxy the requests to channelstream websocket server
93 ## are enable this will proxy the requests to channelstream websocket server
94 set $upstream_channelstream channelstream:8000;
87 location /_channelstream {
95 location /_channelstream {
88 rewrite /_channelstream/(.*) /$1 break;
96 rewrite /_channelstream/(.*) /$1 break;
89 gzip off;
97 gzip off;
@@ -94,17 +102,18 b' server {'
94 proxy_read_timeout 10m;
102 proxy_read_timeout 10m;
95
103
96 proxy_set_header Host $host;
104 proxy_set_header Host $host;
97 proxy_set_header X-Real-IP $remote_addr;
105 proxy_set_header Referer $http_referer;
98 proxy_set_header X-Url-Scheme $scheme;
106 proxy_set_header X-Url-Scheme $scheme;
99 proxy_set_header X-Forwarded-Proto $scheme;
107 proxy_set_header X-Real-IP $remote_addr;
100 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
108 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
109 proxy_set_header X-Forwarded-Proto $scheme;
101
110
102 proxy_http_version 1.1;
111 proxy_http_version 1.1;
103 proxy_set_header Upgrade $http_upgrade;
112 proxy_set_header Upgrade $http_upgrade;
104 proxy_set_header Connection "upgrade";
113 proxy_set_header Connection "upgrade";
105
114
106 set $upstream_channelstream http://channelstream:8000;
115 proxy_pass http://$upstream_channelstream;
107 proxy_pass $upstream_channelstream;
116 proxy_redirect http://$upstream_channelstream/ /_channelstream;
108 }
117 }
109
118
110 # ## rate limit this endpoint to prevent login page brute-force attacks
119 # ## rate limit this endpoint to prevent login page brute-force attacks
@@ -113,16 +122,16 b' server {'
113 # try_files $uri @rhodecode_http;
122 # try_files $uri @rhodecode_http;
114 # }
123 # }
115
124
116 location / {
125 # location / {
117 include /etc/nginx/proxy.conf;
126 # include /etc/nginx/proxy.conf;
118 try_files $uri @rhodecode_http;
127 # try_files $uri @rhodecode_http;
119 }
128 # }
120
129 #
121 location @rhodecode_http {
130 # set $upstream http://rhodecode:10020;
122 set $upstream http://rhodecode:10020;
131 # location @rhodecode_http {
123 include /etc/nginx/proxy.conf;
132 # include /etc/nginx/proxy.conf;
124 proxy_pass $upstream;
133 # proxy_pass $upstream;
125 }
134 # }
126
135
127 ## Custom 502 error page.
136 ## Custom 502 error page.
128 ## Will be displayed while RhodeCode server is turned off
137 ## Will be displayed while RhodeCode server is turned off
@@ -27,9 +27,9 b' proxy_set_header X-Real-IP $remote_addr;'
27 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
27 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
28 proxy_set_header Proxy-host $proxy_host;
28 proxy_set_header Proxy-host $proxy_host;
29
29
30 proxy_connect_timeout 7200;
30 proxy_connect_timeout 21600;
31 proxy_send_timeout 7200;
31 proxy_send_timeout 21600;
32 proxy_read_timeout 7200;
32 proxy_read_timeout 21600;
33 proxy_buffers 8 32k;
33 proxy_buffers 8 32k;
34
34
35 add_header X-Frame-Options SAMEORIGIN;
35 add_header X-Frame-Options SAMEORIGIN;
@@ -7,8 +7,8 b' entryPoints:'
7 https:
7 https:
8 address: ":443"
8 address: ":443"
9
9
10 # ssh:
10 ssh:
11 # address: ":${RC_SSH_PORT:?must-specify-ssh-port}"
11 address: ":${RC_SSH_PORT:?must-specify-ssh-port}"
12
12
13 traefik:
13 traefik:
14 address: ":7000"
14 address: ":7000"
@@ -11,13 +11,6 b' x-logging: &custom-logging'
11 loki-timeout: "1s"
11 loki-timeout: "1s"
12 loki-max-backoff: "800ms"
12 loki-max-backoff: "800ms"
13
13
14 volumes:
15
16 # volume for RhodeCode repo-store, it's where the repositories will be stored
17 rhodecode_repos:
18 labels:
19 "keep": 1
20
21
14
22 services:
15 services:
23
16
@@ -35,8 +28,11 b' services:'
35 "--name=gunicorn-rhodecode-1",
28 "--name=gunicorn-rhodecode-1",
36 "--error-logfile=-",
29 "--error-logfile=-",
37 "--paster=/etc/rhodecode/conf/rhodecode.optimized.ini",
30 "--paster=/etc/rhodecode/conf/rhodecode.optimized.ini",
38 "--config=/etc/rhodecode/conf/gunicorn_conf.py"
31 "--config=/etc/rhodecode/conf/gunicorn_conf_rc.py"
39 ]
32 ]
33 deploy:
34 # override this in .custom/docker-compose-apps.override.yaml to scale up
35 replicas: 1
40
36
41 # ports:
37 # ports:
42 # - "127.0.0.1::10020"
38 # - "127.0.0.1::10020"
@@ -85,7 +81,7 b' services:'
85 volumes:
81 volumes:
86 - confvolume:/etc/rhodecode/conf
82 - confvolume:/etc/rhodecode/conf
87 - logvolume:/var/log/rhodecode
83 - logvolume:/var/log/rhodecode
88 - rhodecode_repos:/var/opt/rhodecode_repo_store
84 - rc_reposvolume:/var/opt/rhodecode_repo_store
89 - rc_datavolume:/var/opt/rhodecode_data
85 - rc_datavolume:/var/opt/rhodecode_data
90
86
91 tmpfs:
87 tmpfs:
@@ -95,7 +91,10 b' services:'
95 *custom-logging
91 *custom-logging
96
92
97 labels:
93 labels:
98 - "traefik.enable=false"
94 - "traefik.enable=true"
95 - "traefik.http.routers.rhodecode.entrypoints=http"
96 - "traefik.http.routers.rhodecode.rule=Host(`${RHODECODE_HOSTNAME:?must-specify-rhodecode-hostname}`)"
97 - "traefik.http.services.rhodecode.loadbalancer.server.port=10020"
99
98
100 vcsserver:
99 vcsserver:
101 networks:
100 networks:
@@ -113,6 +112,9 b' services:'
113 "--paster=/etc/rhodecode/conf/vcsserver.optimized.ini",
112 "--paster=/etc/rhodecode/conf/vcsserver.optimized.ini",
114 "--config=/etc/rhodecode/conf/gunicorn_conf_vcs.py"
113 "--config=/etc/rhodecode/conf/gunicorn_conf_vcs.py"
115 ]
114 ]
115 deploy:
116 # override this in .custom/docker-compose-apps.override.yaml to scale up
117 replicas: 1
116
118
117 # ports:
119 # ports:
118 # - "127.0.0.1::10010"
120 # - "127.0.0.1::10010"
@@ -137,7 +139,7 b' services:'
137 volumes:
139 volumes:
138 - confvolume:/etc/rhodecode/conf
140 - confvolume:/etc/rhodecode/conf
139 - logvolume:/var/log/rhodecode
141 - logvolume:/var/log/rhodecode
140 - rhodecode_repos:/var/opt/rhodecode_repo_store
142 - rc_reposvolume:/var/opt/rhodecode_repo_store
141 - rc_datavolume:/var/opt/rhodecode_data
143 - rc_datavolume:/var/opt/rhodecode_data
142
144
143 logging:
145 logging:
@@ -178,7 +180,7 b' services:'
178 volumes:
180 volumes:
179 - confvolume:/etc/rhodecode/conf
181 - confvolume:/etc/rhodecode/conf
180 - logvolume:/var/log/rhodecode
182 - logvolume:/var/log/rhodecode
181 - rhodecode_repos:/var/opt/rhodecode_repo_store
183 - rc_reposvolume:/var/opt/rhodecode_repo_store
182 - rc_datavolume:/var/opt/rhodecode_data
184 - rc_datavolume:/var/opt/rhodecode_data
183
185
184 logging:
186 logging:
@@ -222,7 +224,7 b' services:'
222 volumes:
224 volumes:
223 - confvolume:/etc/rhodecode/conf
225 - confvolume:/etc/rhodecode/conf
224 - logvolume:/var/log/rhodecode
226 - logvolume:/var/log/rhodecode
225 - rhodecode_repos:/var/opt/rhodecode_repo_store
227 - rc_reposvolume:/var/opt/rhodecode_repo_store
226 - rc_datavolume:/var/opt/rhodecode_data
228 - rc_datavolume:/var/opt/rhodecode_data
227
229
228 logging:
230 logging:
@@ -269,7 +271,7 b' services:'
269 volumes:
271 volumes:
270 - confvolume:/etc/rhodecode/conf
272 - confvolume:/etc/rhodecode/conf
271 - logvolume:/var/log/rhodecode
273 - logvolume:/var/log/rhodecode
272 - rhodecode_repos:/var/opt/rhodecode_repo_store
274 - rc_reposvolume:/var/opt/rhodecode_repo_store
273
275
274 logging:
276 logging:
275 *custom-logging
277 *custom-logging
@@ -297,7 +299,7 b' services:'
297 volumes:
299 volumes:
298 - confvolume:/etc/rhodecode/conf
300 - confvolume:/etc/rhodecode/conf
299 - logvolume:/var/log/rhodecode
301 - logvolume:/var/log/rhodecode
300 - rhodecode_repos:/var/opt/rhodecode_repo_store
302 - rc_reposvolume:/var/opt/rhodecode_repo_store
301 - rc_datavolume:/var/opt/rhodecode_data
303 - rc_datavolume:/var/opt/rhodecode_data
302
304
303 logging:
305 logging:
@@ -35,6 +35,11 b' volumes:'
35 rc_datavolume:
35 rc_datavolume:
36 external: true
36 external: true
37
37
38 # volume for RhodeCode repo-store, it's where the repositories will be stored
39 # must be run via: docker volume create --name=rc_reposvolume
40 rc_reposvolume:
41 external: true
42
38 networks:
43 networks:
39
44
40 # SHARED network for all containers
45 # SHARED network for all containers
@@ -108,10 +108,6 b' services:'
108 volumes:
108 volumes:
109 - ./config/loki:/etc/loki
109 - ./config/loki:/etc/loki
110
110
111 labels:
112 - "traefik.enable=false"
113 - "traefik.http.services.loki.loadbalancer.server.port=3100"
114 - "traefik.http.services.loki.loadbalancer.server.port=9095"
115
111
116 promtail:
112 promtail:
117 image: grafana/promtail:latest
113 image: grafana/promtail:latest
@@ -45,34 +45,3 b' services:'
45
45
46 logging:
46 logging:
47 *custom-logging
47 *custom-logging
48
49 portainer:
50 # Run with COMPOSE_PROFILES=portainer
51 # to access portainer set HEADER `X-Docker-Host=portainer`
52 image: portainer/portainer-ce:latest
53 restart: always
54 volumes:
55 - portainer_data:/data
56 - /var/run/docker.sock:/var/run/docker.sock
57 deploy:
58 mode: replicated
59 replicas: 1
60 placement:
61 constraints:
62 # limit swarm deploy to MANAGER only
63 - node.role == manager
64
65 networks:
66 - rhodecode_network
67 labels:
68 - "traefik.enable=true"
69 - "traefik.http.services.portainer.loadbalancer.server.port=9000"
70 - "traefik.http.routers.portainer.entrypoints=https"
71 - "traefik.http.routers.portainer.rule=Headers(`X-Docker-Host`, `portainer`)"
72
73 profiles:
74 ["portainer"]
75
76 volumes:
77 portainer_data:
78 external: true No newline at end of file
@@ -43,10 +43,10 b' services:'
43 # ports:
43 # ports:
44 # - "127.0.0.1:9800:9800"
44 # - "127.0.0.1:9800:9800"
45
45
46 command: ["channelstream", "-i", "/etc/rhodecode/conf/channelstream.ini"]
46 command: ["channelstream"]
47
47
48 environment:
48 env_file:
49 CHANNELSTREAM_ALLOW_POSTING_FROM: 0.0.0.0
49 - .custom/.runtime.env
50
50
51 healthcheck:
51 healthcheck:
52 test: [ "CMD", "curl", "-s", "-o", "/dev/null", "-w", "'%{http_code}'", "http://channelstream:8000/admin/sign_in" ]
52 test: [ "CMD", "curl", "-s", "-o", "/dev/null", "-w", "'%{http_code}'", "http://channelstream:8000/admin/sign_in" ]
@@ -81,7 +81,7 b' services:'
81
81
82 healthcheck:
82 healthcheck:
83 # change port 80 to 443 when only using SSL
83 # change port 80 to 443 when only using SSL
84 test: [ "CMD", "curl", "-A", "RhodeCode-Healthcheck", "-s", "-o", "/dev/null", "-w", "'%{http_code}'", "http://127.0.0.1:80/_admin/ops/ping" ]
84 test: [ "CMD", "curl", "-A", "RhodeCode-Healthcheck", "-s", "-o", "/dev/null", "-w", "'%{http_code}'", "http://127.0.0.1:80/_health" ]
85 timeout: 30s
85 timeout: 30s
86 interval: 60s
86 interval: 60s
87 retries: 10
87 retries: 10
@@ -102,8 +102,8 b' services:'
102 labels:
102 labels:
103 - "traefik.enable=true"
103 - "traefik.enable=true"
104 - "traefik.http.routers.nginx.entrypoints=http"
104 - "traefik.http.routers.nginx.entrypoints=http"
105 - "traefik.http.routers.nginx.rule=Host(`${RHODECODE_HOSTNAME:?must-specify-rhodecode-hostname}`) && ( PathPrefix(`/_health`) || PathPrefix(`/_channelstream`) || PathPrefix(`/_static/rhodecode`) )"
105 - "traefik.http.services.nginx.loadbalancer.server.port=80"
106 - "traefik.http.services.nginx.loadbalancer.server.port=80"
106 - "traefik.http.routers.nginx.rule=Host(`${RHODECODE_HOSTNAME:?must-specify-rhodecode-hostname}`)"
107
107
108 elasticsearch:
108 elasticsearch:
109 networks:
109 networks:
This diff has been collapsed as it changes many lines, (1306 lines changed) Show them Hide them
@@ -36,9 +36,6 b' rccontrol_usage() {'
36 printf "Commands:\n"
36 printf "Commands:\n"
37 echo " self-update update rccontrol and it's docker definitions"
37 echo " self-update update rccontrol and it's docker definitions"
38 echo " bootstrap Bootstrap this machine, check docker version and install rhodecode-network"
38 echo " bootstrap Bootstrap this machine, check docker version and install rhodecode-network"
39 echo " stack run one of available cluster stacks, use -h for more details"
40 echo " stack-status show stack status"
41 echo " stack-upgrade upgrade ALL stack status"
42 echo
39 echo
43 printf "Build Commands:\n"
40 printf "Build Commands:\n"
44 echo " get-build-artifacts Fetch Artifacts to run installer based build"
41 echo " get-build-artifacts Fetch Artifacts to run installer based build"
@@ -46,10 +43,13 b' rccontrol_usage() {'
46 echo " get-build-source Fetch RhodeCode sources, store in .source dir to run a source-based builds"
43 echo " get-build-source Fetch RhodeCode sources, store in .source dir to run a source-based builds"
47 echo " build-source Build RhodeCode image from source, requires upgrade-source initially"
44 echo " build-source Build RhodeCode image from source, requires upgrade-source initially"
48 echo
45 echo
46 printf "Stack Commands:\n"
47 echo " stack run one of available cluster stacks, use -h for more details"
48 echo " stack-status Show stack status"
49 echo " stack-upgrade upgrade ALL stack status"
50 echo
49 printf "CLI Commands:\n"
51 printf "CLI Commands:\n"
50 echo " cli-redis CLI"
52 echo " cli run various CLI tools"
51 echo " cli-db CLI"
52 echo " cli-db-upgrade CLI"
53 echo
53 echo
54 printf "Backup Commands:\n"
54 printf "Backup Commands:\n"
55 echo " backup-db CLI"
55 echo " backup-db CLI"
@@ -172,7 +172,7 b' rccontrol_bootstrap_usage() {'
172
172
173 fi
173 fi
174
174
175 printf "Alias: install\n"
175 printf "Alias: init\n"
176 echo
176 echo
177
177
178 printf "Usage:\n"
178 printf "Usage:\n"
@@ -318,7 +318,7 b' rccontrol_get_build_source_usage() {'
318 fi
318 fi
319
319
320 printf "Usage:\n"
320 printf "Usage:\n"
321 printf " rccontrol get-build-source REVISION [OPTIONS]\n"
321 printf " rccontrol get-build-source [OPTIONS]\n"
322 printf " rccontrol get-build-source --help | -h\n"
322 printf " rccontrol get-build-source --help | -h\n"
323 echo
323 echo
324
324
@@ -333,6 +333,12 b' rccontrol_get_build_source_usage() {'
333
333
334 # :command.usage_flags
334 # :command.usage_flags
335 # :flag.usage
335 # :flag.usage
336 echo " --revision REVISION"
337 printf " revision to download\n"
338 printf " Default: default\n"
339 echo
340
341 # :flag.usage
336 echo " --auth-token AUTH_TOKEN"
342 echo " --auth-token AUTH_TOKEN"
337 printf " Specify AUTH TOKEN to obtain sources\n"
343 printf " Specify AUTH TOKEN to obtain sources\n"
338 echo
344 echo
@@ -343,14 +349,6 b' rccontrol_get_build_source_usage() {'
343 printf " Default: https://code.rhodecode.com\n"
349 printf " Default: https://code.rhodecode.com\n"
344 echo
350 echo
345
351
346 # :command.usage_args
347 printf "Arguments:\n"
348
349 # :argument.usage
350 echo " REVISION"
351 printf " revision to download\n"
352 echo
353
354 # :command.usage_examples
352 # :command.usage_examples
355 printf "Examples:\n"
353 printf "Examples:\n"
356 printf " rccontrol3 get-sources $RC_CLI_VERSION_NAME\n"
354 printf " rccontrol3 get-sources $RC_CLI_VERSION_NAME\n"
@@ -414,8 +412,86 b' rccontrol_stack_usage() {'
414 fi
412 fi
415
413
416 printf "Usage:\n"
414 printf "Usage:\n"
417 printf " rccontrol stack NAME [SERVICES PARAMS...]\n"
415 printf " rccontrol stack COMMAND\n"
418 printf " rccontrol stack --help | -h\n"
416 printf " rccontrol stack [COMMAND] --help | -h\n"
417 echo
418 # :command.usage_commands
419 printf "Commands:\n"
420 echo " router run the router stack"
421 echo " metrics run the router stack"
422 echo " services run the router stack"
423 echo " rhodecode run the router stack"
424 echo " all run all stacks"
425 echo
426
427 # :command.long_usage
428 if [[ -n $long_usage ]]; then
429 printf "Options:\n"
430
431 # :command.usage_fixed_flags
432 echo " --help, -h"
433 printf " Show this help\n"
434 echo
435
436 # :command.usage_examples
437 printf "Examples:\n"
438 printf " - ./rccontrol3 stack router up # run router stack with output to\n console\n - ./rccontrol3 stack router up --detach # run router stack detached\n - ./rccontrol3 stack router down # stop whole router stack\n - ./rccontrol3 stack router ps # check status of router stack\n - ./rccontrol3 stack router -f docker-overrides.yaml up -d # run router stack\n with your overrides\n"
439 echo
440
441 fi
442 }
443
444 # :command.usage
445 rccontrol_stack_router_usage() {
446 if [[ -n $long_usage ]]; then
447 printf "rccontrol stack router - run the router stack\n"
448 echo
449
450 else
451 printf "rccontrol stack router - run the router stack\n"
452 echo
453
454 fi
455
456 printf "Usage:\n"
457 printf " rccontrol stack router [SERVICES PARAMS...]\n"
458 printf " rccontrol stack router --help | -h\n"
459 echo
460
461 # :command.long_usage
462 if [[ -n $long_usage ]]; then
463 printf "Options:\n"
464
465 # :command.usage_fixed_flags
466 echo " --help, -h"
467 printf " Show this help\n"
468 echo
469
470 # :command.usage_args
471 printf "Arguments:\n"
472
473 echo " SERVICES PARAMS..."
474 printf " Additional arguments or flags for services command\n"
475 echo
476
477 fi
478 }
479
480 # :command.usage
481 rccontrol_stack_metrics_usage() {
482 if [[ -n $long_usage ]]; then
483 printf "rccontrol stack metrics - run the router stack\n"
484 echo
485
486 else
487 printf "rccontrol stack metrics - run the router stack\n"
488 echo
489
490 fi
491
492 printf "Usage:\n"
493 printf " rccontrol stack metrics [SERVICES PARAMS...]\n"
494 printf " rccontrol stack metrics --help | -h\n"
419 echo
495 echo
420
496
421 # :command.long_usage
497 # :command.long_usage
@@ -430,19 +506,116 b' rccontrol_stack_usage() {'
430 # :command.usage_args
506 # :command.usage_args
431 printf "Arguments:\n"
507 printf "Arguments:\n"
432
508
433 # :argument.usage
509 echo " SERVICES PARAMS..."
434 echo " NAME"
510 printf " Additional arguments or flags for services command\n"
435 printf " Stack name\n"
511 echo
436 printf " Allowed: router, metrics, services, rhodecode\n"
512
513 fi
514 }
515
516 # :command.usage
517 rccontrol_stack_services_usage() {
518 if [[ -n $long_usage ]]; then
519 printf "rccontrol stack services - run the router stack\n"
520 echo
521
522 else
523 printf "rccontrol stack services - run the router stack\n"
524 echo
525
526 fi
527
528 printf "Usage:\n"
529 printf " rccontrol stack services [SERVICES PARAMS...]\n"
530 printf " rccontrol stack services --help | -h\n"
531 echo
532
533 # :command.long_usage
534 if [[ -n $long_usage ]]; then
535 printf "Options:\n"
536
537 # :command.usage_fixed_flags
538 echo " --help, -h"
539 printf " Show this help\n"
437 echo
540 echo
438
541
542 # :command.usage_args
543 printf "Arguments:\n"
544
439 echo " SERVICES PARAMS..."
545 echo " SERVICES PARAMS..."
440 printf " Additional arguments or flags for services command\n"
546 printf " Additional arguments or flags for services command\n"
441 echo
547 echo
442
548
443 # :command.usage_examples
549 fi
444 printf "Examples:\n"
550 }
445 printf " - ./rccontrol3 stack router up # run router stack with output to\n console\n - ./rccontrol3 stack router up --detach # run router stack detached\n - ./rccontrol3 stack router down # stop whole router stack\n - ./rccontrol3 stack router ps # check status of router stack\n - ./rccontrol3 stack router -f docker-overrides.yaml up -d # run router stack\n with your overrides\n"
551
552 # :command.usage
553 rccontrol_stack_rhodecode_usage() {
554 if [[ -n $long_usage ]]; then
555 printf "rccontrol stack rhodecode - run the router stack\n"
556 echo
557
558 else
559 printf "rccontrol stack rhodecode - run the router stack\n"
560 echo
561
562 fi
563
564 printf "Usage:\n"
565 printf " rccontrol stack rhodecode [SERVICES PARAMS...]\n"
566 printf " rccontrol stack rhodecode --help | -h\n"
567 echo
568
569 # :command.long_usage
570 if [[ -n $long_usage ]]; then
571 printf "Options:\n"
572
573 # :command.usage_fixed_flags
574 echo " --help, -h"
575 printf " Show this help\n"
576 echo
577
578 # :command.usage_args
579 printf "Arguments:\n"
580
581 echo " SERVICES PARAMS..."
582 printf " Additional arguments or flags for services command\n"
583 echo
584
585 fi
586 }
587
588 # :command.usage
589 rccontrol_stack_all_usage() {
590 if [[ -n $long_usage ]]; then
591 printf "rccontrol stack all - run all stacks\n"
592 echo
593
594 else
595 printf "rccontrol stack all - run all stacks\n"
596 echo
597
598 fi
599
600 printf "Usage:\n"
601 printf " rccontrol stack all [SERVICES PARAMS...]\n"
602 printf " rccontrol stack all --help | -h\n"
603 echo
604
605 # :command.long_usage
606 if [[ -n $long_usage ]]; then
607 printf "Options:\n"
608
609 # :command.usage_fixed_flags
610 echo " --help, -h"
611 printf " Show this help\n"
612 echo
613
614 # :command.usage_args
615 printf "Arguments:\n"
616
617 echo " SERVICES PARAMS..."
618 printf " Additional arguments or flags for services command\n"
446 echo
619 echo
447
620
448 fi
621 fi
@@ -451,11 +624,11 b' rccontrol_stack_usage() {'
451 # :command.usage
624 # :command.usage
452 rccontrol_stack_status_usage() {
625 rccontrol_stack_status_usage() {
453 if [[ -n $long_usage ]]; then
626 if [[ -n $long_usage ]]; then
454 printf "rccontrol stack-status - show stack status\n"
627 printf "rccontrol stack-status - Show stack status\n"
455 echo
628 echo
456
629
457 else
630 else
458 printf "rccontrol stack-status - show stack status\n"
631 printf "rccontrol stack-status - Show stack status\n"
459 echo
632 echo
460
633
461 fi
634 fi
@@ -510,20 +683,56 b' rccontrol_stack_upgrade_usage() {'
510 }
683 }
511
684
512 # :command.usage
685 # :command.usage
686 rccontrol_cli_usage() {
687 if [[ -n $long_usage ]]; then
688 printf "rccontrol cli - run various CLI tools\n"
689 echo
690
691 else
692 printf "rccontrol cli - run various CLI tools\n"
693 echo
694
695 fi
696
697 printf "Usage:\n"
698 printf " rccontrol cli COMMAND\n"
699 printf " rccontrol cli [COMMAND] --help | -h\n"
700 echo
701 # :command.usage_commands
702 printf "Commands:\n"
703 echo " redis CLI for Redis"
704 echo " db CLI with Database connection"
705 echo " db-upgrade CLI to run db upgrade"
706 echo " storage CLI for repository storage"
707 echo
708
709 # :command.long_usage
710 if [[ -n $long_usage ]]; then
711 printf "Options:\n"
712
713 # :command.usage_fixed_flags
714 echo " --help, -h"
715 printf " Show this help\n"
716 echo
717
718 fi
719 }
720
721 # :command.usage
513 rccontrol_cli_redis_usage() {
722 rccontrol_cli_redis_usage() {
514 if [[ -n $long_usage ]]; then
723 if [[ -n $long_usage ]]; then
515 printf "rccontrol cli-redis - CLI\n"
724 printf "rccontrol cli redis - CLI for Redis\n"
516 echo
725 echo
517
726
518 else
727 else
519 printf "rccontrol cli-redis - CLI\n"
728 printf "rccontrol cli redis - CLI for Redis\n"
520 echo
729 echo
521
730
522 fi
731 fi
523
732
524 printf "Usage:\n"
733 printf "Usage:\n"
525 printf " rccontrol cli-redis\n"
734 printf " rccontrol cli redis\n"
526 printf " rccontrol cli-redis --help | -h\n"
735 printf " rccontrol cli redis --help | -h\n"
527 echo
736 echo
528
737
529 # :command.long_usage
738 # :command.long_usage
@@ -541,18 +750,18 b' rccontrol_cli_redis_usage() {'
541 # :command.usage
750 # :command.usage
542 rccontrol_cli_db_usage() {
751 rccontrol_cli_db_usage() {
543 if [[ -n $long_usage ]]; then
752 if [[ -n $long_usage ]]; then
544 printf "rccontrol cli-db - CLI\n"
753 printf "rccontrol cli db - CLI with Database connection\n"
545 echo
754 echo
546
755
547 else
756 else
548 printf "rccontrol cli-db - CLI\n"
757 printf "rccontrol cli db - CLI with Database connection\n"
549 echo
758 echo
550
759
551 fi
760 fi
552
761
553 printf "Usage:\n"
762 printf "Usage:\n"
554 printf " rccontrol cli-db\n"
763 printf " rccontrol cli db\n"
555 printf " rccontrol cli-db --help | -h\n"
764 printf " rccontrol cli db --help | -h\n"
556 echo
765 echo
557
766
558 # :command.long_usage
767 # :command.long_usage
@@ -570,18 +779,47 b' rccontrol_cli_db_usage() {'
570 # :command.usage
779 # :command.usage
571 rccontrol_cli_db_upgrade_usage() {
780 rccontrol_cli_db_upgrade_usage() {
572 if [[ -n $long_usage ]]; then
781 if [[ -n $long_usage ]]; then
573 printf "rccontrol cli-db-upgrade - CLI\n"
782 printf "rccontrol cli db-upgrade - CLI to run db upgrade\n"
783 echo
784
785 else
786 printf "rccontrol cli db-upgrade - CLI to run db upgrade\n"
787 echo
788
789 fi
790
791 printf "Usage:\n"
792 printf " rccontrol cli db-upgrade\n"
793 printf " rccontrol cli db-upgrade --help | -h\n"
794 echo
795
796 # :command.long_usage
797 if [[ -n $long_usage ]]; then
798 printf "Options:\n"
799
800 # :command.usage_fixed_flags
801 echo " --help, -h"
802 printf " Show this help\n"
803 echo
804
805 fi
806 }
807
808 # :command.usage
809 rccontrol_cli_storage_usage() {
810 if [[ -n $long_usage ]]; then
811 printf "rccontrol cli storage - CLI for repository storage\n"
574 echo
812 echo
575
813
576 else
814 else
577 printf "rccontrol cli-db-upgrade - CLI\n"
815 printf "rccontrol cli storage - CLI for repository storage\n"
578 echo
816 echo
579
817
580 fi
818 fi
581
819
582 printf "Usage:\n"
820 printf "Usage:\n"
583 printf " rccontrol cli-db-upgrade\n"
821 printf " rccontrol cli storage\n"
584 printf " rccontrol cli-db-upgrade --help | -h\n"
822 printf " rccontrol cli storage --help | -h\n"
585 echo
823 echo
586
824
587 # :command.long_usage
825 # :command.long_usage
@@ -733,6 +971,23 b' inspect_args() {'
733 }
971 }
734
972
735 # :command.user_lib
973 # :command.user_lib
974 # src/lib/check_bootstrap.sh
975
976 check_bootstrap() {
977 # Avoid destroying bootstrapping by simple start/stop
978 for stage in $BOOTSTRAP_STAGES; do
979
980 stage_name=$(echo $stage | cut -d ":" -f 1)
981 stage_func=$(echo $stage | cut -d ":" -f 2)
982 if ! config_has_key $stage_name ; then
983 echo "$(yellow WARNING:) bootstrap key $stage_name not found in config file $CONFIG_FILE!"
984 echo "$(yellow NOTICE:) Please run ./rccontrol bootstrap first"
985 exit
986 fi
987 done
988
989 }
990
736 # src/lib/colors.sh
991 # src/lib/colors.sh
737 print_in_color() {
992 print_in_color() {
738 local color="$1"
993 local color="$1"
@@ -861,22 +1116,6 b' config_has_key() {'
861 [[ $(config_get "$1") ]]
1116 [[ $(config_get "$1") ]]
862 }
1117 }
863
1118
864 # src/lib/sample_function.sh
865
866 docker_ping_host() {
867 PING_HOST="$1"
868 docker run --network rhodecode_network --rm alpine ping "$PING_HOST"
869 }
870
871 check_bootstrap() {
872 # Avoid destroying bootstrapping by simple start/stop
873 if [[ ! -e $BOOTSTRAP_FILE ]]; then
874 echo "$(yellow WARNING:) initial bootstrap file $BOOTSTRAP_FILE not found !"
875 echo "$(yellow NOTICE:) Please run ./rccontrol bootstrap first"
876 exit
877 fi
878 }
879
880 # src/lib/send_completions.sh
1119 # src/lib/send_completions.sh
881 send_completions() {
1120 send_completions() {
882 echo $'# rccontrol3 completion -*- shell-script -*-'
1121 echo $'# rccontrol3 completion -*- shell-script -*-'
@@ -985,7 +1224,6 b' rccontrol_bootstrap_command() {'
985 force=${args[--force]}
1224 force=${args[--force]}
986
1225
987 check_bash_version() {
1226 check_bash_version() {
988
989 if [ ! "${BASH_VERSINFO:-0}" -ge 4 ]; then
1227 if [ ! "${BASH_VERSINFO:-0}" -ge 4 ]; then
990 echo "$(red Bash version 4 or greater is required, please update your bash version!)"
1228 echo "$(red Bash version 4 or greater is required, please update your bash version!)"
991 exit
1229 exit
@@ -996,7 +1234,7 b' rccontrol_bootstrap_command() {'
996 (which docker || which docker.io) &>/dev/null
1234 (which docker || which docker.io) &>/dev/null
997 }
1235 }
998
1236
999 check_and_install_docker() {
1237 bootstrap_docker_install() {
1000 failMsg="Failed to find docker on your PATH"
1238 failMsg="Failed to find docker on your PATH"
1001
1239
1002 if ! check_docker; then
1240 if ! check_docker; then
@@ -1012,12 +1250,17 b' rccontrol_bootstrap_command() {'
1012 fi
1250 fi
1013 }
1251 }
1014
1252
1015 docker_bootstrap() {
1253 bootstrap_docker_commons() {
1016 check_and_install_docker
1254
1017 echo 'Docker: Running bootstrap.'
1255 echo 'Docker: Running bootstrap.'
1018
1256
1019 echo "Docker: creating network 'rc_datavolume'"
1257 echo "Docker: creating volume 'rc_datavolume'"
1020 docker volume create --name=rc_datavolume
1258 docker volume create --label keep=1 --name=rc_datavolume
1259 echo "Docker: done"
1260 echo ""
1261
1262 echo "Docker: creating volume 'rc_reposvolume'"
1263 docker volume create --label keep=1 --name=rc_reposvolume
1021 echo "Docker: done"
1264 echo "Docker: done"
1022 echo ""
1265 echo ""
1023
1266
@@ -1035,16 +1278,89 b' rccontrol_bootstrap_command() {'
1035 fi
1278 fi
1036 }
1279 }
1037
1280
1038 definitions_bootstrap() {
1281 bootstrap_config() {
1282 shared_key=$(echo $RANDOM | md5sum | head -c 32)
1039
1283
1040 SOURCE_DIR=$PWD
1284 if [[ ! -f "$CONFIG_FILE" ]]; then
1041 RHODECODE_DOCKER_HASH='master'
1285 echo "init config at: $CONFIG_FILE"
1286 config_init
1287 else
1288 echo "re-using config at: $CONFIG_FILE"
1289 fi
1042
1290
1043 AUTH_TOKEN=${args[--auth-token]}
1291 if ! config_has_key "rc_encrypted_secret" ; then
1044 SERVER_URL=${args[--server-url]}
1292 config_set "rc_encrypted_secret" $shared_key
1293 fi
1294
1295 if ! config_has_key "rc_db_url" ; then
1296 key=$(echo $RANDOM | md5sum | head -c 32)
1297 config_set "rc_db_url" "postgresql://$DB_USER:$key@database/$DB_NAME"
1298 fi
1299
1300 if ! config_has_key "rc_license_token" ; then
1301 config_set "rc_license_token" abra-cada-bra1-rce4
1302 fi
1303
1304 if ! config_has_key "rc_base_url" ; then
1305 config_set "rc_base_url" http://docker-dev
1306 fi
1307
1308 if ! config_has_key "rc_log_formatter" ; then
1309 # json is another option
1310 config_set "rc_log_formatter" generic
1311 fi
1312
1313 if ! config_has_key "rc_use_celery" ; then
1314 config_set "rc_use_celery" true
1315 fi
1316
1317 if ! config_has_key "channelstream_secret" ; then
1318 config_set "channelstream_secret" $shared_key
1319 fi
1320
1321 if ! config_has_key "channelstream_admin_secret" ; then
1322 config_set "channelstream_admin_secret" $shared_key
1323 fi
1324
1325 if ! config_has_key "channelstream_allow_posting_from" ; then
1326 config_set "channelstream_allow_posting_from" 0.0.0.0
1327 fi
1328
1329 if ! config_has_key "rc_channelstream_ws_url" ; then
1330 config_set "rc_channelstream_ws_url" ws:/docker-dev/_channelstream
1331 fi
1332
1333 mkdir -p $PWD/.custom
1334 BOOTSTRAP_RUNTIME_ENV=$PWD/.custom/.runtime.env
1335 if [[ ! -f "$BOOTSTRAP_RUNTIME_ENV" ]]; then
1336 echo "init runtime env config at: $BOOTSTRAP_RUNTIME_ENV"
1337 touch BOOTSTRAP_RUNTIME_ENV
1338
1339 #ENV_EXPAND=""
1340 for k in $(config_keys); do
1341 k_upper=${k^^}
1342 echo "$k_upper='$(config_get "$k")'" >> $BOOTSTRAP_RUNTIME_ENV
1343 done
1344
1345 fi
1346 }
1347
1348 bootstrap_definitions() {
1349
1350 SOURCE_DIR=$PWD
1351 RHODECODE_DOCKER_HASH='master'
1352
1353 AUTH_TOKEN=${args[--auth-token]}
1354 SERVER_URL=${args[--server-url]}
1045
1355
1046 DEFINITIONS_EXIST=""
1356 DEFINITIONS_EXIST=""
1047 CHECK_FILES="rccontrol .env docker-compose-services.yaml docker-compose-apps.yaml"
1357 CHECK_FILES="\
1358 .env \
1359 docker-compose-services.yaml \
1360 docker-compose-apps.yaml \
1361 docker-compose-metrics.yaml \
1362 docker-compose-router.yaml \
1363 "
1048 for check_file in $CHECK_FILES; do
1364 for check_file in $CHECK_FILES; do
1049 if [[ -f "$check_file" ]]; then
1365 if [[ -f "$check_file" ]]; then
1050 DEFINITIONS_EXIST="1"
1366 DEFINITIONS_EXIST="1"
@@ -1068,8 +1384,6 b' rccontrol_bootstrap_command() {'
1068 done
1384 done
1069 fi
1385 fi
1070
1386
1071 exit
1072
1073 # download sources
1387 # download sources
1074 echo "Files: download rhodecode docker definitions from $SERVER_URL"
1388 echo "Files: download rhodecode docker definitions from $SERVER_URL"
1075 echo ""
1389 echo ""
@@ -1094,83 +1408,56 b' rccontrol_bootstrap_command() {'
1094 echo "$(green_bold DONE: docker definitions extracted to $SOURCE_DIR)"
1408 echo "$(green_bold DONE: docker definitions extracted to $SOURCE_DIR)"
1095 }
1409 }
1096
1410
1097 config_bootstrap() {
1411 bootstrap_overrides() {
1098
1412 templates=$(find $PWD/templates/*.yaml -printf "%f\n")
1099 if [[ ! -f "$CONFIG_FILE" ]]; then
1100 echo "init config at: $CONFIG_FILE"
1101 config_init
1102 else
1103 echo "re-using config at: $CONFIG_FILE"
1104 fi
1105
1106 if ! config_has_key "rc_encrypted_secret" ; then
1107 key=$(echo $RANDOM | md5sum | head -c 32)
1108 config_set "rc_encrypted_secret" $key
1109 fi
1110
1111 if ! config_has_key "rc_db_url" ; then
1112 key=$(echo $RANDOM | md5sum | head -c 32)
1113 config_set "rc_db_url" "postgresql://$DB_USER:$key@database/$DB_NAME"
1114 fi
1115
1116 if ! config_has_key "rc_license_token" ; then
1117 config_set "rc_license_token" abra-cada-bra1-rce4
1118 fi
1119
1120 if ! config_has_key "rc_base_url" ; then
1121 config_set "rc_base_url" http://docker-dev
1122 fi
1123
1124 if ! config_has_key "rc_log_formatter" ; then
1125 # json is another option
1126 config_set "rc_log_formatter" generic
1127 fi
1128
1129 if ! config_has_key "rc_use_celery" ; then
1130 config_set "rc_use_celery" true
1131 fi
1132
1133 BOOTSTRAP_RUNTIME_ENV=$PWD/.custom/.runtime.env
1134 if [[ ! -f "$BOOTSTRAP_RUNTIME_ENV" ]]; then
1135 echo "init runtime env config at: $BOOTSTRAP_RUNTIME_ENV"
1136 touch BOOTSTRAP_RUNTIME_ENV
1137
1138 #ENV_EXPAND=""
1139 for k in $(config_keys); do
1140 k_upper=${k^^}
1141 echo "$k_upper='$(config_get "$k")'" >> $BOOTSTRAP_RUNTIME_ENV
1142 done
1143
1413
1144 fi
1414 target_dir=$PWD/.custom/
1415 for o_file in $templates; do
1416 target_file=$target_dir/$o_file
1417 if [[ ! -f "$target_file" ]]; then
1418 echo "copy override file $o_file"
1419 cp -v $PWD/templates/$o_file $target_file
1420 else
1421 echo "file $target_file existing, skipping..."
1422 fi
1423 done
1424 echo "$(green_bold DONE: overrides extracted to $target_dir)"
1145 }
1425 }
1146
1426
1147 cur_date=$(date '+%Y-%m-%d %H:%M:%S')
1427 cur_date=$(date '+%Y-%m-%d %H:%M:%S')
1148
1428
1149 check_bash_version
1429 check_bash_version
1150
1430
1151 if [[ ! -e $BOOTSTRAP_FILE ]]; then
1431 # Init the config !
1152 echo "initial bootstrap file $BOOTSTRAP_FILE not found !"
1432 if [[ ! -f "$CONFIG_FILE" ]]; then
1153
1433 echo "config: init new config at: $CONFIG_FILE"
1154 docker_bootstrap
1434 config_init
1155 definitions_bootstrap
1156 config_bootstrap
1157
1158 echo "$cur_date" > "$BOOTSTRAP_FILE"
1159
1160 else
1435 else
1161 if [ $force ]; then
1436 echo "config: re-using present config at: $CONFIG_FILE"
1437 fi
1162
1438
1163 docker_bootstrap $force
1439 for stage in $BOOTSTRAP_STAGES; do
1164 definitions_bootstrap $force ## TODO: remove old
1165 config_bootstrap $force
1166
1440
1167 echo "$cur_date" > "$BOOTSTRAP_FILE"
1441 stage_name=$(echo $stage | cut -d ":" -f 1)
1442 stage_func=$(echo $stage | cut -d ":" -f 2)
1168
1443
1169 exit
1444 if ! config_has_key $stage_name ; then
1170 fi
1445 echo "$(green \* bootstrap: \'$stage_name\' stage not found\; running now... )"
1446 $stage_func
1447 config_set "$stage_name" $cur_date
1448 else
1449 if [ $force ]; then
1450 echo "$(green \* bootstrap: \'$stage_name\' is present!\; FORCE running now... )"
1451 $stage_func $force
1452 config_set "$stage_name" $cur_date
1453 else
1454 echo "$(yellow \* bootstrap: \'$stage_name\' already present, use --force to run it again)"
1455 fi
1456 fi
1171
1457
1172 echo "bootstrap file $BOOTSTRAP_FILE was found add --force to force bootstrap"
1458 done
1173 fi
1459
1460 exit
1174
1461
1175 get_started
1462 get_started
1176 }
1463 }
@@ -1263,7 +1550,7 b' rccontrol_get_build_source_command() {'
1263
1550
1264 AUTH_TOKEN=${args[--auth-token]}
1551 AUTH_TOKEN=${args[--auth-token]}
1265 SERVER_URL=${args[--server-url]}
1552 SERVER_URL=${args[--server-url]}
1266 revision=${args[revision]}
1553 revision=${args[--revision]}
1267
1554
1268 SOURCE_DIR=$PWD/.source
1555 SOURCE_DIR=$PWD/.source
1269
1556
@@ -1279,11 +1566,17 b' rccontrol_get_build_source_command() {'
1279 #TODO: fix just CE build...
1566 #TODO: fix just CE build...
1280 curl --header "X-Rc-Auth-Token: $AUTH_TOKEN" -L $SERVER_URL/rhodecode-enterprise-ee/archive/$RHODECODE_EE_HASH.tgz?with_hash=0 | tar -xz -C $SOURCE_DIR
1567 curl --header "X-Rc-Auth-Token: $AUTH_TOKEN" -L $SERVER_URL/rhodecode-enterprise-ee/archive/$RHODECODE_EE_HASH.tgz?with_hash=0 | tar -xz -C $SOURCE_DIR
1281
1568
1282 rm -rf $SOURCE_DIR/rhodecode-vcsserver && mv $SOURCE_DIR/*rhodecode-vcsserver-plain $SOURCE_DIR/rhodecode-vcsserver
1569 rm -rf $SOURCE_DIR/rhodecode-vcsserver && \
1283 rm -rf $SOURCE_DIR/rhodecode-enterprise-ce && mv $SOURCE_DIR/*rhodecode-enterprise-ce-plain $SOURCE_DIR/rhodecode-enterprise-ce
1570 mv $SOURCE_DIR/*rhodecode-vcsserver-plain $SOURCE_DIR/rhodecode-vcsserver
1284 rm -rf $SOURCE_DIR/rhodecode-enterprise-ee && cp -r $SOURCE_DIR/*rhodecode-enterprise-ee-plain $SOURCE_DIR/rhodecode-enterprise-ee
1571
1572 rm -rf $SOURCE_DIR/rhodecode-enterprise-ce && \
1573 mv $SOURCE_DIR/*rhodecode-enterprise-ce-plain $SOURCE_DIR/rhodecode-enterprise-ce
1574
1575 rm -rf $SOURCE_DIR/rhodecode-enterprise-ee && \
1576 mv $SOURCE_DIR/*rhodecode-enterprise-ee-plain $SOURCE_DIR/rhodecode-enterprise-ee
1285
1577
1286 echo "downloading sources done to $SOURCE_DIR"
1578 echo "downloading sources done to $SOURCE_DIR"
1579 ls -l $SOURCE_DIR
1287
1580
1288 }
1581 }
1289
1582
@@ -1301,12 +1594,11 b' rccontrol_build_source_command() {'
1301 }
1594 }
1302
1595
1303 # :command.function
1596 # :command.function
1304 rccontrol_stack_command() {
1597 rccontrol_stack_router_command() {
1305 # src/stack_command.sh
1598 # src/stack_router_command.sh
1306 check_bootstrap
1599 check_bootstrap
1307
1600
1308 DEBUG=${args[--debug]}
1601 DEBUG=${args[--debug]}
1309 service_name=${args[name]}
1310
1602
1311 if [[ ! -f $RC_STACK_ROUTER_EXT ]]; then
1603 if [[ ! -f $RC_STACK_ROUTER_EXT ]]; then
1312 RC_STACK_ROUTER_EXT=""
1604 RC_STACK_ROUTER_EXT=""
@@ -1322,6 +1614,55 b' rccontrol_stack_command() {'
1322 -f docker-compose-base.yaml \
1614 -f docker-compose-base.yaml \
1323 -f docker-compose-router.yaml $RC_STACK_ROUTER_EXT"
1615 -f docker-compose-router.yaml $RC_STACK_ROUTER_EXT"
1324
1616
1617 if [[ $DEBUG ]]; then
1618 echo "---"
1619 echo "stacks docker: $RC_STACK_ROUTER_EXT_LCL"
1620 echo "running command: ${CMD_ROUTER}"
1621 echo "ARGS: ${other_args[*]}"
1622 echo "---"
1623 fi
1624 eval "${CMD_ROUTER} ${other_args[*]}"
1625
1626 }
1627
1628 # :command.function
1629 rccontrol_stack_metrics_command() {
1630 # src/stack_metrics_command.sh
1631 check_bootstrap
1632
1633 DEBUG=${args[--debug]}
1634
1635 if [[ ! -f $RC_STACK_METRICS_EXT ]]; then
1636 RC_STACK_METRICS_EXT_LCL=""
1637 else
1638 RC_STACK_METRICS_EXT_LCL="-f $RC_STACK_METRICS_EXT"
1639 fi
1640
1641 CMD_METRICS="\
1642 docker compose \
1643 --env-file $ENV_FILE \
1644 $ENV_EXPAND \
1645 -p rc_cluster_metrics \
1646 -f docker-compose-base.yaml \
1647 -f docker-compose-metrics.yaml $RC_STACK_METRICS_EXT_LCL"
1648
1649 if [[ $DEBUG ]]; then
1650 echo "---"
1651 echo "stacks docker: $RC_STACK_METRICS_EXT_LCL"
1652 echo "running command: ${CMD_METRICS}"
1653 echo "ARGS: ${other_args[*]}"
1654 echo "---"
1655 fi
1656 eval "${CMD_METRICS} ${other_args[*]}"
1657 }
1658
1659 # :command.function
1660 rccontrol_stack_services_command() {
1661 # src/stack_services_command.sh
1662 check_bootstrap
1663
1664 DEBUG=${args[--debug]}
1665
1325 if [[ ! -f $RC_STACK_SERVICES_EXT ]]; then
1666 if [[ ! -f $RC_STACK_SERVICES_EXT ]]; then
1326 RC_STACK_SERVICES_EXT_LCL=""
1667 RC_STACK_SERVICES_EXT_LCL=""
1327 else
1668 else
@@ -1339,19 +1680,23 b' rccontrol_stack_command() {'
1339 -f docker-compose-base.yaml \
1680 -f docker-compose-base.yaml \
1340 -f docker-compose-services.yaml $RC_STACK_SERVICES_EXT_LCL"
1681 -f docker-compose-services.yaml $RC_STACK_SERVICES_EXT_LCL"
1341
1682
1342 if [[ ! -f $RC_STACK_METRICS_EXT ]]; then
1683 if [[ $DEBUG ]]; then
1343 RC_STACK_METRICS_EXT_LCL=""
1684 echo "---"
1344 else
1685 echo "stacks docker: $RC_STACK_SERVICES_EXT_LCL"
1345 RC_STACK_METRICS_EXT_LCL="-f $RC_STACK_METRICS_EXT"
1686 echo "running command: ${CMD_SERVICES}"
1687 echo "ARGS: ${other_args[*]}"
1688 echo "---"
1346 fi
1689 fi
1347
1690
1348 CMD_METRICS="\
1691 eval "${CMD_SERVICES} ${other_args[*]}"
1349 docker compose \
1692 }
1350 --env-file $ENV_FILE \
1693
1351 $ENV_EXPAND \
1694 # :command.function
1352 -p rc_cluster_metrics \
1695 rccontrol_stack_rhodecode_command() {
1353 -f docker-compose-base.yaml \
1696 # src/stack_rhodecode_command.sh
1354 -f docker-compose-metrics.yaml $RC_STACK_METRICS_EXT_LCL"
1697 check_bootstrap
1698
1699 DEBUG=${args[--debug]}
1355
1700
1356 if [[ ! -f $RC_STACK_RHODECODE_EXT ]]; then
1701 if [[ ! -f $RC_STACK_RHODECODE_EXT ]]; then
1357 RC_STACK_RHODECODE_EXT_LCL=""
1702 RC_STACK_RHODECODE_EXT_LCL=""
@@ -1376,54 +1721,29 b' rccontrol_stack_command() {'
1376 -f docker-compose-apps.yaml \
1721 -f docker-compose-apps.yaml \
1377 -f docker-compose-apps.source.yaml $RC_STACK_RHODECODE_EXT_LCL"
1722 -f docker-compose-apps.source.yaml $RC_STACK_RHODECODE_EXT_LCL"
1378
1723
1379 case $service_name in
1724 if [[ $DEBUG ]]; then
1380
1725 echo "---"
1381 services )
1726 echo "stacks docker: $RC_STACK_RHODECODE_EXT_LCL"
1382 if [[ $DEBUG ]]; then
1727 echo "running command: ${CMD_RHODECODE}"
1383 echo "---"
1728 echo "ARGS: ${other_args[*]}"
1384 echo "stacks docker: $RC_STACK_SERVICES_EXT_LCL"
1729 echo "---"
1385 echo "running command: ${CMD_SERVICES}"
1730 fi
1386 echo "ARGS: ${other_args[*]}"
1731 eval "${CMD_RHODECODE} ${other_args[*]}"
1387 echo "---"
1732
1388 fi
1733 }
1389
1734
1390 eval "${CMD_SERVICES} ${other_args[*]}"
1735 # :command.function
1391 exit
1736 rccontrol_stack_all_command() {
1392 ;;
1737 # src/stack_all_command.sh
1393 router )
1738 check_bootstrap
1394 if [[ $DEBUG ]]; then
1739
1395 echo "---"
1740 DEBUG=${args[--debug]}
1396 echo "stacks docker: $RC_STACK_ROUTER_EXT_LCL"
1741
1397 echo "running command: ${CMD_ROUTER}"
1742 stack_lst=$VALID_SERVICES
1398 echo "ARGS: ${other_args[*]}"
1743
1399 echo "---"
1744 for stack in $stack_lst; do
1400 fi
1745 ./rccontrol stack $stack ${other_args[*]}
1401 eval "${CMD_ROUTER} ${other_args[*]}"
1746 done
1402 exit
1403 ;;
1404 metrics )
1405 if [[ $DEBUG ]]; then
1406 echo "---"
1407 echo "stacks docker: $RC_STACK_METRICS_EXT_LCL"
1408 echo "running command: ${CMD_METRICS}"
1409 echo "ARGS: ${other_args[*]}"
1410 echo "---"
1411 fi
1412 eval "${CMD_METRICS} ${other_args[*]}"
1413 exit
1414 ;;
1415 rhodecode )
1416 if [[ $DEBUG ]]; then
1417 echo "---"
1418 echo "stacks docker: $RC_STACK_RHODECODE_EXT_LCL"
1419 echo "running command: ${CMD_RHODECODE}"
1420 echo "ARGS: ${other_args[*]}"
1421 echo "---"
1422 fi
1423 eval "${CMD_RHODECODE} ${other_args[*]}"
1424 exit
1425 ;;
1426 esac
1427
1747
1428 }
1748 }
1429
1749
@@ -1552,6 +1872,52 b' rccontrol_cli_db_upgrade_command() {'
1552 }
1872 }
1553
1873
1554 # :command.function
1874 # :command.function
1875 rccontrol_cli_storage_command() {
1876 # src/cli_storage_command.sh
1877 check_bootstrap
1878
1879 DEBUG=${args[--debug]}
1880
1881 source $ENV_FILE
1882 target_container=$RC_IMAGE_EE
1883
1884 image_id=$(docker image ls $RC_IMAGE_EE -q)
1885
1886 echo "Attaching storage from $target_container"
1887
1888 if [[ $DEBUG ]]; then
1889 echo "image id: $image_id, based on $target_container filter"
1890 docker image ls
1891 echo "---"
1892 fi
1893
1894 if [[ $DEBUG ]]; then
1895 echo "rc_datavolume inspection..."
1896 docker volume inspect rc_datavolume
1897
1898 echo "rhodecode_repos inspection..."
1899 docker volume inspect rhodecode_repos
1900 fi
1901
1902 #
1903 #if [[ $DEBUG ]]; then
1904 # echo "image id: $image_id, based on $target_container filter"
1905 # docker image ls
1906 # echo "---"
1907 #fi
1908
1909 docker run --rm \
1910 -it \
1911 --volume $PWD/.custom/storage:/vol/backupvolume \
1912 --volume rc_datavolume:/vol/datavolume \
1913 --volume rc_reposvolume:/vol/repovolume \
1914 --workdir="/vol" \
1915 debian:jessie \
1916 /bin/bash
1917
1918 }
1919
1920 # :command.function
1555 rccontrol__completions_command() {
1921 rccontrol__completions_command() {
1556 # src/_completions_command.sh
1922 # src/_completions_command.sh
1557 send_completions
1923 send_completions
@@ -1568,7 +1934,7 b' rccontrol_backup_db_command() {'
1568 target_container=rc_cluster_services-database-1
1934 target_container=rc_cluster_services-database-1
1569
1935
1570 docker_id=$(docker ps --filter name=$target_container -q)
1936 docker_id=$(docker ps --filter name=$target_container -q)
1571 backup_name=rc_db_dump-$(date +%Y-%m-%d).tar.gz
1937 backup_name=rc_db_dump-$(date +%Y-%m-%d).sql.gz
1572
1938
1573 echo "creating backup $backup_name"
1939 echo "creating backup $backup_name"
1574
1940
@@ -1597,9 +1963,12 b' rccontrol_backup_db_command() {'
1597 # echo "$(red $MSG)"
1963 # echo "$(red $MSG)"
1598 # exit
1964 # exit
1599 #fi
1965 #fi
1966 # docker exec -i your-db-container psql -U your-db-user -d your-db-name gunzip < your_dump.sql.gz |
1600
1967
1601 if [[ $DEBUG ]]; then
1968 if [[ $DEBUG ]]; then
1602 echo "docker exec -e PGPASSWORD=$DB_PASSWORD $docker_id /bin/bash -c 'pg_dump --inserts -U $DB_USER -h 127.0.0.1 --dbname=$DB_NAME | gzip > /var/rc-data-dump/$backup_name'"
1969 echo "docker exec -e PGPASSWORD=$DB_PASSWORD $docker_id /bin/bash -c 'mkdir -p /var/rc-data-dump && pg_dump --inserts -U $DB_USER -h 127.0.0.1 --dbname=$DB_NAME | gzip > /var/rc-data-dump/$backup_name'"
1970 echo "dump placed in /var/rc-data-dump/$backup_name"
1971 echo "run docker cp $docker_id:/var/rc-data-dump/$backup_name $PWD to copy the file into your host machine"
1603 fi
1972 fi
1604
1973
1605 eval "docker exec -e PGPASSWORD=$DB_PASSWORD $docker_id /bin/bash -c 'pg_dump --inserts -U $DB_USER -h 127.0.0.1 --dbname=$DB_NAME | gzip > /var/rc-data-dump/$backup_name'"
1974 eval "docker exec -e PGPASSWORD=$DB_PASSWORD $docker_id /bin/bash -c 'pg_dump --inserts -U $DB_USER -h 127.0.0.1 --dbname=$DB_NAME | gzip > /var/rc-data-dump/$backup_name'"
@@ -1664,7 +2033,7 b' parse_requirements() {'
1664 shift $#
2033 shift $#
1665 ;;
2034 ;;
1666
2035
1667 bootstrap | install )
2036 bootstrap | init )
1668 action="bootstrap"
2037 action="bootstrap"
1669 shift
2038 shift
1670 rccontrol_bootstrap_parse_requirements "$@"
2039 rccontrol_bootstrap_parse_requirements "$@"
@@ -1720,24 +2089,10 b' parse_requirements() {'
1720 shift $#
2089 shift $#
1721 ;;
2090 ;;
1722
2091
1723 cli-redis )
2092 cli )
1724 action="cli-redis"
2093 action="cli"
1725 shift
1726 rccontrol_cli_redis_parse_requirements "$@"
1727 shift $#
1728 ;;
1729
1730 cli-db )
1731 action="cli-db"
1732 shift
1733 rccontrol_cli_db_parse_requirements "$@"
1734 shift $#
1735 ;;
1736
1737 cli-db-upgrade )
1738 action="cli-db-upgrade"
1739 shift
2094 shift
1740 rccontrol_cli_db_upgrade_parse_requirements "$@"
2095 rccontrol_cli_parse_requirements "$@"
1741 shift $#
2096 shift $#
1742 ;;
2097 ;;
1743
2098
@@ -2158,6 +2513,21 b' rccontrol_get_build_source_parse_requirements() {'
2158 key="$1"
2513 key="$1"
2159 case "$key" in
2514 case "$key" in
2160 # :flag.case
2515 # :flag.case
2516 --revision )
2517
2518 # :flag.case_arg
2519 if [[ -n ${2+x} ]]; then
2520
2521 args[--revision]="$2"
2522 shift
2523 shift
2524 else
2525 printf "%s\n" "--revision requires an argument: --revision REVISION" >&2
2526 exit 1
2527 fi
2528 ;;
2529
2530 # :flag.case
2161 --auth-token )
2531 --auth-token )
2162
2532
2163 # :flag.case_arg
2533 # :flag.case_arg
@@ -2195,27 +2565,16 b' rccontrol_get_build_source_parse_requirements() {'
2195 * )
2565 * )
2196 # :command.parse_requirements_case
2566 # :command.parse_requirements_case
2197 # :command.parse_requirements_case_simple
2567 # :command.parse_requirements_case_simple
2198 if [[ -z ${args[revision]+x} ]]; then
2568 printf "invalid argument: %s\n" "$key" >&2
2199
2569 exit 1
2200 args[revision]=$1
2201 shift
2202 else
2203 printf "invalid argument: %s\n" "$key" >&2
2204 exit 1
2205 fi
2206
2570
2207 ;;
2571 ;;
2208
2572
2209 esac
2573 esac
2210 done
2574 done
2211
2575
2212 # :command.required_args_filter
2213 if [[ -z ${args[revision]+x} ]]; then
2214 printf "missing required argument: REVISION\nusage: rccontrol get-build-source REVISION [OPTIONS]\n" >&2
2215 exit 1
2216 fi
2217
2218 # :command.default_assignments
2576 # :command.default_assignments
2577 [[ -n ${args[--revision]:-} ]] || args[--revision]="default"
2219 [[ -n ${args[--server-url]:-} ]] || args[--server-url]="https://code.rhodecode.com"
2578 [[ -n ${args[--server-url]:-} ]] || args[--server-url]="https://code.rhodecode.com"
2220
2579
2221 }
2580 }
@@ -2288,46 +2647,270 b' rccontrol_stack_parse_requirements() {'
2288 esac
2647 esac
2289
2648
2290 # :command.command_filter
2649 # :command.command_filter
2291 action="stack"
2650 action=${1:-}
2292
2651
2293 # :command.parse_requirements_while
2652 case $action in
2294 while [[ $# -gt 0 ]]; do
2653 -* )
2295 key="$1"
2654 ;;
2296 case "$key" in
2297
2655
2298 -?* )
2656 router )
2299 other_args+=("$1")
2657 action="router"
2300 shift
2658 shift
2659 rccontrol_stack_router_parse_requirements "$@"
2660 shift $#
2661 ;;
2662
2663 metrics )
2664 action="metrics"
2665 shift
2666 rccontrol_stack_metrics_parse_requirements "$@"
2667 shift $#
2668 ;;
2669
2670 services )
2671 action="services"
2672 shift
2673 rccontrol_stack_services_parse_requirements "$@"
2674 shift $#
2675 ;;
2676
2677 rhodecode )
2678 action="rhodecode"
2679 shift
2680 rccontrol_stack_rhodecode_parse_requirements "$@"
2681 shift $#
2682 ;;
2683
2684 all )
2685 action="all"
2686 shift
2687 rccontrol_stack_all_parse_requirements "$@"
2688 shift $#
2689 ;;
2690
2691 # :command.command_fallback
2692 "" )
2693 rccontrol_stack_usage >&2
2694 exit 1
2695 ;;
2696
2697 * )
2698 printf "invalid command: %s\n" "$action" >&2
2699 exit 1
2700 ;;
2701
2702 esac
2703
2704 # :command.parse_requirements_while
2705 while [[ $# -gt 0 ]]; do
2706 key="$1"
2707 case "$key" in
2708
2709 -?* )
2710 printf "invalid option: %s\n" "$key" >&2
2711 exit 1
2712 ;;
2713
2714 * )
2715 # :command.parse_requirements_case
2716 # :command.parse_requirements_case_simple
2717 printf "invalid argument: %s\n" "$key" >&2
2718 exit 1
2719
2720 ;;
2721
2722 esac
2723 done
2724
2725 }
2726
2727 # :command.parse_requirements
2728 rccontrol_stack_router_parse_requirements() {
2729 # :command.fixed_flags_filter
2730 case "${1:-}" in
2731 --help | -h )
2732 long_usage=yes
2733 rccontrol_stack_router_usage
2734 exit
2735 ;;
2736
2737 esac
2738
2739 # :command.command_filter
2740 action="stack router"
2741
2742 # :command.parse_requirements_while
2743 while [[ $# -gt 0 ]]; do
2744 key="$1"
2745 case "$key" in
2746
2747 -?* )
2748 other_args+=("$1")
2749 shift
2301 ;;
2750 ;;
2302
2751
2303 * )
2752 * )
2304 # :command.parse_requirements_case
2753 # :command.parse_requirements_case
2305 # :command.parse_requirements_case_catch_all
2754 # :command.parse_requirements_case_catch_all
2306 if [[ -z ${args[name]+x} ]]; then
2755 other_args+=("$1")
2756 shift
2307
2757
2308 args[name]=$1
2758 ;;
2309 shift
2759
2310 else
2760 esac
2311 other_args+=("$1")
2761 done
2312 shift
2762
2313 fi
2763 }
2764
2765 # :command.parse_requirements
2766 rccontrol_stack_metrics_parse_requirements() {
2767 # :command.fixed_flags_filter
2768 case "${1:-}" in
2769 --help | -h )
2770 long_usage=yes
2771 rccontrol_stack_metrics_usage
2772 exit
2773 ;;
2774
2775 esac
2776
2777 # :command.command_filter
2778 action="stack metrics"
2779
2780 # :command.parse_requirements_while
2781 while [[ $# -gt 0 ]]; do
2782 key="$1"
2783 case "$key" in
2784
2785 -?* )
2786 other_args+=("$1")
2787 shift
2788 ;;
2789
2790 * )
2791 # :command.parse_requirements_case
2792 # :command.parse_requirements_case_catch_all
2793 other_args+=("$1")
2794 shift
2314
2795
2315 ;;
2796 ;;
2316
2797
2317 esac
2798 esac
2318 done
2799 done
2319
2800
2320 # :command.required_args_filter
2801 }
2321 if [[ -z ${args[name]+x} ]]; then
2322 printf "missing required argument: NAME\nusage: rccontrol stack NAME [SERVICES PARAMS...]\n" >&2
2323 exit 1
2324 fi
2325
2802
2326 # :command.whitelist_filter
2803 # :command.parse_requirements
2327 if [[ ! ${args[name]} =~ ^(router|metrics|services|rhodecode)$ ]]; then
2804 rccontrol_stack_services_parse_requirements() {
2328 printf "%s\n" "name must be one of: router, metrics, services, rhodecode" >&2
2805 # :command.fixed_flags_filter
2329 exit 1
2806 case "${1:-}" in
2330 fi
2807 --help | -h )
2808 long_usage=yes
2809 rccontrol_stack_services_usage
2810 exit
2811 ;;
2812
2813 esac
2814
2815 # :command.command_filter
2816 action="stack services"
2817
2818 # :command.parse_requirements_while
2819 while [[ $# -gt 0 ]]; do
2820 key="$1"
2821 case "$key" in
2822
2823 -?* )
2824 other_args+=("$1")
2825 shift
2826 ;;
2827
2828 * )
2829 # :command.parse_requirements_case
2830 # :command.parse_requirements_case_catch_all
2831 other_args+=("$1")
2832 shift
2833
2834 ;;
2835
2836 esac
2837 done
2838
2839 }
2840
2841 # :command.parse_requirements
2842 rccontrol_stack_rhodecode_parse_requirements() {
2843 # :command.fixed_flags_filter
2844 case "${1:-}" in
2845 --help | -h )
2846 long_usage=yes
2847 rccontrol_stack_rhodecode_usage
2848 exit
2849 ;;
2850
2851 esac
2852
2853 # :command.command_filter
2854 action="stack rhodecode"
2855
2856 # :command.parse_requirements_while
2857 while [[ $# -gt 0 ]]; do
2858 key="$1"
2859 case "$key" in
2860
2861 -?* )
2862 other_args+=("$1")
2863 shift
2864 ;;
2865
2866 * )
2867 # :command.parse_requirements_case
2868 # :command.parse_requirements_case_catch_all
2869 other_args+=("$1")
2870 shift
2871
2872 ;;
2873
2874 esac
2875 done
2876
2877 }
2878
2879 # :command.parse_requirements
2880 rccontrol_stack_all_parse_requirements() {
2881 # :command.fixed_flags_filter
2882 case "${1:-}" in
2883 --help | -h )
2884 long_usage=yes
2885 rccontrol_stack_all_usage
2886 exit
2887 ;;
2888
2889 esac
2890
2891 # :command.command_filter
2892 action="stack all"
2893
2894 # :command.parse_requirements_while
2895 while [[ $# -gt 0 ]]; do
2896 key="$1"
2897 case "$key" in
2898
2899 -?* )
2900 other_args+=("$1")
2901 shift
2902 ;;
2903
2904 * )
2905 # :command.parse_requirements_case
2906 # :command.parse_requirements_case_catch_all
2907 other_args+=("$1")
2908 shift
2909
2910 ;;
2911
2912 esac
2913 done
2331
2914
2332 }
2915 }
2333
2916
@@ -2408,6 +2991,89 b' rccontrol_stack_upgrade_parse_requirements() {'
2408 }
2991 }
2409
2992
2410 # :command.parse_requirements
2993 # :command.parse_requirements
2994 rccontrol_cli_parse_requirements() {
2995 # :command.fixed_flags_filter
2996 case "${1:-}" in
2997 --help | -h )
2998 long_usage=yes
2999 rccontrol_cli_usage
3000 exit
3001 ;;
3002
3003 esac
3004
3005 # :command.command_filter
3006 action=${1:-}
3007
3008 case $action in
3009 -* )
3010 ;;
3011
3012 redis )
3013 action="redis"
3014 shift
3015 rccontrol_cli_redis_parse_requirements "$@"
3016 shift $#
3017 ;;
3018
3019 db )
3020 action="db"
3021 shift
3022 rccontrol_cli_db_parse_requirements "$@"
3023 shift $#
3024 ;;
3025
3026 db-upgrade )
3027 action="db-upgrade"
3028 shift
3029 rccontrol_cli_db_upgrade_parse_requirements "$@"
3030 shift $#
3031 ;;
3032
3033 storage )
3034 action="storage"
3035 shift
3036 rccontrol_cli_storage_parse_requirements "$@"
3037 shift $#
3038 ;;
3039
3040 # :command.command_fallback
3041 "" )
3042 rccontrol_cli_usage >&2
3043 exit 1
3044 ;;
3045
3046 * )
3047 printf "invalid command: %s\n" "$action" >&2
3048 exit 1
3049 ;;
3050
3051 esac
3052
3053 # :command.parse_requirements_while
3054 while [[ $# -gt 0 ]]; do
3055 key="$1"
3056 case "$key" in
3057
3058 -?* )
3059 printf "invalid option: %s\n" "$key" >&2
3060 exit 1
3061 ;;
3062
3063 * )
3064 # :command.parse_requirements_case
3065 # :command.parse_requirements_case_simple
3066 printf "invalid argument: %s\n" "$key" >&2
3067 exit 1
3068
3069 ;;
3070
3071 esac
3072 done
3073
3074 }
3075
3076 # :command.parse_requirements
2411 rccontrol_cli_redis_parse_requirements() {
3077 rccontrol_cli_redis_parse_requirements() {
2412 # :command.fixed_flags_filter
3078 # :command.fixed_flags_filter
2413 case "${1:-}" in
3079 case "${1:-}" in
@@ -2420,7 +3086,7 b' rccontrol_cli_redis_parse_requirements() {'
2420 esac
3086 esac
2421
3087
2422 # :command.command_filter
3088 # :command.command_filter
2423 action="cli-redis"
3089 action="cli redis"
2424
3090
2425 # :command.parse_requirements_while
3091 # :command.parse_requirements_while
2426 while [[ $# -gt 0 ]]; do
3092 while [[ $# -gt 0 ]]; do
@@ -2458,7 +3124,7 b' rccontrol_cli_db_parse_requirements() {'
2458 esac
3124 esac
2459
3125
2460 # :command.command_filter
3126 # :command.command_filter
2461 action="cli-db"
3127 action="cli db"
2462
3128
2463 # :command.parse_requirements_while
3129 # :command.parse_requirements_while
2464 while [[ $# -gt 0 ]]; do
3130 while [[ $# -gt 0 ]]; do
@@ -2496,7 +3162,45 b' rccontrol_cli_db_upgrade_parse_requirements() {'
2496 esac
3162 esac
2497
3163
2498 # :command.command_filter
3164 # :command.command_filter
2499 action="cli-db-upgrade"
3165 action="cli db-upgrade"
3166
3167 # :command.parse_requirements_while
3168 while [[ $# -gt 0 ]]; do
3169 key="$1"
3170 case "$key" in
3171
3172 -?* )
3173 printf "invalid option: %s\n" "$key" >&2
3174 exit 1
3175 ;;
3176
3177 * )
3178 # :command.parse_requirements_case
3179 # :command.parse_requirements_case_simple
3180 printf "invalid argument: %s\n" "$key" >&2
3181 exit 1
3182
3183 ;;
3184
3185 esac
3186 done
3187
3188 }
3189
3190 # :command.parse_requirements
3191 rccontrol_cli_storage_parse_requirements() {
3192 # :command.fixed_flags_filter
3193 case "${1:-}" in
3194 --help | -h )
3195 long_usage=yes
3196 rccontrol_cli_storage_usage
3197 exit
3198 ;;
3199
3200 esac
3201
3202 # :command.command_filter
3203 action="cli storage"
2500
3204
2501 # :command.parse_requirements_while
3205 # :command.parse_requirements_while
2502 while [[ $# -gt 0 ]]; do
3206 while [[ $# -gt 0 ]]; do
@@ -2669,12 +3373,21 b' initialize() {'
2669 ENV_FILE=$PWD/.env
3373 ENV_FILE=$PWD/.env
2670
3374
2671 # bootstrap file is a config file at the same time
3375 # bootstrap file is a config file at the same time
2672 BOOTSTRAP_FILE='.rccontrol-bootstrap'
2673 CONFIG_FILE='.rccontrol.ini'
3376 CONFIG_FILE='.rccontrol.ini'
2674
3377
3378 # STACK_LIST
2675 VALID_SERVICES="router metrics services rhodecode"
3379 VALID_SERVICES="router metrics services rhodecode"
2676 DOCKER_DEFS_WORK_DIR="docker_defs"
3380 DOCKER_DEFS_WORK_DIR="docker_defs"
2677
3381
3382 # stage key, saved in .rccontrol.ini : stage func to execute
3383 BOOTSTRAP_STAGES="\
3384 bootstrap_docker_install:bootstrap_docker_install \
3385 bootstrap_docker_commons:bootstrap_docker_commons \
3386 bootstrap_config:bootstrap_config \
3387 bootstrap_definitions:bootstrap_definitions \
3388 bootstrap_overrides:bootstrap_overrides \
3389 "
3390
2678 #echo "1 ----"
3391 #echo "1 ----"
2679 #echo $RC_STACK_SERVICES_EXT
3392 #echo $RC_STACK_SERVICES_EXT
2680 #echo $RC_STACK_METRICS_EXT
3393 #echo $RC_STACK_METRICS_EXT
@@ -2706,6 +3419,11 b' initialize() {'
2706
3419
2707 #env | grep RC_
3420 #env | grep RC_
2708
3421
3422 docker_ping_host() {
3423 PING_HOST="$1"
3424 docker run --network rhodecode_network --rm alpine ping "$PING_HOST"
3425 }
3426
2709 # backup files from a docker volume into /tmp/backup.tar.gz
3427 # backup files from a docker volume into /tmp/backup.tar.gz
2710 docker-volume-backup-compressed() {
3428 docker-volume-backup-compressed() {
2711 docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -czvf /backup/backup.tar.gz "${@:2}"
3429 docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -czvf /backup/backup.tar.gz "${@:2}"
@@ -2816,6 +3534,46 b' run() {'
2816 rccontrol_stack_command
3534 rccontrol_stack_command
2817 fi
3535 fi
2818
3536
3537 elif [[ $action == "stack router" ]]; then
3538 if [[ ${args[--help]:-} ]]; then
3539 long_usage=yes
3540 rccontrol_stack_router_usage
3541 else
3542 rccontrol_stack_router_command
3543 fi
3544
3545 elif [[ $action == "stack metrics" ]]; then
3546 if [[ ${args[--help]:-} ]]; then
3547 long_usage=yes
3548 rccontrol_stack_metrics_usage
3549 else
3550 rccontrol_stack_metrics_command
3551 fi
3552
3553 elif [[ $action == "stack services" ]]; then
3554 if [[ ${args[--help]:-} ]]; then
3555 long_usage=yes
3556 rccontrol_stack_services_usage
3557 else
3558 rccontrol_stack_services_command
3559 fi
3560
3561 elif [[ $action == "stack rhodecode" ]]; then
3562 if [[ ${args[--help]:-} ]]; then
3563 long_usage=yes
3564 rccontrol_stack_rhodecode_usage
3565 else
3566 rccontrol_stack_rhodecode_command
3567 fi
3568
3569 elif [[ $action == "stack all" ]]; then
3570 if [[ ${args[--help]:-} ]]; then
3571 long_usage=yes
3572 rccontrol_stack_all_usage
3573 else
3574 rccontrol_stack_all_command
3575 fi
3576
2819 elif [[ $action == "stack-status" ]]; then
3577 elif [[ $action == "stack-status" ]]; then
2820 if [[ ${args[--help]:-} ]]; then
3578 if [[ ${args[--help]:-} ]]; then
2821 long_usage=yes
3579 long_usage=yes
@@ -2832,7 +3590,15 b' run() {'
2832 rccontrol_stack_upgrade_command
3590 rccontrol_stack_upgrade_command
2833 fi
3591 fi
2834
3592
2835 elif [[ $action == "cli-redis" ]]; then
3593 elif [[ $action == "cli" ]]; then
3594 if [[ ${args[--help]:-} ]]; then
3595 long_usage=yes
3596 rccontrol_cli_usage
3597 else
3598 rccontrol_cli_command
3599 fi
3600
3601 elif [[ $action == "cli redis" ]]; then
2836 if [[ ${args[--help]:-} ]]; then
3602 if [[ ${args[--help]:-} ]]; then
2837 long_usage=yes
3603 long_usage=yes
2838 rccontrol_cli_redis_usage
3604 rccontrol_cli_redis_usage
@@ -2840,7 +3606,7 b' run() {'
2840 rccontrol_cli_redis_command
3606 rccontrol_cli_redis_command
2841 fi
3607 fi
2842
3608
2843 elif [[ $action == "cli-db" ]]; then
3609 elif [[ $action == "cli db" ]]; then
2844 if [[ ${args[--help]:-} ]]; then
3610 if [[ ${args[--help]:-} ]]; then
2845 long_usage=yes
3611 long_usage=yes
2846 rccontrol_cli_db_usage
3612 rccontrol_cli_db_usage
@@ -2848,7 +3614,7 b' run() {'
2848 rccontrol_cli_db_command
3614 rccontrol_cli_db_command
2849 fi
3615 fi
2850
3616
2851 elif [[ $action == "cli-db-upgrade" ]]; then
3617 elif [[ $action == "cli db-upgrade" ]]; then
2852 if [[ ${args[--help]:-} ]]; then
3618 if [[ ${args[--help]:-} ]]; then
2853 long_usage=yes
3619 long_usage=yes
2854 rccontrol_cli_db_upgrade_usage
3620 rccontrol_cli_db_upgrade_usage
@@ -2856,6 +3622,14 b' run() {'
2856 rccontrol_cli_db_upgrade_command
3622 rccontrol_cli_db_upgrade_command
2857 fi
3623 fi
2858
3624
3625 elif [[ $action == "cli storage" ]]; then
3626 if [[ ${args[--help]:-} ]]; then
3627 long_usage=yes
3628 rccontrol_cli_storage_usage
3629 else
3630 rccontrol_cli_storage_command
3631 fi
3632
2859 elif [[ $action == "_completions" ]]; then
3633 elif [[ $action == "_completions" ]]; then
2860 if [[ ${args[--help]:-} ]]; then
3634 if [[ ${args[--help]:-} ]]; then
2861 long_usage=yes
3635 long_usage=yes
@@ -11,7 +11,7 b' ARG RHODECODE_VERSION=4.28.0'
11 ARG RHODECODE_DB=sqlite
11 ARG RHODECODE_DB=sqlite
12 ARG RHODECODE_USER_NAME=admin
12 ARG RHODECODE_USER_NAME=admin
13 ARG RHODECODE_USER_PASS=secret4
13 ARG RHODECODE_USER_PASS=secret4
14 ARG RHODECODE_USER_EMAIL=support@rhodecode.com
14 ARG RHODECODE_USER_EMAIL=admin@server.local
15
15
16 # nix ver/channels
16 # nix ver/channels
17 ARG DEV_NIX_VERSION=2.0.4
17 ARG DEV_NIX_VERSION=2.0.4
@@ -232,7 +232,7 b' echo "** install rhodecode ${RHODECODE_TYPE} ${RHODECODE_VERSION} **" && \\'
232 RHODECODE_PATH=/home/$RC_USER/.rccontrol/${RC_TYPE_ID} && \
232 RHODECODE_PATH=/home/$RC_USER/.rccontrol/${RC_TYPE_ID} && \
233 rm -rf $BUILD_BIN_DIR/bin && ln -s ${RHODECODE_PATH}/profile/bin $BUILD_BIN_DIR/ && \
233 rm -rf $BUILD_BIN_DIR/bin && ln -s ${RHODECODE_PATH}/profile/bin $BUILD_BIN_DIR/ && \
234 cp -v ${RHODECODE_PATH}/rhodecode.ini $BUILD_CONF/rhodecode.ini && \
234 cp -v ${RHODECODE_PATH}/rhodecode.ini $BUILD_CONF/rhodecode.ini && \
235 cp -v ${RHODECODE_PATH}/gunicorn_conf.py $BUILD_CONF/gunicorn_conf.py && \
235 cp -v ${RHODECODE_PATH}/gunicorn_conf.py $BUILD_CONF/gunicorn_conf_rc.py && \
236 cp -v ${RHODECODE_PATH}/search_mapping.ini $BUILD_CONF/search_mapping.ini && \
236 cp -v ${RHODECODE_PATH}/search_mapping.ini $BUILD_CONF/search_mapping.ini && \
237 mkdir -p $RHODECODE_DATA_DIR/static && cp -r ${RHODECODE_PATH}/public/* $RHODECODE_DATA_DIR/static/ && \
237 mkdir -p $RHODECODE_DATA_DIR/static && cp -r ${RHODECODE_PATH}/public/* $RHODECODE_DATA_DIR/static/ && \
238 rm ${RHODECODE_PATH}/rhodecode.db && \
238 rm ${RHODECODE_PATH}/rhodecode.db && \
@@ -280,4 +280,4 b' VOLUME /var/log/rhodecode'
280 ENTRYPOINT ["/opt/entrypoints.d/entrypoint.sh"]
280 ENTRYPOINT ["/opt/entrypoints.d/entrypoint.sh"]
281
281
282 # compose can override this
282 # compose can override this
283 CMD [ "$BUILD_BIN_DIR/bin/gunicorn", "--error-logfile=-", "--paster=/etc/rhodecode/conf_build/run.ini", "--config=/etc/rhodecode/conf_build/gunicorn_conf.py" ]
283 CMD [ "$BUILD_BIN_DIR/bin/gunicorn", "--error-logfile=-", "--paster=/etc/rhodecode/conf_build/run.ini", "--config=/etc/rhodecode/conf_build/gunicorn_conf_rc.py" ]
@@ -11,7 +11,7 b' ARG RHODECODE_VERSION=4.28.0'
11 ARG RHODECODE_DB=sqlite
11 ARG RHODECODE_DB=sqlite
12 ARG RHODECODE_USER_NAME=admin
12 ARG RHODECODE_USER_NAME=admin
13 ARG RHODECODE_USER_PASS=secret4
13 ARG RHODECODE_USER_PASS=secret4
14 ARG RHODECODE_USER_EMAIL=support@rhodecode.com
14 ARG RHODECODE_USER_EMAIL=admin@server.local
15
15
16 # nix ver/channels
16 # nix ver/channels
17 ARG DEV_NIX_VERSION=2.0.4
17 ARG DEV_NIX_VERSION=2.0.4
@@ -66,7 +66,7 b' ENV \\'
66 ENV SVN_LOCALE_DEPS apache2 apache2-utils libapache2-mod-svn
66 ENV SVN_LOCALE_DEPS apache2 apache2-utils libapache2-mod-svn
67 ENV SSH_LOCALE_DEPS openssh-server
67 ENV SSH_LOCALE_DEPS openssh-server
68 ENV PYTHON_DEPS python2
68 ENV PYTHON_DEPS python2
69 ENV EXTRA_DEPS ""
69 ENV EXTRA_DEPS ""
70
70
71 ENV \
71 ENV \
72 PATH=$PATH:/nix/var/nix/profiles/per-user/$RC_USER/profile/bin:/home/$RC_USER/rhodecode-enterprise-ee/profile/bin \
72 PATH=$PATH:/nix/var/nix/profiles/per-user/$RC_USER/profile/bin:/home/$RC_USER/rhodecode-enterprise-ee/profile/bin \
@@ -202,16 +202,17 b' COPY --chown=$RC_USER:$RC_USER .cache/* /home/$RC_USER/.rccontrol/cache/'
202 COPY --chown=$RC_USER:$RC_USER config/_shared/rhodecode_enterprise.license /home/$RC_USER/.rccontrol/bootstrap/
202 COPY --chown=$RC_USER:$RC_USER config/_shared/rhodecode_enterprise.license /home/$RC_USER/.rccontrol/bootstrap/
203 COPY --chown=$RC_USER:$RC_USER service/rhodecode/bootstrap/* /home/$RC_USER/.rccontrol/bootstrap/
203 COPY --chown=$RC_USER:$RC_USER service/rhodecode/bootstrap/* /home/$RC_USER/.rccontrol/bootstrap/
204
204
205 RUN \
206 echo "**** locale-archive path ****" && \
207 mv -v /home/$RC_USER/.rccontrol/cache/locale-archive /var/opt/locale-archive
208
205 COPY --chown=$RC_USER:$RC_USER .source/ /home/$RC_USER/
209 COPY --chown=$RC_USER:$RC_USER .source/ /home/$RC_USER/
206 RUN \
210 RUN \
207 echo "** prepare rhodecode dirs **" && \
211 echo "** prepare rhodecode dirs **" && \
208 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/vcsserver-1 && \
212 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/vcsserver-1 && \
209 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/community-1 && \
213 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/community-1 && \
210 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/enterprise-1 && \
214 install -d -m 0755 -o $RC_USER -g $RC_USER /home/$RC_USER/.rccontrol/enterprise-1 && \
211
215 echo "Done rhodecode dirs"
212 RUN \
213 echo "**** locale-archive path ****" && \
214 mv -v /home/$RC_USER/.rccontrol/cache/locale-archive /var/opt/locale-archive
215
216
216 # change to non-root user for RUN commands
217 # change to non-root user for RUN commands
217 USER $RC_USER
218 USER $RC_USER
@@ -220,13 +221,15 b' WORKDIR /home/$RC_USER'
220
221
221 RUN \
222 RUN \
222 echo "** download and install nix ** from $DEV_NIX_VERSION/install" && \
223 echo "** download and install nix ** from $DEV_NIX_VERSION/install" && \
223 curl -L https://releases.nixos.org/nix/nix-$DEV_NIX_VERSION/install | USER=$RC_USER /bin/bash
224 curl -L https://releases.nixos.org/nix/nix-$DEV_NIX_VERSION/install | USER=$RC_USER /bin/bash && \
225 echo "Done nix install"
224
226
225 RUN \
227 RUN \
226 echo "** update nix package database and set channel to $DEV_NIX_CHANNEL **" && \
228 echo "** update nix package database and set channel to $DEV_NIX_CHANNEL **" && \
227 . /home/rhodecode/.nix-profile/etc/profile.d/nix.sh && \
229 . /home/rhodecode/.nix-profile/etc/profile.d/nix.sh && \
228 nix-channel --add https://channels.nixos.org/$DEV_NIX_CHANNEL nixpkgs && \
230 nix-channel --add https://channels.nixos.org/$DEV_NIX_CHANNEL nixpkgs && \
229 nix-channel --update
231 nix-channel --update && \
232 echo "done nix package updates"
230
233
231
234
232 RUN \
235 RUN \
@@ -272,7 +275,7 b' echo "** install rhodecode ${RHODECODE_VERSION} **" && \\'
272 rm -rf $BUILD_BIN_DIR/bin && \
275 rm -rf $BUILD_BIN_DIR/bin && \
273 cp -rv --preserve=links /home/$RC_USER/.rccontrol/enterprise-1/profile/bin $BUILD_BIN_DIR/ && \
276 cp -rv --preserve=links /home/$RC_USER/.rccontrol/enterprise-1/profile/bin $BUILD_BIN_DIR/ && \
274 cp -v ${RHODECODE_PATH}/configs/production.ini $BUILD_CONF/rhodecode.ini && \
277 cp -v ${RHODECODE_PATH}/configs/production.ini $BUILD_CONF/rhodecode.ini && \
275 cp -v ${RHODECODE_PATH}/configs/gunicorn_config.py $BUILD_CONF/gunicorn_conf.py && \
278 cp -v ${RHODECODE_PATH}/configs/gunicorn_config.py $BUILD_CONF/gunicorn_conf_rc.py && \
276 mkdir -p $RHODECODE_DATA_DIR/static && cp -r /home/$RC_USER/.rccontrol/enterprise-1/profile/etc/static/* $RHODECODE_DATA_DIR/static/ && \
279 mkdir -p $RHODECODE_DATA_DIR/static && cp -r /home/$RC_USER/.rccontrol/enterprise-1/profile/etc/static/* $RHODECODE_DATA_DIR/static/ && \
277 echo "Done installing rhodecode"
280 echo "Done installing rhodecode"
278
281
@@ -321,4 +324,4 b' VOLUME /var/log/rhodecode'
321 ENTRYPOINT ["/opt/entrypoints.d/entrypoint.sh"]
324 ENTRYPOINT ["/opt/entrypoints.d/entrypoint.sh"]
322
325
323 # compose can override this
326 # compose can override this
324 CMD [ "$BUILD_BIN_DIR/bin/gunicorn", "--error-logfile=-", "--paster=/etc/rhodecode/conf_build/run.ini", "--config=/etc/rhodecode/conf_build/gunicorn_conf.py" ]
327 CMD [ "$BUILD_BIN_DIR/bin/gunicorn", "--error-logfile=-", "--paster=/etc/rhodecode/conf_build/run.ini", "--config=/etc/rhodecode/conf_build/gunicorn_conf_rc.py" ]
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now