Skip to content

Commit 5e209ca

Browse files
author
GitHub Documentation Robot
committed
Build book from pecan revision dae0f6724432d111f3199d70dc5435291eb99bec
1 parent 7efd57d commit 5e209ca

File tree

3 files changed

+138
-31
lines changed

3 files changed

+138
-31
lines changed

develop/pecan-docker.html

Lines changed: 133 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -865,11 +865,21 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
865865
- traefik.http.routers.rabbitmq.entrypoints=web
866866
- traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.pecan.localhost`)
867867
volumes: rabbitmq:/var/lib/rabbitmq
868+
healthcheck:
869+
test: rabbitmqctl ping
870+
interval: 10s
871+
timeout: 5s
872+
retries: 5
868873
postgres:
869874
image: mdillon/postgis:9.5
870875
restart: unless-stopped
871876
networks: pecan
872877
volumes: postgres:/var/lib/postgresql/data
878+
healthcheck:
879+
test: pg_isready -U postgres
880+
interval: 10s
881+
timeout: 5s
882+
retries: 5
873883
bety:
874884
image: pecan/bety:${BETY_VERSION:-latest}
875885
restart: unless-stopped
@@ -880,19 +890,29 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
880890
- RAILS_RELATIVE_URL_ROOT=/bety
881891
- LOCAL_SERVER=${BETY_LOCAL_SERVER:-99}
882892
volumes: bety:/home/bety/log
883-
depends_on: postgres
893+
depends_on:
894+
postgres:
895+
condition: service_healthy
884896
labels:
885897
- traefik.enable=true
886898
- traefik.http.services.bety.loadbalancer.server.port=8000
887899
- traefik.http.routers.bety.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/bety/`)
900+
healthcheck:
901+
test: curl --silent --fail http://localhost:8000/${RAILS_RELATIVE_URL_ROOT}
902+
&gt; /dev/null || exit 1
903+
interval: 10s
904+
timeout: 5s
905+
retries: 5
888906
rstudio:
889907
image: pecan/base:${PECAN_VERSION:-latest}
890908
command: /work/rstudio.sh
891909
restart: unless-stopped
892910
networks: pecan
893911
depends_on:
894-
- rabbitmq
895-
- postgres
912+
postgres:
913+
condition: service_healthy
914+
rabbitmq:
915+
condition: service_healthy
896916
environment:
897917
- KEEP_ENV=RABBITMQ_URI RABBITMQ_PREFIX RABBITMQ_PORT FQDN NAME
898918
- RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
@@ -928,6 +948,11 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
928948
- traefik.enable=true
929949
- traefik.http.services.docs.loadbalancer.server.port=80
930950
- traefik.http.routers.docs.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/`)
951+
healthcheck:
952+
test: curl --silent --fail http://localhost/ &gt; /dev/null || exit 1
953+
interval: 10s
954+
timeout: 5s
955+
retries: 5
931956
pecan:
932957
user: ${UID:-1001}:${GID:-1001}
933958
image: pecan/web:${PECAN_VERSION:-latest}
@@ -939,8 +964,10 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
939964
- NAME=${PECAN_NAME:-docker}
940965
- SECRET_KEY_BASE=${BETY_SECRET_KEY:-thisisnotasecret}
941966
depends_on:
942-
- postgres
943-
- rabbitmq
967+
postgres:
968+
condition: service_healthy
969+
rabbitmq:
970+
condition: service_healthy
944971
labels:
945972
- traefik.enable=true
946973
- traefik.http.services.pecan.loadbalancer.server.port=8080
@@ -949,6 +976,11 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
949976
volumes:
950977
- pecan:/data
951978
- pecan:/var/www/html/pecan/data
979+
healthcheck:
980+
test: curl --silent --fail http://localhost/pecan/ &gt; /dev/null || exit 1
981+
interval: 10s
982+
timeout: 5s
983+
retries: 5
952984
monitor:
953985
user: ${UID:-1001}:${GID:-1001}
954986
image: pecan/monitor:${PECAN_VERSION:-latest}
@@ -957,14 +989,24 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
957989
environment:
958990
- RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
959991
- FQDN=${PECAN_FQDN:-docker}
960-
depends_on: rabbitmq
992+
depends_on:
993+
postgres:
994+
condition: service_healthy
995+
rabbitmq:
996+
condition: service_healthy
961997
labels:
962998
- traefik.enable=true
963999
- traefik.http.routers.monitor.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp;
9641000
PathPrefix(`/monitor/`)
9651001
- traefik.http.routers.monitor.middlewares=monitor-stripprefix
9661002
- traefik.http.middlewares.monitor-stripprefix.stripprefix.prefixes=/monitor
9671003
volumes: pecan:/data
1004+
healthcheck:
1005+
test: curl --silent --fail http://localhost:9999/monitor/ &gt; /dev/null || exit
1006+
1
1007+
interval: 10s
1008+
timeout: 5s
1009+
retries: 5
9681010
executor:
9691011
user: ${UID:-1001}:${GID:-1001}
9701012
image: pecan/executor:${PECAN_VERSION:-latest}
@@ -976,68 +1018,89 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
9761018
- RABBITMQ_PORT=15672
9771019
- FQDN=${PECAN_FQDN:-docker}
9781020
depends_on:
979-
- postgres
980-
- rabbitmq
1021+
postgres:
1022+
condition: service_healthy
1023+
rabbitmq:
1024+
condition: service_healthy
9811025
volumes: pecan:/data
9821026
fates:
9831027
user: ${UID:-1001}:${GID:-1001}
9841028
image: ghcr.io/noresmhub/ctsm-api:latest
9851029
restart: unless-stopped
9861030
networks: pecan
9871031
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
988-
depends_on: rabbitmq
1032+
depends_on:
1033+
rabbitmq:
1034+
condition: service_healthy
9891035
volumes: pecan:/data
9901036
basgra:
9911037
user: ${UID:-1001}:${GID:-1001}
9921038
image: pecan/model-basgra-basgra_n_v1.0:${PECAN_VERSION:-latest}
9931039
restart: unless-stopped
9941040
networks: pecan
9951041
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
996-
depends_on: rabbitmq
1042+
depends_on:
1043+
rabbitmq:
1044+
condition: service_healthy
9971045
volumes: pecan:/data
9981046
sipnet:
9991047
user: ${UID:-1001}:${GID:-1001}
10001048
image: pecan/model-sipnet-git:${PECAN_VERSION:-latest}
10011049
restart: unless-stopped
10021050
networks: pecan
10031051
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
1004-
depends_on: rabbitmq
1052+
depends_on:
1053+
rabbitmq:
1054+
condition: service_healthy
10051055
volumes: pecan:/data
10061056
ed2:
10071057
user: ${UID:-1001}:${GID:-1001}
10081058
image: pecan/model-ed2-2.2.0:${PECAN_VERSION:-latest}
10091059
restart: unless-stopped
10101060
networks: pecan
10111061
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
1012-
depends_on: rabbitmq
1062+
depends_on:
1063+
rabbitmq:
1064+
condition: service_healthy
10131065
volumes: pecan:/data
10141066
maespa:
10151067
user: ${UID:-1001}:${GID:-1001}
10161068
image: pecan/model-maespa-git:${PECAN_VERSION:-latest}
10171069
restart: unless-stopped
10181070
networks: pecan
10191071
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
1020-
depends_on: rabbitmq
1072+
depends_on:
1073+
rabbitmq:
1074+
condition: service_healthy
10211075
volumes: pecan:/data
10221076
biocro:
10231077
user: ${UID:-1001}:${GID:-1001}
10241078
image: pecan/model-biocro-0.95:${PECAN_VERSION:-latest}
10251079
restart: unless-stopped
10261080
networks: pecan
10271081
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
1028-
depends_on: rabbitmq
1082+
depends_on:
1083+
rabbitmq:
1084+
condition: service_healthy
10291085
volumes: pecan:/data
10301086
dbsync:
10311087
image: pecan/shiny-dbsync:${PECAN_VERSION:-latest}
10321088
restart: unless-stopped
10331089
networks: pecan
1034-
depends_on: postgres
1090+
depends_on:
1091+
postgres:
1092+
condition: service_healthy
10351093
labels:
10361094
- traefik.enable=true
10371095
- traefik.http.routers.dbsync.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp;
10381096
PathPrefix(`/dbsync/`)
10391097
- traefik.http.routers.dbsync.middlewares=dbsync-stripprefix
10401098
- traefik.http.middlewares.dbsync-stripprefix.stripprefix.prefixes=/monitor
1099+
healthcheck:
1100+
test: curl --silent --fail http://localhost/dbsync/ &gt; /dev/null || exit 1
1101+
interval: 10s
1102+
timeout: 5s
1103+
retries: 5
10411104
api:
10421105
user: ${UID:-1001}:${GID:-1001}
10431106
image: pecan/api:${PECAN_VERSION:-latest}
@@ -1055,8 +1118,15 @@ <h3><span class="header-section-number">25.4.2</span> PEcAn’s <code>docker-com
10551118
- traefik.enable=true
10561119
- traefik.http.routers.api.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/api/`)
10571120
- traefik.http.services.api.loadbalancer.server.port=8000
1058-
depends_on: postgres
1121+
depends_on:
1122+
postgres:
1123+
condition: service_healthy
10591124
volumes: pecan:/data/
1125+
healthcheck:
1126+
test: curl --silent --fail http://localhost/api/ping &gt; /dev/null || exit 1
1127+
interval: 10s
1128+
timeout: 5s
1129+
retries: 5
10601130
networks:
10611131
pecan: ~
10621132
volumes:
@@ -1270,7 +1340,12 @@ <h3><span class="header-section-number">25.4.8</span> <code>postgres</code><a hr
12701340
image: mdillon/postgis:9.5
12711341
restart: unless-stopped
12721342
networks: pecan
1273-
volumes: postgres:/var/lib/postgresql/data</code></pre>
1343+
volumes: postgres:/var/lib/postgresql/data
1344+
healthcheck:
1345+
test: pg_isready -U postgres
1346+
interval: 10s
1347+
timeout: 5s
1348+
retries: 5</code></pre>
12741349
<p>Some additional details about our configuration:</p>
12751350
<ul>
12761351
<li><p><code>image</code> – This pulls a container with PostgreSQL + PostGIS pre-installed.
@@ -1298,7 +1373,12 @@ <h3><span class="header-section-number">25.4.9</span> <code>rabbitmq</code><a hr
12981373
- traefik.http.services.rabbitmq.loadbalancer.server.port=15672
12991374
- traefik.http.routers.rabbitmq.entrypoints=web
13001375
- traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.pecan.localhost`)
1301-
volumes: rabbitmq:/var/lib/rabbitmq</code></pre>
1376+
volumes: rabbitmq:/var/lib/rabbitmq
1377+
healthcheck:
1378+
test: rabbitmqctl ping
1379+
interval: 10s
1380+
timeout: 5s
1381+
retries: 5</code></pre>
13021382
<p>Note that the <code>traefik.http.routers.rabbitmq.rule</code> indicates that browsing to <a href="http://rabbitmq.pecan.localhost/" class="uri">http://rabbitmq.pecan.localhost/</a> leads to the RabbitMQ management console.</p>
13031383
<p>By default, the RabbitMQ management console has username/password <code>guest/guest</code>, which is highly insecure.
13041384
For production instances of PEcAn, we highly recommend changing these credentials to something more secure, and removing access to the RabbitMQ management console via Traefik.</p>
@@ -1319,11 +1399,19 @@ <h3><span class="header-section-number">25.4.10</span> <code>bety</code><a href=
13191399
- RAILS_RELATIVE_URL_ROOT=/bety
13201400
- LOCAL_SERVER=${BETY_LOCAL_SERVER:-99}
13211401
volumes: bety:/home/bety/log
1322-
depends_on: postgres
1402+
depends_on:
1403+
postgres:
1404+
condition: service_healthy
13231405
labels:
13241406
- traefik.enable=true
13251407
- traefik.http.services.bety.loadbalancer.server.port=8000
1326-
- traefik.http.routers.bety.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/bety/`)</code></pre>
1408+
- traefik.http.routers.bety.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/bety/`)
1409+
healthcheck:
1410+
test: curl --silent --fail http://localhost:8000/${RAILS_RELATIVE_URL_ROOT} &gt;
1411+
/dev/null || exit 1
1412+
interval: 10s
1413+
timeout: 5s
1414+
retries: 5</code></pre>
13271415
<p>The BETY container Dockerfile is located in the root directory of the <a href="https://github.com/PecanProject/bety">BETY GitHub repository</a> (<a href="https://github.com/PecanProject/bety/blob/master/Dockerfile">direct link</a>).</p>
13281416
</div>
13291417
<div id="pecan-dc-docs" class="section level3 hasAnchor" number="25.4.11">
@@ -1337,7 +1425,12 @@ <h3><span class="header-section-number">25.4.11</span> <code>docs</code><a href=
13371425
labels:
13381426
- traefik.enable=true
13391427
- traefik.http.services.docs.loadbalancer.server.port=80
1340-
- traefik.http.routers.docs.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/`)</code></pre>
1428+
- traefik.http.routers.docs.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp; PathPrefix(`/`)
1429+
healthcheck:
1430+
test: curl --silent --fail http://localhost/ &gt; /dev/null || exit 1
1431+
interval: 10s
1432+
timeout: 5s
1433+
retries: 5</code></pre>
13411434
</div>
13421435
<div id="pecan-dc-web" class="section level3 hasAnchor" number="25.4.12">
13431436
<h3><span class="header-section-number">25.4.12</span> <code>web</code><a href="pecan-docker.html#pecan-dc-web" class="anchor-section" aria-label="Anchor link to header"></a></h3>
@@ -1364,8 +1457,10 @@ <h3><span class="header-section-number">25.4.13</span> <code>executor</code><a h
13641457
- RABBITMQ_PORT=15672
13651458
- FQDN=${PECAN_FQDN:-docker}
13661459
depends_on:
1367-
- postgres
1368-
- rabbitmq
1460+
postgres:
1461+
condition: service_healthy
1462+
rabbitmq:
1463+
condition: service_healthy
13691464
volumes: pecan:/data</code></pre>
13701465
<p>Its Dockerfile is ships with the PEcAn source code, in <a href="https://github.com/PecanProject/pecan/blob/develop/docker/executor/Dockerfile"><code>docker/executor/Dockerfile</code></a>.
13711466
Its image is built on top of the <code>pecan/base</code> image (<a href="https://github.com/PecanProject/pecan/blob/develop/docker/base/Dockerfile"><code>docker/base/Dockerfile</code></a>), which contains the actual PEcAn source.
@@ -1386,14 +1481,24 @@ <h3><span class="header-section-number">25.4.14</span> <code>monitor</code><a hr
13861481
environment:
13871482
- RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
13881483
- FQDN=${PECAN_FQDN:-docker}
1389-
depends_on: rabbitmq
1484+
depends_on:
1485+
postgres:
1486+
condition: service_healthy
1487+
rabbitmq:
1488+
condition: service_healthy
13901489
labels:
13911490
- traefik.enable=true
13921491
- traefik.http.routers.monitor.rule=Host(`${TRAEFIK_HOST:-pecan.localhost}`) &amp;&amp;
13931492
PathPrefix(`/monitor/`)
13941493
- traefik.http.routers.monitor.middlewares=monitor-stripprefix
13951494
- traefik.http.middlewares.monitor-stripprefix.stripprefix.prefixes=/monitor
1396-
volumes: pecan:/data</code></pre>
1495+
volumes: pecan:/data
1496+
healthcheck:
1497+
test: curl --silent --fail http://localhost:9999/monitor/ &gt; /dev/null || exit
1498+
1
1499+
interval: 10s
1500+
timeout: 5s
1501+
retries: 5</code></pre>
13971502
</div>
13981503
<div id="pecan-dc-models" class="section level3 hasAnchor" number="25.4.15">
13991504
<h3><span class="header-section-number">25.4.15</span> Model-specific containers<a href="pecan-docker.html#pecan-dc-models" class="anchor-section" aria-label="Anchor link to header"></a></h3>
@@ -1405,7 +1510,9 @@ <h3><span class="header-section-number">25.4.15</span> Model-specific containers
14051510
restart: unless-stopped
14061511
networks: pecan
14071512
environment: RABBITMQ_URI=${RABBITMQ_URI:-amqp://guest:guest@rabbitmq/%2F}
1408-
depends_on: rabbitmq
1513+
depends_on:
1514+
rabbitmq:
1515+
condition: service_healthy
14091516
volumes: pecan:/data</code></pre>
14101517
<p>The PEcAn source contains Dockerfiles for ED2 (<a href="https://github.com/PecanProject/pecan/blob/develop/models/ed/Dockerfile."><code>models/ed/Dockerfile</code></a>) and SIPNET (<a href="https://github.com/PecanProject/pecan/blob/develop/models/sipnet/Dockerfile"><code>models/sipnet/Dockerfile</code></a>) that can serve as references.
14111518
For additional tips on constructing a Dockerfile for your model, see <a href="model-docker.html#model-docker">Dockerfiles for Models</a>.</p>

develop/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)