Compare commits
1308 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dceaef20ed | ||
|
|
ebbbcb99f2 | ||
|
|
3e70dbb836 | ||
|
|
f1c74b08cb | ||
|
|
451abcf8f3 | ||
|
|
98f03c249b | ||
|
|
4c4248d65b | ||
|
|
889c11d84b | ||
|
|
c0581a0e37 | ||
|
|
7e45f1173f | ||
|
|
21a94b6dca | ||
|
|
6cd50cb372 | ||
|
|
bde77dbf78 | ||
|
|
bd261e6847 | ||
|
|
f7863c8391 | ||
|
|
e8a532645f | ||
|
|
af0d2e6f7a | ||
|
|
0786954d34 | ||
|
|
a662046f95 | ||
|
|
77d7f63857 | ||
|
|
73814a5b65 | ||
|
|
4ba7d4ea10 | ||
|
|
c343316864 | ||
|
|
aa6abe0fd3 | ||
|
|
bf17023639 | ||
|
|
97513dee91 | ||
|
|
fceb412fb1 | ||
|
|
ef490f0a05 | ||
|
|
e0127250ae | ||
|
|
fcebbd67df | ||
|
|
d97fc1cfb8 | ||
|
|
9dba48fc19 | ||
|
|
b6db484393 | ||
|
|
7cdc68a007 | ||
|
|
1d93246af8 | ||
|
|
abce952d0f | ||
|
|
0b30bc8034 | ||
|
|
9882c94eec | ||
|
|
9a02f3f1dc | ||
|
|
5f1dc46392 | ||
|
|
c4462c4da4 | ||
|
|
f708964c5f | ||
|
|
d514ca0bb5 | ||
|
|
5b21cabff3 | ||
|
|
6e36f95bab | ||
|
|
ae1b1c7274 | ||
|
|
53a76b1353 | ||
|
|
5fd1772c3a | ||
|
|
ab0cc6c444 | ||
|
|
8ae597ad1d | ||
|
|
024ff6e489 | ||
|
|
246a50a592 | ||
|
|
6d514e72fa | ||
|
|
e6e5ede436 | ||
|
|
a19efc1cfa | ||
|
|
28a36c4908 | ||
|
|
ef083e6289 | ||
|
|
6e0c376b62 | ||
|
|
c9a0f88bf1 | ||
|
|
f558008574 | ||
|
|
b44bc686a1 | ||
|
|
037b99865d | ||
|
|
72ed9dbcce | ||
|
|
5d7b2a84f4 | ||
|
|
1b50b4ab0a | ||
|
|
bc9a60f696 | ||
|
|
44ce5c76ae | ||
|
|
702e9cf66c | ||
|
|
be26f45b5a | ||
|
|
f13ee16ab8 | ||
|
|
36dc98452d | ||
|
|
82f13af166 | ||
|
|
23ad4bb230 | ||
|
|
a8ccc7d2a7 | ||
|
|
0a533c754f | ||
|
|
f6efb53491 | ||
|
|
cf4a533f2f | ||
|
|
b4552237b6 | ||
|
|
e8d0965a33 | ||
|
|
bb9f764b9f | ||
|
|
9193b68854 | ||
|
|
db435c40e5 | ||
|
|
bf84405b43 | ||
|
|
833a64cc0e | ||
|
|
54fb2b5d75 | ||
|
|
85fafcf170 | ||
|
|
815cd530c8 | ||
|
|
ebdf38e136 | ||
|
|
a93f504d45 | ||
|
|
cae561f7b9 | ||
|
|
f9969a0e61 | ||
|
|
06ce3dfadb | ||
|
|
ab1d15216c | ||
|
|
e8cfbfad36 | ||
|
|
70de587f6c | ||
|
|
e7ee7a1781 | ||
|
|
c72bbf41ea | ||
|
|
34343a846d | ||
|
|
e0a70411dd | ||
|
|
947b2d4db6 | ||
|
|
3714a231a9 | ||
|
|
39984980fb | ||
|
|
c7becc6cad | ||
|
|
74f27480fc | ||
|
|
33d3722060 | ||
|
|
696df45306 | ||
|
|
1b4559c4a4 | ||
|
|
bd132ed7c6 | ||
|
|
66696d0b46 | ||
|
|
943e032d12 | ||
|
|
ff7429fd00 | ||
|
|
236a279793 | ||
|
|
7e206b3ba0 | ||
|
|
f612709d7d | ||
|
|
76412f6ade | ||
|
|
45c7cd6e8b | ||
|
|
67192cf664 | ||
|
|
3a77c38a2d | ||
|
|
810892bf40 | ||
|
|
4b7384fc98 | ||
|
|
1bdcdc397e | ||
|
|
61855fd14b | ||
|
|
4a9ac117e0 | ||
|
|
0d06903b89 | ||
|
|
a70217b791 | ||
|
|
71c698f6b1 | ||
|
|
eec0e5df01 | ||
|
|
f5020659f3 | ||
|
|
e26c5a7970 | ||
|
|
8b697920e2 | ||
|
|
415b38bd64 | ||
|
|
5eb69d33d1 | ||
|
|
7c44fb8d50 | ||
|
|
9a9aec31b7 | ||
|
|
26e77a693a | ||
|
|
29ff230084 | ||
|
|
21ed81d39e | ||
|
|
77d53b1009 | ||
|
|
664683c6e4 | ||
|
|
361ee01ab0 | ||
|
|
6889e65077 | ||
|
|
bd9d9fb5b9 | ||
|
|
231435001c | ||
|
|
05bf72e0d8 | ||
|
|
4b70aaa038 | ||
|
|
d52f676a84 | ||
|
|
4a1717e837 | ||
|
|
5aaa88f41e | ||
|
|
8300f433e9 | ||
|
|
bd2867b846 | ||
|
|
da1a47b57d | ||
|
|
75bb83bdec | ||
|
|
5bca600894 | ||
|
|
607b11ab6b | ||
|
|
6543647b3c | ||
|
|
57b317b0a4 | ||
|
|
d5cc136df2 | ||
|
|
0731616ebf | ||
|
|
6957a33ec7 | ||
|
|
46c274dcf2 | ||
|
|
ae21056401 | ||
|
|
30414cbd0c | ||
|
|
87574f7d76 | ||
|
|
30d8ebffb9 | ||
|
|
71876756a4 | ||
|
|
b1b85b4106 | ||
|
|
196b5d08eb | ||
|
|
2026a2731d | ||
|
|
c8d932f768 | ||
|
|
752a0cacd9 | ||
|
|
ecc6c9e01d | ||
|
|
7e9f98b513 | ||
|
|
0f514f300e | ||
|
|
017cfef6a2 | ||
|
|
81512504a7 | ||
|
|
becf7c1f86 | ||
|
|
9e6c89428e | ||
|
|
8d96be73b7 | ||
|
|
21c8639397 | ||
|
|
1699c6f3a3 | ||
|
|
70c947289f | ||
|
|
a4e54b6d00 | ||
|
|
ab9780d971 | ||
|
|
f5ba843cf3 | ||
|
|
052f2a5868 | ||
|
|
893df14c3e | ||
|
|
43c521c193 | ||
|
|
2a1d3877f1 | ||
|
|
4d735b4d88 | ||
|
|
b8b6d64f75 | ||
|
|
2b65def123 | ||
|
|
7fe69fa269 | ||
|
|
84367e1c16 | ||
|
|
0faf305f28 | ||
|
|
e64f7b34ff | ||
|
|
5ea4c9a73d | ||
|
|
7e7931f1ce | ||
|
|
428beb3413 | ||
|
|
9aab7dce7d | ||
|
|
2478556df1 | ||
|
|
a2d4ba4689 | ||
|
|
4ab9632526 | ||
|
|
baa819c2a5 | ||
|
|
aaf8bc811a | ||
|
|
53dabf7fd0 | ||
|
|
7ca4cba8ec | ||
|
|
5965b70b39 | ||
|
|
23db07ed4e | ||
|
|
53e75e7898 | ||
|
|
16d15ae9bf | ||
|
|
3def0ae036 | ||
|
|
31ab2f97f6 | ||
|
|
8126c63d6e | ||
|
|
beb42b53b2 | ||
|
|
6df38a56d1 | ||
|
|
68debb44f7 | ||
|
|
f27096f235 | ||
|
|
f2a623fde0 | ||
|
|
7ee26d41f7 | ||
|
|
55c77773ab | ||
|
|
147abc5c6b | ||
|
|
e6f2ee6499 | ||
|
|
8f671b43ae | ||
|
|
617ca885f1 | ||
|
|
1813317e86 | ||
|
|
9bf7ddc258 | ||
|
|
77f211c372 | ||
|
|
939cb67daa | ||
|
|
1ea60a16e5 | ||
|
|
98bc513336 | ||
|
|
b6d5d291b0 | ||
|
|
6f6fa709ec | ||
|
|
82a6dbf887 | ||
|
|
dee879538c | ||
|
|
0351bf73b0 | ||
|
|
5d08964699 | ||
|
|
96b4ffbf5b | ||
|
|
7ad723f23d | ||
|
|
a97f1d02cf | ||
|
|
fe8e97b7cb | ||
|
|
b13de85477 | ||
|
|
ced920eb74 | ||
|
|
eded6cffe0 | ||
|
|
9d7a67ae7f | ||
|
|
638807685a | ||
|
|
529289f364 | ||
|
|
2fdd261961 | ||
|
|
0bce73d690 | ||
|
|
0107909a85 | ||
|
|
d41a53d9db | ||
|
|
af0fb558f6 | ||
|
|
1452e88248 | ||
|
|
d1b848e3eb | ||
|
|
d6273b4751 | ||
|
|
5bd5e6249b | ||
|
|
4033266664 | ||
|
|
9cbe771123 | ||
|
|
a545585ea1 | ||
|
|
2efa8483e2 | ||
|
|
a3961e40ee | ||
|
|
f9b1a74edf | ||
|
|
e1753bbac4 | ||
|
|
13392dcf5b | ||
|
|
879d47b30d | ||
|
|
bb61aaa85c | ||
|
|
d5b2d0d98e | ||
|
|
1b7761ce8d | ||
|
|
8ab1342110 | ||
|
|
7c0eb20de8 | ||
|
|
c26258bd2b | ||
|
|
d04c04ac17 | ||
|
|
c5b53afd8b | ||
|
|
9ac7b00718 | ||
|
|
59f815962d | ||
|
|
bb33a2fe27 | ||
|
|
5e2bd55fb5 | ||
|
|
4b36e2f3b7 | ||
|
|
ed94d326d4 | ||
|
|
17be38e532 | ||
|
|
3f09c82379 | ||
|
|
c2cb0486f4 | ||
|
|
b1b5a7fa11 | ||
|
|
3a9d88d175 | ||
|
|
a422c64153 | ||
|
|
c01767fade | ||
|
|
f59dbe4f63 | ||
|
|
2160a8b64e | ||
|
|
c66c85429e | ||
|
|
520bc94357 | ||
|
|
dea4251b2c | ||
|
|
7f64bb1255 | ||
|
|
831600d8c9 | ||
|
|
d42b046177 | ||
|
|
738bfb7446 | ||
|
|
a72c04ed65 | ||
|
|
3921cab2df | ||
|
|
a52dbafc5f | ||
|
|
d26eadfa21 | ||
|
|
321a310fe5 | ||
|
|
772f9d1b6a | ||
|
|
613dd3d1c4 | ||
|
|
aba5d03632 | ||
|
|
0403978ade | ||
|
|
da12a8c835 | ||
|
|
fc24ad965e | ||
|
|
736aa4c48d | ||
|
|
1de3651774 | ||
|
|
c4c0488339 | ||
|
|
bb05787ea7 | ||
|
|
d92502107e | ||
|
|
9ab224f3ce | ||
|
|
8bf5f398b1 | ||
|
|
be0ba28570 | ||
|
|
dbd86ad7a2 | ||
|
|
5f312d7347 | ||
|
|
6e9f21b1d5 | ||
|
|
a631505cd6 | ||
|
|
f36701206c | ||
|
|
42122a7540 | ||
|
|
996e2c7d92 | ||
|
|
64993a57eb | ||
|
|
eaf0d9af55 | ||
|
|
0c44656acf | ||
|
|
0d749b3e7a | ||
|
|
90b3528f6b | ||
|
|
07f0bf3a50 | ||
|
|
bcfa530056 | ||
|
|
3f4b0eccd8 | ||
|
|
591ecff646 | ||
|
|
7481943a9b | ||
|
|
16241b4ce1 | ||
|
|
9dbc352006 | ||
|
|
1a0c123823 | ||
|
|
45e3623ffd | ||
|
|
1eaa98d3e6 | ||
|
|
e75aadff15 | ||
|
|
d8cd5250a2 | ||
|
|
9e7b31b4e8 | ||
|
|
726d55f771 | ||
|
|
a4c67d50ee | ||
|
|
564de7434b | ||
|
|
59f1ba20db | ||
|
|
5ad7ece8d3 | ||
|
|
dabe90a0de | ||
|
|
1ecb9585ef | ||
|
|
36ceca7a94 | ||
|
|
42a46df51f | ||
|
|
008b362751 | ||
|
|
81717f67f3 | ||
|
|
b6bf22812b | ||
|
|
8557ec1226 | ||
|
|
570fcce2ee | ||
|
|
ef5a4b08d6 | ||
|
|
5fd04001d8 | ||
|
|
fb7bac4652 | ||
|
|
ef46db5d6b | ||
|
|
a9e130b090 | ||
|
|
f23413742a | ||
|
|
7ffe0c3b58 | ||
|
|
62e0ba6952 | ||
|
|
59910749b7 | ||
|
|
a5d53711ee | ||
|
|
9d747b7c82 | ||
|
|
3084ac098e | ||
|
|
f083561ee7 | ||
|
|
ae67f14f9b | ||
|
|
9d6746001e | ||
|
|
c632b6b358 | ||
|
|
9c300dc14b | ||
|
|
02d9c53520 | ||
|
|
ca5c9d6c45 | ||
|
|
90a5391252 | ||
|
|
cf113ecda2 | ||
|
|
0b9cecef4d | ||
|
|
52ea598ba4 | ||
|
|
f4bec4a1c8 | ||
|
|
293d7efe07 | ||
|
|
c9e24a055c | ||
|
|
e9ecc98b3d | ||
|
|
0932fd7f7c | ||
|
|
9ded7e176f | ||
|
|
1738009f6b | ||
|
|
bd3d8a54ad | ||
|
|
c97fd92fcf | ||
|
|
6d4d8a89ed | ||
|
|
7f9f289bd6 | ||
|
|
3c56a0c323 | ||
|
|
401ec40566 | ||
|
|
edf5d29213 | ||
|
|
03f8922ffd | ||
|
|
b9cc89e4d2 | ||
|
|
fb4a232537 | ||
|
|
cf35cedd1e | ||
|
|
2919415d7e | ||
|
|
ee083eb3c3 | ||
|
|
ca1e188e9a | ||
|
|
ef4fe2dbf9 | ||
|
|
6e7e7d35cc | ||
|
|
88e01d8a4b | ||
|
|
a8fd8d1b19 | ||
|
|
f47a267917 | ||
|
|
bf7e86fb13 | ||
|
|
1cab6acf69 | ||
|
|
75a2d3a1ba | ||
|
|
ca248a62ec | ||
|
|
b50590e2ad | ||
|
|
db253c15cc | ||
|
|
d60140dad8 | ||
|
|
5c17bcc710 | ||
|
|
d682bd52ff | ||
|
|
1ba874ea62 | ||
|
|
614ba66450 | ||
|
|
9451216606 | ||
|
|
ef91685596 | ||
|
|
dfaa20e449 | ||
|
|
d7b0d2a4d9 | ||
|
|
2b9e5bbaea | ||
|
|
8e0d288b2e | ||
|
|
75cdc585b6 | ||
|
|
a9d2610e34 | ||
|
|
e2eceb49ca | ||
|
|
e8eba15e49 | ||
|
|
4a8ebd8dee | ||
|
|
9dcf17be69 | ||
|
|
4aae0f1a1d | ||
|
|
f6a193935d | ||
|
|
46d4de261c | ||
|
|
b4b2c4301f | ||
|
|
bb2265a3c9 | ||
|
|
484f61fdd5 | ||
|
|
5aae49f1a0 | ||
|
|
ee7abe3098 | ||
|
|
981c5e1dd6 | ||
|
|
d9868a3862 | ||
|
|
c8edeb01e6 | ||
|
|
12e2b22ea8 | ||
|
|
a8008b8d33 | ||
|
|
7d539e5b03 | ||
|
|
2e2320ec73 | ||
|
|
676027caf6 | ||
|
|
2588bedcfe | ||
|
|
272c96b171 | ||
|
|
a1935687a2 | ||
|
|
6b25ab16b7 | ||
|
|
6b6518c699 | ||
|
|
88f661b6e7 | ||
|
|
aff0c1fc40 | ||
|
|
aa63e79aec | ||
|
|
a0cb7c560e | ||
|
|
68d1a04215 | ||
|
|
a4da6f67cc | ||
|
|
a93cec63be | ||
|
|
c22f78c913 | ||
|
|
a60467cb2d | ||
|
|
91a668ee8f | ||
|
|
94aa67d494 | ||
|
|
6636c48838 | ||
|
|
ce154aff09 | ||
|
|
6a8783e357 | ||
|
|
914f695eab | ||
|
|
d6510ad936 | ||
|
|
c2c9671061 | ||
|
|
def0a2c0ee | ||
|
|
995ca5902f | ||
|
|
10d959501d | ||
|
|
d8cff6566e | ||
|
|
a5a06196b1 | ||
|
|
0f6d809aff | ||
|
|
2cbc850df3 | ||
|
|
7509c7adbf | ||
|
|
b1ac99c616 | ||
|
|
0c7ef180d0 | ||
|
|
4c59dcaea6 | ||
|
|
08b3a4b7a7 | ||
|
|
125c093ba5 | ||
|
|
891c3e5e59 | ||
|
|
ba9fa1d0b7 | ||
|
|
830c9006ca | ||
|
|
ec16aa92ac | ||
|
|
2dfb0ef3e6 | ||
|
|
03daa33d83 | ||
|
|
883bcd897f | ||
|
|
ba6cca4093 | ||
|
|
a1581bc963 | ||
|
|
2a26cd9d5a | ||
|
|
46eb092006 | ||
|
|
87dc7e39e6 | ||
|
|
9ed77ab6c1 | ||
|
|
46287cac0f | ||
|
|
b011a3a558 | ||
|
|
e3e430f4d7 | ||
|
|
b63a40d4fe | ||
|
|
41bc54879d | ||
|
|
269a254425 | ||
|
|
4c748f2b36 | ||
|
|
ee7d7f164f | ||
|
|
962aa66965 | ||
|
|
92621a3187 | ||
|
|
04b32efd54 | ||
|
|
0931d655f7 | ||
|
|
480425bfb9 | ||
|
|
49351227d1 | ||
|
|
d3263a45c3 | ||
|
|
4f77c88e0b | ||
|
|
722390475b | ||
|
|
3b248de306 | ||
|
|
7ff5e56dc7 | ||
|
|
67f113a818 | ||
|
|
4136f0274a | ||
|
|
61a306664f | ||
|
|
d35576302d | ||
|
|
cca008f140 | ||
|
|
5458d5b341 | ||
|
|
42db45d6f4 | ||
|
|
2c3cbc1708 | ||
|
|
5e065e71c7 | ||
|
|
50705890d8 | ||
|
|
c33b58a3e0 | ||
|
|
4d4971b171 | ||
|
|
05513ad75a | ||
|
|
ee69e1ee4a | ||
|
|
88bc04797f | ||
|
|
c06644af62 | ||
|
|
89787173af | ||
|
|
65403d1cf7 | ||
|
|
e56c69494a | ||
|
|
9e9aa75fbb | ||
|
|
14934a9479 | ||
|
|
9b48a386fc | ||
|
|
9d60b487e6 | ||
|
|
3e83b2836c | ||
|
|
72425cff84 | ||
|
|
3ae68213ff | ||
|
|
a9ff33f9a5 | ||
|
|
f6a6444e66 | ||
|
|
6901e9658f | ||
|
|
a8a6d0595b | ||
|
|
ee786e1962 | ||
|
|
74e147005b | ||
|
|
3e442e551d | ||
|
|
2628df06a3 | ||
|
|
ba8eb6f2e5 | ||
|
|
8a380e52c4 | ||
|
|
aa94dc7a7b | ||
|
|
a42261b2b3 | ||
|
|
7482762592 | ||
|
|
fffc283459 | ||
|
|
7e6107fd04 | ||
|
|
65897ca4cd | ||
|
|
7bc6767ab7 | ||
|
|
917983f61d | ||
|
|
ea76530ab1 | ||
|
|
12dfa33680 | ||
|
|
93225ada48 | ||
|
|
5917105e4e | ||
|
|
1ddf0e9756 | ||
|
|
dc039d4674 | ||
|
|
315422e017 | ||
|
|
e11499e676 | ||
|
|
a56f173568 | ||
|
|
cae35e6701 | ||
|
|
66a772b8c7 | ||
|
|
c91a6d1a55 | ||
|
|
e86f49e64a | ||
|
|
cb5a782f92 | ||
|
|
610a2ca477 | ||
|
|
234969866e | ||
|
|
9cf8e7b0bb | ||
|
|
4da5f5e7ac | ||
|
|
72a4637beb | ||
|
|
ea1316fdfc | ||
|
|
18deebaea2 | ||
|
|
57da0e1ff0 | ||
|
|
908d203a64 | ||
|
|
88631483b4 | ||
|
|
cef73e7872 | ||
|
|
583fb52f8d | ||
|
|
39ab4808a7 | ||
|
|
d82ad0a10a | ||
|
|
62caa85423 | ||
|
|
b70e59f9ff | ||
|
|
75a9b2a4d2 | ||
|
|
0c96e5deb9 | ||
|
|
a97862dd7b | ||
|
|
061a812f50 | ||
|
|
f5d5b4fcda | ||
|
|
6e50444d05 | ||
|
|
d525d51221 | ||
|
|
5dc3018d6d | ||
|
|
d84df2cc41 | ||
|
|
d61b830e4a | ||
|
|
cd7d47c381 | ||
|
|
3ef092fda9 | ||
|
|
99e98fb68a | ||
|
|
fb6502044c | ||
|
|
49e48f5f56 | ||
|
|
0b8fbfdeb9 | ||
|
|
5a2decb4e4 | ||
|
|
99fcd613fe | ||
|
|
c4b8bd8da9 | ||
|
|
309dd5a614 | ||
|
|
1b32ccbe38 | ||
|
|
c482a3ff37 | ||
|
|
f39fd64a5b | ||
|
|
38a13ecd39 | ||
|
|
7d59b45fdb | ||
|
|
c6a6eff7db | ||
|
|
c5575bb300 | ||
|
|
293050bc17 | ||
|
|
f8c9efe230 | ||
|
|
057c418be4 | ||
|
|
0be0ad7ef7 | ||
|
|
eeaa6799fd | ||
|
|
7fd1882dbb | ||
|
|
76c0aed2ad | ||
|
|
b9c331cf99 | ||
|
|
e789504db1 | ||
|
|
e15ebe6a94 | ||
|
|
2b5a49cdc6 | ||
|
|
b50f2cb45e | ||
|
|
7fa9b72144 | ||
|
|
62a361cbe0 | ||
|
|
b881be1cfe | ||
|
|
c230a6ac90 | ||
|
|
82ad2bbd17 | ||
|
|
0d3fd1e943 | ||
|
|
051a329873 | ||
|
|
aa156b2834 | ||
|
|
6d62835734 | ||
|
|
b968ced6e9 | ||
|
|
48dc5d8cc1 | ||
|
|
8186934f72 | ||
|
|
0b758d2ba0 | ||
|
|
bd47c76d26 | ||
|
|
3f0c46d43d | ||
|
|
cd21e90edf | ||
|
|
3d34625399 | ||
|
|
c9c0d11b66 | ||
|
|
8e2fc50746 | ||
|
|
35d026bf38 | ||
|
|
09bf7cb3f0 | ||
|
|
9f0fe29417 | ||
|
|
855fc1e672 | ||
|
|
8dbe59bff7 | ||
|
|
66d327a5d1 | ||
|
|
054bf26b0e | ||
|
|
329e97c8ee | ||
|
|
0bce3238bc | ||
|
|
ac821d92cf | ||
|
|
db412399ba | ||
|
|
7100853a2e | ||
|
|
994e220ebf | ||
|
|
a33add8000 | ||
|
|
231ab0ecd4 | ||
|
|
0b09d38e2e | ||
|
|
0007df1fc1 | ||
|
|
de908efda1 | ||
|
|
3f85b682fb | ||
|
|
05486d6df1 | ||
|
|
e6bf778a65 | ||
|
|
6ecf6c31ba | ||
|
|
130b9d6c4b | ||
|
|
f4a37f6867 | ||
|
|
2a5fcd001e | ||
|
|
b961f01906 | ||
|
|
c0957ebfc3 | ||
|
|
137ea8c30d | ||
|
|
e8a31141fc | ||
|
|
d3ef846b59 | ||
|
|
b5be68f9d0 | ||
|
|
6fd4b5adb1 | ||
|
|
26e8524ae5 | ||
|
|
09b656e37e | ||
|
|
59316f4a21 | ||
|
|
cff51b8ec9 | ||
|
|
e5a9d29215 | ||
|
|
9beefe923f | ||
|
|
009e37d840 | ||
|
|
b06aeeccb1 | ||
|
|
1ba5269779 | ||
|
|
94357b961e | ||
|
|
579d430303 | ||
|
|
7199d37636 | ||
|
|
93080498f6 | ||
|
|
00f3d498a2 | ||
|
|
de84a038d2 | ||
|
|
11e9cd13ae | ||
|
|
9d3785147e | ||
|
|
8e4dc1c2d0 | ||
|
|
2be8df1228 | ||
|
|
9f32747c98 | ||
|
|
acff195fcb | ||
|
|
b4d7d37d9b | ||
|
|
d978f98c23 | ||
|
|
973313e3aa | ||
|
|
fdf09adcd5 | ||
|
|
02e2fa73f5 | ||
|
|
7389bb3f03 | ||
|
|
2949e1125f | ||
|
|
38cbcb33ed | ||
|
|
2e774f0806 | ||
|
|
8987ec6704 | ||
|
|
63f4ec3867 | ||
|
|
d336d7c5c2 | ||
|
|
ebd27cd666 | ||
|
|
b1ae58f968 | ||
|
|
0b40414170 | ||
|
|
acdc0109aa | ||
|
|
b1b67b3238 | ||
|
|
7d7c035b57 | ||
|
|
799a5713c2 | ||
|
|
5dd297bb49 | ||
|
|
5801fd98a4 | ||
|
|
9d3538d587 | ||
|
|
3a961d2de7 | ||
|
|
c2c2e2ccbd | ||
|
|
0740636d53 | ||
|
|
77f9862549 | ||
|
|
e19b52442b | ||
|
|
b04080bcb1 | ||
|
|
04e1837e9e | ||
|
|
ce275837ac | ||
|
|
4c7cd3f2af | ||
|
|
1e0899ee04 | ||
|
|
57cf1dce61 | ||
|
|
1a57c30bae | ||
|
|
cfee47f382 | ||
|
|
962818b0ea | ||
|
|
848373def5 | ||
|
|
bcc5516afe | ||
|
|
411aa119a3 | ||
|
|
d759c6c12d | ||
|
|
0c388615cc | ||
|
|
e30d9fdba3 | ||
|
|
53f520d5c6 | ||
|
|
35252444e1 | ||
|
|
1b6c0ce6b6 | ||
|
|
aa6a651f1d | ||
|
|
7357579af2 | ||
|
|
4a60497d3e | ||
|
|
7a1537e38e | ||
|
|
e67b96780d | ||
|
|
b0abeb49dd | ||
|
|
ef7894fdfa | ||
|
|
be5ea845fc | ||
|
|
1cb586b2e7 | ||
|
|
95935f5944 | ||
|
|
deea791e58 | ||
|
|
d6391de55f | ||
|
|
58de433afa | ||
|
|
cacd7e169c | ||
|
|
bd539797db | ||
|
|
37c83e1c52 | ||
|
|
b3a802a965 | ||
|
|
2d9f0f939c | ||
|
|
ab509a7424 | ||
|
|
52ef7e7cdc | ||
|
|
231078125a | ||
|
|
16d8bd480c | ||
|
|
e282c2dd7e | ||
|
|
ca3a306b30 | ||
|
|
c8537bff48 | ||
|
|
9818cc6461 | ||
|
|
8eb32e4371 | ||
|
|
b1c6f66fc7 | ||
|
|
b8c8797c6e | ||
|
|
385aed85b9 | ||
|
|
d39f4ce54d | ||
|
|
46b83d06cc | ||
|
|
397527eb21 | ||
|
|
ec4bd32169 | ||
|
|
a8c4065dcf | ||
|
|
6940035d78 | ||
|
|
13be4d07a6 | ||
|
|
b5f2d82f49 | ||
|
|
73e7ff7b18 | ||
|
|
89e2be720e | ||
|
|
001e431fa1 | ||
|
|
d42fb02136 | ||
|
|
bb176e4130 | ||
|
|
5de1c298eb | ||
|
|
414ea55ca8 | ||
|
|
e425092d00 | ||
|
|
26e3232f2c | ||
|
|
10d2fdea92 | ||
|
|
7c11e32e1c | ||
|
|
69f5f6c475 | ||
|
|
47759439d7 | ||
|
|
fc8a8d6138 | ||
|
|
4613efe191 | ||
|
|
74e62e38f9 | ||
|
|
dcb79f8c0b | ||
|
|
6ff05715e5 | ||
|
|
fb449ab630 | ||
|
|
32e45107f7 | ||
|
|
a134111f79 | ||
|
|
5ec35496d8 | ||
|
|
f485062677 | ||
|
|
d068ab9722 | ||
|
|
30866dd98b | ||
|
|
e939eeb652 | ||
|
|
22ccfe6442 | ||
|
|
f4a55172da | ||
|
|
686c16fa32 | ||
|
|
743896ff56 | ||
|
|
9937068d41 | ||
|
|
5ee37fde2d | ||
|
|
686a577037 | ||
|
|
b7c2e4c1d6 | ||
|
|
566cd25336 | ||
|
|
6fc3f58cb7 | ||
|
|
8958ea0f2d | ||
|
|
7dd4efad39 | ||
|
|
9485f26e9b | ||
|
|
69c8c0141d | ||
|
|
782e4cba64 | ||
|
|
c9f488f8b8 | ||
|
|
63b18cc902 | ||
|
|
8b41bc6520 | ||
|
|
4a4432af16 | ||
|
|
4c3f55896e | ||
|
|
ecb1732d5b | ||
|
|
78d0857da3 | ||
|
|
df9344c245 | ||
|
|
6b431378a1 | ||
|
|
38a58a17e4 | ||
|
|
d2ecd76646 | ||
|
|
ca5946636f | ||
|
|
6a92368059 | ||
|
|
90681ce475 | ||
|
|
adabaa286f | ||
|
|
840f113a4f | ||
|
|
f82cb325d8 | ||
|
|
347372d5fe | ||
|
|
cf246f206b | ||
|
|
d4988ed182 | ||
|
|
c3c4b5d42b | ||
|
|
8118fd9743 | ||
|
|
0a3133fbcc | ||
|
|
18f388ad76 | ||
|
|
55d1b896fd | ||
|
|
08a104b997 | ||
|
|
be886ef1f6 | ||
|
|
83cccc0af1 | ||
|
|
4c1b9989aa | ||
|
|
5dc6c829b3 | ||
|
|
ce60ef6bff | ||
|
|
e1cbf08a95 | ||
|
|
168d4b5e8d | ||
|
|
b4ab5a5764 | ||
|
|
645ba5728f | ||
|
|
02d653a1aa | ||
|
|
39c7699962 | ||
|
|
9b05804edf | ||
|
|
fe9472ff09 | ||
|
|
79b344bbe4 | ||
|
|
e3f0160e5f | ||
|
|
4d9e8f5f7d | ||
|
|
2429503b21 | ||
|
|
ff4b0de04c | ||
|
|
9078dabc82 | ||
|
|
a18bb02115 | ||
|
|
8ea12f6c5d | ||
|
|
a1b1d5cba1 | ||
|
|
bb4b6df651 | ||
|
|
3568cbef8c | ||
|
|
8382bebcf2 | ||
|
|
02dca4a1a3 | ||
|
|
4dd000ca9e | ||
|
|
297041bfc4 | ||
|
|
52f6e8c59b | ||
|
|
c6ec59be87 | ||
|
|
404f08626b | ||
|
|
6a9629cdc4 | ||
|
|
d6c3c52cec | ||
|
|
52cd280782 | ||
|
|
815febdb39 | ||
|
|
2d76284a8c | ||
|
|
347b0f5389 | ||
|
|
9e9a19a817 | ||
|
|
ddfc3ba696 | ||
|
|
d581f2de64 | ||
|
|
a35798e357 | ||
|
|
0c25465df4 | ||
|
|
906e2c5615 | ||
|
|
3b04b80a94 | ||
|
|
00a175bef7 | ||
|
|
a3a37a1948 | ||
|
|
6527552a62 | ||
|
|
55e2681ad7 | ||
|
|
81257cafa1 | ||
|
|
8964f77978 | ||
|
|
72d480c9dd | ||
|
|
e66c2373a7 | ||
|
|
af38710352 | ||
|
|
d432cb514c | ||
|
|
db4311c655 | ||
|
|
c4d69b662f | ||
|
|
972830a5f3 | ||
|
|
e3c81afb6a | ||
|
|
fe206d53d9 | ||
|
|
096e9346ad | ||
|
|
5f342dcf27 | ||
|
|
e02528280b | ||
|
|
63358c3d34 | ||
|
|
0f5ed9844b | ||
|
|
200de06d1e | ||
|
|
3d1ab26777 | ||
|
|
71295b7658 | ||
|
|
9539c28ef4 | ||
|
|
d8653f97b7 | ||
|
|
a5e6739e16 | ||
|
|
dd7d1d2f8d | ||
|
|
2a747138af | ||
|
|
935c231518 | ||
|
|
10385e9877 | ||
|
|
32027da467 | ||
|
|
3dd583213c | ||
|
|
91f4de2f68 | ||
|
|
4b8acf5c34 | ||
|
|
53e272ab22 | ||
|
|
6decb6f19a | ||
|
|
ce3b8c3d5c | ||
|
|
b86fb133b2 | ||
|
|
6d68ddfcb9 | ||
|
|
827354d3d1 | ||
|
|
81ab56d7ee | ||
|
|
58a7e535dd | ||
|
|
721b464de9 | ||
|
|
accfc3b793 | ||
|
|
80b20ec4c1 | ||
|
|
a355b8019a | ||
|
|
1494e07c34 | ||
|
|
c9cf213afb | ||
|
|
291e052ece | ||
|
|
72deeec81f | ||
|
|
5e6630f042 | ||
|
|
b44aa8b8ea | ||
|
|
ad2d219691 | ||
|
|
986400c8e2 | ||
|
|
48ee225dbe | ||
|
|
9f395318b3 | ||
|
|
3f0051a04f | ||
|
|
8841f91767 | ||
|
|
afc2d13b40 | ||
|
|
45395743fe | ||
|
|
1d1458862b | ||
|
|
92c81cc05d | ||
|
|
60bed60fa9 | ||
|
|
baec410580 | ||
|
|
77e51a39fa | ||
|
|
907f2d6344 | ||
|
|
0a9997ee3a | ||
|
|
ed60adfdc8 | ||
|
|
1406283b63 | ||
|
|
e34d8431da | ||
|
|
09a5c292cd | ||
|
|
9f9ebc99ec | ||
|
|
35ed98ae71 | ||
|
|
8f70e25e12 | ||
|
|
605bbb165a | ||
|
|
54703c9216 | ||
|
|
daf03a6389 | ||
|
|
e67324cac9 | ||
|
|
8ab1abd3b4 | ||
|
|
23731f6561 | ||
|
|
9fe3f49cb4 | ||
|
|
750a31013f | ||
|
|
814385eda9 | ||
|
|
438261b1f9 | ||
|
|
2044496750 | ||
|
|
798793f7f8 | ||
|
|
e799709391 | ||
|
|
2326195eea | ||
|
|
40564464f9 | ||
|
|
54c987ea16 | ||
|
|
a513047e5a | ||
|
|
1c17e43bb7 | ||
|
|
431dc6c1a0 | ||
|
|
8bb559c965 | ||
|
|
50863a9b76 | ||
|
|
a1860bae14 | ||
|
|
fa8267ca09 | ||
|
|
9dae004651 | ||
|
|
f9e163c63a | ||
|
|
e561f87b17 | ||
|
|
48ade9853f | ||
|
|
78621481a6 | ||
|
|
92de37b23a | ||
|
|
35287a2d28 | ||
|
|
360c587086 | ||
|
|
844b86840a | ||
|
|
94f5c04bf3 | ||
|
|
e76f8da482 | ||
|
|
4d1beedd05 | ||
|
|
b3bc109abe | ||
|
|
0b1775746d | ||
|
|
592b10122d | ||
|
|
f1dd722971 | ||
|
|
24c47e17f8 | ||
|
|
8c6e4c6483 | ||
|
|
34b5234e2f | ||
|
|
b05a2b6da2 | ||
|
|
9ed22eafea | ||
|
|
498bdd0491 | ||
|
|
92ac9cc729 | ||
|
|
9c68cd53fc | ||
|
|
3b3fc5d5c1 | ||
|
|
b4e95fe0d5 | ||
|
|
7bd4d32cb3 | ||
|
|
903d7ce614 | ||
|
|
12f3c12070 | ||
|
|
cb281e17e6 | ||
|
|
06b565f3e5 | ||
|
|
798725bb54 | ||
|
|
a3ef91f2ae | ||
|
|
cd28fe69a5 | ||
|
|
f1ead08549 | ||
|
|
6e3fddb544 | ||
|
|
dd2bbc7722 | ||
|
|
a9ce738f68 | ||
|
|
0e219b05e9 | ||
|
|
ea9cf024d5 | ||
|
|
0d1952592e | ||
|
|
43e7ee06fb | ||
|
|
692bfa7cde | ||
|
|
dbcfb7ee9f | ||
|
|
5f80cd3c20 | ||
|
|
eecee94e70 | ||
|
|
f55dc640ec | ||
|
|
a4ac67a1e0 | ||
|
|
14838de344 | ||
|
|
6b6b1c2aa4 | ||
|
|
8662f4550f | ||
|
|
78dba3be3c | ||
|
|
76911a7dc8 | ||
|
|
68de421630 | ||
|
|
ccbe0b0877 | ||
|
|
6a7d2e5252 | ||
|
|
f83a03a3dc | ||
|
|
44fcea0ffa | ||
|
|
c02059c965 | ||
|
|
92d2895d99 | ||
|
|
2b93c76b1d | ||
|
|
8cbaf1e004 | ||
|
|
b4c4d5d70f | ||
|
|
a00d9de400 | ||
|
|
a36ebd130d | ||
|
|
5b1763aa4a | ||
|
|
53c8f61ffc | ||
|
|
b806154e90 | ||
|
|
1be6ace7b5 | ||
|
|
9d9530b01d | ||
|
|
c4838b4af9 | ||
|
|
5ca3ca5189 | ||
|
|
3457844687 | ||
|
|
346e8284c8 | ||
|
|
180a5e79c9 | ||
|
|
377166d822 | ||
|
|
9256248cfd | ||
|
|
e074cffd4f | ||
|
|
30ac3c24c0 | ||
|
|
4c766b8f0e | ||
|
|
e30fad51de | ||
|
|
9734d09ff1 | ||
|
|
0c3f659854 | ||
|
|
2b1c8f64fb | ||
|
|
2cf3a3d0cf | ||
|
|
4105f0027c | ||
|
|
1dc2a7e20a | ||
|
|
d8753ca8d4 | ||
|
|
d68d02b204 | ||
|
|
8e7a51daec | ||
|
|
8b046b9bd7 | ||
|
|
5b19256109 | ||
|
|
79b0bebb78 | ||
|
|
950b7ed6be | ||
|
|
9432cdd37c | ||
|
|
5bd499a9bc | ||
|
|
5506c9e27d | ||
|
|
e07703645e | ||
|
|
3ca6245b00 | ||
|
|
925c6c4c28 | ||
|
|
0588b6f161 | ||
|
|
fee2d50148 | ||
|
|
9a2c8e04a5 | ||
|
|
2517d392a4 | ||
|
|
a0b6663bef | ||
|
|
5fb7b0a74c | ||
|
|
026d04a65f | ||
|
|
94ace70626 | ||
|
|
2d36dc2a04 | ||
|
|
f3819a46e9 | ||
|
|
c66e08041a | ||
|
|
9e9f601690 | ||
|
|
c9bc4f8615 | ||
|
|
34ee8e7079 | ||
|
|
4ab30b8c14 | ||
|
|
3bc6f071cf | ||
|
|
0669121242 | ||
|
|
03c7543060 | ||
|
|
9730992f95 | ||
|
|
6fcb53113a | ||
|
|
5affe42699 | ||
|
|
eef9f5eba5 | ||
|
|
86febeb7ca | ||
|
|
697afaa2cc | ||
|
|
78a5e4d331 | ||
|
|
1a322eeeb8 | ||
|
|
7dbeffd041 | ||
|
|
8dbf855d56 | ||
|
|
dc9d597cd8 | ||
|
|
f771b272e3 | ||
|
|
6c8f716c11 | ||
|
|
d326c17dfb | ||
|
|
0567bfd65d | ||
|
|
008fafbed8 | ||
|
|
c959b236ea | ||
|
|
85b41121de | ||
|
|
7de242b4ee | ||
|
|
27ed3c52e3 | ||
|
|
c4c278fbcb | ||
|
|
5f4f12c27f | ||
|
|
5000c32efe | ||
|
|
5b53994447 | ||
|
|
ba5b5d4596 | ||
|
|
a17a0e9a82 | ||
|
|
0a8d5eb744 | ||
|
|
af8ade0a09 | ||
|
|
b3ba600cf8 | ||
|
|
ce98222eec | ||
|
|
6836e56b24 | ||
|
|
193e40b4c3 | ||
|
|
d1af10fc51 | ||
|
|
968543c66c | ||
|
|
da27ab3d40 | ||
|
|
034ebff42a | ||
|
|
11241e5003 | ||
|
|
b8c2259775 | ||
|
|
1437b77c6c | ||
|
|
ded056d003 | ||
|
|
8830e15526 | ||
|
|
67bdd47015 | ||
|
|
e8382362e5 | ||
|
|
7de68e7052 | ||
|
|
f723333a90 | ||
|
|
d8ada6a6e9 | ||
|
|
1f882d09bf | ||
|
|
ecfb54c668 | ||
|
|
7aeb17986a | ||
|
|
3500dbfa6a | ||
|
|
230a098b7b | ||
|
|
a568965d14 | ||
|
|
c5d5bc9a9c | ||
|
|
1a4af9b3ea | ||
|
|
ea32544e37 | ||
|
|
9b67ffe9d4 | ||
|
|
6fe984fd3c | ||
|
|
98bf4b7b31 | ||
|
|
d7bb131b37 | ||
|
|
01f317bbf3 | ||
|
|
56d8346d65 | ||
|
|
3eb9c9b3ba | ||
|
|
6b42fde028 | ||
|
|
b0b036549a | ||
|
|
eada23d3f6 | ||
|
|
402c6db826 | ||
|
|
5a52286309 | ||
|
|
22ffa41d31 | ||
|
|
e8d6e879c8 | ||
|
|
d4d69e5224 | ||
|
|
f4c0715299 | ||
|
|
2cab7f24ed | ||
|
|
af9a43b4f5 | ||
|
|
dfda7d63f4 | ||
|
|
05bdda036f | ||
|
|
a09cda126b | ||
|
|
9a43b41208 | ||
|
|
b3341999a1 | ||
|
|
69e4cd7c44 | ||
|
|
33423a0508 | ||
|
|
39f3f598a5 | ||
|
|
2c5106fe32 | ||
|
|
699719b600 | ||
|
|
8481ea2306 | ||
|
|
a984464931 | ||
|
|
f3e191988d | ||
|
|
c99f92e9f2 | ||
|
|
a496ae987a | ||
|
|
75036dfa27 | ||
|
|
b35235f1e9 | ||
|
|
eabcf84f0b | ||
|
|
7fc8770027 | ||
|
|
23d647ee51 | ||
|
|
2fd53a7a01 | ||
|
|
3decb8c4d3 | ||
|
|
966afcb787 | ||
|
|
48484732a0 | ||
|
|
3e5e6b10dd | ||
|
|
2d47931cc4 | ||
|
|
c13c3f8012 | ||
|
|
4e4e256a27 | ||
|
|
161380d639 | ||
|
|
5f36b138fb | ||
|
|
024fd958e8 | ||
|
|
a848d92823 | ||
|
|
3696757e8f | ||
|
|
2cabf0a21f | ||
|
|
283ff056da | ||
|
|
9bcd81c8bd | ||
|
|
0ebb400d91 | ||
|
|
fc5544ac70 | ||
|
|
4a7f13c3d8 | ||
|
|
737e4a5bf4 | ||
|
|
d047db108b | ||
|
|
73f5fde99d | ||
|
|
a17ed7981e | ||
|
|
8a5504574d | ||
|
|
8ac35766f3 | ||
|
|
5fd5e235d8 | ||
|
|
8d526b964b | ||
|
|
084906d684 | ||
|
|
79d4f4578d | ||
|
|
785d9b4937 | ||
|
|
0e03c82139 | ||
|
|
84e33f2c57 | ||
|
|
a6408c0c56 | ||
|
|
915ef6a8d5 | ||
|
|
684f9fd175 | ||
|
|
e276ebbc27 | ||
|
|
0988e62418 | ||
|
|
bbc8c8a533 | ||
|
|
082e9458e5 | ||
|
|
0a17358352 | ||
|
|
3a2bdd83f8 | ||
|
|
625424de68 | ||
|
|
0d71293fca | ||
|
|
b6128dc54e | ||
|
|
919ba7ed93 | ||
|
|
f80788147c | ||
|
|
eb7deedd65 | ||
|
|
eb8347bcc1 | ||
|
|
48752a762c | ||
|
|
42a405355f | ||
|
|
b921aed073 | ||
|
|
73b8c3df55 | ||
|
|
1b92f4a97e | ||
|
|
c8a491ed7f | ||
|
|
da4361583b | ||
|
|
0087296bd3 | ||
|
|
6221b7bf4a | ||
|
|
f977edabb2 | ||
|
|
980ffab600 | ||
|
|
a34d36c5d2 | ||
|
|
b2a0b69ed5 | ||
|
|
2315a127ea | ||
|
|
1c1ff64c67 | ||
|
|
9e2a129854 | ||
|
|
a475af1974 | ||
|
|
4264380e15 | ||
|
|
676aa1a05b | ||
|
|
94c06bbdd2 | ||
|
|
1c600b8846 | ||
|
|
7dd9007607 | ||
|
|
e71ad53b0e | ||
|
|
a92687d3e8 | ||
|
|
2aac9c71fc | ||
|
|
ceac86b58f | ||
|
|
3fb8a576a0 | ||
|
|
c786b9e45e | ||
|
|
68fcd67327 | ||
|
|
a54fa57136 | ||
|
|
343a6a159f | ||
|
|
dc2a680a29 | ||
|
|
72fce08e87 | ||
|
|
b60934629e | ||
|
|
e59f115311 | ||
|
|
19dd92e6c7 | ||
|
|
aab390edb6 | ||
|
|
0c11068129 | ||
|
|
ad804f6d3f | ||
|
|
de43eb1e3d | ||
|
|
5d9daa9367 | ||
|
|
0d9e424ede | ||
|
|
603dc0fad6 | ||
|
|
0cf03baa78 | ||
|
|
ba3af25423 | ||
|
|
a084c62e3f | ||
|
|
b429af8ff2 | ||
|
|
287f383f6c | ||
|
|
aefb24082d | ||
|
|
dee0144c7c | ||
|
|
6ca4813247 | ||
|
|
a717cb99a3 | ||
|
|
8551dfb297 | ||
|
|
6a5bbd63a3 | ||
|
|
ca0b2937b9 | ||
|
|
948d507909 | ||
|
|
037324d850 | ||
|
|
6006303409 | ||
|
|
d1b1841034 | ||
|
|
bc70a24e1d | ||
|
|
acc2e84eda | ||
|
|
4f23dd2dd6 | ||
|
|
3a5f68e4d1 | ||
|
|
d30a948be0 | ||
|
|
dad5db4e9b | ||
|
|
d356cef183 |
@@ -1,34 +1,114 @@
|
|||||||
version: 2
|
version: 2.1
|
||||||
jobs:
|
|
||||||
build:
|
commands:
|
||||||
machine: true
|
init-tests:
|
||||||
parallelism: 4
|
description: "Setup dokku for testing"
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: |
|
- attach_workspace:
|
||||||
make ci-dependencies
|
at: /home/circleci/project
|
||||||
- run: |
|
|
||||||
./tests/ci/setup.sh
|
|
||||||
- run: |
|
|
||||||
echo 'export DOKKU_SKIP_CLEANUP=true' | sudo tee /home/dokku/.dokkurc/dokku_skip_cleanup
|
|
||||||
- run: |
|
|
||||||
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to eth0
|
|
||||||
sudo ip a a 10.0.0.2/24 broadcast 10.0.0.255 dev eth0
|
|
||||||
- run: |
|
|
||||||
case $CIRCLE_NODE_INDEX in
|
|
||||||
0) sudo -E make -e lint go-tests ci-go-coverage ;;
|
|
||||||
1) sudo -E make -e deploy-test-checks-root deploy-test-config ;;
|
|
||||||
2) sudo -E make -e deploy-test-multi ;;
|
|
||||||
3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;;
|
|
||||||
esac
|
|
||||||
- run:
|
- run:
|
||||||
|
name: resolve dokku.me
|
||||||
|
command: |
|
||||||
|
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to ens4
|
||||||
|
# this is maybe eth0 on github
|
||||||
|
ifconfig
|
||||||
|
sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev ens4
|
||||||
|
- run:
|
||||||
|
name: install ci-dependencies
|
||||||
|
command: make ci-dependencies
|
||||||
|
- run:
|
||||||
|
name: setup tests
|
||||||
|
command: ./tests/ci/setup.sh
|
||||||
|
- run:
|
||||||
|
name: dokku cleanup:skip
|
||||||
|
command: echo 'export DOKKU_SKIP_CLEANUP=true' | sudo tee /home/dokku/.dokkurc/dokku_skip_cleanup
|
||||||
|
- run:
|
||||||
|
name: dokku report
|
||||||
|
command: dokku report
|
||||||
|
|
||||||
|
executors:
|
||||||
|
default:
|
||||||
|
machine:
|
||||||
|
image: ubuntu-1604:201903-01
|
||||||
|
working_directory: /home/circleci/project
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
executor: default
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
name: build package
|
||||||
|
command: ./tests/ci/setup.sh build
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /home/circleci/project
|
||||||
|
paths:
|
||||||
|
- build
|
||||||
|
- store_artifacts:
|
||||||
|
path: /home/circleci/project/build/dokku.deb
|
||||||
|
- store_artifacts:
|
||||||
|
path: /home/circleci/project/build/dokku.rpm
|
||||||
|
docker-deploy-tests:
|
||||||
|
executor: default
|
||||||
|
steps:
|
||||||
|
- init-tests
|
||||||
|
- run:
|
||||||
|
name: run docker deploy tests
|
||||||
shell: /bin/bash
|
shell: /bin/bash
|
||||||
command: sudo -E make -e test-ci
|
no_output_timeout: 20
|
||||||
no_output_timeout: 60m
|
command: |
|
||||||
|
./tests/ci/setup.sh docker
|
||||||
|
DOKKU_SSH_PORT=3022 sudo -E make -e test-ci-docker
|
||||||
|
go-tests:
|
||||||
|
executor: default
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- init-tests
|
||||||
|
- run:
|
||||||
|
name: run go tests
|
||||||
|
command: |
|
||||||
|
case $CIRCLE_NODE_INDEX in
|
||||||
|
0) sudo -E make -e lint-ci go-tests ci-go-coverage ;;
|
||||||
|
1) sudo -E make -e deploy-test-checks-root deploy-test-config ;;
|
||||||
|
2) sudo -E make -e deploy-test-multi ;;
|
||||||
|
3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;;
|
||||||
|
esac
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: ./coverage.out
|
path: ./coverage.out
|
||||||
|
test:
|
||||||
|
executor: default
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- init-tests
|
||||||
|
- run:
|
||||||
|
name: run bats tests
|
||||||
|
command: |
|
||||||
|
sudo -E make -e test-ci
|
||||||
|
no_output_timeout: 60m
|
||||||
|
shell: /bin/bash
|
||||||
|
- run:
|
||||||
|
name: output oomkills
|
||||||
|
command: cat /var/log/syslog
|
||||||
|
when: on_fail
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: ./test-results
|
path: ./test-results
|
||||||
destination: test-results
|
destination: test-results
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: test-results
|
path: test-results
|
||||||
|
|
||||||
|
workflows:
|
||||||
|
workflow:
|
||||||
|
jobs:
|
||||||
|
- build
|
||||||
|
- docker-deploy-tests:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- test
|
||||||
|
- go-tests:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- test:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- go-tests
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ contrib
|
|||||||
build
|
build
|
||||||
docs
|
docs
|
||||||
tests
|
tests
|
||||||
|
!build/dokku.deb
|
||||||
|
!tests/dhparam.pem
|
||||||
!contrib/dokku-installer.py
|
!contrib/dokku-installer.py
|
||||||
!contrib/dokku-update
|
!contrib/dokku-update
|
||||||
!contrib/bash-completion
|
!contrib/bash-completion
|
||||||
|
!contrib/docker
|
||||||
|
vendor
|
||||||
|
|||||||
68
.github/workflows/codeql-analysis.yml
vendored
Normal file
68
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
# ******** NOTE ********
|
||||||
|
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '18 22 * * 2'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'go' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
linters:
|
linters:
|
||||||
shellcheck:
|
shellcheck:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -5,6 +6,8 @@ linters:
|
|||||||
golint:
|
golint:
|
||||||
|
|
||||||
files:
|
files:
|
||||||
ignore:
|
ignore:
|
||||||
- './debian/*'
|
- 'debian/*'
|
||||||
- '*/vendor/*'
|
- 'docs/*'
|
||||||
|
- 'tests/*'
|
||||||
|
- '*/vendor/*'
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as
|
|
||||||
contributors and maintainers pledge to making participation in our project and
|
|
||||||
our community a harassment-free experience for everyone, regardless of age, body
|
|
||||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
|
||||||
nationality, personal appearance, race, religion, or sexual identity and
|
|
||||||
orientation.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment
|
|
||||||
include:
|
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
|
||||||
* Being respectful of differing viewpoints and experiences
|
|
||||||
* Gracefully accepting constructive criticism
|
|
||||||
* Focusing on what is best for the community
|
|
||||||
* Showing empathy towards other community members
|
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
|
||||||
advances
|
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
|
||||||
* Publishing others' private information, such as a physical or electronic
|
|
||||||
address, without explicit permission
|
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
|
||||||
professional setting
|
|
||||||
|
|
||||||
## Our Responsibilities
|
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable
|
|
||||||
behavior and are expected to take appropriate and fair corrective action in
|
|
||||||
response to any instances of unacceptable behavior.
|
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or
|
|
||||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
||||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
|
||||||
permanently any contributor for other behaviors that they deem inappropriate,
|
|
||||||
threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces
|
|
||||||
when an individual is representing the project or its community. Examples of
|
|
||||||
representing a project or community include using an official project e-mail
|
|
||||||
address, posting via an official social media account, or acting as an appointed
|
|
||||||
representative at an online or offline event. Representation of a project may be
|
|
||||||
further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported by contacting the project team at dokku@josediazgonzalez.com. All
|
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
|
||||||
is deemed necessary and appropriate to the circumstances. The project team is
|
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
|
||||||
Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
|
||||||
faith may face temporary or permanent repercussions as determined by other
|
|
||||||
members of the project's leadership.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
|
||||||
available at [http://contributor-covenant.org/version/1/4][version]
|
|
||||||
|
|
||||||
[homepage]: http://contributor-covenant.org
|
|
||||||
[version]: http://contributor-covenant.org/version/1/4/
|
|
||||||
56
Dockerfile
Normal file
56
Dockerfile
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
FROM phusion/baseimage:0.11
|
||||||
|
|
||||||
|
CMD ["/sbin/my_init"]
|
||||||
|
|
||||||
|
ARG DOKKU_TAG=0.17.7
|
||||||
|
ARG DOKKU_GID=200
|
||||||
|
ARG DOKKU_UID=200
|
||||||
|
ARG DOKKU_HOSTNAME=dokku.invalid
|
||||||
|
ARG DOKKU_SKIP_KEY_FILE=true
|
||||||
|
ARG DOKKU_VHOST_ENABLE=false
|
||||||
|
ARG DOKKU_WEB_CONFIG=false
|
||||||
|
|
||||||
|
RUN addgroup --gid $DOKKU_GID dokku \
|
||||||
|
&& adduser --uid $DOKKU_UID --gid $DOKKU_GID --disabled-password --gecos "" "dokku"
|
||||||
|
|
||||||
|
COPY ./tests/dhparam.pem /tmp/dhparam.pem
|
||||||
|
COPY ./build/dokku.deb /tmp/dokku.deb
|
||||||
|
RUN echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \
|
||||||
|
&& echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \
|
||||||
|
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
|
||||||
|
&& echo "dokku dokku/web_config boolean $DOKKU_WEB_CONFIG" | debconf-set-selections \
|
||||||
|
&& curl -sSL https://packagecloud.io/dokku/dokku/gpgkey | apt-key add - \
|
||||||
|
&& echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ bionic main" | tee /etc/apt/sources.list.d/dokku.list \
|
||||||
|
&& mkdir -p /etc/nginx/ \
|
||||||
|
&& cp /tmp/dhparam.pem /etc/nginx/dhparam.pem \
|
||||||
|
&& apt-get update -qq \
|
||||||
|
&& apt-get upgrade -qq -y \
|
||||||
|
&& apt-get install --no-install-recommends --only-upgrade -qq -y openssl openssh-server \
|
||||||
|
&& apt install --no-install-recommends -qq -y rsync /tmp/dokku.deb \
|
||||||
|
&& apt-get purge -qq -y syslog-ng-core \
|
||||||
|
&& apt-get autoremove -qq -y \
|
||||||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
WORKDIR /tmp
|
||||||
|
|
||||||
|
COPY ./docker .
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
rsync -a /tmp/ / \
|
||||||
|
&& rm -rf /tmp/* \
|
||||||
|
&& rm /etc/runit/runsvdir/default/sshd/down \
|
||||||
|
&& chown -R dokku:dokku /home/dokku/ \
|
||||||
|
&& mkdir -p /skel/etc /skel/home /skel/var/lib/dokku /var/log/services \
|
||||||
|
&& mv /etc/ssh /skel/etc/ssh \
|
||||||
|
&& mv /home/dokku /skel/home/dokku \
|
||||||
|
&& mv /var/lib/dokku/config /skel/var/lib/dokku/config \
|
||||||
|
&& mv /var/lib/dokku/data /skel/var/lib/dokku/data \
|
||||||
|
&& ln -sf /mnt/dokku/etc/ssh /etc/ssh \
|
||||||
|
&& ln -sf /mnt/dokku/home/dokku /home/dokku \
|
||||||
|
&& ln -sf /mnt/dokku/var/lib/dokku/config /var/lib/dokku/config \
|
||||||
|
&& ln -sf /mnt/dokku/var/lib/dokku/data /var/lib/dokku/data \
|
||||||
|
&& mv /etc/my_init.d/00_regen_ssh_host_keys.sh /etc/my_init.d/15_regen_ssh_host_keys \
|
||||||
|
&& rm -f /etc/nginx/sites-enabled/default /usr/share/nginx/html/index.html /etc/my_init.d/10_syslog-ng.init \
|
||||||
|
&& rm -f /usr/local/openresty/nginx/conf/sites-enabled/default /usr/share/openresty/html/index.html \
|
||||||
|
&& sed -i '/imklog/d' /etc/rsyslog.conf \
|
||||||
|
&& rm -f /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/* /var/log/nginx/* /var/log/openresty/*
|
||||||
1079
HISTORY.md
1079
HISTORY.md
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,10 @@
|
|||||||
> If you're using Dokku - especially for commercial purposes - consider donating to project development via [OpenCollective](https://opencollective.com/dokku) or [Patreon](https://www.patreon.com/dokku). Funds go to general development, support, and infrastructure costs.
|
> If you're using Dokku - especially for commercial purposes - consider donating to project development via [OpenCollective](https://opencollective.com/dokku) or [Patreon](https://www.patreon.com/dokku). Funds go to general development, support, and infrastructure costs.
|
||||||
>
|
>
|
||||||
|
> If you'd like to sponsor specific functionality, see the project's [Sponsoring](https://github.com/dokku/.github/blob/master/SPONSORING.md) document.
|
||||||
|
>
|
||||||
> If you need help figuring out how to use a specific buildpack, or are having issues using multiple buildpacks, please see our [irc or slack channels](http://dokku.viewdocs.io/dokku/getting-started/where-to-get-help/#the-irc-and-slack-channels). Issues pertaining to buildpacks may be closed and locked.
|
> If you need help figuring out how to use a specific buildpack, or are having issues using multiple buildpacks, please see our [irc or slack channels](http://dokku.viewdocs.io/dokku/getting-started/where-to-get-help/#the-irc-and-slack-channels). Issues pertaining to buildpacks may be closed and locked.
|
||||||
|
>
|
||||||
|
> If you need support for a version of Dokku that is more than a year old, your issue may be closed without an answer. Please upgrade to a recent version.
|
||||||
|
|
||||||
## Description of problem
|
## Description of problem
|
||||||
|
|
||||||
@@ -16,6 +20,8 @@
|
|||||||
|
|
||||||
#### Expected Results
|
#### Expected Results
|
||||||
|
|
||||||
|
<-- Please replace APP_NAME with the name of your app -->
|
||||||
|
|
||||||
## Environment Information
|
## Environment Information
|
||||||
|
|
||||||
### `dokku report APP_NAME` output
|
### `dokku report APP_NAME` output
|
||||||
@@ -23,16 +29,14 @@
|
|||||||
> This is required! Issues missing this information may be closed.
|
> This is required! Issues missing this information may be closed.
|
||||||
>
|
>
|
||||||
> For problems affecting all applications, the report output for a broken application is useful for our debugging.
|
> For problems affecting all applications, the report output for a broken application is useful for our debugging.
|
||||||
> You may also run `dokku report` without any arguments to display the top-level reporting information.
|
> In these cases, you may run `dokku report` without any arguments to display the top-level reporting information.
|
||||||
|
|
||||||
### How (deb/make/rpm) and where (AWS, VirtualBox, physical, etc.) was Dokku installed?:
|
### How (deb/make/rpm) and where (AWS, VirtualBox, physical, etc.) was Dokku installed?:
|
||||||
|
|
||||||
### Additional information
|
### Additional information
|
||||||
|
|
||||||
- Container Inspect Output (if applicable):
|
- Container Inspect Output (if applicable) via `dokku ps:inspect APP_NAME`
|
||||||
- 0.13.0+: `dokku inspect APP_NAME`
|
- The nginx configuration (if applicable) via `dokku nginx:show-config APP_NAME`
|
||||||
- <0.13.0: `docker inspect CONTAINER_ID`: WARNING, `docker inspect` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXXX.
|
|
||||||
- `cat /home/dokku/<app>/nginx.conf` (if applicable):
|
|
||||||
- Link to the exact repository being deployed (if possible/applicable):
|
- Link to the exact repository being deployed (if possible/applicable):
|
||||||
- If a deploy is failing or behaving unexpectedly:
|
- If a deploy is failing or behaving unexpectedly:
|
||||||
- Application name
|
- Application name
|
||||||
@@ -40,5 +44,5 @@
|
|||||||
- If using buildpacks, which custom buildpacks are in use
|
- If using buildpacks, which custom buildpacks are in use
|
||||||
- If using a `Dockerfile`, the contents of that file
|
- If using a `Dockerfile`, the contents of that file
|
||||||
- If it exists, the contents of your `Procfile`.
|
- If it exists, the contents of your `Procfile`.
|
||||||
- Output of failing Dokku commands after running `dokku trace on`
|
- Output of failing Dokku commands after running `dokku trace:on`
|
||||||
(BEWARE: `trace on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXXX):
|
(BEWARE: `trace:on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXX):
|
||||||
|
|||||||
32
Makefile
32
Makefile
@@ -1,11 +1,14 @@
|
|||||||
DOKKU_VERSION ?= master
|
DOKKU_VERSION ?= master
|
||||||
|
|
||||||
PROCFILE_VERSION ?= 0.6.0
|
HEROKUISH_VERSION ?= 0.5.19
|
||||||
PLUGN_VERSION ?= 0.3.2
|
PROCFILE_VERSION ?= 0.11.0
|
||||||
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/dokku/sshcommand/v0.7.0/sshcommand
|
PLUGN_VERSION ?= 0.5.0
|
||||||
|
SIGIL_VERSION ?= 0.6.0
|
||||||
|
SSHCOMMAND_VERSION ?= 0.11.0
|
||||||
|
SSHCOMMAND_URL ?= https://github.com/dokku/sshcommand/releases/download/v${SSHCOMMAND_VERSION}/sshcommand_${SSHCOMMAND_VERSION}_linux_x86_64.tgz
|
||||||
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_x86_64.tgz
|
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_x86_64.tgz
|
||||||
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_x86_64.tgz
|
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_x86_64.tgz
|
||||||
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v0.4.0/sigil_0.4.0_Linux_x86_64.tgz
|
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/sigil_${SIGIL_VERSION}_Linux_x86_64.tgz
|
||||||
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
||||||
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
|
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
|
||||||
DOKKU_LIB_ROOT ?= /var/lib/dokku
|
DOKKU_LIB_ROOT ?= /var/lib/dokku
|
||||||
@@ -107,10 +110,11 @@ addman: help2man man-db
|
|||||||
mandb
|
mandb
|
||||||
|
|
||||||
version:
|
version:
|
||||||
|
mkdir -p ${DOKKU_LIB_ROOT}
|
||||||
ifeq ($(DOKKU_VERSION),master)
|
ifeq ($(DOKKU_VERSION),master)
|
||||||
git describe --tags > ~dokku/VERSION 2>/dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ~dokku/VERSION
|
git describe --tags > ${DOKKU_LIB_ROOT}/VERSION 2>/dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ${DOKKU_LIB_ROOT}/VERSION
|
||||||
else
|
else
|
||||||
echo $(DOKKU_VERSION) > ~dokku/VERSION
|
echo $(DOKKU_VERSION) > ${DOKKU_LIB_ROOT}/STABLE_VERSION
|
||||||
endif
|
endif
|
||||||
|
|
||||||
plugin-dependencies: plugn procfile-util
|
plugin-dependencies: plugn procfile-util
|
||||||
@@ -119,12 +123,18 @@ plugin-dependencies: plugn procfile-util
|
|||||||
plugins: plugn procfile-util docker
|
plugins: plugn procfile-util docker
|
||||||
sudo -E dokku plugin:install --core
|
sudo -E dokku plugin:install --core
|
||||||
|
|
||||||
dependencies: apt-update sshcommand plugn procfile-util docker help2man man-db sigil
|
dependencies: apt-update sshcommand plugn procfile-util docker help2man man-db sigil dos2unix jq
|
||||||
$(MAKE) -e stack
|
$(MAKE) -e stack
|
||||||
|
|
||||||
apt-update:
|
apt-update:
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
|
|
||||||
|
jq:
|
||||||
|
apt-get install -qq -y jq
|
||||||
|
|
||||||
|
dos2unix:
|
||||||
|
apt-get install -qq -y dos2unix
|
||||||
|
|
||||||
help2man:
|
help2man:
|
||||||
apt-get install -qq -y help2man
|
apt-get install -qq -y help2man
|
||||||
|
|
||||||
@@ -132,8 +142,8 @@ man-db:
|
|||||||
apt-get install -qq -y man-db
|
apt-get install -qq -y man-db
|
||||||
|
|
||||||
sshcommand:
|
sshcommand:
|
||||||
wget -qO /usr/local/bin/sshcommand ${SSHCOMMAND_URL}
|
wget -qO /tmp/sshcommand_latest.tgz ${SSHCOMMAND_URL}
|
||||||
chmod +x /usr/local/bin/sshcommand
|
tar xzf /tmp/sshcommand_latest.tgz -C /usr/local/bin
|
||||||
sshcommand create dokku /usr/local/bin/dokku
|
sshcommand create dokku /usr/local/bin/dokku
|
||||||
|
|
||||||
procfile-util:
|
procfile-util:
|
||||||
@@ -150,7 +160,7 @@ sigil:
|
|||||||
|
|
||||||
docker:
|
docker:
|
||||||
apt-get install -qq -y curl
|
apt-get install -qq -y curl
|
||||||
egrep -i "^docker" /etc/group || groupadd docker
|
grep -i -E "^docker" /etc/group || groupadd docker
|
||||||
usermod -aG docker dokku
|
usermod -aG docker dokku
|
||||||
ifndef CI
|
ifndef CI
|
||||||
wget -nv -O - https://get.docker.com/ | sh
|
wget -nv -O - https://get.docker.com/ | sh
|
||||||
@@ -166,7 +176,7 @@ ifdef BUILD_STACK
|
|||||||
@echo "Start building herokuish from source"
|
@echo "Start building herokuish from source"
|
||||||
docker images | grep gliderlabs/herokuish || (git clone ${STACK_URL} /tmp/herokuish && cd /tmp/herokuish && IMAGE_NAME=gliderlabs/herokuish BUILD_TAG=latest VERSION=master make -e ${BUILD_STACK_TARGETS} && rm -rf /tmp/herokuish)
|
docker images | grep gliderlabs/herokuish || (git clone ${STACK_URL} /tmp/herokuish && cd /tmp/herokuish && IMAGE_NAME=gliderlabs/herokuish BUILD_TAG=latest VERSION=master make -e ${BUILD_STACK_TARGETS} && rm -rf /tmp/herokuish)
|
||||||
else
|
else
|
||||||
ifeq ($(shell echo ${PREBUILT_STACK_URL} | egrep -q 'http.*://|file://' && echo $$?),0)
|
ifeq ($(shell echo ${PREBUILT_STACK_URL} | grep -q -E 'http.*://|file://' && echo $$?),0)
|
||||||
@echo "Start importing herokuish from ${PREBUILT_STACK_URL}"
|
@echo "Start importing herokuish from ${PREBUILT_STACK_URL}"
|
||||||
docker images | grep gliderlabs/herokuish || wget -nv -O - ${PREBUILT_STACK_URL} | gunzip -cd | docker import - gliderlabs/herokuish
|
docker images | grep gliderlabs/herokuish || wget -nv -O - ${PREBUILT_STACK_URL} | gunzip -cd | docker import - gliderlabs/herokuish
|
||||||
else
|
else
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -13,8 +13,6 @@ Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
|
|||||||
|
|
||||||
## Sponsors
|
## Sponsors
|
||||||
|
|
||||||
See our list of past sponsors in the [SPONSORS](https://github.com/dokku/dokku/blob/master/SPONSORS.md) file.
|
|
||||||
|
|
||||||
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/dokku#sponsor)]
|
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/dokku#sponsor)]
|
||||||
|
|
||||||
<a href="https://opencollective.com/dokku/sponsor/0/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/0/avatar.svg"></a>
|
<a href="https://opencollective.com/dokku/sponsor/0/website" target="_blank"><img src="https://opencollective.com/dokku/sponsor/0/avatar.svg"></a>
|
||||||
@@ -88,18 +86,21 @@ Support us with a monthly donation and help us continue our activities. [[Become
|
|||||||
|
|
||||||
A fresh VM running any of the following operating systems:
|
A fresh VM running any of the following operating systems:
|
||||||
|
|
||||||
- Ubuntu x64 - Any currently supported release
|
- Ubuntu 16.04/18.04/20.04 x64 - Any currently supported release
|
||||||
- Debian 8.2+ x64
|
- Debian 9+ x64
|
||||||
- CentOS 7 x64 *(experimental)*
|
- CentOS 7 x64 *(experimental)*
|
||||||
- Arch Linux x64 *(experimental)*
|
- Arch Linux x64 *(experimental)*
|
||||||
|
|
||||||
|
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
|
||||||
|
Otherwise, you will need to import the keypair manually after installation using `dokku ssh-keys:add`.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.2/bootstrap.sh
|
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.0/bootstrap.sh
|
||||||
sudo DOKKU_TAG=v0.16.2 bash bootstrap.sh
|
sudo DOKKU_TAG=v0.22.0 bash bootstrap.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then proceed to the ip address or domain name associated with your server to complete the web-based installation.
|
You can then proceed to the ip address or domain name associated with your server to complete the web-based installation.
|
||||||
|
|||||||
6
Vagrantfile
vendored
6
Vagrantfile
vendored
@@ -53,7 +53,7 @@ Vagrant::configure("2") do |config|
|
|||||||
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
|
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
|
||||||
end
|
end
|
||||||
|
|
||||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update >/dev/null && apt-get -qq -y install git >/dev/null && cd /root/dokku && #{make_cmd}"
|
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update >/dev/null && apt-get -qq -y install git build-essential >/dev/null && cd /root/dokku && #{make_cmd}"
|
||||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make dokku-installer"
|
vm.vm.provision :shell, :inline => "cd /root/dokku && make dokku-installer"
|
||||||
vm.vm.provision :shell do |s|
|
vm.vm.provision :shell do |s|
|
||||||
s.inline = <<-EOT
|
s.inline = <<-EOT
|
||||||
@@ -103,7 +103,9 @@ Vagrant::configure("2") do |config|
|
|||||||
config.vm.define "build-arch", autostart: false do |vm|
|
config.vm.define "build-arch", autostart: false do |vm|
|
||||||
vm.vm.box = "bugyt/archlinux"
|
vm.vm.box = "bugyt/archlinux"
|
||||||
vm.vm.synced_folder File.dirname(__FILE__), "/dokku"
|
vm.vm.synced_folder File.dirname(__FILE__), "/dokku"
|
||||||
vm.vm.synced_folder "#{File.dirname(__FILE__)}/../dokku-arch", "/dokku-arch"
|
if Pathname.new("#{File.dirname(__FILE__)}/../dokku-arch").exist?
|
||||||
|
vm.vm.synced_folder "#{File.dirname(__FILE__)}/../dokku-arch", "/dokku-arch"
|
||||||
|
end
|
||||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
vm.vm.network :private_network, ip: DOKKU_IP
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
|
|||||||
49
bootstrap.sh
49
bootstrap.sh
@@ -3,7 +3,7 @@ set -eo pipefail
|
|||||||
[[ $TRACE ]] && set -x
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
# A script to bootstrap dokku.
|
# A script to bootstrap dokku.
|
||||||
# It expects to be run on Ubuntu 14.04 via 'sudo'
|
# It expects to be run on Ubuntu 16.04/18.04/20.04, or CentOS 7 via 'sudo'
|
||||||
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
|
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
|
||||||
# It checks out the dokku source code from Github into ~/dokku and then runs 'make install' from dokku source.
|
# It checks out the dokku source code from Github into ~/dokku and then runs 'make install' from dokku source.
|
||||||
|
|
||||||
@@ -12,19 +12,26 @@ set -eo pipefail
|
|||||||
# That's good because it prevents our output overlapping with wget's.
|
# That's good because it prevents our output overlapping with wget's.
|
||||||
# It also means that we can't run a partially downloaded script.
|
# It also means that we can't run a partially downloaded script.
|
||||||
|
|
||||||
|
SUPPORTED_VERSIONS="Debian [9, 10], CentOS [7], Ubuntu [16.04, 18.04, 20.04]"
|
||||||
|
|
||||||
|
log-fail() {
|
||||||
|
declare desc="log fail formatter"
|
||||||
|
echo "$@" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
ensure-environment() {
|
ensure-environment() {
|
||||||
local FREE_MEMORY
|
local FREE_MEMORY
|
||||||
echo "Preparing to install $DOKKU_TAG from $DOKKU_REPO..."
|
echo "Preparing to install $DOKKU_TAG from $DOKKU_REPO..."
|
||||||
|
|
||||||
hostname -f >/dev/null 2>&1 || {
|
hostname -f >/dev/null 2>&1 || {
|
||||||
echo "This installation script requires that you have a hostname set for the instance. Please set a hostname for 127.0.0.1 in your /etc/hosts"
|
log-fail "This installation script requires that you have a hostname set for the instance. Please set a hostname for 127.0.0.1 in your /etc/hosts"
|
||||||
exit 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FREE_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
FREE_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||||||
if [[ "$FREE_MEMORY" -lt 1003600 ]]; then
|
if [[ "$FREE_MEMORY" -lt 1003600 ]]; then
|
||||||
echo "For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory"
|
echo "For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory"
|
||||||
echo "If necessary, please consult this document to setup swap: http://dokku.viewdocs.io/dokku/advanced-installation/#vms-with-less-than-1gb-of-memory"
|
echo "If necessary, please consult this document to setup swap: http://dokku.viewdocs.io/dokku/getting-started/advanced-installation/#vms-with-less-than-1-gb-of-memory"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,11 +97,10 @@ install-dokku-from-source() {
|
|||||||
local DOKKU_CHECKOUT="$1"
|
local DOKKU_CHECKOUT="$1"
|
||||||
|
|
||||||
if ! command -v apt-get &>/dev/null; then
|
if ! command -v apt-get &>/dev/null; then
|
||||||
echo "This installation script requires apt-get. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
|
log-fail "This installation script requires apt-get. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
apt-get -qq -y install git make software-properties-common
|
apt-get -qq -y install sudo git make software-properties-common
|
||||||
cd /root
|
cd /root
|
||||||
if [[ ! -d /root/dokku ]]; then
|
if [[ ! -d /root/dokku ]]; then
|
||||||
git clone "$DOKKU_REPO" /root/dokku
|
git clone "$DOKKU_REPO" /root/dokku
|
||||||
@@ -115,8 +121,7 @@ install-dokku-from-package() {
|
|||||||
install-dokku-from-rpm-package "$@"
|
install-dokku-from-rpm-package "$@"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unsupported Linux distribution. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
|
log-fail "Unsupported Linux distribution. For manual installation instructions, consult http://dokku.viewdocs.io/dokku/advanced-installation/"
|
||||||
exit 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -136,6 +141,10 @@ install-dokku-from-deb-package() {
|
|||||||
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
||||||
local OS_ID
|
local OS_ID
|
||||||
|
|
||||||
|
if ! in-array "$DOKKU_DISTRO_VERSION" "16.04" "18.04" "20.04" "9" "10"; then
|
||||||
|
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n $DOKKU_DOCKERFILE ]]; then
|
if [[ -n $DOKKU_DOCKERFILE ]]; then
|
||||||
NO_INSTALL_RECOMMENDS=" --no-install-recommends "
|
NO_INSTALL_RECOMMENDS=" --no-install-recommends "
|
||||||
fi
|
fi
|
||||||
@@ -156,26 +165,21 @@ install-dokku-from-deb-package() {
|
|||||||
wget -nv -O - https://get.docker.com/ | sh
|
wget -nv -O - https://get.docker.com/ | sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$DOKKU_DISTRO_VERSION" == "14.04" ]]; then
|
OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")"
|
||||||
echo "--> Adding nginx PPA"
|
|
||||||
add-apt-repository -y ppa:nginx/stable
|
|
||||||
fi
|
|
||||||
|
|
||||||
OS_ID="$(lsb_release -cs 2>/dev/null || echo "trusty")"
|
|
||||||
if ! in-array "$DOKKU_DISTRO" "debian" "ubuntu"; then
|
if ! in-array "$DOKKU_DISTRO" "debian" "ubuntu"; then
|
||||||
DOKKU_DISTRO="ubuntu"
|
DOKKU_DISTRO="ubuntu"
|
||||||
OS_ID="trusty"
|
OS_ID="bionic"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then
|
if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then
|
||||||
OS_IDS=("trusty" "utopic" "vivid" "wily" "xenial" "yakkety" "zesty" "artful" "bionic")
|
OS_IDS=("xenial" "bionic" "focal")
|
||||||
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
OS_ID="trusty"
|
OS_ID="bionic"
|
||||||
fi
|
fi
|
||||||
elif [[ "$DOKKU_DISTRO" == "debian" ]]; then
|
elif [[ "$DOKKU_DISTRO" == "debian" ]]; then
|
||||||
OS_IDS=("wheezy" "jessie" "stretch" "buster")
|
OS_IDS=("stretch" "buster")
|
||||||
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
OS_ID="stretch"
|
OS_ID="buster"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -203,9 +207,8 @@ install-dokku-from-deb-package() {
|
|||||||
install-dokku-from-rpm-package() {
|
install-dokku-from-rpm-package() {
|
||||||
local DOKKU_CHECKOUT="$1"
|
local DOKKU_CHECKOUT="$1"
|
||||||
|
|
||||||
if [[ "$DOKKU_DISTRO_VERSION" != "7" ]]; then
|
if ! in-array "$DOKKU_DISTRO_VERSION" "7"; then
|
||||||
echo "Only CentOS version 7 is supported."
|
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "--> Installing docker"
|
echo "--> Installing docker"
|
||||||
|
|||||||
41
common.mk
41
common.mk
@@ -1,4 +1,43 @@
|
|||||||
|
GO_ARGS ?= -a
|
||||||
|
GO_PLUGIN_MAKE_TARGET ?= build
|
||||||
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
|
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
|
||||||
BUILD_IMAGE := golang:1.12
|
BUILD_IMAGE := golang:1.14.4
|
||||||
|
|
||||||
.PHONY: build-in-docker build clean src-clean
|
.PHONY: build-in-docker build clean src-clean
|
||||||
|
|
||||||
|
build: $(BUILD)
|
||||||
|
|
||||||
|
build-in-docker: clean
|
||||||
|
mkdir -p /tmp/dokku-go-build-cache
|
||||||
|
docker run --rm \
|
||||||
|
-v $$PWD/../..:$(GO_REPO_ROOT) \
|
||||||
|
-v /tmp/dokku-go-build-cache:/root/.cache \
|
||||||
|
-e PLUGIN_NAME=$(PLUGIN_NAME) \
|
||||||
|
-e GO111MODULE=on \
|
||||||
|
-w $(GO_REPO_ROOT)/plugins/$(PLUGIN_NAME) \
|
||||||
|
$(BUILD_IMAGE) \
|
||||||
|
bash -c "GO_ARGS='$(GO_ARGS)' make -j4 $(GO_PLUGIN_MAKE_TARGET)" || exit $$?
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILD)
|
||||||
|
find . -xtype l -delete
|
||||||
|
|
||||||
|
commands: **/**/commands.go
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o commands src/commands/commands.go
|
||||||
|
|
||||||
|
subcommands:
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o subcommands/subcommands src/subcommands/subcommands.go
|
||||||
|
$(MAKE) $(SUBCOMMANDS)
|
||||||
|
|
||||||
|
subcommands/%:
|
||||||
|
ln -sf subcommands $@
|
||||||
|
|
||||||
|
src-clean:
|
||||||
|
rm -rf .gitignore src vendor Makefile *.go glide.* go.sum go.mod
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o triggers src/triggers/triggers.go
|
||||||
|
$(MAKE) $(TRIGGERS)
|
||||||
|
|
||||||
|
triggers/%:
|
||||||
|
ln -sf triggers $(shell echo $@ | cut -d '/' -f2)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# bash completion for dd -*- shell-script -*-
|
# bash completion for dokku -*- shell-script -*-
|
||||||
|
|
||||||
_dokku_complete_verify() {
|
_dokku_complete_verify() {
|
||||||
declare desc="shows bash completion"
|
declare desc="shows bash completion"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM ubuntu:14.04
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,7 @@ RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
|
|||||||
IS_RELEASE=${IS_RELEASE} \
|
IS_RELEASE=${IS_RELEASE} \
|
||||||
SKIP_GO_CLEAN=true \
|
SKIP_GO_CLEAN=true \
|
||||||
make version copyfiles \
|
make version copyfiles \
|
||||||
&& rm -rf plugins/common/*.go plugins/common/glide* plugins/common/vendor/ \
|
&& make deb-dokku deb-sigil \
|
||||||
&& make deb-dokku deb-sshcommand deb-sigil \
|
rpm-dokku rpm-sigil
|
||||||
rpm-dokku rpm-sshcommand rpm-sigil
|
|
||||||
|
|
||||||
RUN ls -lha /tmp/
|
RUN ls -lha /tmp/
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
FROM dokku/build-base:0.0.1
|
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
|
|
||||||
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
|
||||||
|
|
||||||
ARG WORKDIR=/go/src/github.com/dokku/dokku
|
|
||||||
|
|
||||||
WORKDIR ${WORKDIR}
|
|
||||||
|
|
||||||
COPY . ${WORKDIR}
|
|
||||||
|
|
||||||
RUN make deb-herokuish rpm-herokuish
|
|
||||||
|
|
||||||
RUN ls -lha /tmp/
|
|
||||||
@@ -16,7 +16,8 @@ def download_file(filename, url):
|
|||||||
|
|
||||||
def upload_file(filename):
|
def upload_file(filename):
|
||||||
versions = [
|
versions = [
|
||||||
"bionic",
|
"xenial"
|
||||||
|
"focal"
|
||||||
]
|
]
|
||||||
cmd_template = "package_cloud push dokku/dokku/ubuntu/{0} {1}"
|
cmd_template = "package_cloud push dokku/dokku/ubuntu/{0} {1}"
|
||||||
for version in versions:
|
for version in versions:
|
||||||
@@ -26,7 +27,7 @@ def upload_file(filename):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
auth = HTTPBasicAuth(PACKAGECLOUD_TOKEN, '')
|
auth = HTTPBasicAuth(PACKAGECLOUD_TOKEN, '')
|
||||||
base = requests.get('https://packagecloud.io/api/v1/repos/dokku/dokku/packages/deb/ubuntu/trusty.json',
|
base = requests.get('https://packagecloud.io/api/v1/repos/dokku/dokku/packages/deb/ubuntu/bionic.json',
|
||||||
auth=auth)
|
auth=auth)
|
||||||
data = base.json()
|
data = base.json()
|
||||||
urls = []
|
urls = []
|
||||||
@@ -42,7 +43,7 @@ def main():
|
|||||||
download_urls['downloads/' + version['filename']] = version['download_url']
|
download_urls['downloads/' + version['filename']] = version['download_url']
|
||||||
|
|
||||||
for filename, download_url in download_urls.items():
|
for filename, download_url in download_urls.items():
|
||||||
print "downloading", filename
|
print("downloading {0}".format(filename))
|
||||||
download_file(filename, download_url)
|
download_file(filename, download_url)
|
||||||
upload_file(filename)
|
upload_file(filename)
|
||||||
|
|
||||||
|
|||||||
8
contrib/dokku-docker-bin.sh
Executable file
8
contrib/dokku-docker-bin.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x && DOKKU_DOCKER_ENV="--env DOKKU_TRACE=on"
|
||||||
|
DOKKU_DOCKER_CONTAINER_NAME=${DOKKU_DOCKER_CONTAINER_NAME:=dokku}
|
||||||
|
|
||||||
|
# TODO: handle cases where we need a tty
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
docker exec $DOKKU_DOCKER_ENV -i "$DOKKU_DOCKER_CONTAINER_NAME" dokku "$@"
|
||||||
@@ -1,23 +1,45 @@
|
|||||||
#!/usr/bin/env python2.7
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import cgi
|
import cgi
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import SimpleHTTPServer
|
import shutil
|
||||||
import SocketServer
|
try:
|
||||||
|
import SimpleHTTPServer
|
||||||
|
import SocketServer
|
||||||
|
except ImportError:
|
||||||
|
import http.server as SimpleHTTPServer
|
||||||
|
import socketserver as SocketServer
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
VERSION = 'v0.16.2'
|
VERSION = 'v0.22.0'
|
||||||
|
|
||||||
|
def bytes_to_string(b):
|
||||||
|
if type(b) == bytes:
|
||||||
|
encoding = sys.stdout.encoding
|
||||||
|
if encoding is None:
|
||||||
|
encoding = 'utf-8'
|
||||||
|
b = b.decode(encoding)
|
||||||
|
b = b.strip()
|
||||||
|
return b
|
||||||
|
|
||||||
|
|
||||||
|
def string_to_bytes(s):
|
||||||
|
if type(s) == str:
|
||||||
|
encoding = sys.stdout.encoding
|
||||||
|
if encoding is None:
|
||||||
|
encoding = 'utf-8'
|
||||||
|
s = s.encode(encoding)
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
hostname = ''
|
hostname = ''
|
||||||
try:
|
try:
|
||||||
command = "bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || wget -q -O - icanhazip.com'"
|
command = "bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || wget -q -O - icanhazip.com'"
|
||||||
hostname = subprocess.check_output(command, shell=True)
|
hostname = bytes_to_string(subprocess.check_output(command, shell=True))
|
||||||
if ':' in hostname:
|
|
||||||
hostname = ''
|
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -33,17 +55,37 @@ admin_keys = []
|
|||||||
if os.path.isfile(key_file):
|
if os.path.isfile(key_file):
|
||||||
try:
|
try:
|
||||||
command = "cat {0}".format(key_file)
|
command = "cat {0}".format(key_file)
|
||||||
admin_keys = subprocess.check_output(command, shell=True).strip().split("\n")
|
admin_keys = bytes_to_string(subprocess.check_output(command, shell=True)).strip().split("\n")
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
ufw_display = 'block'
|
||||||
|
try:
|
||||||
|
command = "sudo ufw status"
|
||||||
|
ufw_output = bytes_to_string(subprocess.check_output(command, shell=True).strip())
|
||||||
|
if "inactive" in ufw_output:
|
||||||
|
ufw_display = 'none'
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
ufw_display = 'none'
|
||||||
|
|
||||||
|
|
||||||
|
nginx_dir = '/etc/nginx'
|
||||||
|
nginx_init = '/etc/init.d/nginx'
|
||||||
|
try:
|
||||||
|
command = "test -x /usr/bin/openresty"
|
||||||
|
subprocess.check_output(command, shell=True)
|
||||||
|
nginx_dir = '/usr/local/openresty/nginx/conf'
|
||||||
|
nginx_init = '/etc/init.d/openresty'
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def check_boot():
|
def check_boot():
|
||||||
if 'onboot' not in sys.argv:
|
if 'onboot' not in sys.argv:
|
||||||
return
|
return
|
||||||
init_dir = os.getenv('INIT_DIR', '/etc/init')
|
init_dir = os.getenv('INIT_DIR', '/etc/init')
|
||||||
systemd_dir = os.getenv('SYSTEMD_DIR', '/etc/systemd/system')
|
systemd_dir = os.getenv('SYSTEMD_DIR', '/etc/systemd/system')
|
||||||
nginx_dir = os.getenv('NGINX_DIR', '/etc/nginx/conf.d')
|
nginx_conf_dir = os.getenv('NGINX_CONF_DIR', '{0}/conf.d'.format(nginx_dir))
|
||||||
|
|
||||||
if os.path.exists(init_dir):
|
if os.path.exists(init_dir):
|
||||||
with open('{0}/dokku-installer.conf'.format(init_dir), 'w') as f:
|
with open('{0}/dokku-installer.conf'.format(init_dir), 'w') as f:
|
||||||
@@ -60,8 +102,8 @@ def check_boot():
|
|||||||
f.write("[Install]\n")
|
f.write("[Install]\n")
|
||||||
f.write("WantedBy=multi-user.target\n")
|
f.write("WantedBy=multi-user.target\n")
|
||||||
f.write("WantedBy=graphical.target\n")
|
f.write("WantedBy=graphical.target\n")
|
||||||
if os.path.exists(nginx_dir):
|
if os.path.exists(nginx_conf_dir):
|
||||||
with open('{0}/dokku-installer.conf'.format(nginx_dir), 'w') as f:
|
with open('{0}/dokku-installer.conf'.format(nginx_conf_dir), 'w') as f:
|
||||||
f.write("upstream dokku-installer { server 127.0.0.1:2000; }\n")
|
f.write("upstream dokku-installer { server 127.0.0.1:2000; }\n")
|
||||||
f.write("server {\n")
|
f.write("server {\n")
|
||||||
f.write(" listen 80;\n")
|
f.write(" listen 80;\n")
|
||||||
@@ -70,19 +112,27 @@ def check_boot():
|
|||||||
f.write(" }\n")
|
f.write(" }\n")
|
||||||
f.write("}\n")
|
f.write("}\n")
|
||||||
|
|
||||||
subprocess.call('rm -f /etc/nginx/sites-enabled/*', shell=True)
|
subprocess.call('rm -f {0}/sites-enabled/*'.format(nginx_dir), shell=True)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||||
|
def write_content(self, content):
|
||||||
|
try:
|
||||||
|
self.wfile.write(content)
|
||||||
|
except TypeError:
|
||||||
|
self.wfile.write(string_to_bytes(content))
|
||||||
|
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
content = PAGE.replace('{VERSION}', VERSION)
|
content = PAGE.replace('{VERSION}', VERSION)
|
||||||
|
content = content.replace('{UFW_DISPLAY}', ufw_display)
|
||||||
content = content.replace('{HOSTNAME}', hostname)
|
content = content.replace('{HOSTNAME}', hostname)
|
||||||
content = content.replace('{AUTHORIZED_KEYS_LOCATION}', key_file)
|
content = content.replace('{AUTHORIZED_KEYS_LOCATION}', key_file)
|
||||||
content = content.replace('{ADMIN_KEYS}', "\n".join(admin_keys))
|
content = content.replace('{ADMIN_KEYS}', "\n".join(admin_keys))
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(content)
|
self.write_content(content)
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
if self.path not in ['/setup', '/setup/']:
|
if self.path not in ['/setup', '/setup/']:
|
||||||
@@ -94,20 +144,31 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
'REQUEST_METHOD': 'POST',
|
'REQUEST_METHOD': 'POST',
|
||||||
'CONTENT_TYPE': self.headers['Content-Type']})
|
'CONTENT_TYPE': self.headers['Content-Type']})
|
||||||
|
|
||||||
vhost_enable = 'false'
|
|
||||||
dokku_root = os.getenv('DOKKU_ROOT', '/home/dokku')
|
dokku_root = os.getenv('DOKKU_ROOT', '/home/dokku')
|
||||||
|
dokku_user = os.getenv('DOKKU_SYSTEM_GROUP', 'dokku')
|
||||||
|
dokku_group = os.getenv('DOKKU_SYSTEM_USER', 'dokku')
|
||||||
|
|
||||||
|
vhost_enable = 'false'
|
||||||
|
vhost_filename = '{0}/VHOST'.format(dokku_root)
|
||||||
|
|
||||||
if 'vhost' in params and params['vhost'].value == 'true':
|
if 'vhost' in params and params['vhost'].value == 'true':
|
||||||
vhost_enable = 'true'
|
vhost_enable = 'true'
|
||||||
with open('{0}/VHOST'.format(dokku_root), 'w') as f:
|
with open(vhost_filename, 'w') as f:
|
||||||
f.write(params['hostname'].value)
|
f.write(params['hostname'].value)
|
||||||
|
shutil.chown(vhost_filename, dokku_user, dokku_group)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
os.remove('{0}/VHOST'.format(dokku_root))
|
os.remove(vhost_filename)
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
with open('{0}/HOSTNAME'.format(dokku_root), 'w') as f:
|
|
||||||
|
hostname_filename = '{0}/HOSTNAME'.format(dokku_root)
|
||||||
|
|
||||||
|
with open(hostname_filename, 'w') as f:
|
||||||
f.write(params['hostname'].value)
|
f.write(params['hostname'].value)
|
||||||
|
|
||||||
|
shutil.chown(hostname_filename, dokku_user, dokku_group)
|
||||||
|
|
||||||
for (index, key) in enumerate(params['keys'].value.splitlines(), 1):
|
for (index, key) in enumerate(params['keys'].value.splitlines(), 1):
|
||||||
user = 'admin'
|
user = 'admin'
|
||||||
if self.admin_user_exists() is not None:
|
if self.admin_user_exists() is not None:
|
||||||
@@ -123,7 +184,10 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
user = user + str(index)
|
user = user + str(index)
|
||||||
command = ['sshcommand', 'acl-add', 'dokku', user]
|
command = ['sshcommand', 'acl-add', 'dokku', user]
|
||||||
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
|
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
|
||||||
proc.stdin.write(key)
|
try:
|
||||||
|
proc.stdin.write(key)
|
||||||
|
except TypeError:
|
||||||
|
proc.stdin.write(string_to_bytes(key))
|
||||||
proc.stdin.close()
|
proc.stdin.close()
|
||||||
proc.wait()
|
proc.wait()
|
||||||
|
|
||||||
@@ -136,9 +200,11 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
if 'selfdestruct' in sys.argv:
|
if 'selfdestruct' in sys.argv:
|
||||||
DeleteInstallerThread()
|
DeleteInstallerThread()
|
||||||
|
|
||||||
|
content = json.dumps({'status': 'ok'})
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(json.dumps({'status': 'ok'}))
|
self.write_content(content)
|
||||||
|
|
||||||
def web_admin_user_exists(self):
|
def web_admin_user_exists(self):
|
||||||
return self.user_exists('web-admin(\d+)')
|
return self.user_exists('web-admin(\d+)')
|
||||||
@@ -153,11 +219,11 @@ class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
max_num = 0
|
max_num = 0
|
||||||
exists = False
|
exists = False
|
||||||
for line in proc.stdout:
|
for line in proc.stdout:
|
||||||
m = pattern.search(line)
|
m = pattern.search(bytes_to_string(line))
|
||||||
if m:
|
if m:
|
||||||
# User of the form `user` or `user#` exists
|
# User of the form `user` or `user#` exists
|
||||||
exists = True
|
exists = True
|
||||||
max_num = max(max_num, m.group(1))
|
max_num = max(max_num, int(m.group(1)))
|
||||||
if exists:
|
if exists:
|
||||||
return max_num
|
return max_num
|
||||||
else:
|
else:
|
||||||
@@ -193,7 +259,7 @@ class DeleteInstallerThread(object):
|
|||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
command = "rm /etc/nginx/conf.d/dokku-installer.conf && /etc/init.d/nginx stop && /etc/init.d/nginx start"
|
command = "rm {0}/conf.d/dokku-installer.conf && {1} stop && {1} start".format(nginx_dir, nginx_init)
|
||||||
try:
|
try:
|
||||||
subprocess.call(command, shell=True)
|
subprocess.call(command, shell=True)
|
||||||
except:
|
except:
|
||||||
@@ -211,7 +277,7 @@ def main():
|
|||||||
|
|
||||||
port = int(os.getenv('PORT', 2000))
|
port = int(os.getenv('PORT', 2000))
|
||||||
httpd = SocketServer.TCPServer(("", port), GetHandler)
|
httpd = SocketServer.TCPServer(("", port), GetHandler)
|
||||||
print "Listening on 0.0.0.0:{0}, CTRL+C to stop".format(port)
|
print("Listening on 0.0.0.0:{0}, CTRL+C to stop".format(port))
|
||||||
httpd.serve_forever()
|
httpd.serve_forever()
|
||||||
|
|
||||||
|
|
||||||
@@ -294,6 +360,9 @@ PAGE = """
|
|||||||
<small class="form-text text-muted">When enabled, Nginx will be run on port 80 and proxy requests to apps based on hostname.</small>
|
<small class="form-text text-muted">When enabled, Nginx will be run on port 80 and proxy requests to apps based on hostname.</small>
|
||||||
<small class="form-text text-muted">When disabled, a specific port will be setup for each application on first deploy, and requests to that port will be proxied to the relevant app.</small>
|
<small class="form-text text-muted">When disabled, a specific port will be setup for each application on first deploy, and requests to that port will be proxied to the relevant app.</small>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="alert alert-warning small mt-3 d-{UFW_DISPLAY}" role="alert">
|
||||||
|
<strong>Warning:</strong> UFW is active. To allow traffic to specific ports, run <code>sudo ufw allow PORT</code> for the port in question.
|
||||||
|
</div>
|
||||||
<div class="bd-callout bd-callout-info">
|
<div class="bd-callout bd-callout-info">
|
||||||
<h5>What will app URLs look like?</h5>
|
<h5>What will app URLs look like?</h5>
|
||||||
<pre><code id="example">http://hostname:port</code></pre>
|
<pre><code id="example">http://hostname:port</code></pre>
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ main() {
|
|||||||
dokku-log-info "Running system updates"
|
dokku-log-info "Running system updates"
|
||||||
case "$DOKKU_DISTRO" in
|
case "$DOKKU_DISTRO" in
|
||||||
arch)
|
arch)
|
||||||
yaourt -Syyua
|
yay -Syyua
|
||||||
;;
|
;;
|
||||||
debian | ubuntu)
|
debian | ubuntu)
|
||||||
apt-get update -qq >/dev/null
|
apt-get update -qq >/dev/null
|
||||||
apt-get -qq -y --force-yes dist-upgrade
|
apt-get -qq -y dist-upgrade
|
||||||
;;
|
;;
|
||||||
centos | opensuse | rhel)
|
centos | opensuse | rhel)
|
||||||
dokku-log-warn "Updating this operating system is not supported"
|
dokku-log-warn "Updating this operating system is not supported"
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ main() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
|
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
|
||||||
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:rebuildall ps:restartall ps:restore ps:startall ps:stopall " == *" $CMD "* ]] && unset APP
|
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:restore " == *" $CMD "* ]] && unset APP
|
||||||
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
|
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
|
||||||
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
|
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
|
||||||
[[ -n "$@" ]] && [[ -n "$APP" ]] && app_arg="--app $APP"
|
[[ -n "$@" ]] && [[ -n "$APP" ]] && app_arg="--app $APP"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ set -eo pipefail
|
|||||||
[[ $TRACE ]] && set -x
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
||||||
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
|
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
|
||||||
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
||||||
|
|
||||||
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
||||||
@@ -136,7 +136,7 @@ fn-publish-package() {
|
|||||||
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
||||||
|
|
||||||
if [[ "$DIST" == "ubuntu" ]]; then
|
if [[ "$DIST" == "ubuntu" ]]; then
|
||||||
OS_IDS=("trusty" "utopic" "vivid" "wily" "xenial" "yakkety" "zesty" "artful" "bionic")
|
OS_IDS=("xenial" "bionic" "focal")
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
@@ -147,7 +147,7 @@ fn-publish-package() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
DIST=debian
|
DIST=debian
|
||||||
OS_IDS=("wheezy" "jessie" "stretch" "buster")
|
OS_IDS=("stretch" "buster")
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
@@ -206,13 +206,15 @@ fn-repo-update() {
|
|||||||
|
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" contrib/dokku-installer.py
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" contrib/dokku-installer.py
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" debian/control
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" debian/control
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" Dockerfile
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/advanced-usage/plugin-management.md
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/advanced-usage/plugin-management.md
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/browserconfig.xml
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/browserconfig.xml
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/manifest.json
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/manifest.json
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/style.css
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/style.css
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/development/release-process.md
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/development/release-process.md
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/install/docker.md
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation.md
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation.md
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/template.html
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/template.html
|
||||||
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" README.md
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" README.md
|
||||||
|
|
||||||
@@ -237,7 +239,7 @@ fn-repo-update-history-and-commit() {
|
|||||||
declare desc="Updates the history file and commits the changes"
|
declare desc="Updates the history file and commits the changes"
|
||||||
declare CURRENT_VERSION="$1" NEXT_VERSION="$2"
|
declare CURRENT_VERSION="$1" NEXT_VERSION="$2"
|
||||||
local PULL_REQUEST_ID TITLE AUTHOR TYPE CHANGELOG_TEXT
|
local PULL_REQUEST_ID TITLE AUTHOR TYPE CHANGELOG_TEXT
|
||||||
local COMMIT_MESSAGE HISTORY HISTORY_CONTENTS HISTORY_DOCUMENTATION HISTORY_ENHANCEMENT HISTORY_BUG HISTORY_OTHER HISTORY_TESTS ISSUE_FILE
|
local COMMIT_MESSAGE HISTORY HISTORY_CONTENTS HISTORY_DOCUMENTATION HISTORY_ENHANCEMENT HISTORY_BC_BREAK HISTORY_REFACTOR HISTORY_BUG HISTORY_OTHER HISTORY_TESTS ISSUE_FILE
|
||||||
|
|
||||||
pushd "$ROOT_DIR" >/dev/null
|
pushd "$ROOT_DIR" >/dev/null
|
||||||
|
|
||||||
@@ -254,12 +256,16 @@ fn-repo-update-history-and-commit() {
|
|||||||
TYPE="$(jq -r '.labels[] | select( .name | contains("type") ) | .name' "$ISSUE_FILE" | cut -d' ' -f2)"
|
TYPE="$(jq -r '.labels[] | select( .name | contains("type") ) | .name' "$ISSUE_FILE" | cut -d' ' -f2)"
|
||||||
CHANGELOG_TEXT="- #${PULL_REQUEST_ID}: @${AUTHOR} ${TITLE}"
|
CHANGELOG_TEXT="- #${PULL_REQUEST_ID}: @${AUTHOR} ${TITLE}"
|
||||||
|
|
||||||
if [[ "$TYPE" == "bug" ]]; then
|
if [[ "$TYPE" == "bc-break" ]]; then
|
||||||
|
HISTORY_BC_BREAK="${HISTORY_BC_BREAK}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "bug" ]]; then
|
||||||
HISTORY_BUG="${HISTORY_BUG}"$'\n'"$CHANGELOG_TEXT"
|
HISTORY_BUG="${HISTORY_BUG}"$'\n'"$CHANGELOG_TEXT"
|
||||||
elif [[ "$TYPE" == "documentation" ]]; then
|
elif [[ "$TYPE" == "documentation" ]]; then
|
||||||
HISTORY_DOCUMENTATION="${HISTORY_DOCUMENTATION}"$'\n'"$CHANGELOG_TEXT"
|
HISTORY_DOCUMENTATION="${HISTORY_DOCUMENTATION}"$'\n'"$CHANGELOG_TEXT"
|
||||||
elif [[ "$TYPE" == "enhancement" ]] || [[ "$TYPE" == "refactor" ]]; then
|
elif [[ "$TYPE" == "enhancement" ]]; then
|
||||||
HISTORY_ENHANCEMENT="${HISTORY_ENHANCEMENT}"$'\n'"$CHANGELOG_TEXT"
|
HISTORY_ENHANCEMENT="${HISTORY_ENHANCEMENT}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "refactor" ]]; then
|
||||||
|
HISTORY_REFACTOR="${HISTORY_REFACTOR}"$'\n'"$CHANGELOG_TEXT"
|
||||||
elif [[ "$TYPE" == "tests" ]]; then
|
elif [[ "$TYPE" == "tests" ]]; then
|
||||||
HISTORY_TESTS="${HISTORY_TESTS}"$'\n'"$CHANGELOG_TEXT"
|
HISTORY_TESTS="${HISTORY_TESTS}"$'\n'"$CHANGELOG_TEXT"
|
||||||
else
|
else
|
||||||
@@ -275,6 +281,15 @@ fn-repo-update-history-and-commit() {
|
|||||||
HISTORY="${HISTORY}"$'\n'"sudo DOKKU_TAG=v${NEXT_VERSION} bash bootstrap.sh"
|
HISTORY="${HISTORY}"$'\n'"sudo DOKKU_TAG=v${NEXT_VERSION} bash bootstrap.sh"
|
||||||
HISTORY="${HISTORY}"$'\n'"\`\`\`"
|
HISTORY="${HISTORY}"$'\n'"\`\`\`"
|
||||||
|
|
||||||
|
if [[ -f "docs/appendices/${NEXT_VERSION}-migration-guide.md" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"See the [${NEXT_VERSION} migration guide](/docs/appendices/${NEXT_VERSION}-migration-guide.md) for more information on migrating to ${NEXT_VERSION}."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_BC_BREAK" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Backwards Compatibility Breaks"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_BC_BREAK"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$HISTORY_BUG" ]]; then
|
if [[ "$HISTORY_BUG" ]]; then
|
||||||
HISTORY="${HISTORY}"$'\n\n'"### Bug Fixes"
|
HISTORY="${HISTORY}"$'\n\n'"### Bug Fixes"
|
||||||
HISTORY="${HISTORY}"$'\n'"$HISTORY_BUG"
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_BUG"
|
||||||
@@ -285,6 +300,11 @@ fn-repo-update-history-and-commit() {
|
|||||||
HISTORY="${HISTORY}"$'\n'"$HISTORY_ENHANCEMENT"
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_ENHANCEMENT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_REFACTOR" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Refactors"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_REFACTOR"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$HISTORY_DOCUMENTATION" ]]; then
|
if [[ "$HISTORY_DOCUMENTATION" ]]; then
|
||||||
HISTORY="${HISTORY}"$'\n\n'"### Documentation"
|
HISTORY="${HISTORY}"$'\n\n'"### Documentation"
|
||||||
HISTORY="${HISTORY}"$'\n'"$HISTORY_DOCUMENTATION"
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_DOCUMENTATION"
|
||||||
@@ -317,6 +337,12 @@ fn-require-bin() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn-build-docker-image() {
|
||||||
|
declare desc="Builds the dokku docker image and tags it with the given version"
|
||||||
|
declare VERSION="$1"
|
||||||
|
docker build -t "dokku/dokku:$VERSION" .
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
declare RELEASE="$1"
|
declare RELEASE="$1"
|
||||||
local CURRENT_VERSION NEXT_VERSION IS_RELEASE
|
local CURRENT_VERSION NEXT_VERSION IS_RELEASE
|
||||||
@@ -354,10 +380,18 @@ main() {
|
|||||||
fn-build-dokku "$IS_RELEASE" "$NEXT_VERSION" || log-fail "Error building package"
|
fn-build-dokku "$IS_RELEASE" "$NEXT_VERSION" || log-fail "Error building package"
|
||||||
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
|
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
|
||||||
fn-extract-package "$IS_RELEASE" "dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
|
fn-extract-package "$IS_RELEASE" "dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
|
||||||
|
cp -f "build/dokku_${NEXT_VERSION}_amd64.deb" build/dokku.deb
|
||||||
|
|
||||||
if [[ "$RELEASE" != "build" ]]; then
|
if [[ "$RELEASE" != "build" ]]; then
|
||||||
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
|
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
|
||||||
fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
|
fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
|
||||||
|
fn-build-docker-image "$NEXT_VERSION" || log-fail "Error building docker image"
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" == "true" ]]; then
|
||||||
|
docker tag "dokku/dokku:$NEXT_VERSION" "dokku/dokku:latest"
|
||||||
|
docker push "dokku/dokku:$NEXT_VERSION"
|
||||||
|
docker push "dokku/dokku:latest"
|
||||||
|
fi
|
||||||
fn-repo-push-tags "$IS_RELEASE"
|
fn-repo-push-tags "$IS_RELEASE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ set -eo pipefail
|
|||||||
[[ $TRACE ]] && set -x
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
||||||
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
|
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
|
||||||
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
||||||
|
|
||||||
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
||||||
@@ -61,7 +61,7 @@ fn-publish-package() {
|
|||||||
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
||||||
|
|
||||||
if [[ "$DIST" == "ubuntu" ]]; then
|
if [[ "$DIST" == "ubuntu" ]]; then
|
||||||
OS_IDS=("trusty" "utopic" "vivid" "wily" "xenial" "yakkety" "zesty" "artful" "bionic")
|
OS_IDS=("xenial" "bionic" "focal")
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
@@ -72,7 +72,7 @@ fn-publish-package() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
DIST=debian
|
DIST=debian
|
||||||
OS_IDS=("wheezy" "jessie" "stretch" "buster")
|
OS_IDS=("stretch" "buster")
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
log-info "(release-dokku-update) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
|
|||||||
@@ -1,160 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -eo pipefail
|
|
||||||
[[ $TRACE ]] && set -x
|
|
||||||
|
|
||||||
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
|
||||||
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXX")"
|
|
||||||
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
|
||||||
|
|
||||||
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
|
||||||
|
|
||||||
log-info() {
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
declare desc="Log info formatter"
|
|
||||||
echo "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
log-error() {
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
declare desc="Log error formatter"
|
|
||||||
echo "! $*" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
log-fail() {
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
declare desc="Log fail formatter"
|
|
||||||
log-error "$*"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-build-dokku() {
|
|
||||||
declare desc="Builds dokku packages within a docker container"
|
|
||||||
|
|
||||||
pushd "$ROOT_DIR" >/dev/null
|
|
||||||
docker build \
|
|
||||||
-f "contrib/build-herokuish.Dockerfile" \
|
|
||||||
-t herokuish:build .
|
|
||||||
return "$?"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-extract-package() {
|
|
||||||
declare desc="Extract packages from a docker container to the root directory"
|
|
||||||
declare PACKAGE_NAME="$1"
|
|
||||||
|
|
||||||
if [[ -z "$PACKAGE_NAME" ]]; then
|
|
||||||
log-error "Invalid deb file specified"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
log-info "(extract-package) writing ${PACKAGE_NAME} to correct path"
|
|
||||||
docker run --rm --entrypoint cat herokuish:build "/tmp/${PACKAGE_NAME}" >"${ROOT_DIR}/build/${PACKAGE_NAME}"
|
|
||||||
return "$?"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-publish-package() {
|
|
||||||
declare desc="Publishes a package to packagecloud"
|
|
||||||
declare IS_RELEASE="$1" RELEASE_TYPE="$2" PACKAGE_NAME="$3"
|
|
||||||
local REPOSITORY=dokku/dokku-betafish DIST=ubuntu
|
|
||||||
local OS_ID ex EXIT_CODE=0
|
|
||||||
|
|
||||||
[[ "$IS_RELEASE" == "true" ]] && REPOSITORY=dokku/dokku
|
|
||||||
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
|
||||||
|
|
||||||
if [[ "$DIST" == "ubuntu" ]]; then
|
|
||||||
OS_IDS=("trusty" "utopic" "vivid" "wily" "xenial" "yakkety" "zesty" "artful" "bionic")
|
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
|
||||||
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
|
||||||
ex="$?"
|
|
||||||
if [[ "$ex" -ne "0" ]]; then
|
|
||||||
EXIT_CODE="$ex"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
DIST=debian
|
|
||||||
OS_IDS=("wheezy" "jessie" "stretch" "buster")
|
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
|
||||||
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
|
||||||
ex="$?"
|
|
||||||
if [[ "$ex" -ne "0" ]]; then
|
|
||||||
EXIT_CODE="$ex"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
log-info "(release-herokuish) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
|
||||||
package_cloud push "${REPOSITORY}/${DIST}" "$PACKAGE_NAME"
|
|
||||||
EXIT_CODE="$?"
|
|
||||||
fi
|
|
||||||
return "$EXIT_CODE"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-in-array() {
|
|
||||||
declare desc="return true if value ($1) is in list (all other arguments)"
|
|
||||||
|
|
||||||
local e
|
|
||||||
for e in "${@:2}"; do
|
|
||||||
[[ "$e" == "$1" ]] && return 0
|
|
||||||
done
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-is-release() {
|
|
||||||
declare desc="Checks if a given run is a release run"
|
|
||||||
declare RELEASE="$1"
|
|
||||||
local IS_RELEASE=false
|
|
||||||
if [[ "$RELEASE" == "major" ]] || [[ "$RELEASE" == "minor" ]] || [[ "$RELEASE" == "patch" ]]; then
|
|
||||||
IS_RELEASE=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$IS_RELEASE"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn-require-bin() {
|
|
||||||
declare desc="Checks that a binary exists"
|
|
||||||
declare BINARY="$1"
|
|
||||||
if ! command -v "$BINARY" &>/dev/null; then
|
|
||||||
log-fail "Missing ${BINARY}, please install it"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
declare RELEASE="$1"
|
|
||||||
local NEXT_VERSION
|
|
||||||
local VALID_RELEASE_LEVELS=("major" "minor" "patch" "betafish" "build")
|
|
||||||
|
|
||||||
if [[ "$RELEASE" == '--trace' ]]; then
|
|
||||||
shift 1
|
|
||||||
RELEASE="$1"
|
|
||||||
TRACE=1 && set -x
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$RELEASE" ]]; then
|
|
||||||
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], none given"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! fn-in-array "$RELEASE" "${VALID_RELEASE_LEVELS[@]}"; then
|
|
||||||
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], '${RELEASE}' given"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "build"
|
|
||||||
fn-require-bin "docker"
|
|
||||||
if [[ "$RELEASE" != "build" ]]; then
|
|
||||||
fn-require-bin "package_cloud"
|
|
||||||
[[ -n "$PACKAGECLOUD_TOKEN" ]] || log-fail "Missing PACKAGECLOUD_TOKEN environment variable"
|
|
||||||
fi
|
|
||||||
|
|
||||||
NEXT_VERSION="$(grep HEROKUISH_VERSION deb.mk | head -n1 | cut -d'=' -f2 | xargs)"
|
|
||||||
IS_RELEASE="$(fn-is-release "$RELEASE")"
|
|
||||||
|
|
||||||
fn-build-dokku || log-fail "Error building package"
|
|
||||||
fn-extract-package "herokuish_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
|
|
||||||
fn-extract-package "herokuish-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
|
|
||||||
|
|
||||||
if [[ "$RELEASE" != "build" ]]; then
|
|
||||||
fn-publish-package "$IS_RELEASE" "deb" "build/herokuish_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
|
|
||||||
fn-publish-package "$IS_RELEASE" "rpm" "build/herokuish-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
[[ $TRACE ]] && set -x
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-plugin-release.XXXX")"
|
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-plugin-release.XXXXXX")"
|
||||||
|
|
||||||
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
trap 'rm -rf "$TMP_WORK_DIR" >/dev/null' RETURN INT TERM EXIT
|
||||||
|
|
||||||
|
|||||||
74
deb.mk
74
deb.mk
@@ -1,11 +1,5 @@
|
|||||||
BUILD_DIRECTORY ?= /tmp
|
BUILD_DIRECTORY ?= /tmp
|
||||||
|
|
||||||
HEROKUISH_DESCRIPTION = 'Herokuish uses Docker and Buildpacks to build applications like Heroku'
|
|
||||||
HEROKUISH_REPO_NAME ?= gliderlabs/herokuish
|
|
||||||
HEROKUISH_VERSION ?= 0.5.0
|
|
||||||
HEROKUISH_ARCHITECTURE = amd64
|
|
||||||
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
|
|
||||||
|
|
||||||
DOKKU_DESCRIPTION = 'Docker powered PaaS that helps you build and manage the lifecycle of applications'
|
DOKKU_DESCRIPTION = 'Docker powered PaaS that helps you build and manage the lifecycle of applications'
|
||||||
DOKKU_REPO_NAME ?= dokku/dokku
|
DOKKU_REPO_NAME ?= dokku/dokku
|
||||||
DOKKU_ARCHITECTURE = amd64
|
DOKKU_ARCHITECTURE = amd64
|
||||||
@@ -16,17 +10,6 @@ DOKKU_UPDATE_VERSION ?= 0.1.0
|
|||||||
DOKKU_UPDATE_ARCHITECTURE = amd64
|
DOKKU_UPDATE_ARCHITECTURE = amd64
|
||||||
DOKKU_UPDATE_PACKAGE_NAME = dokku-update_$(DOKKU_UPDATE_VERSION)_$(DOKKU_UPDATE_ARCHITECTURE).deb
|
DOKKU_UPDATE_PACKAGE_NAME = dokku-update_$(DOKKU_UPDATE_VERSION)_$(DOKKU_UPDATE_ARCHITECTURE).deb
|
||||||
|
|
||||||
define SSHCOMMAND_DESCRIPTION
|
|
||||||
Turn SSH into a thin client specifically for your app
|
|
||||||
Simplifies running a single command over SSH, and
|
|
||||||
manages authorized keys (ACL) and users in order to do so.
|
|
||||||
endef
|
|
||||||
SSHCOMMAND_REPO_NAME ?= dokku/sshcommand
|
|
||||||
SSHCOMMAND_VERSION ?= 0.7.0
|
|
||||||
SSHCOMMAND_ARCHITECTURE = amd64
|
|
||||||
SSHCOMMAND_PACKAGE_NAME = sshcommand_$(SSHCOMMAND_VERSION)_$(SSHCOMMAND_ARCHITECTURE).deb
|
|
||||||
SSHCOMMAND_URL ?= https://raw.githubusercontent.com/dokku/sshcommand/v$(SSHCOMMAND_VERSION)/sshcommand
|
|
||||||
|
|
||||||
define SIGIL_DESCRIPTION
|
define SIGIL_DESCRIPTION
|
||||||
Standalone string interpolator and template processor
|
Standalone string interpolator and template processor
|
||||||
Sigil is a command line tool for template processing
|
Sigil is a command line tool for template processing
|
||||||
@@ -45,9 +28,8 @@ ifndef IS_RELEASE
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
export SIGIL_DESCRIPTION
|
export SIGIL_DESCRIPTION
|
||||||
export SSHCOMMAND_DESCRIPTION
|
|
||||||
|
|
||||||
.PHONY: install-from-deb deb-all deb-herokuish deb-dokku deb-dokku-update deb-setup deb-sshcommand deb-sigil
|
.PHONY: install-from-deb deb-all deb-dokku deb-dokku-update deb-setup deb-sigil
|
||||||
|
|
||||||
install-from-deb:
|
install-from-deb:
|
||||||
@echo "--> Initial apt-get update"
|
@echo "--> Initial apt-get update"
|
||||||
@@ -59,11 +41,11 @@ install-from-deb:
|
|||||||
|
|
||||||
@echo "--> Installing dokku"
|
@echo "--> Installing dokku"
|
||||||
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
||||||
@echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ $(shell lsb_release -cs 2>/dev/null || echo "trusty") main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
@echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ $(shell lsb_release -cs 2>/dev/null || echo "bionic") main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
||||||
sudo apt-get update -qq >/dev/null
|
sudo apt-get update -qq >/dev/null
|
||||||
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -yy dokku
|
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install -yy dokku
|
||||||
|
|
||||||
deb-all: deb-setup deb-herokuish deb-dokku deb-sshcommand deb-sigil deb-dokku-update
|
deb-all: deb-setup deb-dokku deb-sigil deb-dokku-update
|
||||||
mv $(BUILD_DIRECTORY)/*.deb .
|
mv $(BUILD_DIRECTORY)/*.deb .
|
||||||
@echo "Done"
|
@echo "Done"
|
||||||
|
|
||||||
@@ -74,32 +56,6 @@ deb-setup:
|
|||||||
@command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
@command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||||
@ssh -o StrictHostKeyChecking=no git@github.com || true
|
@ssh -o StrictHostKeyChecking=no git@github.com || true
|
||||||
|
|
||||||
deb-herokuish:
|
|
||||||
rm -rf /tmp/tmp /tmp/build $(HEROKUISH_PACKAGE_NAME)
|
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
@echo "-> Creating deb files"
|
|
||||||
@echo "#!/usr/bin/env bash" >> /tmp/tmp/post-install
|
|
||||||
@echo "sleep 5" >> /tmp/tmp/post-install
|
|
||||||
@echo "echo 'Importing herokuish into docker (around 5 minutes)'" >> /tmp/tmp/post-install
|
|
||||||
@echo 'if [[ -n $${http_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
|
|
||||||
@echo 'if [[ -n $${https_proxy+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
|
|
||||||
@echo 'if [[ -n $${BUILDARGS+x} ]]; then echo "See the docker pull docs for proxy configuration"; fi' >> /tmp/tmp/post-install
|
|
||||||
@echo "sudo docker pull gliderlabs/herokuish:v${HEROKUISH_VERSION} && sudo docker tag gliderlabs/herokuish:v${HEROKUISH_VERSION} gliderlabs/herokuish:latest" >> /tmp/tmp/post-install
|
|
||||||
|
|
||||||
@echo "-> Creating $(HEROKUISH_PACKAGE_NAME)"
|
|
||||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish \
|
|
||||||
--version $(HEROKUISH_VERSION) \
|
|
||||||
--architecture $(HEROKUISH_ARCHITECTURE) \
|
|
||||||
--package $(BUILD_DIRECTORY)/$(HEROKUISH_PACKAGE_NAME) \
|
|
||||||
--deb-pre-depends 'docker-engine-cs (>= 1.9.1) | docker-engine (>= 1.9.1) | docker-ce | docker-ee' \
|
|
||||||
--deb-pre-depends sudo \
|
|
||||||
--after-install /tmp/tmp/post-install \
|
|
||||||
--url "https://github.com/$(HEROKUISH_REPO_NAME)" \
|
|
||||||
--description $(HEROKUISH_DESCRIPTION) \
|
|
||||||
--license 'MIT License' \
|
|
||||||
.
|
|
||||||
|
|
||||||
deb-dokku: /tmp/build-dokku/var/lib/dokku/GIT_REV
|
deb-dokku: /tmp/build-dokku/var/lib/dokku/GIT_REV
|
||||||
rm -f $(BUILD_DIRECTORY)/dokku_*_$(DOKKU_ARCHITECTURE).deb
|
rm -f $(BUILD_DIRECTORY)/dokku_*_$(DOKKU_ARCHITECTURE).deb
|
||||||
|
|
||||||
@@ -129,30 +85,6 @@ deb-dokku-update:
|
|||||||
contrib/dokku-update=/usr/local/bin/dokku-update \
|
contrib/dokku-update=/usr/local/bin/dokku-update \
|
||||||
contrib/dokku-update-version=/var/lib/dokku-update/VERSION
|
contrib/dokku-update-version=/var/lib/dokku-update/VERSION
|
||||||
|
|
||||||
deb-sshcommand:
|
|
||||||
rm -rf /tmp/tmp /tmp/build $(SSHCOMMAND_PACKAGE_NAME)
|
|
||||||
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/local/bin
|
|
||||||
|
|
||||||
@echo "-> Downloading package"
|
|
||||||
wget -q -O /tmp/tmp/sshcommand-$(SSHCOMMAND_VERSION) $(SSHCOMMAND_URL)
|
|
||||||
|
|
||||||
@echo "-> Copying files into place"
|
|
||||||
mkdir -p "/tmp/build/usr/local/bin"
|
|
||||||
cp /tmp/tmp/sshcommand-$(SSHCOMMAND_VERSION) /tmp/build/usr/local/bin/sshcommand
|
|
||||||
chmod +x /tmp/build/usr/local/bin/sshcommand
|
|
||||||
|
|
||||||
@echo "-> Creating $(SSHCOMMAND_PACKAGE_NAME)"
|
|
||||||
sudo fpm -t deb -s dir -C /tmp/build -n sshcommand \
|
|
||||||
--version $(SSHCOMMAND_VERSION) \
|
|
||||||
--architecture $(SSHCOMMAND_ARCHITECTURE) \
|
|
||||||
--package $(BUILD_DIRECTORY)/$(SSHCOMMAND_PACKAGE_NAME) \
|
|
||||||
--url "https://github.com/$(SSHCOMMAND_REPO_NAME)" \
|
|
||||||
--maintainer "Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>" \
|
|
||||||
--category admin \
|
|
||||||
--description "$$SSHCOMMAND_DESCRIPTION" \
|
|
||||||
--license 'MIT License' \
|
|
||||||
.
|
|
||||||
|
|
||||||
deb-sigil:
|
deb-sigil:
|
||||||
rm -rf /tmp/tmp /tmp/build $(SIGIL_PACKAGE_NAME)
|
rm -rf /tmp/tmp /tmp/build $(SIGIL_PACKAGE_NAME)
|
||||||
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/bin
|
mkdir -p /tmp/tmp /tmp/build /tmp/build/usr/bin
|
||||||
|
|||||||
8
debian/control
vendored
8
debian/control
vendored
@@ -1,11 +1,11 @@
|
|||||||
Package: dokku
|
Package: dokku
|
||||||
Version: 0.16.2
|
Version: 0.22.0
|
||||||
Section: web
|
Section: web
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Depends: locales, git, make, curl, gcc, man-db, netcat, sshcommand (>= 0.6.0), gliderlabs-sigil, docker-engine-cs (>= 1.7.1) | docker-engine (>= 1.7.1) | docker-io (>= 1.7.1) | docker.io (>= 1.7.1) | docker-ce | docker-ee, net-tools, software-properties-common, procfile-util, python-software-properties | python3-software-properties, rsyslog
|
Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.10.0), docker-engine-cs (>= 17.05.0) | docker-engine (>= 17.05.0) | docker-io (>= 17.05.0) | docker.io (>= 17.05.0) | docker-ce (>= 17.05.0) | docker-ee (>= 17.05.0) | moby-engine, net-tools, software-properties-common, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsyslog, dos2unix, jq
|
||||||
Recommends: herokuish (>= 0.3.4), parallel, dokku-update
|
Recommends: herokuish (>= 0.3.4), parallel, dokku-update, dokku-event-listener
|
||||||
Pre-Depends: nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python2.7, debconf
|
Pre-Depends: gliderlabs-sigil, nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python3, debconf
|
||||||
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
||||||
Description: Docker-powered PaaS that helps build and manage the lifecycle of applications
|
Description: Docker-powered PaaS that helps build and manage the lifecycle of applications
|
||||||
Dokku is an extensible, open source Platform as a Service
|
Dokku is an extensible, open source Platform as a Service
|
||||||
|
|||||||
7
debian/lintian-overrides
vendored
7
debian/lintian-overrides
vendored
@@ -1,5 +1,5 @@
|
|||||||
dokku: command-with-path-in-maintainer-script postinst:16 /usr/bin/sshcommand
|
dokku: command-with-path-in-maintainer-script postinst:22 /usr/bin/sshcommand
|
||||||
dokku: maintainer-script-calls-systemctl postinst:87
|
dokku: maintainer-script-calls-systemctl postinst:98
|
||||||
dokku: changelog-file-missing-in-native-package
|
dokku: changelog-file-missing-in-native-package
|
||||||
dokku: statically-linked-binary
|
dokku: statically-linked-binary
|
||||||
dokku: unstripped-binary-or-object
|
dokku: unstripped-binary-or-object
|
||||||
@@ -10,3 +10,6 @@ dokku: hardening-no-relro
|
|||||||
|
|
||||||
# Built golang binaries link to libc
|
# Built golang binaries link to libc
|
||||||
dokku: missing-dependency-on-libc
|
dokku: missing-dependency-on-libc
|
||||||
|
|
||||||
|
# Temporary python dependency until #2247 is resolved
|
||||||
|
dokku: python-script-but-no-python-dep usr/share/dokku/contrib/dokku-installer.py
|
||||||
|
|||||||
221
debian/postinst
vendored
221
debian/postinst
vendored
@@ -26,6 +26,124 @@ call-sshcommand() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup-user() {
|
||||||
|
echo "Setting up dokku user"
|
||||||
|
call-sshcommand create dokku /usr/bin/dokku
|
||||||
|
grep -i -E "^docker" /etc/group || groupadd docker
|
||||||
|
usermod -aG docker dokku
|
||||||
|
mkdir -p "$DOKKU_ROOT/.ssh" "$DOKKU_ROOT/.dokkurc"
|
||||||
|
touch "$DOKKU_ROOT/.ssh/authorized_keys"
|
||||||
|
chown -R dokku:dokku "$DOKKU_ROOT/.ssh" "${DOKKU_ROOT}/.dokkurc"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-storage() {
|
||||||
|
echo "Setting up storage directories"
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/data" "${DOKKU_LIB_ROOT}/data/storage"
|
||||||
|
chown dokku:dokku "${DOKKU_LIB_ROOT}/data"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-plugins() {
|
||||||
|
echo "Setting up plugin directories"
|
||||||
|
# should be replaced by `plugn init`
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/available" "${DOKKU_LIB_ROOT}/plugins/available"
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/enabled" "${DOKKU_LIB_ROOT}/plugins/enabled"
|
||||||
|
touch "${DOKKU_LIB_ROOT}/core-plugins/config.toml" "${DOKKU_LIB_ROOT}/plugins/config.toml"
|
||||||
|
|
||||||
|
echo "Migrating old plugins"
|
||||||
|
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||||
|
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
||||||
|
continue
|
||||||
|
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
|
||||||
|
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
|
||||||
|
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
||||||
|
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
db_get "dokku/nginx_enable"
|
||||||
|
echo "Enabling all core plugins"
|
||||||
|
find "${DOKKU_LIB_ROOT}/core-plugins/available" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||||
|
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
|
||||||
|
echo "Skipping enable of nginx-vhosts plugin"
|
||||||
|
continue
|
||||||
|
elif [ ! -d "${DOKKU_LIB_ROOT}/plugins/available/$plugin" ]; then
|
||||||
|
ln -s "${DOKKU_LIB_ROOT}/core-plugins/available/$plugin" "${DOKKU_LIB_ROOT}/plugins/available/$plugin"
|
||||||
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/core-plugins" plugn enable "$plugin"
|
||||||
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/plugins" plugn enable "$plugin"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
find -L "${DOKKU_LIB_ROOT}" -type l -delete
|
||||||
|
chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins"
|
||||||
|
|
||||||
|
echo "Install all core plugins"
|
||||||
|
dokku plugin:install --core
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-sshcommand() {
|
||||||
|
echo "Ensure proper sshcommand path"
|
||||||
|
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
|
||||||
|
if [[ -f .ssh/authorized_keys ]]; then
|
||||||
|
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
|
||||||
|
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-dokku-installer() {
|
||||||
|
NGINX_ROOT="/etc/nginx"
|
||||||
|
[[ -x /usr/bin/openresty ]] && NGINX_ROOT="/usr/local/openresty/nginx/conf"
|
||||||
|
|
||||||
|
if command -v "python3" &>/dev/null; then
|
||||||
|
sed -i '1 s/^.*$/#!\/usr\/bin\/env python3/' /usr/share/dokku/contrib/dokku-installer.py
|
||||||
|
elif command -v "python2.7" &>/dev/null; then
|
||||||
|
sed -i '1 s/^.*$/#!\/usr\/bin\/env python2.7/' /usr/share/dokku/contrib/dokku-installer.py
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "$NGINX_ROOT/conf.d/dokku-installer.conf" ]]; then
|
||||||
|
echo "Setting up dokku-installer"
|
||||||
|
/usr/share/dokku/contrib/dokku-installer.py onboot
|
||||||
|
|
||||||
|
if command -v systemctl &>/dev/null; then
|
||||||
|
echo "Enabling dokku-installer"
|
||||||
|
systemctl enable dokku-installer
|
||||||
|
fi
|
||||||
|
|
||||||
|
installer_status="$(service dokku-installer status 2>/dev/null || true)"
|
||||||
|
if echo $installer_status | grep -Eq "(inactive|waiting)" >/dev/null; then
|
||||||
|
echo "Starting dokku-installer"
|
||||||
|
service dokku-installer start || echo "Unable to start dokku-installer"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dpkg-handling() {
|
||||||
|
db_get "dokku/web_config"
|
||||||
|
if [ "$RET" = "true" ]; then
|
||||||
|
db_stop
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
|
||||||
|
echo "VHOST file detected, skipping modification"
|
||||||
|
else
|
||||||
|
db_get "dokku/vhost_enable"
|
||||||
|
if [ "$RET" = "true" ]; then
|
||||||
|
db_get "dokku/hostname"
|
||||||
|
echo "Setting VHOST contents to $RET"
|
||||||
|
echo "$RET" >"${DOKKU_ROOT}/VHOST"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
db_get "dokku/hostname"
|
||||||
|
echo "$RET" >"${DOKKU_ROOT}/HOSTNAME"
|
||||||
|
|
||||||
|
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
||||||
|
db_get "dokku/key_file"
|
||||||
|
if [ -f "$RET" ]; then
|
||||||
|
call-sshcommand acl-add dokku default <"$RET" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
abort-upgrade | abort-remove | abort-deconfigure) ;;
|
abort-upgrade | abort-remove | abort-deconfigure) ;;
|
||||||
|
|
||||||
@@ -33,103 +151,16 @@ case "$1" in
|
|||||||
configure)
|
configure)
|
||||||
mandb
|
mandb
|
||||||
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
||||||
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
|
if [[ -f /sbin/modprobe ]]; then
|
||||||
call-sshcommand create dokku /usr/bin/dokku
|
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
|
||||||
|
|
||||||
egrep -i "^docker" /etc/group || groupadd docker
|
|
||||||
usermod -aG docker dokku
|
|
||||||
|
|
||||||
echo "Setting up storage directories"
|
|
||||||
mkdir -p ${DOKKU_LIB_ROOT}/data ${DOKKU_LIB_ROOT}/data/storage
|
|
||||||
chown dokku:dokku ${DOKKU_LIB_ROOT}/data ${DOKKU_LIB_ROOT}/data/storage
|
|
||||||
|
|
||||||
echo "Setting up plugin directories"
|
|
||||||
# should be replaced by `plugn init`
|
|
||||||
mkdir -p ${DOKKU_LIB_ROOT}/core-plugins/available ${DOKKU_LIB_ROOT}/plugins/available
|
|
||||||
mkdir -p ${DOKKU_LIB_ROOT}/core-plugins/enabled ${DOKKU_LIB_ROOT}/plugins/enabled
|
|
||||||
touch ${DOKKU_LIB_ROOT}/core-plugins/config.toml ${DOKKU_LIB_ROOT}/plugins/config.toml
|
|
||||||
|
|
||||||
echo "Migrating old plugins"
|
|
||||||
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
||||||
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
|
||||||
continue
|
|
||||||
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
|
|
||||||
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
|
|
||||||
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
|
||||||
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
db_get "dokku/nginx_enable"
|
|
||||||
echo "Enabling all core plugins"
|
|
||||||
find ${DOKKU_LIB_ROOT}/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
|
||||||
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
|
|
||||||
echo "Skipping enable of nginx-vhosts plugin"
|
|
||||||
continue
|
|
||||||
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
|
||||||
ln -s ${DOKKU_LIB_ROOT}/core-plugins/available/$plugin ${DOKKU_LIB_ROOT}/plugins/available/$plugin
|
|
||||||
PLUGIN_PATH=${DOKKU_LIB_ROOT}/core-plugins plugn enable $plugin
|
|
||||||
PLUGIN_PATH=${DOKKU_LIB_ROOT}/plugins plugn enable $plugin
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
find -L ${DOKKU_LIB_ROOT} -type l -delete
|
|
||||||
chown dokku:dokku -R ${DOKKU_LIB_ROOT}/plugins ${DOKKU_LIB_ROOT}/core-plugins
|
|
||||||
|
|
||||||
echo "Ensure proper sshcommand path"
|
|
||||||
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
|
|
||||||
if [[ -f .ssh/authorized_keys ]]; then
|
|
||||||
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
||||||
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Install all core plugins"
|
setup-user
|
||||||
dokku plugin:install --core
|
setup-storage
|
||||||
|
setup-plugins
|
||||||
rm -f ${DOKKU_ROOT}/VERSION
|
setup-sshcommand
|
||||||
cp ${DOKKU_LIB_ROOT}/STABLE_VERSION ${DOKKU_ROOT}/VERSION
|
setup-dokku-installer
|
||||||
|
dpkg-handling
|
||||||
if [[ -f /etc/nginx/conf.d/dokku-installer.conf ]]; then
|
|
||||||
echo "Setting up dokku-installer"
|
|
||||||
/usr/share/dokku/contrib/dokku-installer.py onboot
|
|
||||||
|
|
||||||
if command -v systemctl &>/dev/null; then
|
|
||||||
echo "Enabling dokku-installer"
|
|
||||||
systemctl enable dokku-installer
|
|
||||||
fi
|
|
||||||
|
|
||||||
installer_status="$(service dokku-installer status 2>/dev/null || true)"
|
|
||||||
if echo $installer_status | grep -Eq "(inactive|waiting)" >/dev/null; then
|
|
||||||
echo "Starting dokku-installer"
|
|
||||||
service dokku-installer start || echo "Unable to start dokku-installer"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
db_get "dokku/web_config"
|
|
||||||
if [ "$RET" = "true" ]; then
|
|
||||||
db_stop
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
|
|
||||||
echo "VHOST file detected, skipping modification"
|
|
||||||
else
|
|
||||||
db_get "dokku/vhost_enable"
|
|
||||||
if [ "$RET" = "true" ]; then
|
|
||||||
db_get "dokku/hostname"
|
|
||||||
echo "Setting VHOST contents to $RET"
|
|
||||||
echo "$RET" >"${DOKKU_ROOT}/VHOST"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
db_get "dokku/hostname"
|
|
||||||
echo "$RET" >"${DOKKU_ROOT}/HOSTNAME"
|
|
||||||
|
|
||||||
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
|
||||||
db_get "dokku/key_file"
|
|
||||||
if [ -f "$RET" ]; then
|
|
||||||
call-sshcommand acl-add dokku default <"$RET" || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
|
|||||||
4
debian/postrm
vendored
4
debian/postrm
vendored
@@ -28,9 +28,11 @@ main() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$1" == "purge" ]]; then
|
if [[ "$1" == "purge" ]]; then
|
||||||
|
rm -f /usr/local/openresty/nginx/conf/conf.d/dokku.conf
|
||||||
|
rm -f /usr/local/openresty/nginx/conf/conf.d/dokku-installer.conf
|
||||||
rm -f /etc/nginx/conf.d/dokku.conf
|
rm -f /etc/nginx/conf.d/dokku.conf
|
||||||
rm -f /etc/nginx/conf.d/dokku-installer.conf
|
rm -f /etc/nginx/conf.d/dokku-installer.conf
|
||||||
rm -f ${DOKKU_ROOT}/.dokkurc ${DOKKU_ROOT}/dokkurc ${DOKKU_ROOT}/tls
|
rm -rf ${DOKKU_ROOT}/.dokkurc ${DOKKU_ROOT}/dokkurc ${DOKKU_ROOT}/tls
|
||||||
rm -f ${DOKKU_ROOT}/.ssh/authorized_keys ${DOKKU_ROOT}/.sshcommand
|
rm -f ${DOKKU_ROOT}/.ssh/authorized_keys ${DOKKU_ROOT}/.sshcommand
|
||||||
rm -f ${DOKKU_ROOT}/ENV ${DOKKU_ROOT}/HOSTNAME ${DOKKU_ROOT}/VERSION
|
rm -f ${DOKKU_ROOT}/ENV ${DOKKU_ROOT}/HOSTNAME ${DOKKU_ROOT}/VERSION
|
||||||
rm -rf ${DOKKU_ROOT}/.cache
|
rm -rf ${DOKKU_ROOT}/.cache
|
||||||
|
|||||||
79
debian/preinst
vendored
79
debian/preinst
vendored
@@ -7,51 +7,62 @@ if [[ -e /usr/share/debconf/confmodule ]]; then
|
|||||||
. /usr/share/debconf/confmodule
|
. /usr/share/debconf/confmodule
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
setup_dokku_installer() {
|
||||||
|
NGINX_BASE_PATH="$1"
|
||||||
|
NGINX_INIT_NAME="$2"
|
||||||
|
|
||||||
|
NGINX_CONF="${NGINX_BASE_PATH}/conf.d/dokku-installer.conf"
|
||||||
|
|
||||||
|
rm -f $NGINX_CONF
|
||||||
|
touch $NGINX_CONF
|
||||||
|
|
||||||
|
{
|
||||||
|
echo 'upstream dokku-installer { server 127.0.0.1:2000; }'
|
||||||
|
echo 'server {'
|
||||||
|
echo ' listen 80;'
|
||||||
|
echo ' location / {'
|
||||||
|
echo ' proxy_pass http://dokku-installer;'
|
||||||
|
echo ' }'
|
||||||
|
echo '}'
|
||||||
|
} >>$NGINX_CONF
|
||||||
|
|
||||||
|
rm -f $NGINX_BASE_PATH/sites-enabled/*
|
||||||
|
DOKKU_DISTRO="$(
|
||||||
|
. /etc/os-release >/dev/null 2>&1 || true
|
||||||
|
echo "$ID"
|
||||||
|
)"
|
||||||
|
case "$DOKKU_DISTRO" in
|
||||||
|
debian)
|
||||||
|
/usr/sbin/invoke-rc.d "$NGINX_INIT_NAME" reload || /usr/sbin/invoke-rc.d "$NGINX_INIT_NAME" start
|
||||||
|
;;
|
||||||
|
ubuntu)
|
||||||
|
if [[ -x /usr/bin/sv ]]; then
|
||||||
|
/usr/bin/sv reload "$NGINX_INIT_NAME" || /usr/bin/sv start "$NGINX_INIT_NAME"
|
||||||
|
else
|
||||||
|
"/etc/init.d/$NGINX_INIT_NAME" reload || "/etc/init.d/$NGINX_INIT_NAME" start
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
install)
|
install)
|
||||||
db_get "dokku/web_config"
|
db_get "dokku/web_config"
|
||||||
if [ "$RET" = "true" ]; then
|
if [ "$RET" = "true" ]; then
|
||||||
NGINX_CONF="/etc/nginx/conf.d/dokku-installer.conf"
|
if [[ -x /usr/bin/openresty ]]; then
|
||||||
|
setup_dokku_installer "/usr/local/openresty/nginx/conf" "openresty"
|
||||||
rm -f $NGINX_CONF
|
else
|
||||||
touch $NGINX_CONF
|
setup_dokku_installer "/etc/nginx" "nginx"
|
||||||
|
fi
|
||||||
{
|
|
||||||
echo 'upstream dokku-installer { server 127.0.0.1:2000; }'
|
|
||||||
echo 'server {'
|
|
||||||
echo ' listen 80;'
|
|
||||||
echo ' location / {'
|
|
||||||
echo ' proxy_pass http://dokku-installer;'
|
|
||||||
echo ' }'
|
|
||||||
echo '}'
|
|
||||||
} >>$NGINX_CONF
|
|
||||||
|
|
||||||
rm -f /etc/nginx/sites-enabled/*
|
|
||||||
DOKKU_DISTRO="$(
|
|
||||||
. /etc/os-release >/dev/null 2>&1 || true
|
|
||||||
echo "$ID"
|
|
||||||
)"
|
|
||||||
case "$DOKKU_DISTRO" in
|
|
||||||
debian)
|
|
||||||
NGINX_INIT="/usr/sbin/invoke-rc.d"
|
|
||||||
"$NGINX_INIT" nginx reload || "$NGINX_INIT" nginx start
|
|
||||||
;;
|
|
||||||
ubuntu)
|
|
||||||
NGINX_INIT="/etc/init.d/nginx"
|
|
||||||
"$NGINX_INIT" reload || "$NGINX_INIT" start
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
db_get "dokku/skip_key_file"
|
db_get "dokku/skip_key_file"
|
||||||
if [ -z "${DEBCONF_RECONFIGURE}" ] && [ "$RET" != "true" ]; then
|
if [ -z "${DEBCONF_RECONFIGURE}" ] && [ "$RET" != "true" ]; then
|
||||||
db_get "dokku/key_file"
|
db_get "dokku/key_file"
|
||||||
if [ ! -f "$RET" ]; then
|
if [ ! -f "$RET" ]; then
|
||||||
echo "Error: keyfile '$RET' not found."
|
echo "Error: keyfile '$RET' not found." >&2
|
||||||
echo " you can enter a new keyfile path when you restart the installation."
|
echo " To deploy, you will need to generate a keypair and add with 'dokku ssh-keys:add'." >&2
|
||||||
db_reset "dokku/key_file"
|
db_reset "dokku/key_file"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|||||||
2
debian/prerm
vendored
2
debian/prerm
vendored
@@ -33,7 +33,7 @@ main() {
|
|||||||
echo "Processing purge"
|
echo "Processing purge"
|
||||||
|
|
||||||
echo "Destroying deployed applications"
|
echo "Destroying deployed applications"
|
||||||
for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps); do
|
for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps:list); do
|
||||||
dokku --force apps:destroy $app
|
dokku --force apps:destroy $app
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
4
docker/etc/cron.d/dokku-retire
Normal file
4
docker/etc/cron.d/dokku-retire
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
PATH=/usr/local/bin:/usr/bin:/bin
|
||||||
|
SHELL=/bin/bash
|
||||||
|
|
||||||
|
*/5 * * * * root /usr/bin/dokku ps:retire >> /var/log/dokku/retire.log 2>&1
|
||||||
9
docker/etc/logrotate.d/services
Normal file
9
docker/etc/logrotate.d/services
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/var/log/services/*[!0-9z] {
|
||||||
|
daily
|
||||||
|
missingok
|
||||||
|
rotate 7
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
|
notifempty
|
||||||
|
copytruncate
|
||||||
|
}
|
||||||
73
docker/etc/my_init.d/10_dokku_init
Executable file
73
docker/etc/my_init.d/10_dokku_init
Executable file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
log-info() {
|
||||||
|
declare desc="Log info formatter"
|
||||||
|
echo " $*" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
log-fail() {
|
||||||
|
declare desc="Log fail formatter"
|
||||||
|
echo "! $*" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local NGINX_ROOT
|
||||||
|
|
||||||
|
if [[ ! -d /mnt/dokku ]]; then
|
||||||
|
log-info "Creating missing /mnt/dokku"
|
||||||
|
mkdir -p /mnt/dokku
|
||||||
|
fi
|
||||||
|
|
||||||
|
directories=("/etc/ssh" "/home/dokku" "/var/lib/dokku/config" "/var/lib/dokku/data")
|
||||||
|
for dir in "${directories[@]}"; do
|
||||||
|
if [[ ! -e "$dir" ]]; then
|
||||||
|
log-info "Copying ${dir} skel into place"
|
||||||
|
mkdir -p "/mnt/dokku${dir}"
|
||||||
|
rsync -a "/skel${dir}/" "${dir}/" || log-fail "Unable to copy ${dir} skel into place"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# chown mount directories to "dokku:dokku"
|
||||||
|
if [[ "$dir" != "/etc/ssh" ]]; then
|
||||||
|
find "$dir" -print0 | xargs -0 chown -h dokku:dokku
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -f /mnt/dokku/plugin-list ]]; then
|
||||||
|
while read line; do
|
||||||
|
dokku plugin:install "$(echo "$line" | awk '{print $2}')" "$(echo "$line" | cut -d':' -f1)"
|
||||||
|
done </mnt/dokku/plugin-list
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$DOKKU_HOSTNAME" ]]; then
|
||||||
|
echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections
|
||||||
|
echo "dokku dokku/vhost_enable boolean true" | debconf-set-selections
|
||||||
|
dokku --quiet domains:set-global "$DOKKU_HOSTNAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -x /usr/local/bin/docker ]]; then
|
||||||
|
mkdir -p /home/dokku/.dokkurc
|
||||||
|
echo "export DOCKER_BIN=/usr/local/bin/docker" >"/home/dokku/.dokkurc/DOCKER_BIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
NGINX_ROOT="/etc/nginx"
|
||||||
|
if [[ -x /usr/bin/openresty ]]; then
|
||||||
|
NGINX_ROOT="/usr/local/openresty/nginx/conf"
|
||||||
|
rm -rf /etc/runit/runsvdir/default/nginx
|
||||||
|
else
|
||||||
|
rm -rf /etc/runit/runsvdir/default/openresty
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "/mnt/dokku${NGINX_ROOT}/dhparam.pem" ]]; then
|
||||||
|
mkdir -p "/mnt/dokku${NGINX_ROOT}"
|
||||||
|
openssl dhparam -out "/mnt/dokku${NGINX_ROOT}/dhparam.pem" 2048
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${NGINX_ROOT}/conf.d"
|
||||||
|
cp -f "/mnt/dokku${NGINX_ROOT}/dhparam.pem" "${NGINX_ROOT}/dhparam.pem"
|
||||||
|
chown root:root "${NGINX_ROOT}/dhparam.pem"
|
||||||
|
chown root:root "${NGINX_ROOT}/conf.d"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
15
docker/etc/runit/runsvdir/default/dokku-restore/finish
Executable file
15
docker/etc/runit/runsvdir/default/dokku-restore/finish
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/dokku-restore
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
if [[ "$1" -ne 0 ]]; then
|
||||||
|
echo "Error restoring dokku apps! Retrying in 30 seconds..."
|
||||||
|
exec sleep 30
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Done restoring dokku apps."
|
||||||
|
exec sleep infinity
|
||||||
|
|
||||||
|
exit 0
|
||||||
9
docker/etc/runit/runsvdir/default/dokku-restore/run
Executable file
9
docker/etc/runit/runsvdir/default/dokku-restore/run
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/dokku-restore
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running dokku-restore"
|
||||||
|
cd /tmp || exit 1
|
||||||
|
|
||||||
|
exec dokku ps:restore
|
||||||
7
docker/etc/runit/runsvdir/default/nginx/run
Executable file
7
docker/etc/runit/runsvdir/default/nginx/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/nginx
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running nginx"
|
||||||
|
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
|
||||||
7
docker/etc/runit/runsvdir/default/openresty/run
Executable file
7
docker/etc/runit/runsvdir/default/openresty/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/openresty
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running openresty"
|
||||||
|
exec /usr/bin/openresty -c /usr/local/openresty/nginx/conf/nginx.conf -g "daemon off;"
|
||||||
7
docker/etc/runit/runsvdir/default/rsyslog/run
Executable file
7
docker/etc/runit/runsvdir/default/rsyslog/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/rsyslog
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running rsyslog"
|
||||||
|
exec /usr/sbin/rsyslogd -n
|
||||||
1
docker/etc/sudoers.d/dokku-docker
Normal file
1
docker/etc/sudoers.d/dokku-docker
Normal file
@@ -0,0 +1 @@
|
|||||||
|
dokku ALL=NOPASSWD:SETENV:/usr/bin/docker
|
||||||
20
docker/usr/local/bin/docker
Executable file
20
docker/usr/local/bin/docker
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs docker commands as sudo"
|
||||||
|
local DOCKER_BIN=""
|
||||||
|
if [[ -x "/usr/bin/docker" ]]; then
|
||||||
|
DOCKER_BIN="/usr/bin/docker"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DOCKER_BIN" ]]; then
|
||||||
|
echo "! No docker binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$DOCKER_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
30
docker/usr/local/openresty/nginx/conf/nginx.conf
Normal file
30
docker/usr/local/openresty/nginx/conf/nginx.conf
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
user www-data;
|
||||||
|
worker_processes auto;
|
||||||
|
pid /run/openresty.pid;
|
||||||
|
include /usr/local/openresty/nginx/conf/modules-enabled/*.conf;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 768;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
|
||||||
|
include /usr/local/openresty/nginx/conf/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
access_log /var/log/openresty/access.log;
|
||||||
|
error_log /var/log/openresty/error.log;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
include /usr/local/openresty/nginx/conf/conf.d/*.conf;
|
||||||
|
include /usr/local/openresty/nginx/conf/sites-enabled/*;
|
||||||
|
}
|
||||||
@@ -26,8 +26,7 @@ dokku postgres:import [db_name] < [db_name].dump
|
|||||||
|
|
||||||
Dokku doesn't enforce a [300mb](https://devcenter.heroku.com/articles/slug-compiler#slug-size) limit on apps, but it's best practice to keep binary assets outside of git. Since containers are considered volatile in Dokku, external stores like s3 or storage mounts should be used for non-volatile items like user uploads. The Dokku storage core plugin can be used to mount local directories / volumes inside the docker container.
|
Dokku doesn't enforce a [300mb](https://devcenter.heroku.com/articles/slug-compiler#slug-size) limit on apps, but it's best practice to keep binary assets outside of git. Since containers are considered volatile in Dokku, external stores like s3 or storage mounts should be used for non-volatile items like user uploads. The Dokku storage core plugin can be used to mount local directories / volumes inside the docker container.
|
||||||
|
|
||||||
See the [persistent storage documentation](/docs/advanced-usage/persistent-storage.md) for more details.
|
See the [persistent storage documentation](/docs/advanced-usage/persistent-storage.md) for more information on how to attach persistent storage to your application.
|
||||||
|
|
||||||
|
|
||||||
## Disaster Recovery
|
## Disaster Recovery
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,11 @@ Each "phase" has different expectations and limitations:
|
|||||||
- Priming or invalidating cache stores
|
- Priming or invalidating cache stores
|
||||||
- Running database migrations
|
- Running database migrations
|
||||||
|
|
||||||
|
Additionally, if using a Dockerfile with an `ENTRYPOINT`, the deployment task is passed to that entrypoint as is.
|
||||||
|
|
||||||
Please keep the above in mind when utilizing deployment tasks.
|
Please keep the above in mind when utilizing deployment tasks.
|
||||||
|
|
||||||
> To execute commands on the host during a release phase, see the [plugin creation documentation](/docs/development/plugin-creation) docs for more information on building your own custom plugin.
|
> To execute commands on the host during a release phase, see the [plugin creation documentation](/docs/development/plugin-creation.md) docs for more information on building your own custom plugin.
|
||||||
|
|
||||||
## `app.json` deployment tasks
|
## `app.json` deployment tasks
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ Pass [options](https://docs.docker.com/engine/reference/run/) to Docker during D
|
|||||||
|
|
||||||
```
|
```
|
||||||
docker-options:add <app> <phase(s)> OPTION # Add Docker option to app for phase (comma-separated phase list)
|
docker-options:add <app> <phase(s)> OPTION # Add Docker option to app for phase (comma-separated phase list)
|
||||||
|
docker-options:clear <app> [<phase(s)>...] # Clear a docker options from application
|
||||||
docker-options:remove <app> <phase(s)> OPTION # Remove Docker option from app for phase (comma-separated phase list)
|
docker-options:remove <app> <phase(s)> OPTION # Remove Docker option from app for phase (comma-separated phase list)
|
||||||
docker-options:report [<app>] [<flag>] # Displays a docker options report for one or more apps
|
docker-options:report [<app>] [<flag>] # Displays a docker options report for one or more apps
|
||||||
```
|
```
|
||||||
@@ -24,6 +25,10 @@ Dokku deploys your application in multiple "phases" and the `docker-options` plu
|
|||||||
- `deploy`: the container that executes your running/deployed application
|
- `deploy`: the container that executes your running/deployed application
|
||||||
- `run`: the container that executes any arbitrary command via `dokku run`
|
- `run`: the container that executes any arbitrary command via `dokku run`
|
||||||
|
|
||||||
|
Manipulation of docker options will not restart running containers. This enables multiple options to be set/unset before final application. As such, changing an app's docker options must be followed by a `dokku ps:rebuild` in order to take effect.
|
||||||
|
|
||||||
|
More information on supported Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
### Add Docker options
|
### Add Docker options
|
||||||
@@ -44,6 +49,37 @@ dokku docker-options:add node-js-app run "-v /var/log/node-js-app:/app/logs"
|
|||||||
dokku docker-options:remove node-js-app run "-v /var/log/node-js-app:/app/logs"
|
dokku docker-options:remove node-js-app run "-v /var/log/node-js-app:/app/logs"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Clear all Docker options for an app
|
||||||
|
|
||||||
|
Docker options can be removed for a specific app using the `docker-options:clear` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on all phases
|
||||||
|
```
|
||||||
|
|
||||||
|
One or more valid phases can also be specified. Phases are comma delimited, and specifying an invalid phase will result in an error.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app run
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on phase run
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app build,run
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on phase build
|
||||||
|
-----> Clearing docker-options for node-js-app on phase run
|
||||||
|
```
|
||||||
|
|
||||||
### Displaying docker-options reports for an app
|
### Displaying docker-options reports for an app
|
||||||
|
|
||||||
> New as of 0.8.1
|
> New as of 0.8.1
|
||||||
@@ -87,25 +123,3 @@ You can pass flags which will output only the value of the specific information
|
|||||||
```shell
|
```shell
|
||||||
dokku docker-options:report node-js-app --docker-options-build
|
dokku docker-options:report node-js-app --docker-options-build
|
||||||
```
|
```
|
||||||
|
|
||||||
## Advanced usage
|
|
||||||
|
|
||||||
In your applications folder `/home/dokku/app_name` create a file called `DOCKER_OPTIONS_RUN` (or `DOCKER_OPTIONS_BUILD` or `DOCKER_OPTIONS_DEPLOY`).
|
|
||||||
|
|
||||||
Inside this file list one Docker option per line. For example:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
--link container_name:alias
|
|
||||||
-v /host/path:/container/path
|
|
||||||
-v /another/container/path
|
|
||||||
```
|
|
||||||
|
|
||||||
The above example will result in the following options being passed to Docker during `dokku run`:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
--link container_name:alias -v /host/path:/container/path -v /another/container/path
|
|
||||||
```
|
|
||||||
|
|
||||||
You may also include comments (lines beginning with a #) and blank lines in the DOCKER_OPTIONS file.
|
|
||||||
|
|
||||||
More information on Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.
|
|
||||||
|
|||||||
@@ -147,4 +147,4 @@ By default, Dokku will execute your buildpack application processes as the `hero
|
|||||||
|
|
||||||
> NOTE: this user must exist in your herokuish image.
|
> NOTE: this user must exist in your herokuish image.
|
||||||
|
|
||||||
Additionally, the default `docker-local` scheduler that comes with Dokku will ensure your storage mounts are owned by either `herokuishuser` or the overridden value you have set in `DOKKU_APP_USER`. See the [scheduler-docker-local documentation](/docs/advanced-usage/schedulers/docker-local.md#disabling-chown-of-persistent-storage) docs for more information.
|
Additionally, the default `docker-local` scheduler that comes with Dokku will ensure your storage mounts are owned by either `herokuishuser` or the overridden value you have set in `DOKKU_APP_USER`. See the [docker-local scheduler documentation](/docs/advanced-usage/schedulers/docker-local.md#disabling-chown-of-persistent-storage) docs for more information.
|
||||||
|
|||||||
@@ -6,8 +6,10 @@
|
|||||||
plugin:disable <name> # Disable an installed plugin (third-party only)
|
plugin:disable <name> # Disable an installed plugin (third-party only)
|
||||||
plugin:enable <name> # Enable a previously disabled plugin
|
plugin:enable <name> # Enable a previously disabled plugin
|
||||||
plugin:install [--core|git-url [--committish tag|branch|commit|--name custom-plugin-name]] # Optionally download git-url (with custom tag/committish) & run install trigger for active plugins (or only core ones)
|
plugin:install [--core|git-url [--committish tag|branch|commit|--name custom-plugin-name]] # Optionally download git-url (with custom tag/committish) & run install trigger for active plugins (or only core ones)
|
||||||
|
plugin:installed <name> # Checks if a plugin is installed
|
||||||
plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
|
plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
|
||||||
plugin:list # Print active plugins
|
plugin:list # Print active plugins
|
||||||
|
plugin:trigger <args...>. # Trigger an arbitrary plugin hook
|
||||||
plugin:uninstall <name> # Uninstall a plugin (third-party only)
|
plugin:uninstall <name> # Uninstall a plugin (third-party only)
|
||||||
plugin:update [name [committish]] # Optionally update named plugin from git (with custom tag/committish) & run update trigger for active plugins
|
plugin:update [name [committish]] # Optionally update named plugin from git (with custom tag/committish) & run update trigger for active plugins
|
||||||
```
|
```
|
||||||
@@ -23,39 +25,49 @@ dokku plugins-install
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can list all installed plugins using the `plugin` command:
|
You can list all installed plugins using the `plugin:list` command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku plugin
|
dokku plugin:list
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
plugn: dev
|
plugn: dev
|
||||||
00_dokku-standard 0.16.2 enabled dokku core standard plugin
|
00_dokku-standard 0.22.0 enabled dokku core standard plugin
|
||||||
20_events 0.16.2 enabled dokku core events logging plugin
|
20_events 0.22.0 enabled dokku core events logging plugin
|
||||||
apps 0.16.2 enabled dokku core apps plugin
|
app-json 0.22.0 enabled dokku core app-json plugin
|
||||||
build-env 0.16.2 enabled dokku core build-env plugin
|
apps 0.22.0 enabled dokku core apps plugin
|
||||||
certs 0.16.2 enabled dokku core certificate management plugin
|
build-env 0.22.0 enabled dokku core build-env plugin
|
||||||
checks 0.16.2 enabled dokku core checks plugin
|
buildpacks 0.22.0 enabled dokku core buildpacks plugin
|
||||||
common 0.16.2 enabled dokku core common plugin
|
certs 0.22.0 enabled dokku core certificate management plugin
|
||||||
config 0.16.2 enabled dokku core config plugin
|
checks 0.22.0 enabled dokku core checks plugin
|
||||||
docker-options 0.16.2 enabled dokku core docker-options plugin
|
common 0.22.0 enabled dokku core common plugin
|
||||||
domains 0.16.2 enabled dokku core domains plugin
|
config 0.22.0 enabled dokku core config plugin
|
||||||
enter 0.16.2 enabled dokku core enter plugin
|
docker-options 0.22.0 enabled dokku core docker-options plugin
|
||||||
git 0.16.2 enabled dokku core git plugin
|
domains 0.22.0 enabled dokku core domains plugin
|
||||||
logs 0.16.2 enabled dokku core logs plugin
|
enter 0.22.0 enabled dokku core enter plugin
|
||||||
named-containers 0.16.2 enabled dokku core named containers plugin
|
git 0.22.0 enabled dokku core git plugin
|
||||||
network 0.16.2 enabled dokku core network plugin
|
logs 0.22.0 enabled dokku core logs plugin
|
||||||
nginx-vhosts 0.16.2 enabled dokku core nginx-vhosts plugin
|
network 0.22.0 enabled dokku core network plugin
|
||||||
plugin 0.16.2 enabled dokku core plugin plugin
|
nginx-vhosts 0.22.0 enabled dokku core nginx-vhosts plugin
|
||||||
proxy 0.16.2 enabled dokku core proxy plugin
|
plugin 0.22.0 enabled dokku core plugin plugin
|
||||||
ps 0.16.2 enabled dokku core ps plugin
|
proxy 0.22.0 enabled dokku core proxy plugin
|
||||||
repo 0.16.2 enabled dokku core repo plugin
|
ps 0.22.0 enabled dokku core ps plugin
|
||||||
shell 0.16.2 enabled dokku core shell plugin
|
repo 0.22.0 enabled dokku core repo plugin
|
||||||
ssh-keys 0.16.2 enabled dokku core ssh-keys plugin
|
resource 0.22.0 enabled dokku core resource plugin
|
||||||
storage 0.16.2 enabled dokku core storage plugin
|
scheduler-docker-local 0.22.0 enabled dokku core scheduler-docker-local plugin
|
||||||
tags 0.16.2 enabled dokku core tags plugin
|
shell 0.22.0 enabled dokku core shell plugin
|
||||||
tar 0.16.2 enabled dokku core tar plugin
|
ssh-keys 0.22.0 enabled dokku core ssh-keys plugin
|
||||||
|
storage 0.22.0 enabled dokku core storage plugin
|
||||||
|
tags 0.22.0 enabled dokku core tags plugin
|
||||||
|
tar 0.22.0 enabled dokku core tar plugin
|
||||||
|
trace 0.22.0 enabled dokku core trace plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
You can check if a plugin has been installed via the `plugin:installed` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:installed postgres
|
||||||
```
|
```
|
||||||
|
|
||||||
Installing a plugin is easy as well using the `plugin:install` command. This command will also trigger the `install` pluginhook on all existing plugins.
|
Installing a plugin is easy as well using the `plugin:install` command. This command will also trigger the `install` pluginhook on all existing plugins.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ The resource plugin is meant to allow users to limit or reserve resources for a
|
|||||||
|
|
||||||
By default, Dokku allows unlimited resource access to apps deployed on a server. In some cases, it may be desirable to limit this on a per-app or per-process-type basis. The `resource` plugin allows management of both resource "limits" and resource "reservations", where each resource request type has specific meaning to the scheduler in use for a given app.
|
By default, Dokku allows unlimited resource access to apps deployed on a server. In some cases, it may be desirable to limit this on a per-app or per-process-type basis. The `resource` plugin allows management of both resource "limits" and resource "reservations", where each resource request type has specific meaning to the scheduler in use for a given app.
|
||||||
|
|
||||||
> The meaning of a values and it's units are specific to the scheduler in use for a given app. If a scheduler does not support a given resource type combination, it will be ignored. All resource commands require an app rebuild or deploy in order to take effect.
|
> Warning: The meaning of a values and it's units are specific to the scheduler in use for a given app. If a value is incorrect for a scheduler, this may result in containers failing to start correctly. If a scheduler does not support a given resource type combination, it will be ignored. All resource commands require an app rebuild or deploy in order to take effect.
|
||||||
|
|
||||||
Valid resource options include:
|
Valid resource options include:
|
||||||
|
|
||||||
@@ -26,6 +26,9 @@ Valid resource options include:
|
|||||||
- `--network`
|
- `--network`
|
||||||
- `--network-ingress`
|
- `--network-ingress`
|
||||||
- `--network-egress`
|
- `--network-egress`
|
||||||
|
- `--nvidia-gpu`
|
||||||
|
|
||||||
|
See the [Supported Resource Management Properties](/docs/advanced-usage/schedulers/docker-local.md#supported-resource-management-properties) section of the docker local scheduler documentation for more information on how each resource limit maps to Docker.
|
||||||
|
|
||||||
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
|
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
|
||||||
|
|
||||||
@@ -70,75 +73,39 @@ dokku resource:limit --cpu 100 --memory 100 --process-type worker node-js-app
|
|||||||
|
|
||||||
#### Displaying Resource Limits
|
#### Displaying Resource Limits
|
||||||
|
|
||||||
Running the `resource:limits` command without any flags will display the currently configured app reservation.
|
Running the `resource:limit` command without any flags will display the currently configured default app limits.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku resource:limits node-js-app
|
dokku resource:limit node-js-app
|
||||||
=====> resource limits node-js-app information
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource limits node-js-app information [defaults]
|
||||||
|
cpu:
|
||||||
|
memory:
|
||||||
|
memory-swap: 100
|
||||||
|
network: 100
|
||||||
|
network-ingress:
|
||||||
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
This may also be combined with the `--process-type` flag to see app limits on a process-type level. Note that the displayed values are not merged with the defaults.
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --process-type web node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource limits node-js-app information (web)
|
||||||
cpu: 100
|
cpu: 100
|
||||||
memory: 100
|
memory: 100
|
||||||
memory-swap:
|
memory-swap:
|
||||||
network:
|
network:
|
||||||
network-ingress:
|
network-ingress:
|
||||||
network-egress:
|
network-egress:
|
||||||
```
|
nvidia-gpu:
|
||||||
|
|
||||||
#### Global Resource Limits
|
|
||||||
|
|
||||||
By default, Dokku does not limit any resources, though these can be specified at the server level via the `--global` flag on the `resource:limit` command.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:limit --global --memory 200
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> Setting default resource limits
|
|
||||||
memory: 200
|
|
||||||
```
|
|
||||||
|
|
||||||
This may also be combined with the `--process-type` flag to set global limits on a process-type level:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:limit --global --memory 150 --process-type web node-js-app
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> Setting default resource limits (web)
|
|
||||||
memory: 150
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Displaying Global Resource Limits
|
|
||||||
|
|
||||||
Running the `resource:limit` command with only the `--global` flag will display the currently configured default limits.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:limit --global
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> resource limits default information
|
|
||||||
cpu:
|
|
||||||
memory: 200
|
|
||||||
memory-swap:
|
|
||||||
network:
|
|
||||||
network-ingress:
|
|
||||||
network-egress:
|
|
||||||
```
|
|
||||||
|
|
||||||
This may also be combined with the `--process-type` flag to see global limits on a process-type level:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:limit --global --process-type web
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> resource limits default information (web)
|
|
||||||
cpu:
|
|
||||||
memory-swap:
|
|
||||||
memory: 150
|
|
||||||
network-egress:
|
|
||||||
network-ingress:
|
|
||||||
network:
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Clearing Resource Limits
|
#### Clearing Resource Limits
|
||||||
@@ -204,75 +171,38 @@ dokku resource:reserve --cpu 100 --memory 100 --process-type worker node-js-app
|
|||||||
|
|
||||||
#### Displaying Resource Reservations
|
#### Displaying Resource Reservations
|
||||||
|
|
||||||
Running the `resource:reserve` command without any flags will display the currently configured app reservation.
|
Running the `resource:reserve` command without any flags will display the currently configured default app reservations.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku resource:reserve node-js-app
|
dokku resource:reserve node-js-app
|
||||||
=====> resource reservation node-js-app information
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource reservation node-js-app information [defaults]
|
||||||
cpu: 100
|
cpu: 100
|
||||||
memory: 100
|
memory: 100
|
||||||
memory-swap:
|
memory-swap:
|
||||||
network:
|
network:
|
||||||
network-ingress:
|
network-ingress:
|
||||||
network-egress:
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Global Resource Reservations
|
This may also be combined with the `--process-type` flag to see app reservations on a process-type level. Note that the displayed values are not merged with the defaults.
|
||||||
|
|
||||||
By default, Dokku does not reserve any resources, though these can be specified at the server level via the `--global` flag on the `resource:reserve` command.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku resource:reserve --global --memory 200
|
dokku resource:reserve --process-type web node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> Setting default resource reservation
|
=====> resource reservation node-js-app information (web)
|
||||||
memory: 200
|
cpu: 100
|
||||||
```
|
memory: 100
|
||||||
|
|
||||||
This may also be combined with the `--process-type` flag to set global reservations on a process-type level:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:reserve --global --memory 150 --process-type web node-js-app
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> Setting default resource reservation (web)
|
|
||||||
memory: 150
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Displaying Global Resource Reservations
|
|
||||||
|
|
||||||
Running the `resource:reserve` command with only the `--global` flag will display the currently configured default reservation.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:reserve --global
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> resource reservation default information
|
|
||||||
cpu:
|
|
||||||
memory: 200
|
|
||||||
memory-swap:
|
memory-swap:
|
||||||
network:
|
network:
|
||||||
network-ingress:
|
network-ingress:
|
||||||
network-egress:
|
network-egress:
|
||||||
```
|
nvidia-gpu:
|
||||||
|
|
||||||
This may also be combined with the `--process-type` flag to see global reservations on a process-type level:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku resource:reserve --global --process-type web
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> resource reservation default information (web)
|
|
||||||
cpu:
|
|
||||||
memory-swap:
|
|
||||||
memory: 150
|
|
||||||
network-egress:
|
|
||||||
network-ingress:
|
|
||||||
network:
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Clearing Resource Reservations
|
#### Clearing Resource Reservations
|
||||||
@@ -313,12 +243,14 @@ dokku resource:report
|
|||||||
web limit network: 10
|
web limit network: 10
|
||||||
web limit network ingress:
|
web limit network ingress:
|
||||||
web limit network egress:
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
web reservation cpu:
|
web reservation cpu:
|
||||||
web reservation memory: 512
|
web reservation memory: 512
|
||||||
web reservation memory swap:
|
web reservation memory swap:
|
||||||
web reservation network: 8
|
web reservation network: 8
|
||||||
web reservation network ingress:
|
web reservation network ingress:
|
||||||
web reservation network egress:
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
=====> python-sample resource information
|
=====> python-sample resource information
|
||||||
web limit cpu:
|
web limit cpu:
|
||||||
web limit memory:
|
web limit memory:
|
||||||
@@ -326,12 +258,14 @@ dokku resource:report
|
|||||||
web limit network:
|
web limit network:
|
||||||
web limit network ingress:
|
web limit network ingress:
|
||||||
web limit network egress:
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
web reservation cpu:
|
web reservation cpu:
|
||||||
web reservation memory:
|
web reservation memory:
|
||||||
web reservation memory swap:
|
web reservation memory swap:
|
||||||
web reservation network:
|
web reservation network:
|
||||||
web reservation network ingress:
|
web reservation network ingress:
|
||||||
web reservation network egress:
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
=====> ruby-sample resource information
|
=====> ruby-sample resource information
|
||||||
web limit cpu:
|
web limit cpu:
|
||||||
web limit memory:
|
web limit memory:
|
||||||
@@ -339,12 +273,14 @@ dokku resource:report
|
|||||||
web limit network:
|
web limit network:
|
||||||
web limit network ingress:
|
web limit network ingress:
|
||||||
web limit network egress:
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
web reservation cpu:
|
web reservation cpu:
|
||||||
web reservation memory:
|
web reservation memory:
|
||||||
web reservation memory swap:
|
web reservation memory swap:
|
||||||
web reservation network:
|
web reservation network:
|
||||||
web reservation network ingress:
|
web reservation network ingress:
|
||||||
web reservation network egress:
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
```
|
```
|
||||||
|
|
||||||
You can run the command for a specific app also.
|
You can run the command for a specific app also.
|
||||||
@@ -361,12 +297,14 @@ dokku resource:report node-js-app
|
|||||||
web limit network: 10
|
web limit network: 10
|
||||||
web limit network ingress:
|
web limit network ingress:
|
||||||
web limit network egress:
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
web reservation cpu:
|
web reservation cpu:
|
||||||
web reservation memory: 512
|
web reservation memory: 512
|
||||||
web reservation memory swap:
|
web reservation memory swap:
|
||||||
web reservation network: 8
|
web reservation network: 8
|
||||||
web reservation network ingress:
|
web reservation network ingress:
|
||||||
web reservation network egress:
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
```
|
```
|
||||||
|
|
||||||
You can pass flags which will output only the value of the specific information you want. For example:
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|||||||
10
docs/advanced-usage/schedulers/alternate-schedulers.md
Normal file
10
docs/advanced-usage/schedulers/alternate-schedulers.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Alternative Schedulers
|
||||||
|
|
||||||
|
In addition to the built-in [docker-local scheduler](/docs/advanced-usage/schedulers/docker-local.md), Dokku also supports two scheduler plugins:
|
||||||
|
|
||||||
|
- [Kubernetes](https://github.com/dokku/dokku-scheduler-kubernetes)
|
||||||
|
- [Nomad](https://github.com/dokku/dokku-scheduler-nomad)
|
||||||
|
|
||||||
|
These scheduler implementations may not be complete, though provide enough functionality for a user to get an app deployed via the underlying scheduler.
|
||||||
|
|
||||||
|
For users that require additional functionality, please refer to the [Sponsoring Documentation](https://github.com/dokku/.github/blob/master/SPONSORING.md).
|
||||||
@@ -44,15 +44,18 @@ This plugin implements various functionality through `plugn` triggers to integra
|
|||||||
- `check-deploy`
|
- `check-deploy`
|
||||||
- `core-post-deploy`
|
- `core-post-deploy`
|
||||||
- `post-app-clone-setup`
|
- `post-app-clone-setup`
|
||||||
|
- `post-app-rename-setup`
|
||||||
- `post-create`
|
- `post-create`
|
||||||
- `post-delete`
|
- `post-delete`
|
||||||
- `pre-deploy`
|
- `pre-deploy`
|
||||||
- `pre-restore`
|
- `pre-restore`
|
||||||
|
- `scheduler-app-status`
|
||||||
- `scheduler-deploy`
|
- `scheduler-deploy`
|
||||||
- `scheduler-docker-cleanup`
|
- `scheduler-docker-cleanup`
|
||||||
- `scheduler-inspect`
|
- `scheduler-inspect`
|
||||||
- `scheduler-logs-failed`
|
- `scheduler-is-deployed`
|
||||||
- `scheduler-logs`
|
- `scheduler-logs`
|
||||||
|
- `scheduler-logs-failed`
|
||||||
- `scheduler-retire`
|
- `scheduler-retire`
|
||||||
- `scheduler-run`
|
- `scheduler-run`
|
||||||
- `scheduler-stop`
|
- `scheduler-stop`
|
||||||
@@ -65,10 +68,16 @@ The `docker-local` scheduler supports a minimal list of resource _limits_ and _r
|
|||||||
|
|
||||||
### Resource Limits
|
### Resource Limits
|
||||||
|
|
||||||
- cpu: (docker option: `--cpus`), and is specified in number of CPUs a process can access.
|
- cpu: (docker option: `--cpus`), is specified in number of CPUs a process can access.
|
||||||
- memory: (docker option: `--memory`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
|
- See the ["CPU" section](https://docs.docker.com/config/containers/resource_constraints/#cpu) of the Docker Runtime Options documentation for more information.
|
||||||
- memory-swap: (docker option: `--memory-swap`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
|
- memory: (docker option: `--memory`) should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes).
|
||||||
|
- See the ["Memory" section](https://docs.docker.com/config/containers/resource_constraints/#memory) of the Docker Runtime Options documentation for more information.
|
||||||
|
- memory-swap: (docker option: `--memory-swap`) should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
|
||||||
|
- See the ["Memory" section](https://docs.docker.com/config/containers/resource_constraints/#memory) of the Docker Runtime Options documentation for more information.
|
||||||
|
- nvidia-gpus: (docker option: `--gpus`), is specified in number of Nvidia GPUs a process can access.
|
||||||
|
- See the ["GPU" section](https://docs.docker.com/config/containers/resource_constraints/#gpu) of the Docker Runtime Options documentation for more information.
|
||||||
|
|
||||||
### Resource Reservations
|
### Resource Reservations
|
||||||
|
|
||||||
- memory: (docker option: `--memory-reservation`) and should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
|
- memory: (docker option: `--memory-reservation`) should be specified with a suffix of `b` (bytes), `k` (kilobytes), `m` (megabytes), `g` (gigabytes)
|
||||||
|
- See the ["Memory" section](https://docs.docker.com/config/containers/resource_constraints/#memory) of the Docker Runtime Options documentation for more information.
|
||||||
|
|||||||
93
docs/appendices/0.20.0-migration-guide.md
Normal file
93
docs/appendices/0.20.0-migration-guide.md
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# 0.20.0 Migration Guide
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
### Command removals
|
||||||
|
|
||||||
|
The following commands were previously deprecated and were removed in this release.
|
||||||
|
|
||||||
|
- `apps`: Use `apps:list` instead.
|
||||||
|
- `certs`: Use `certs:report` instead.
|
||||||
|
- `certs:info`: Use `certs:report` instead.
|
||||||
|
- `checks`: Use `checks:report` instead.
|
||||||
|
- `docker-options`: Use `docker-options:report` instead.
|
||||||
|
- `domains`: Use `domains:report` instead.
|
||||||
|
- `plugin`: Use `plugin:list` instead.
|
||||||
|
- `proxy`: Use `proxy:report` instead.
|
||||||
|
- `trace`: Use `trace:on` or `trace:off` instead.
|
||||||
|
- `ps`: Use `enter` with a container ID instead to run `ps auxww` within a container.
|
||||||
|
|
||||||
|
The refactor of the proxy plugin removes the following functions from being sourced in plugins:
|
||||||
|
|
||||||
|
- `proxy#get_app_proxy_port_map()`
|
||||||
|
- `proxy#list_app_proxy_ports()`
|
||||||
|
- `proxy#filter_app_proxy_ports()`
|
||||||
|
- `proxy#add_proxy_ports()`
|
||||||
|
- `proxy#remove_proxy_ports()`
|
||||||
|
- `proxy#set_proxy_ports()`
|
||||||
|
|
||||||
|
The informal policy is to allow removal of functions within a `functions` file if they are not used in OSS plugins. Should you be affected by any such removals, please file an issue to expose the functionality via a plugin trigger.
|
||||||
|
|
||||||
|
### Function renames
|
||||||
|
|
||||||
|
- `tar#tar_in_cmd` was renamed to `tar#cmd-tar-in`. Users should avoid using `cmd-*` commands directly, and instead file an issue to have them exposed via a plugin trigger.
|
||||||
|
- `tar#tar_from_cmd` was renamed to `tar#cmd-tar-from`. Users should avoid using `cmd-*` commands directly, and instead file an issue to have them exposed via a plugin trigger.
|
||||||
|
|
||||||
|
### Remove support for Unsupported Operating Systems
|
||||||
|
|
||||||
|
Dokku will no longer distribute packages for Ubuntu versions that have reached either End of Life or End of Standard Support (for LTS releases). This currently includes the following releases:
|
||||||
|
|
||||||
|
- Ubuntu 14.04 (trusty)
|
||||||
|
- Ubuntu 14.10 (utopic)
|
||||||
|
- Ubuntu 15.04 (vivid)
|
||||||
|
- Ubuntu 15.10 (wily)
|
||||||
|
- Ubuntu 16.10 (yakkety)
|
||||||
|
- Ubuntu 17.04 (zesty)
|
||||||
|
- Ubuntu 17.10 (artful)
|
||||||
|
|
||||||
|
Dokku will no longer distribute packages for Debian versions that are not `stable` or `oldstable`. This currently includes the following releases:
|
||||||
|
|
||||||
|
- Debian 7 (wheezy)
|
||||||
|
- Debian 8 (jessie)
|
||||||
|
|
||||||
|
### App report flags
|
||||||
|
|
||||||
|
The `--git-sha` flag was moved from the `apps:report` command to the `git:report` command.
|
||||||
|
|
||||||
|
## App report output
|
||||||
|
|
||||||
|
When an app is not deployed, the `apps:report` command no longer shows the message `not deployed`. Please use the `--deployed` flag on `ps:report` instead to see if the app has been deployed.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
### App report flags
|
||||||
|
|
||||||
|
The following changes on the `apps:report` command were made in this release:
|
||||||
|
|
||||||
|
- The `--deploy-source` flag was renamed to `--app-deploy-source`.
|
||||||
|
- The `--locked` flag was renamed to `--app-locked`.
|
||||||
|
|
||||||
|
### Network report flags
|
||||||
|
|
||||||
|
The following changes on the `network:report` command were made in this release:
|
||||||
|
|
||||||
|
- The `--network-listeners` flag was renamed to `--network-web-listeners`.
|
||||||
|
|
||||||
|
### Plugin Triggers
|
||||||
|
|
||||||
|
- The `network-get-port` trigger was incorrectly documented to have the `isHerokuishContainer` argument as the third argument. The code has been fixed to respect the documentation.
|
||||||
|
- The `network-get-listeners` trigger now takes an additional `processType` argument. If not specified, it defaults to `web`. This default will be removed in an upcoming release.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- `nginx:show-conf` has been deprecated in favor of `nginx:show-config`.
|
||||||
|
- `proxy#is_app_proxy_enabled()` is deprecated in favor of `plugn trigger proxy-is-enabled`.
|
||||||
|
- `proxy#get_app_proxy_type()` is deprecated in favor of `plugn trigger proxy-type`.
|
||||||
|
- `apps#apps_create()` is deprecated in favor of `plugn trigger app-create`.
|
||||||
|
- `apps#apps_destroy()` is deprecated in favor of `plugn trigger app-destroy`.
|
||||||
|
- `apps#apps_exists()` is deprecated in favor of `plugn trigger app-exists`.
|
||||||
|
- `apps#apps_maybe_create()` is deprecated in favor of `plugn trigger app-maybe-create`.
|
||||||
|
- `plugin trigger network-get-listeners` usage without a second `processType` argument is deprecated.
|
||||||
|
- `.NGINX_PORT` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.PROXY_PORT`.
|
||||||
|
- `.NGINX_SSL_PORT` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.PROXY_SSL_PORT`.
|
||||||
|
- `.DOKKU_APP_LISTENERS` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.DOKKU_APP_WEB_LISTENERS`.
|
||||||
18
docs/appendices/0.21.0-migration-guide.md
Normal file
18
docs/appendices/0.21.0-migration-guide.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# 0.21.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
The `tls` name is no longer a reserved app name, and can be used by applications. This was previously a reserved app name due to it's use as a place for global SSL certificate files; Dokku has not supported global SSL certificates for many releases, and thus there is no need to reserve the name.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- `git#git_deploy_branch()` is deprecated in favor of `plugn trigger git-deploy-branch`.
|
||||||
|
- The `config` command is deprecated in favor of `config:show`.
|
||||||
|
- Usage of this command in conjunction with either the `--export` or `--shell` flag is deprecated in favor of `config:export --format` with the correct format value (`exports` or `shell`, respectively).
|
||||||
|
- The `nginx:build-config` command is deprecated in favor of `proxy:build-config`.
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
The `apps:destroy` command no longer takes a second argument `force`. Instead, this can be passed as the `--force` flag, either globally or as a flag to the command itself.
|
||||||
|
|
||||||
|
The `proxy:enable` and `proxy:disable` no longer restart apps when setting the `DOKKU_DISABLE_PROXY` environment variable. A future release will disable usage of `DOKKU_DISABLE_PROXY` altogether.
|
||||||
27
docs/appendices/0.22.0-migration-guide.md
Normal file
27
docs/appendices/0.22.0-migration-guide.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# 0.22.0 Migration Guide
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- Calling `logs:failed` without either a `<name>` or the `--all` flag is deprecated.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Underscores are no longer valid characters in app names. Please rename applications before upgrading.
|
||||||
|
- Process type names specified in Procfile may no longer use characters not valid in DNS Label Names ([RFC 1123](https://tools.ietf.org/html/rfc1123)).
|
||||||
|
- The minimum Docker version is now 17.05.0.
|
||||||
|
- The `common.GetDeployingAppImageName()` function now returns an `error` as the second return argument instead of calling `common.LogFail()` internally.
|
||||||
|
- Setting `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` is deprecated; Dokku 0.23.0 will avoid removing the `remote:` ansi prefix entirely. No warning will be added in this release.
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
The `ps` command has had a few removals as a result of a rewrite to Golang:
|
||||||
|
|
||||||
|
- The `ps:set-restart-policy` command has been removed in favor the `ps:set` command.
|
||||||
|
- The `ps:restart-policy` command has been removed in favor of the `ps:report` command.
|
||||||
|
- The `ps:rebuildall` command has been removed in favor of calling the `ps:rebuild` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:restartall` command has been removed in favor of calling the `ps:restart` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:stopall` command has been removed in favor of calling the `ps:stop` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:startall` command has been removed in favor of calling the `ps:start` with the `--all` flag instead of an app name.
|
||||||
|
- The `DOKKU_PROCFILE` file is no longer located in the git directory for a given app on the server. It's location is currently not exposed.
|
||||||
|
- The `procfile-get-command` plugin trigger no longer takes a `procfile path` as the final argument.
|
||||||
|
- All `ps` functions have been removed. Please us a trigger as appropriate or file a PR to have a new trigger/wrapper function added.
|
||||||
BIN
docs/assets/dokku-large.png
Normal file
BIN
docs/assets/dokku-large.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
3006
docs/assets/dokku.ai
Normal file
3006
docs/assets/dokku.ai
Normal file
File diff suppressed because one or more lines are too long
@@ -2,10 +2,10 @@
|
|||||||
<browserconfig>
|
<browserconfig>
|
||||||
<msapplication>
|
<msapplication>
|
||||||
<tile>
|
<tile>
|
||||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/mstile-70x70.png"/>
|
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/mstile-70x70.png"/>
|
||||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/mstile-150x150.png"/>
|
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/mstile-150x150.png"/>
|
||||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/mstile-310x310.png"/>
|
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/mstile-310x310.png"/>
|
||||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/mstile-310x150.png"/>
|
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/mstile-310x150.png"/>
|
||||||
<TileColor>#da532c</TileColor>
|
<TileColor>#da532c</TileColor>
|
||||||
</tile>
|
</tile>
|
||||||
</msapplication>
|
</msapplication>
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
"name": "Dokku",
|
"name": "Dokku",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||||
"sizes": "36x36",
|
"sizes": "36x36",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "0.75"
|
"density": "0.75"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||||
"sizes": "48x48",
|
"sizes": "48x48",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "1.0"
|
"density": "1.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||||
"sizes": "72x72",
|
"sizes": "72x72",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "1.5"
|
"density": "1.5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||||
"sizes": "96x96",
|
"sizes": "96x96",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "2.0"
|
"density": "2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||||
"sizes": "144x144",
|
"sizes": "144x144",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "3.0"
|
"density": "3.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.rawgit.com\/progrium\/dokku\/v0.16.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.22.0\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "4.0"
|
"density": "4.0"
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ h1 {
|
|||||||
font-size: 1.6em;
|
font-size: 1.6em;
|
||||||
}
|
}
|
||||||
.header .navbar-brand a {
|
.header .navbar-brand a {
|
||||||
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/dokku.png);
|
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/dokku.png);
|
||||||
text-indent: 40px;
|
text-indent: 40px;
|
||||||
}
|
}
|
||||||
.blurb {
|
.blurb {
|
||||||
color: #424242;
|
color: #424242;
|
||||||
background-color: #ededed;
|
background-color: #ededed;
|
||||||
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/gplaypattern.png);
|
background-image: url(https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/gplaypattern.png);
|
||||||
padding: 45px 0;
|
padding: 45px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
"0.13.4",
|
"0.13.4",
|
||||||
"0.14.6",
|
"0.14.6",
|
||||||
"0.15.5",
|
"0.15.5",
|
||||||
"0.16.2"
|
"0.16.4",
|
||||||
|
"0.17.9",
|
||||||
|
"0.18.5",
|
||||||
|
"0.19.13",
|
||||||
|
"0.20.4",
|
||||||
|
"0.21.4",
|
||||||
|
"0.22.0"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,40 +4,9 @@ Given the constraints, running Dokku commands remotely via SSH is fine. For cert
|
|||||||
|
|
||||||
While Dokku does not yet have an official client, there are a multitude of ways in which you can interact with your Dokku installation. The easiest is to use the **bash** client, though you may wish to use another.
|
While Dokku does not yet have an official client, there are a multitude of ways in which you can interact with your Dokku installation. The easiest is to use the **bash** client, though you may wish to use another.
|
||||||
|
|
||||||
## (bash, zsh, etc.) `dokku_client.sh`
|
## Official Client
|
||||||
|
|
||||||
Of all methods, this is the *most* official method of interacting with your Dokku installation. It is a bash script that interacts with a remote Dokku installation via ssh. It is available in `contrib/dokku_client.sh` in the root of the Dokku repository.
|
See the [remote commands documentation](/docs/deployment/remote-commands.md) for more information on how to install and use the official client.
|
||||||
|
|
||||||
To install, simply clone the Dokku repository down and add the `dokku` alias pointing at the script:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
git clone git@github.com:dokku/dokku.git ~/.dokku
|
|
||||||
|
|
||||||
# optional: make sure that the dokku_client.sh version matches your Dokku version
|
|
||||||
cd ~/.dokku
|
|
||||||
git checkout <tag/branch>
|
|
||||||
|
|
||||||
# add the following to either your
|
|
||||||
# .bashrc, .bash_profile, or .profile file
|
|
||||||
alias dokku='$HOME/.dokku/contrib/dokku_client.sh'
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, if using another shell such as **zsh**, create an alias command which invokes the script using **bash**:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# zsh: add the following to either .zshenv or .zshrc
|
|
||||||
alias dokku='bash $HOME/.dokku/contrib/dokku_client.sh'
|
|
||||||
|
|
||||||
# fish: add the following to ~/.config/fish/config.fish
|
|
||||||
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
|
|
||||||
|
|
||||||
# csh: add the following to .cshrc
|
|
||||||
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
|
|
||||||
```
|
|
||||||
|
|
||||||
Configure the `DOKKU_HOST` environment variable or run `dokku` from a repository with a git remote named `dokku` pointed at your Dokku host in order to use the script as normal.
|
|
||||||
|
|
||||||
You can also configure a `DOKKU_PORT` environment variable if you are running ssh on a non-standard port. This defaults to `22`.
|
|
||||||
|
|
||||||
## (nodejs) dokku-toolbelt
|
## (nodejs) dokku-toolbelt
|
||||||
|
|
||||||
@@ -51,7 +20,7 @@ See [documentation here](https://www.npmjs.com/package/dokku-toolbelt) for more
|
|||||||
|
|
||||||
## (python) dokku-client
|
## (python) dokku-client
|
||||||
|
|
||||||
dokku-client is an extensible python-based cli wrapper for remote Dokku hosts. You can install it via the following shell command (assuming you have python and pip installed):
|
dokku-client is an extensible python-based cli wrapper for remote Dokku hosts. You can install it via the following shell command (assuming you have python and pip installed):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
pip install dokku-client
|
pip install dokku-client
|
||||||
|
|||||||
@@ -18,29 +18,30 @@ Let's take a quick look at the current Dokku nginx plugin that's shipped with Do
|
|||||||
|
|
||||||
[See the full documentation](/docs/development/plugin-creation.md).
|
[See the full documentation](/docs/development/plugin-creation.md).
|
||||||
|
|
||||||
## Official Plugins (Beta)
|
## Official Plugins
|
||||||
|
|
||||||
The following plugins are available and provided by Dokku maintainers. Where noted, these plugins should be considered beta software and may not have been used as thoroughly as community plugins. Please file issues against their respective issue trackers.
|
The following plugins are available and provided by Dokku maintainers. Please file issues against their respective issue trackers.
|
||||||
|
|
||||||
| Plugin | Author | Compatibility |
|
| Plugin | Author | Compatibility |
|
||||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||||
| [CouchDB (beta)](https://github.com/dokku/dokku-couchdb) | [dokku][] | 0.4.0+ |
|
| [CouchDB](https://github.com/dokku/dokku-couchdb) | [dokku][] | 0.4.0+ |
|
||||||
| [Elasticsearch (beta)](https://github.com/dokku/dokku-elasticsearch-plugin) | [dokku][] | 0.4.0+ |
|
| [Elasticsearch](https://github.com/dokku/dokku-elasticsearch-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Grafana/Graphite/Statsd (beta)](https://github.com/dokku/dokku-graphite-grafana) | [dokku][] | 0.4.0+ |
|
| [Grafana/Graphite/Statsd](https://github.com/dokku/dokku-graphite-grafana) | [dokku][] | 0.4.0+ |
|
||||||
| [MariaDB (beta)](https://github.com/dokku/dokku-mariadb-plugin) | [dokku][] | 0.4.0+ |
|
| [MariaDB](https://github.com/dokku/dokku-mariadb-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Memcached (beta)](https://github.com/dokku/dokku-memcached-plugin) | [dokku][] | 0.4.0+ |
|
| [Memcached](https://github.com/dokku/dokku-memcached-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Mongo (beta)](https://github.com/dokku/dokku-mongo-plugin) | [dokku][] | 0.4.0+ |
|
| [Mongo](https://github.com/dokku/dokku-mongo-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [MySQL (beta)](https://github.com/dokku/dokku-mysql-plugin) | [dokku][] | 0.4.0+ |
|
| [MySQL](https://github.com/dokku/dokku-mysql-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Nats (beta)](https://github.com/dokku/dokku-nats) | [dokku][] | 0.4.0+ |
|
| [Nats](https://github.com/dokku/dokku-nats) | [dokku][] | 0.4.0+ |
|
||||||
| [Postgres (beta)](https://github.com/dokku/dokku-postgres-plugin) | [dokku][] | 0.4.0+ |
|
| [Postgres](https://github.com/dokku/dokku-postgres-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [RabbitMQ (beta)](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
|
| [RabbitMQ](https://github.com/dokku/dokku-rabbitmq-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Redis (beta)](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
|
| [Redis](https://github.com/dokku/dokku-redis-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [RethinkDB (beta)](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
|
| [RethinkDB](https://github.com/dokku/dokku-rethinkdb-plugin) | [dokku][] | 0.4.0+ |
|
||||||
| [Copy Files to Image](https://github.com/dokku/dokku-copyfiles-to-image) | [dokku][] | 0.4.0+ |
|
| [Copy Files to Image](https://github.com/dokku/dokku-copyfiles-to-image) | [dokku][] | 0.4.0+ |
|
||||||
| [HTTP Auth (beta)](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
|
| [HTTP Auth](https://github.com/dokku/dokku-http-auth) | [dokku][] | 0.4.0+ |
|
||||||
| [Let's Encrypt (beta)](https://github.com/dokku/dokku-letsencrypt) | [dokku][] | 0.4.0+ |
|
| [Let's Encrypt](https://github.com/dokku/dokku-letsencrypt) | [dokku][] | 0.4.0+ |
|
||||||
| [Maintenance mode (beta)](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
|
| [Maintenance mode](https://github.com/dokku/dokku-maintenance) | [dokku][] | 0.4.0+ |
|
||||||
| [Redirect (beta)](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
|
| [Redirect](https://github.com/dokku/dokku-redirect) | [dokku][] | 0.4.0+ |
|
||||||
|
| [Registry](https://github.com/dokku/dokku-registry) | [dokku][] | 0.12.0+
|
||||||
|
|
||||||
## Community plugins
|
## Community plugins
|
||||||
|
|
||||||
@@ -58,6 +59,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
[Aomitayo]: https://github.com/Aomitayo
|
[Aomitayo]: https://github.com/Aomitayo
|
||||||
[apmorton]: https://github.com/apmorton
|
[apmorton]: https://github.com/apmorton
|
||||||
[artofrawr]: https://github.com/artofrawr
|
[artofrawr]: https://github.com/artofrawr
|
||||||
|
[badsyntax]: https://github.com/badsyntax
|
||||||
[basgys]: https://github.com/basgys
|
[basgys]: https://github.com/basgys
|
||||||
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
|
[Benjamin-Dobell]: https://github.com/Benjamin-Dobell
|
||||||
[blag]: https://github.com/blag
|
[blag]: https://github.com/blag
|
||||||
@@ -72,10 +74,10 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
[dokku]: https://github.com/dokku
|
[dokku]: https://github.com/dokku
|
||||||
[dokku-community]: https://github.com/dokku-community
|
[dokku-community]: https://github.com/dokku-community
|
||||||
[dyson]: https://github.com/dyson
|
[dyson]: https://github.com/dyson
|
||||||
[F4-Group]: https://github.com/F4-Group
|
|
||||||
[fermuch]: https://github.com/fermuch
|
[fermuch]: https://github.com/fermuch
|
||||||
[fgrehm]: https://github.com/fgrehm
|
[fgrehm]: https://github.com/fgrehm
|
||||||
[Flink]: https://github.com/Flink
|
[Flink]: https://github.com/Flink
|
||||||
|
[fomojola]: https://github.com/fomojola
|
||||||
[gdi2290]: https://github.com/gdi2290
|
[gdi2290]: https://github.com/gdi2290
|
||||||
[hughfletcher]: https://github.com/hughfletcher
|
[hughfletcher]: https://github.com/hughfletcher
|
||||||
[iamale]: https://github.com/iamale
|
[iamale]: https://github.com/iamale
|
||||||
@@ -129,6 +131,7 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
[sarendsen]: https://github.com/sarendsen
|
[sarendsen]: https://github.com/sarendsen
|
||||||
[baikunz]: https://github.com/baikunz
|
[baikunz]: https://github.com/baikunz
|
||||||
[lazyatom]: https://github.com/lazyatom
|
[lazyatom]: https://github.com/lazyatom
|
||||||
|
[ollej]: https://github.com/ollej
|
||||||
|
|
||||||
### Datastores
|
### Datastores
|
||||||
|
|
||||||
@@ -182,9 +185,8 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
| [Docker Direct](https://github.com/josegonzalez/dokku-docker-direct) | [josegonzalez][] | 0.4.0+ |
|
| [Docker Direct](https://github.com/josegonzalez/dokku-docker-direct) | [josegonzalez][] | 0.4.0+ |
|
||||||
| [Dokku Clone](https://github.com/crisward/dokku-clone) | [crisward][] | 0.4.0+ |
|
| [Dokku Clone](https://github.com/crisward/dokku-clone) | [crisward][] | 0.4.0+ |
|
||||||
| [Dokku Copy App Config Files](https://github.com/josegonzalez/dokku-supply-config) | [josegonzalez][] | 0.4.0+ |
|
| [Dokku Copy App Config Files](https://github.com/josegonzalez/dokku-supply-config) | [josegonzalez][] | 0.4.0+ |
|
||||||
| [Dockerfile custom path](https://github.com/mimischi/dokku-dockerfile) | [mimischi][] | 0.8.0+ |
|
| [Dockerfile custom path](https://github.com/mimischi/dokku-dockerfile) | [mimischi][] | 0.8.0+ |
|
||||||
| [Dokku Registry](https://github.com/agco-adm/dokku-registry)<sup>1</sup> | [agco-adm][] | 0.4.0+ |
|
| [Dokku Require](https://github.com/crisward/dokku-require)<sup>1</sup> | [crisward][] | 0.4.0+ |
|
||||||
| [Dokku Require](https://github.com/crisward/dokku-require)<sup>2</sup> | [crisward][] | 0.4.0+ |
|
|
||||||
| [Global Certificates](https://github.com/josegonzalez/dokku-global-cert) | [josegonzalez][] | 0.5.0+ |
|
| [Global Certificates](https://github.com/josegonzalez/dokku-global-cert) | [josegonzalez][] | 0.5.0+ |
|
||||||
| [Graduate (Environment Management)](https://github.com/glassechidna/dokku-graduate) | [Benjamin-Dobell][] | 0.4.0+ |
|
| [Graduate (Environment Management)](https://github.com/glassechidna/dokku-graduate) | [Benjamin-Dobell][] | 0.4.0+ |
|
||||||
| [Haproxy tcp load balancer](https://github.com/256dpi/dokku-haproxy) | [256dpi][] | 0.4.0+ |
|
| [Haproxy tcp load balancer](https://github.com/256dpi/dokku-haproxy) | [256dpi][] | 0.4.0+ |
|
||||||
@@ -195,27 +197,28 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
| [Open App Ports](https://github.com/josegonzalez/dokku-ports) | [josegonzalez][] | 0.3.x |
|
| [Open App Ports](https://github.com/josegonzalez/dokku-ports) | [josegonzalez][] | 0.3.x |
|
||||||
| [Proctype Filter](https://github.com/michaelshobbs/dokku-proctype-filter) | [michaelshobbs][] | 0.4.0+ |
|
| [Proctype Filter](https://github.com/michaelshobbs/dokku-proctype-filter) | [michaelshobbs][] | 0.4.0+ |
|
||||||
| [robots.txt](https://notabug.org/candlewaster/dokku-robots.txt) | [candlewaster][] | 0.4.x |
|
| [robots.txt](https://notabug.org/candlewaster/dokku-robots.txt) | [candlewaster][] | 0.4.x |
|
||||||
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>3</sup> | [cedricziel][] | 0.4.0+ |
|
| [SSH Deployment Keys](https://github.com/cedricziel/dokku-deployment-keys)<sup>2</sup> | [cedricziel][] | 0.4.0+ |
|
||||||
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>4</sup> | [cedricziel][] | 0.3.x |
|
| [SSH Hostkeys](https://github.com/cedricziel/dokku-hostkeys-plugin)<sup>3</sup> | [cedricziel][] | 0.3.x |
|
||||||
| [Application build hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
|
| [Application build hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
|
||||||
| [Post Deploy Script](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ |
|
| [Post Deploy Script](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ |
|
||||||
|
| [Auto Sync](https://github.com/IdeaSynthesis/dokku-autosync)<sup>4</sup> | [fomojola][] | 0.8.1+ |
|
||||||
|
|
||||||
[217d00a]: https://github.com/dokku/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
|
[217d00a]: https://github.com/dokku/dokku/commit/217d00a1bc47a7e24d8847617bb08a1633025fc7
|
||||||
|
|
||||||
<sup>1</sup> On Heroku similar functionality is offered by the [heroku-labs pipeline feature](https://devcenter.heroku.com/articles/labs-pipelines), which allows you to promote builds across multiple environments (staging -> production)
|
<sup>1</sup> Extends app.json support to include creating volumes and creating / linking databases on push
|
||||||
|
|
||||||
<sup>2</sup> Extends app.json support to include creating volumes and creating / linking databases on push
|
<sup>2</sup> Adds the possibility to add SSH deployment keys to receive private hosted packages
|
||||||
|
|
||||||
<sup>3</sup> Adds the possibility to add SSH deployment keys to receive private hosted packages
|
<sup>3</sup> Adds the ability to add custom hosts to the containers known_hosts file to be able to ssh them easily (useful with deployment keys)
|
||||||
|
|
||||||
<sup>4</sup> Adds the ability to add custom hosts to the containers known_hosts file to be able to ssh them easily (useful with deployment keys)
|
<sup>4</sup> Adds the ability to sync an application repo with a remote Github repo (useful for automated rebuilds without needing a git push from an external system).
|
||||||
|
|
||||||
### Other Plugins
|
### Other Plugins
|
||||||
|
|
||||||
| Plugin | Author | Compatibility |
|
| Plugin | Author | Compatibility |
|
||||||
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------------- |
|
||||||
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | 0.4.0+ |
|
| [Airbrake deploy](https://github.com/Flink/dokku-airbrake-deploy) | [Flink][] | 0.4.0+ |
|
||||||
| [APT](https://github.com/F4-Group/dokku-apt) | [F4-Group][] | 0.4.0+ |
|
| [APT](https://github.com/dokku-community/dokku-apt) | [dokku-community][] | 0.18.x+ |
|
||||||
| [Bower install](https://github.com/alexanderbeletsky/dokku-bower-install) | [alexanderbeletsky][] | 0.3.x |
|
| [Bower install](https://github.com/alexanderbeletsky/dokku-bower-install) | [alexanderbeletsky][] | 0.3.x |
|
||||||
| [Bower/Grunt](https://github.com/thrashr888/dokku-bower-grunt-build-plugin) | [thrashr888][] | 0.3.x |
|
| [Bower/Grunt](https://github.com/thrashr888/dokku-bower-grunt-build-plugin) | [thrashr888][] | 0.3.x |
|
||||||
| [Bower/Gulp](https://github.com/gdi2290/dokku-bower-gulp-build-plugin) | [gdi2290][] | 0.3.x |
|
| [Bower/Gulp](https://github.com/gdi2290/dokku-bower-gulp-build-plugin) | [gdi2290][] | 0.3.x |
|
||||||
@@ -242,6 +245,10 @@ The following plugins are available and provided by Dokku maintainers. Where not
|
|||||||
| [Wkhtmltopdf](https://github.com/mbriskar/dokku-wkhtmltopdf) | [mbriskar][] | 0.4.0+ |
|
| [Wkhtmltopdf](https://github.com/mbriskar/dokku-wkhtmltopdf) | [mbriskar][] | 0.4.0+ |
|
||||||
| [Dokku Wordpress](https://github.com/dokku-community/dokku-wordpress) | [dokku-community][] | 0.4.0+ |
|
| [Dokku Wordpress](https://github.com/dokku-community/dokku-wordpress) | [dokku-community][] | 0.4.0+ |
|
||||||
| [Access](https://github.com/mainto/dokku-access) | [mainto](https://github.com/mainto) | 0.4.0+ |
|
| [Access](https://github.com/mainto/dokku-access) | [mainto](https://github.com/mainto) | 0.4.0+ |
|
||||||
|
| [Dokku Nginx Trust Proxy](https://github.com/kingsquare/dokku-nginx-vhost-trustproxy) | [kingsquare](https://github.com/kingsquare) | 0.4.0+ |
|
||||||
|
| [Fonts](https://github.com/ollej/dokku-fonts) | [ollej] | 0.19.11+ |
|
||||||
|
| [Discourse](https://github.com/badsyntax/dokku-discourse) | [badsyntax][] | 0.21.4+ |
|
||||||
|
|
||||||
|
|
||||||
### Deprecated Plugins
|
### Deprecated Plugins
|
||||||
|
|
||||||
@@ -297,6 +304,7 @@ The following plugins are no longer maintained by their developers.
|
|||||||
| [CouchDB (multi containers)](https://github.com/Flink/dokku-couchdb-multi-containers) | [Flink][] | 0.4.0+ |
|
| [CouchDB (multi containers)](https://github.com/Flink/dokku-couchdb-multi-containers) | [Flink][] | 0.4.0+ |
|
||||||
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
|
| [CouchDB](https://github.com/racehub/dokku-couchdb-plugin) | [RaceHub][] | Compatible with 0.2.0 |
|
||||||
| [Dokku Copy App Config Files](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
|
| [Dokku Copy App Config Files](https://github.com/alexkruegger/dokku-app-configfiles) | [alexkruegger][] | Compatible with 0.3.17+ |
|
||||||
|
| [Dokku Registry](https://github.com/agco-adm/dokku-registry) | [agco-adm][] | 0.4.0+
|
||||||
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
|
| [Elasticsearch](https://github.com/robv/dokku-elasticsearch) | [robv][] | Not compatible with >= 0.3.0 (still uses /home/git) |
|
||||||
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
|
| [Elasticsearch](https://github.com/blag/dokku-elasticsearch-plugin)<sup>1</sup> | [blag][] | Compatible with 0.2.0 |
|
||||||
| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | < 0.4.0 |
|
| [Graphite/statsd](https://github.com/jlachowski/dokku-graphite-plugin) | [jlachowski][] | < 0.4.0 |
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Move the data on the volume
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir /mnt/volume/home/
|
mkdir /mnt/volume/home/
|
||||||
mkdir /mnt/volume/var/lib/
|
mkdir -p /mnt/volume/var/lib/
|
||||||
mv /home/dokku.OLD /mnt/volume/home/dokku
|
mv /home/dokku.OLD /mnt/volume/home/dokku
|
||||||
mv /var/lib/dokku.OLD /mnt/volume/var/lib/dokku
|
mv /var/lib/dokku.OLD /mnt/volume/var/lib/dokku
|
||||||
mv /var/lib/docker.OLD /mnt/volume/var/lib/docker
|
mv /var/lib/docker.OLD /mnt/volume/var/lib/docker
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
domains:add <app> <domain> [<domain> ...] # Add domains to app
|
domains:add <app> <domain> [<domain> ...] # Add domains to app
|
||||||
domains:add-global <domain> [<domain> ...] # Add global domain names
|
domains:add-global <domain> [<domain> ...] # Add global domain names
|
||||||
domains:clear <app> # Clear all domains for app
|
domains:clear <app> # Clear all domains for app
|
||||||
|
domains:clear-global # Clear global domain names
|
||||||
domains:disable <app> # Disable VHOST support
|
domains:disable <app> # Disable VHOST support
|
||||||
domains:enable <app> # Enable VHOST support
|
domains:enable <app> # Enable VHOST support
|
||||||
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
|
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
|
||||||
@@ -27,21 +28,10 @@ scheme://subdomain.domain.tld
|
|||||||
|
|
||||||
The `subdomain` is inferred from the pushed application name, while the `domain.tld` is set during initial dokku configuration. It can then be modified with `dokku domains:add-global` and `dokku domains:remove-global`. This value is used as a default TLD for all applications on a host.
|
The `subdomain` is inferred from the pushed application name, while the `domain.tld` is set during initial dokku configuration. It can then be modified with `dokku domains:add-global` and `dokku domains:remove-global`. This value is used as a default TLD for all applications on a host.
|
||||||
|
|
||||||
If a FQDN such as `other.tld` is used as the application name, the global virtualhost will be ignored and the resulting vhost URL for that application will be `other.tld`. The exception to this rule being that if the FQDN has the same ending as the default vhost (such as `subdomain.domain.tld`), then the entire FQDN will be treated as a subdomain. The application will therefore be deployed at `subdomain.domain.tld.domain.tld`.
|
If an FQDN such as `dokku.org` is used as the application name, the global virtualhost will be ignored and the resulting vhost URL for that application will be `dokku.org`.
|
||||||
|
|
||||||
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. For example, you can reverse the subdomain with the following sample `nginx-hostname` plugin trigger:
|
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information.
|
||||||
|
|
||||||
```shell
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|
||||||
|
|
||||||
APP="$1"; SUBDOMAIN="$2"; VHOST="$3"
|
|
||||||
|
|
||||||
NEW_SUBDOMAIN=`echo $SUBDOMAIN | rev`
|
|
||||||
echo "$NEW_SUBDOMAIN.$VHOST"
|
|
||||||
```
|
|
||||||
|
|
||||||
If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed.
|
|
||||||
|
|
||||||
## Disabling VHOSTS
|
## Disabling VHOSTS
|
||||||
|
|
||||||
@@ -63,7 +53,7 @@ The domains plugin allows you to specify custom domains for applications. This p
|
|||||||
dokku domains:add node-js-app dokku.me
|
dokku domains:add node-js-app dokku.me
|
||||||
|
|
||||||
# list custom domains for app
|
# list custom domains for app
|
||||||
dokku domains node-js-app
|
dokku domains:report node-js-app
|
||||||
|
|
||||||
# clear all custom domains for app
|
# clear all custom domains for app
|
||||||
dokku domains:clear node-js-app
|
dokku domains:clear node-js-app
|
||||||
@@ -88,17 +78,17 @@ dokku domains:report
|
|||||||
```
|
```
|
||||||
=====> node-js-app domains information
|
=====> node-js-app domains information
|
||||||
Domains app enabled: true
|
Domains app enabled: true
|
||||||
Domains app vhosts: node-js-sample.dokku.org
|
Domains app vhosts: node-js-app.dokku.org
|
||||||
Domains global enabled: true
|
Domains global enabled: true
|
||||||
Domains global vhosts: dokku.org
|
Domains global vhosts: dokku.org
|
||||||
=====> python-sample domains information
|
=====> python-app domains information
|
||||||
Domains app enabled: true
|
Domains app enabled: true
|
||||||
Domains app vhosts: python-sample.dokku.org
|
Domains app vhosts: python-app.dokku.org
|
||||||
Domains global enabled: true
|
Domains global enabled: true
|
||||||
Domains global vhosts: dokku.org
|
Domains global vhosts: dokku.org
|
||||||
=====> ruby-sample domains information
|
=====> ruby-app domains information
|
||||||
Domains app enabled: true
|
Domains app enabled: true
|
||||||
Domains app vhosts: ruby-sample.dokku.org
|
Domains app vhosts: ruby-app.dokku.org
|
||||||
Domains global enabled: true
|
Domains global enabled: true
|
||||||
Domains global vhosts: dokku.org
|
Domains global vhosts: dokku.org
|
||||||
```
|
```
|
||||||
@@ -125,41 +115,4 @@ dokku domains:report node-js-app --domains-app-enabled
|
|||||||
|
|
||||||
## Default site
|
## Default site
|
||||||
|
|
||||||
By default, Dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to the global nginx configuration.
|
This is specific to your proxy plugin of choice. See the [nginx documentation](/docs/configuration/nginx.md#default-site) for more information on how to configure this for the default nginx proxy implementation.
|
||||||
|
|
||||||
Create the file at `/etc/nginx/conf.d/00-default-vhost.conf`:
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80 default_server;
|
|
||||||
server_name _;
|
|
||||||
access_log off;
|
|
||||||
return 410;
|
|
||||||
}
|
|
||||||
|
|
||||||
# To handle HTTPS requests, you can uncomment the following section.
|
|
||||||
#
|
|
||||||
# Please note that in order to let this work as expected, you need a valid
|
|
||||||
# SSL certificate for any domains being served. Browsers will show SSL
|
|
||||||
# errors in all other cases.
|
|
||||||
#
|
|
||||||
# Note that the key and certificate files in the below example need to
|
|
||||||
# be copied into /etc/nginx/ssl/ folder.
|
|
||||||
#
|
|
||||||
# server {
|
|
||||||
# listen 443 ssl;
|
|
||||||
# server_name _;
|
|
||||||
# ssl_certificate /etc/nginx/ssl/cert.crt;
|
|
||||||
# ssl_certificate_key /etc/nginx/ssl/cert.key;
|
|
||||||
# access_log off;
|
|
||||||
# return 410;
|
|
||||||
# }
|
|
||||||
```
|
|
||||||
|
|
||||||
Make sure to reload nginx after creating this file by running `service nginx reload`.
|
|
||||||
|
|
||||||
This will catch all unknown HOST header values and return a `410 Gone` response. You can replace the `return 410;` with `return 444;` which will cause nginx to not respond to requests that do not match known domains (connection refused).
|
|
||||||
|
|
||||||
The configuration file must be loaded before `/etc/nginx/conf.d/dokku.conf`, so it can not be arranged as a vhost in `/etc/nginx/sites-enabled` that is only processed afterwards.
|
|
||||||
|
|
||||||
Alternatively, you may push an app to your Dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
|
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ The `config` plugin provides the following commands to manage your variables:
|
|||||||
|
|
||||||
```
|
```
|
||||||
config (<app>|--global) Pretty-print an app or global environment
|
config (<app>|--global) Pretty-print an app or global environment
|
||||||
|
config:bundle (<app>|--global) [--merged] Bundle environment into tarfile
|
||||||
|
config:clear (<app>|--global) Clears environment variables
|
||||||
|
config:export (<app>|--global) [--envfile] Export a global or app environment
|
||||||
config:get (<app>|--global) KEY Display a global or app-specific config value
|
config:get (<app>|--global) KEY Display a global or app-specific config value
|
||||||
|
config:keys (<app>|--global) [--merged] Show keys set in environment
|
||||||
config:set [--encoded] [--no-restart] (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars
|
config:set [--encoded] [--no-restart] (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars
|
||||||
config:unset [--no-restart] (<app>|--global) KEY1 [KEY2 ...] Unset one or more config vars
|
config:unset [--no-restart] (<app>|--global) KEY1 [KEY2 ...] Unset one or more config vars
|
||||||
config:export (<app>|--global) [--envfile] Export a global or app environment
|
|
||||||
config:keys (<app>|--global) [--merged] Show keys set in environment
|
|
||||||
config:bundle (<app>|--global) [--merged] Bundle environment into tarfile
|
|
||||||
```
|
```
|
||||||
> For security reasons - and as per [docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available *only* during runtime, as noted in [this issue](https://github.com/dokku/dokku/issues/1860).
|
> For security reasons - and as per [docker recommendations](https://github.com/docker/docker/issues/13490) - Dockerfile-based deploys have variables available *only* during runtime, as noted in [this issue](https://github.com/dokku/dokku/issues/1860).
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ dokku config:export --format shell node-js-app
|
|||||||
|
|
||||||
## Special Config Variables
|
## Special Config Variables
|
||||||
|
|
||||||
The following list config variables have special meaning and can be set in a variety of ways.
|
The following config variables have special meanings and can be set in a variety of ways. Unless specified via global app config, the values may not be passed into applications. Usage of these values within applications should be considered unsafe, as they are an internal configuration values that may be moved to the internal properties system in the future.
|
||||||
|
|
||||||
> Warning: This list is not exhaustive, and may vary from version to version.
|
> Warning: This list is not exhaustive, and may vary from version to version.
|
||||||
|
|
||||||
@@ -89,10 +90,11 @@ The following list config variables have special meaning and can be set in a var
|
|||||||
| `DOKKU_EVENTS_LOGFILE` | `$DOKKU_LOGS_DIR/events.log` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Where the events log file is written to. |
|
| `DOKKU_EVENTS_LOGFILE` | `$DOKKU_LOGS_DIR/events.log` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Where the events log file is written to. |
|
||||||
| `DOKKU_APP_NAME` | none | `--app APP` flag | Name of application to work on. Respected by core plugins. |
|
| `DOKKU_APP_NAME` | none | `--app APP` flag | Name of application to work on. Respected by core plugins. |
|
||||||
| `DOKKU_APPS_FORCE_DELETE` | none | `--force` flag | Whether to force delete an application. Also used by other plugins for destructive actions. |
|
| `DOKKU_APPS_FORCE_DELETE` | none | `--force` flag | Whether to force delete an application. Also used by other plugins for destructive actions. |
|
||||||
|
| `DOKKU_CHECKS_URL` | `http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Url displayed during deployment when no CHECKS file exists. |
|
||||||
| `DOKKU_DETACH_CONTAINER` | none | `--detach` flag | Whether to detach a container started via `dokku run`. |
|
| `DOKKU_DETACH_CONTAINER` | none | `--detach` flag | Whether to detach a container started via `dokku run`. |
|
||||||
| `DOKKU_QUIET_OUTPUT` | none | `--quiet` flag | Silences certain header output for `dokku` commands. |
|
| `DOKKU_QUIET_OUTPUT` | none | `--quiet` flag | Silences certain header output for `dokku` commands. |
|
||||||
| `DOKKU_RM_CONTAINER` | none | `dokku config:set` <br /> `--rm-container` flag <br /> `--rm` flag | Whether to keep `dokku run` containers around or not. |
|
| `DOKKU_RM_CONTAINER` | none | `dokku config:set` <br /> `--rm-container` flag <br /> `--rm` flag | Whether to keep `dokku run` containers around or not. |
|
||||||
| `DOKKU_TRACE` | none | `dokku trace on` <br /> `dokku trace false` <br /> `--trace` flag | Turn on very verbose debugging. |
|
| `DOKKU_TRACE` | none | `dokku trace:on` <br /> `dokku trace:off` <br /> `--trace` flag | Turn on very verbose debugging. |
|
||||||
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
|
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
|
||||||
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
|
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
|
||||||
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
|
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
|
||||||
@@ -108,18 +110,18 @@ The following list config variables have special meaning and can be set in a var
|
|||||||
| `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` | none | `dokku config:set` <br /> `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Disables removal of the ANSI prefix during deploys. Can be used in cases where the client deployer does not understand ansi escape codes. |
|
| `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` | none | `dokku config:set` <br /> `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Disables removal of the ANSI prefix during deploys. Can be used in cases where the client deployer does not understand ansi escape codes. |
|
||||||
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
|
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
|
||||||
| `DOKKU_DOCKER_STOP_TIMEOUT` | `10` | `dokku config:set` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.|
|
| `DOKKU_DOCKER_STOP_TIMEOUT` | `10` | `dokku config:set` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.|
|
||||||
| `DOKKU_DOCKERFILE_CMD` | dockerfile cmd | `dokku config:set` | |
|
|
||||||
| `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | |
|
| `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | |
|
||||||
| `DOKKU_DOCKERFILE_ENTRYPOINT` | dockerfile entrypoint | `dokku config:set` | |
|
|
||||||
| `DOKKU_DOCKERFILE_PORTS` | dockerfile ports | `dokku config:set` | |
|
| `DOKKU_DOCKERFILE_PORTS` | dockerfile ports | `dokku config:set` | |
|
||||||
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
|
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
|
||||||
| `DOKKU_PROXY_PORT` | automatically assigned | `dokku config:set` | |
|
| `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands |
|
||||||
| `DOKKU_PROXY_SSL_PORT` | automatically assigned | `dokku config:set` | |
|
| `DOKKU_PROXY_PORT` | automatically assigned | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` <br /> `dokku config:set` | |
|
||||||
|
| `DOKKU_PROXY_SSL_PORT` | automatically assigned | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` <br /> `dokku config:set` | |
|
||||||
| `DOKKU_PROXY_PORT_MAP` | automatically assigned | `dokku proxy:ports-add` <br /> `dokku proxy:ports-remove`, `dokku proxy:ports-clear` | |
|
| `DOKKU_PROXY_PORT_MAP` | automatically assigned | `dokku proxy:ports-add` <br /> `dokku proxy:ports-remove`, `dokku proxy:ports-clear` | |
|
||||||
| `DOKKU_SKIP_ALL_CHECKS` | none | `dokku config:set` | |
|
| `DOKKU_SKIP_ALL_CHECKS` | none | `dokku config:set` | |
|
||||||
| `DOKKU_SKIP_CLEANUP` | | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | When a deploy is triggered, if this is set to a non-empty value, then old docker containers and images will not be removed. |
|
| `DOKKU_SKIP_CLEANUP` | | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | When a deploy is triggered, if this is set to a non-empty value, then old docker containers and images will not be removed. |
|
||||||
| `DOKKU_SKIP_DEFAULT_CHECKS` | | `dokku config:set` | |
|
| `DOKKU_SKIP_DEFAULT_CHECKS` | | `dokku config:set` | |
|
||||||
| `DOKKU_SKIP_DEPLOY` | | `dokku config:set` | |
|
| `DOKKU_SKIP_DEPLOY` | | `dokku config:set` | |
|
||||||
|
| `DOKKU_START_CMD` | none | `dokku config:set` | Command to run instead of `/start $PROC_TYPE` |
|
||||||
| `DOKKU_SYSTEM_GROUP` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System group to chown files as. |
|
| `DOKKU_SYSTEM_GROUP` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System group to chown files as. |
|
||||||
| `DOKKU_SYSTEM_USER` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System user to chown files as. |
|
| `DOKKU_SYSTEM_USER` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System user to chown files as. |
|
||||||
| `DOKKU_WAIT_TO_RETIRE` | `60` | `dokku config:set` | After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running http connections. |
|
| `DOKKU_WAIT_TO_RETIRE` | `60` | `dokku config:set` | After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running http connections. |
|
||||||
|
|||||||
@@ -4,12 +4,64 @@ Dokku uses nginx as its server for routing requests to specific applications. By
|
|||||||
|
|
||||||
```
|
```
|
||||||
nginx:access-logs <app> [-t] # Show the nginx access logs for an application (-t follows)
|
nginx:access-logs <app> [-t] # Show the nginx access logs for an application (-t follows)
|
||||||
nginx:build-config <app> # (Re)builds nginx config for given app
|
|
||||||
nginx:error-logs <app> [-t] # Show the nginx error logs for an application (-t follows)
|
nginx:error-logs <app> [-t] # Show the nginx error logs for an application (-t follows)
|
||||||
nginx:validate [<app>] [--clean] # Validates and optionally cleans up invalid nginx configurations
|
nginx:report [<app>] [<flag>] # Displays a nginx report for one or more apps
|
||||||
|
nginx:set <app> <property> (<value>) # Set or clear an nginx property for an app
|
||||||
|
nginx:show-config <app> # Display app nginx config
|
||||||
|
nginx:validate-config [<app>] [--clean] # Validates and optionally cleans up invalid nginx configurations
|
||||||
```
|
```
|
||||||
|
|
||||||
## Checking access logs
|
## Usage
|
||||||
|
|
||||||
|
### Request Proxying
|
||||||
|
|
||||||
|
By default, the `web` process is the only process proxied by the nginx proxy implementation. Proxying to other process types may be handled by a custom `nginx.conf.sigil` file, as generally described [below](/docs/configuration/nginx.md#customizing-the-nginx-configuration)
|
||||||
|
|
||||||
|
Nginx will proxy the requests in a [round-robin balancing fashion](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream) to the different deployed (scaled) containers running the `web` proctype. This way, the host's resources can be fully leveraged for single-threaded applications (e.g. `dokku ps:scale node-js-app web=4` on a 4-core machine)
|
||||||
|
|
||||||
|
### Binding to specific addresses
|
||||||
|
|
||||||
|
> New as of 0.19.2
|
||||||
|
|
||||||
|
By default, nginx will listen to all interfaces (`[::]` for IPv6, `0.0.0.0` for IPv4) when proxying requests to applications. This may be changed using the `bind-address-ipv4` and `bind-address-ipv6` properties. This is useful in cases where the proxying should be internal to a network or if there are multiple network interfaces that should respond with different content.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app bind-address-ipv4 127.0.0.1
|
||||||
|
dokku nginx:set node-js-app bind-address-ipv6 ::1
|
||||||
|
```
|
||||||
|
|
||||||
|
This may be reverted by setting an empty bind address.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app bind-address-ipv4
|
||||||
|
dokku nginx:set node-js-app bind-address-ipv6
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: Validation is not performed on either value.
|
||||||
|
|
||||||
|
Users with apps that contain a custom `nginx.conf.sigil` file will need to modify the files to respect the new `NGINX_BIND_ADDRESS_IPV4` and `NGINX_BIND_ADDRESS_IPV6` variables.
|
||||||
|
|
||||||
|
### HSTS Header
|
||||||
|
|
||||||
|
> New as of 0.20.0
|
||||||
|
|
||||||
|
If SSL certificates are present, HSTS will be automatically enabled. It can be toggled via `nginx:set`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app hsts true
|
||||||
|
dokku nginx:set node-js-app hsts false
|
||||||
|
```
|
||||||
|
|
||||||
|
The following options are also available via the `nginx:set` command:
|
||||||
|
|
||||||
|
- `hsts` (type: boolean, default: `true`): Enables or disables HSTS for your application.
|
||||||
|
- `hsts-include-subdomains` (type: boolean, default: `true`): Tells the browser that the HSTS policy also applies to all subdomains of the current domain.
|
||||||
|
- `hsts-max-age` (type: integer, default: `15724800`): Time in seconds to cache HSTS configuration.
|
||||||
|
- `hsts-preload` (type: boolean, default: `false`): Tells most major web browsers to include the domain in their HSTS preload lists.
|
||||||
|
|
||||||
|
Beware that if you enable the header and a subsequent deploy of your application results in an HTTP deploy (for whatever reason), the way the header works means that a browser will not attempt to request the HTTP version of your site if the HTTPS version fails until the max-age is reached.
|
||||||
|
|
||||||
|
### Checking access logs
|
||||||
|
|
||||||
You may check nginx access logs via the `nginx:access-logs` command. This assumes that app access logs are being stored in `/var/log/nginx/$APP-access.log`, as is the default in the generated `nginx.conf`.
|
You may check nginx access logs via the `nginx:access-logs` command. This assumes that app access logs are being stored in `/var/log/nginx/$APP-access.log`, as is the default in the generated `nginx.conf`.
|
||||||
|
|
||||||
@@ -23,7 +75,7 @@ You may also follow the logs by specifying the `-t` flag.
|
|||||||
dokku nginx:access-logs node-js-app -t
|
dokku nginx:access-logs node-js-app -t
|
||||||
```
|
```
|
||||||
|
|
||||||
## Checking error logs
|
### Checking error logs
|
||||||
|
|
||||||
You may check nginx error logs via the `nginx:access-logs` command. This assumes that app error logs are being stored in `/var/log/nginx/$APP-error.log`, as is the default in the generated `nginx.conf`.
|
You may check nginx error logs via the `nginx:access-logs` command. This assumes that app error logs are being stored in `/var/log/nginx/$APP-error.log`, as is the default in the generated `nginx.conf`.
|
||||||
|
|
||||||
@@ -37,39 +89,94 @@ You may also follow the logs by specifying the `-t` flag.
|
|||||||
dokku nginx:error-logs node-js-app -t
|
dokku nginx:error-logs node-js-app -t
|
||||||
```
|
```
|
||||||
|
|
||||||
## Regenerating nginx config
|
### Changing log path
|
||||||
|
|
||||||
In certain cases, your app nginx configs may drift from the correct config for your app. You may regenerate the config at any point via the `nginx:build-config` command. This may fail if there are no current web listeners for your app.
|
> New as of 0.20.1
|
||||||
|
|
||||||
|
The path to where log files are stored can be changed by calling the `nginx:set` command with the following options:
|
||||||
|
|
||||||
|
- `access-log-path` (type: string, default: `${NGINX_LOG_ROOT}/${APP}-access.log`): Log path for nginx access logs
|
||||||
|
- `error-log-path` (type: string, default: `${NGINX_LOG_ROOT}/${APP}-error.log`): Log path for nginx error logs
|
||||||
|
|
||||||
|
The defaults should not be changed without verifying that the paths will be writeable by nginx. However, this setting is useful for enabling or disabling logging by setting the values to `off`.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku nginx:build-config node-js-app
|
dokku nginx:set node-js-app access-log-path off
|
||||||
|
dokku nginx:set node-js-app error-log-path off
|
||||||
```
|
```
|
||||||
|
|
||||||
## Validating nginx configs
|
The default value may be set by passing an empty value for the option:
|
||||||
|
|
||||||
It may be desired to validate an nginx config outside of the deployment process. To do so, run the `nginx:validate` command. With no arguments, this will validate all app nginx configs, one at a time. A minimal wrapper nginx config is generated for each app's nginx config, upon which `nginx -t` will be run.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku nginx:validate
|
dokku nginx:set node-js-app access-log-path
|
||||||
|
dokku nginx:set node-js-app error-log-path
|
||||||
```
|
```
|
||||||
|
|
||||||
As app nginx configs are actually executed within a shared context, it is possible for an individual config to be invalid when being validated standalone but _also_ be valid within the global server context. As such, the exit code for the `nginx:validate` command is the exit code of `nginx -t` against the server's real nginx config.
|
In all cases, the nginx config must be regenerated after setting the above values.
|
||||||
|
|
||||||
The `nginx:validate` command also takes an optional `--clean` flag. If specified, invalid nginx configs will be removed.
|
### Changing log format
|
||||||
|
|
||||||
|
> New as of 0.22.0
|
||||||
|
|
||||||
|
The format of the access log can be changed by calling the `nginx:set` command as follows:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app access-log-format custom
|
||||||
|
```
|
||||||
|
|
||||||
|
### Specifying a read timeout
|
||||||
|
|
||||||
|
> New as of 0.21.0
|
||||||
|
|
||||||
|
When proxying requests to your applications, it may be useful to specify a proxy read timeout. This can be done via the `nginx:set` command as follows:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app proxy-read-timeout 120s
|
||||||
|
```
|
||||||
|
|
||||||
|
The default value is `60s`, and all numeric values _must_ have a trailing time value specified (`s` for seconds, `m` for minutes).
|
||||||
|
|
||||||
|
The default value may be set by passing an empty value for the option:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:set node-js-app proxy-read-timeout
|
||||||
|
```
|
||||||
|
|
||||||
|
In all cases, the nginx config must be regenerated after setting the above value.
|
||||||
|
|
||||||
|
### Showing the nginx config
|
||||||
|
|
||||||
|
For debugging purposes, it may be useful to show the nginx config. This can be achieved via the `nginx:show-config` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:show-config node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
### Validating nginx configs
|
||||||
|
|
||||||
|
It may be desired to validate an nginx config outside of the deployment process. To do so, run the `nginx:validate-config` command. With no arguments, this will validate all app nginx configs, one at a time. A minimal wrapper nginx config is generated for each app's nginx config, upon which `nginx -t` will be run.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku nginx:validate-config
|
||||||
|
```
|
||||||
|
|
||||||
|
As app nginx configs are actually executed within a shared context, it is possible for an individual config to be invalid when being validated standalone but _also_ be valid within the global server context. As such, the exit code for the `nginx:validate-config` command is the exit code of `nginx -t` against the server's real nginx config.
|
||||||
|
|
||||||
|
The `nginx:validate-config` command also takes an optional `--clean` flag. If specified, invalid nginx configs will be removed.
|
||||||
|
|
||||||
> Warning: Invalid app nginx config's will be removed _even if_ the config is valid in the global server context.
|
> Warning: Invalid app nginx config's will be removed _even if_ the config is valid in the global server context.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku nginx:validate --clean
|
dokku nginx:validate-config --clean
|
||||||
```
|
```
|
||||||
|
|
||||||
The `--clean` flag may also be specified for a given app:
|
The `--clean` flag may also be specified for a given app:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku nginx:validate node-js-app --clean
|
dokku nginx:validate-config node-js-app --clean
|
||||||
```
|
```
|
||||||
|
|
||||||
## Customizing the nginx configuration
|
### Customizing the nginx configuration
|
||||||
|
|
||||||
> New as of 0.5.0
|
> New as of 0.5.0
|
||||||
|
|
||||||
@@ -77,20 +184,33 @@ Dokku uses a templating library by the name of [sigil](https://github.com/glider
|
|||||||
|
|
||||||
- Copy the following example template to a file named `nginx.conf.sigil` and either:
|
- Copy the following example template to a file named `nginx.conf.sigil` and either:
|
||||||
- If using a buildpack application, you __must__ check it into the root of your app repo.
|
- If using a buildpack application, you __must__ check it into the root of your app repo.
|
||||||
- `ADD` it to your dockerfile `WORKDIR`
|
- If using a dockerfile or docker image for deploys, either:
|
||||||
- if your dockerfile has no `WORKDIR`, `ADD` it to the `/app` folder
|
- If `WORKDIR` is specified, add the file to the `WORKDIR` specified in the last Dockerfile stage (example: `WORKDIR /app` and `ADD nginx.conf.sigil /app`).
|
||||||
|
- If no `WORKDIR` is specified, add the file to the root (`/`) of the docker image (example: `ADD nginx.conf.sigil /`).
|
||||||
|
|
||||||
> When using a custom `nginx.conf.sigil` file, depending upon your application configuration, you *may* be exposing the file externally. As this file is extracted before the container is run, you can, safely delete it in a custom `entrypoint.sh` configured in a Dockerfile `ENTRYPOINT`.
|
> When using a custom `nginx.conf.sigil` file, depending upon your application configuration, you *may* be exposing the file externally. As this file is extracted before the container is run, you can, safely delete it in a custom `entrypoint.sh` configured in a Dockerfile `ENTRYPOINT`.
|
||||||
|
|
||||||
> The default template is available [here](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/nginx.conf.sigil), and can be used as a guide for your own, custom `nginx.conf.sigil` file. Please refer to the appropriate template file version for your Dokku version.
|
> The default template is available [here](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/nginx.conf.sigil), and can be used as a guide for your own, custom `nginx.conf.sigil` file. Please refer to the appropriate template file version for your Dokku version.
|
||||||
|
|
||||||
### Available template variables
|
While enabled by default, using a custom nginx config can be disabled via `nginx:set`. This may be useful in cases where you do not want to allow users to override any higher-level customization of app nginx config.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# enable fetching custom config (default)
|
||||||
|
dokku nginx:set node-js-app disable-custom-config false
|
||||||
|
|
||||||
|
# disable fetching custom config
|
||||||
|
dokku nginx:set node-js-app disable-custom-config true
|
||||||
|
```
|
||||||
|
|
||||||
|
Unsetting this value is the same as enabling custom nginx config usage.
|
||||||
|
|
||||||
|
|
||||||
|
#### Available template variables
|
||||||
|
|
||||||
```
|
```
|
||||||
{{ .APP }} Application name
|
{{ .APP }} Application name
|
||||||
{{ .APP_SSL_PATH }} Path to SSL certificate and key
|
{{ .APP_SSL_PATH }} Path to SSL certificate and key
|
||||||
{{ .DOKKU_ROOT }} Global Dokku root directory (ex: app dir would be `{{ .DOKKU_ROOT }}/{{ .APP }}`)
|
{{ .DOKKU_ROOT }} Global Dokku root directory (ex: app dir would be `{{ .DOKKU_ROOT }}/{{ .APP }}`)
|
||||||
{{ .DOKKU_APP_LISTENERS }} List of IP:PORT pairs of app containers
|
|
||||||
{{ .PROXY_PORT }} Non-SSL nginx listener port (same as `DOKKU_PROXY_PORT` config var)
|
{{ .PROXY_PORT }} Non-SSL nginx listener port (same as `DOKKU_PROXY_PORT` config var)
|
||||||
{{ .PROXY_SSL_PORT }} SSL nginx listener port (same as `DOKKU_PROXY_SSL_PORT` config var)
|
{{ .PROXY_SSL_PORT }} SSL nginx listener port (same as `DOKKU_PROXY_SSL_PORT` config var)
|
||||||
{{ .NOSSL_SERVER_NAME }} List of non-SSL VHOSTS
|
{{ .NOSSL_SERVER_NAME }} List of non-SSL VHOSTS
|
||||||
@@ -101,9 +221,11 @@ Dokku uses a templating library by the name of [sigil](https://github.com/glider
|
|||||||
{{ .SSL_SERVER_NAME }} List of SSL VHOSTS
|
{{ .SSL_SERVER_NAME }} List of SSL VHOSTS
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Finally, each process type has it's network listeners - a list of IP:PORT pairs for the respective app containers - exposed via an `.DOKKU_APP_${PROCESS_TYPE}_LISTENERS` variable - the `PROCESS_TYPE` will be upper-cased with hyphens transformed into underscores. Users can use the new variables to expose non-web processes via the nginx proxy.
|
||||||
|
|
||||||
> Note: Application config variables are available for use in custom templates. To do so, use the form of `{{ var "FOO" }}` to access a variable named `FOO`.
|
> Note: Application config variables are available for use in custom templates. To do so, use the form of `{{ var "FOO" }}` to access a variable named `FOO`.
|
||||||
|
|
||||||
### Customizing via configuration files included by the default templates
|
#### Customizing via configuration files included by the default templates
|
||||||
|
|
||||||
The default nginx.conf template will include everything from your apps `nginx.conf.d/` subdirectory in the main `server {}` block (see above):
|
The default nginx.conf template will include everything from your apps `nginx.conf.d/` subdirectory in the main `server {}` block (see above):
|
||||||
|
|
||||||
@@ -125,7 +247,7 @@ The example above uses additional configuration files directly on the Dokku host
|
|||||||
For PHP Buildpack users, you will also need to provide a `Procfile` and an accompanying `nginx.conf` file to customize the nginx config *within* the container. The following are example contents for your `Procfile`
|
For PHP Buildpack users, you will also need to provide a `Procfile` and an accompanying `nginx.conf` file to customize the nginx config *within* the container. The following are example contents for your `Procfile`
|
||||||
|
|
||||||
web: vendor/bin/heroku-php-nginx -C nginx.conf -i php.ini php/
|
web: vendor/bin/heroku-php-nginx -C nginx.conf -i php.ini php/
|
||||||
|
|
||||||
Your `nginx.conf` file - not to be confused with Dokku's `nginx.conf.sigil` - would also need to be configured as shown in this example:
|
Your `nginx.conf` file - not to be confused with Dokku's `nginx.conf.sigil` - would also need to be configured as shown in this example:
|
||||||
|
|
||||||
client_max_body_size 50m;
|
client_max_body_size 50m;
|
||||||
@@ -136,7 +258,7 @@ Your `nginx.conf` file - not to be confused with Dokku's `nginx.conf.sigil` - wo
|
|||||||
|
|
||||||
Please adjust the `Procfile` and `nginx.conf` file as appropriate.
|
Please adjust the `Procfile` and `nginx.conf` file as appropriate.
|
||||||
|
|
||||||
## Custom Error Pages
|
### Custom Error Pages
|
||||||
|
|
||||||
By default, Dokku provides custom error pages for the following three categories of errors:
|
By default, Dokku provides custom error pages for the following three categories of errors:
|
||||||
|
|
||||||
@@ -146,38 +268,80 @@ By default, Dokku provides custom error pages for the following three categories
|
|||||||
|
|
||||||
These are provided as an alternative to the generic Nginx error page, are shared for _all_ applications, and their contents are located on disk at `/var/lib/dokku/data/nginx-vhosts/dokku-errors`. To customize them for a specific app, create a custom `nginx.conf.sigil` as described above and change the paths to point elsewhere.
|
These are provided as an alternative to the generic Nginx error page, are shared for _all_ applications, and their contents are located on disk at `/var/lib/dokku/data/nginx-vhosts/dokku-errors`. To customize them for a specific app, create a custom `nginx.conf.sigil` as described above and change the paths to point elsewhere.
|
||||||
|
|
||||||
## Domains plugin
|
### Default site
|
||||||
|
|
||||||
See the [domain configuration documentation](/docs/configuration/domains.md).
|
By default, Dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. If this is not the desired behavior, you may want to add the following configuration to the global nginx configuration.
|
||||||
|
|
||||||
## Customizing hostnames
|
Create the file at `/etc/nginx/conf.d/00-default-vhost.conf`:
|
||||||
|
|
||||||
See the [customizing hostnames documentation](/docs/configuration/domains.md#customizing-hostnames).
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
|
||||||
## Disabling VHOSTS
|
server_name _;
|
||||||
|
access_log off;
|
||||||
|
return 410;
|
||||||
|
}
|
||||||
|
|
||||||
See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts).
|
# To handle HTTPS requests, you can uncomment the following section.
|
||||||
|
#
|
||||||
|
# Please note that in order to let this work as expected, you need a valid
|
||||||
|
# SSL certificate for any domains being served. Browsers will show SSL
|
||||||
|
# errors in all other cases.
|
||||||
|
#
|
||||||
|
# Note that the key and certificate files in the below example need to
|
||||||
|
# be copied into /etc/nginx/ssl/ folder.
|
||||||
|
#
|
||||||
|
# server {
|
||||||
|
# listen 443 ssl;
|
||||||
|
# listen [::]:443 ssl;
|
||||||
|
# server_name _;
|
||||||
|
# ssl_certificate /etc/nginx/ssl/cert.crt;
|
||||||
|
# ssl_certificate_key /etc/nginx/ssl/cert.key;
|
||||||
|
# access_log off;
|
||||||
|
# return 410;
|
||||||
|
# }
|
||||||
|
```
|
||||||
|
|
||||||
## Default site
|
Make sure to reload nginx after creating this file by running `service nginx reload`.
|
||||||
|
|
||||||
See the [default site documentation](/docs/configuration/domains.md#default-site).
|
This will catch all unknown HOST header values and return a `410 Gone` response. You can replace the `return 410;` with `return 444;` which will cause nginx to not respond to requests that do not match known domains (connection refused).
|
||||||
|
|
||||||
## Running behind a load balancer
|
The configuration file must be loaded before `/etc/nginx/conf.d/dokku.conf`, so it can not be arranged as a vhost in `/etc/nginx/sites-enabled` that is only processed afterwards.
|
||||||
|
|
||||||
See the [load balancer documentation](/docs/configuration/ssl.md#running-behind-a-load-balancer).
|
Alternatively, you may push an app to your Dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
|
||||||
|
|
||||||
## HSTS Header
|
## Other
|
||||||
|
|
||||||
See the [HSTS documentation](/docs/configuration/ssl.md#hsts-header).
|
### Domains plugin
|
||||||
|
|
||||||
## SSL Configuration
|
See the [domain configuration documentation](/docs/configuration/domains.md) for more information on how to configure domains for your app.
|
||||||
|
|
||||||
See the [ssl documentation](/docs/configuration/ssl.md).
|
### Customizing hostnames
|
||||||
|
|
||||||
## Disabling Nginx
|
See the [customizing hostnames documentation](/docs/configuration/domains.md#customizing-hostnames) for more information on how to configure domains for your app.
|
||||||
|
|
||||||
See the [proxy documentation](/docs/advanced-usage/proxy-management.md).
|
### Disabling VHOSTS
|
||||||
|
|
||||||
## Managing Proxy Port mappings
|
See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts) for more information on how to disable domain usage for your app.
|
||||||
|
|
||||||
See the [proxy documentation](/docs/advanced-usage/proxy-management.md#proxy-port-mapping).
|
### Running behind a load balancer
|
||||||
|
|
||||||
|
See the [load balancer documentation](/docs/configuration/ssl.md#running-behind-a-load-balancer) for more information on how to configure your nginx config for running behind a network load balancer.
|
||||||
|
|
||||||
|
### SSL Configuration
|
||||||
|
|
||||||
|
See the [ssl documentation](/docs/configuration/ssl.md) for more information on how to configure SSL certificates for your application.
|
||||||
|
|
||||||
|
### Disabling Nginx
|
||||||
|
|
||||||
|
See the [proxy documentation](/docs/advanced-usage/proxy-management.md) for more information on how to disable nginx as the proxy implementation for your app.
|
||||||
|
|
||||||
|
### Managing Proxy Port mappings
|
||||||
|
|
||||||
|
See the [proxy documentation](/docs/advanced-usage/proxy-management.md#proxy-port-mapping) for more information on how to manage ports proxied for your app.
|
||||||
|
|
||||||
|
### Regenerating nginx config
|
||||||
|
|
||||||
|
See the [proxy documentation](/docs/advanced-usage/proxy-management.md#regenerating-proxy-config) for more information on how to rebuild the nginx proxy configuration for your app.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ certs:add <app> CRT KEY # Add an ssl endpoint to an app. Can al
|
|||||||
certs:generate <app> DOMAIN # Generate a key and certificate signing request (and self-signed certificate)
|
certs:generate <app> DOMAIN # Generate a key and certificate signing request (and self-signed certificate)
|
||||||
certs:remove <app> # Remove an SSL Endpoint from an app.
|
certs:remove <app> # Remove an SSL Endpoint from an app.
|
||||||
certs:report [<app>] [<flag>] # Displays an ssl report for one or more apps
|
certs:report [<app>] [<flag>] # Displays an ssl report for one or more apps
|
||||||
|
certs:show <app> <crt|key> # Show the server.crt or server.key on stdout
|
||||||
certs:update <app> CRT KEY # Update an SSL Endpoint on an app. Can also import from a tarball on stdin
|
certs:update <app> CRT KEY # Update an SSL Endpoint on an app. Can also import from a tarball on stdin
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -56,6 +57,16 @@ If you decide to obtain a CA signed certificate, you can import that certificate
|
|||||||
|
|
||||||
The `certs:remove` command only works on app-specific certificates. It will `rm` the app-specific tls directory, rebuild the nginx configuration, and reload nginx.
|
The `certs:remove` command only works on app-specific certificates. It will `rm` the app-specific tls directory, rebuild the nginx configuration, and reload nginx.
|
||||||
|
|
||||||
|
### Showing the certificate
|
||||||
|
|
||||||
|
The `certs:show` command can be used to show your configured certs for an app. The show command can be used for example to export Let's Encrypt certificates
|
||||||
|
after they've been generated. You can export it as follows:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku certs:show node-js-app crt > server.crt
|
||||||
|
dokku certs:show node-js-app key > server.key
|
||||||
|
```
|
||||||
|
|
||||||
### Displaying certificate reports for an app
|
### Displaying certificate reports for an app
|
||||||
|
|
||||||
> New as of 0.8.1
|
> New as of 0.8.1
|
||||||
@@ -67,17 +78,17 @@ dokku certs:report
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> node-js-sample
|
=====> node-js-app
|
||||||
Ssl dir: /home/dokku/node-js-sample/tls
|
Ssl dir: /home/dokku/node-js-app/tls
|
||||||
Ssl enabled: true
|
Ssl enabled: true
|
||||||
Ssl hostnames: *.node-js-sample.org node-js-sample.org
|
Ssl hostnames: *.node-js-app.org node-js-app.org
|
||||||
Ssl expires at: Oct 5 23:59:59 2019 GMT
|
Ssl expires at: Oct 5 23:59:59 2019 GMT
|
||||||
Ssl issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
|
Ssl issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
|
||||||
Ssl starts at: Oct 5 00:00:00 2016 GMT
|
Ssl starts at: Oct 5 00:00:00 2016 GMT
|
||||||
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.node-js-sample.org
|
Ssl subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.node-js-app.org
|
||||||
Ssl verified: self signed.
|
Ssl verified: self signed.
|
||||||
=====> python-sample
|
=====> python-app
|
||||||
Ssl dir: /home/dokku/python-sample/tls
|
Ssl dir: /home/dokku/python-app/tls
|
||||||
Ssl enabled: false
|
Ssl enabled: false
|
||||||
Ssl hostnames:
|
Ssl hostnames:
|
||||||
Ssl expires at:
|
Ssl expires at:
|
||||||
@@ -90,12 +101,12 @@ dokku certs:report
|
|||||||
You can run the command for a specific app also.
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku certs:report node-js-sample
|
dokku certs:report node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> node-js-sample ssl information
|
=====> node-js-app ssl information
|
||||||
Ssl dir: /home/dokku/node-js-sample/tls
|
Ssl dir: /home/dokku/node-js-app/tls
|
||||||
Ssl enabled: true
|
Ssl enabled: true
|
||||||
Ssl hostnames: *.dokku.org dokku.org
|
Ssl hostnames: *.dokku.org dokku.org
|
||||||
Ssl expires at: Oct 5 23:59:59 2019 GMT
|
Ssl expires at: Oct 5 23:59:59 2019 GMT
|
||||||
@@ -108,14 +119,14 @@ dokku certs:report node-js-sample
|
|||||||
You can pass flags which will output only the value of the specific information you want. For example:
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku certs:report node-js-sample --ssl-enabled
|
dokku certs:report node-js-app --ssl-enabled
|
||||||
```
|
```
|
||||||
|
|
||||||
## HSTS Header
|
## HSTS Header
|
||||||
|
|
||||||
The [HSTS header](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) is an HTTP header that can inform browsers that all requests to a given site should be made via HTTPS. Dokku does not, by default, enable this header. It is thus left up to you, the user, to enable it for your site.
|
The [HSTS header](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) is an HTTP header that can inform browsers that all requests to a given site should be made via HTTPS. Dokku does enables this header by default for HTTPS requests.
|
||||||
|
|
||||||
Beware that if you enable the header and a subsequent deploy of your application results in an HTTP deploy (for whatever reason), the way the header works means that a browser will not attempt to request the HTTP version of your site if the HTTPS version fails.
|
See the [NGINX HSTS documentation](/docs/configuration/nginx.md#hsts-header) for more information on how the HSTS configuration can be managed for your application.
|
||||||
|
|
||||||
## HTTP/2 support
|
## HTTP/2 support
|
||||||
|
|
||||||
@@ -125,7 +136,7 @@ Certain versions of nginx have bugs that prevent [HTTP/2](https://nginx.org/en/d
|
|||||||
|
|
||||||
Your application has access to the HTTP headers `X-Forwarded-Proto`, `X-Forwarded-Port` and `X-Forwarded-For`. These headers indicate the protocol of the original request (HTTP or HTTPS), the port number, and the IP address of the client making the request, respectively. The default configuration is for Nginx to set these headers.
|
Your application has access to the HTTP headers `X-Forwarded-Proto`, `X-Forwarded-Port` and `X-Forwarded-For`. These headers indicate the protocol of the original request (HTTP or HTTPS), the port number, and the IP address of the client making the request, respectively. The default configuration is for Nginx to set these headers.
|
||||||
|
|
||||||
If your server runs behind an HTTP/S load balancer, then Nginx will see all requests as coming from the load balancer. If your load balancer sets the `X-Forwarded-` headers, you can tell Nginx to pass these headers from load balancer to your application by using the following [nginx custom template](/docs/configuration/nginx.md#customizing-the-nginx-configuration)
|
If your server runs behind an HTTP(S) load balancer, then Nginx will see all requests as coming from the load balancer. If your load balancer sets the `X-Forwarded-` headers, you can tell Nginx to pass these headers from load balancer to your application by using a [custom nginx template](/docs/configuration/nginx.md#customizing-the-nginx-configuration). The following is a simple example of how to do so.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
server {
|
server {
|
||||||
@@ -139,7 +150,7 @@ server {
|
|||||||
proxy_pass http://{{ .APP }};
|
proxy_pass http://{{ .APP }};
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection "upgrade";
|
proxy_set_header Connection $http_connection;
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
|
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
|
||||||
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
|
||||||
@@ -150,7 +161,7 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
upstream {{ .APP }} {
|
upstream {{ .APP }} {
|
||||||
{{ range .DOKKU_APP_LISTENERS | split " " }}
|
{{ range .DOKKU_APP_WEB_LISTENERS | split " " }}
|
||||||
server {{ . }};
|
server {{ . }};
|
||||||
{{ end }}
|
{{ end }}
|
||||||
}
|
}
|
||||||
@@ -160,7 +171,7 @@ Only use this option if:
|
|||||||
1. All requests are terminated at the load balancer, and forwarded to Nginx
|
1. All requests are terminated at the load balancer, and forwarded to Nginx
|
||||||
2. The load balancer is configured to send the `X-Forwarded-` headers (this may be off by default)
|
2. The load balancer is configured to send the `X-Forwarded-` headers (this may be off by default)
|
||||||
|
|
||||||
If it's possible to make HTTP/S requests directly to Nginx, bypassing the load balancer, or if the load balancer is not configured to set these headers, then it becomes possible for a client to set these headers to arbitrary values.
|
If it's possible to make HTTP(S) requests directly to Nginx, bypassing the load balancer, or if the load balancer is not configured to set these headers, then it becomes possible for a client to set these headers to arbitrary values.
|
||||||
|
|
||||||
This could result in security issue, for example, if your application looks at the value of the `X-Forwarded-Proto` to determine if the request was made over HTTPS.
|
This could result in security issue, for example, if your application looks at the value of the `X-Forwarded-Proto` to determine if the request was made over HTTPS.
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Once you have configured Dokku with at least one user, you can deploy applicatio
|
|||||||
```shell
|
```shell
|
||||||
# from your local machine
|
# from your local machine
|
||||||
# SSH access to github must be enabled on this host
|
# SSH access to github must be enabled on this host
|
||||||
git clone git@github.com:heroku/ruby-getting-started.git
|
git clone https://github.com/heroku/ruby-getting-started
|
||||||
```
|
```
|
||||||
|
|
||||||
### Create the app
|
### Create the app
|
||||||
@@ -62,7 +62,7 @@ Now you can deploy the `ruby-getting-started` app to your Dokku server. All you
|
|||||||
# the remote username *must* be dokku or pushes will fail
|
# the remote username *must* be dokku or pushes will fail
|
||||||
cd ruby-getting-started
|
cd ruby-getting-started
|
||||||
git remote add dokku dokku@dokku.me:ruby-getting-started
|
git remote add dokku dokku@dokku.me:ruby-getting-started
|
||||||
git push dokku master
|
git push dokku main:master
|
||||||
```
|
```
|
||||||
|
|
||||||
> Note: Some tools may not support the short-upstream syntax referenced above, and you may need to prefix
|
> Note: Some tools may not support the short-upstream syntax referenced above, and you may need to prefix
|
||||||
@@ -71,7 +71,7 @@ git push dokku master
|
|||||||
|
|
||||||
> Note: Your private key should be registered with `ssh-agent` in your local development environment. If you get a `permission denied` error when pushing, you can register your private key as follows: `ssh-add -k ~/<your private key>`.
|
> Note: Your private key should be registered with `ssh-agent` in your local development environment. If you get a `permission denied` error when pushing, you can register your private key as follows: `ssh-add -k ~/<your private key>`.
|
||||||
|
|
||||||
After running `git push dokku master`, you should have output similar to this in your terminal:
|
After running `git push dokku main:master`, you should have output similar to this in your terminal:
|
||||||
|
|
||||||
```
|
```
|
||||||
Counting objects: 231, done.
|
Counting objects: 231, done.
|
||||||
@@ -100,8 +100,11 @@ Total 231 (delta 93), reused 147 (delta 53)
|
|||||||
|
|
||||||
Once the deploy is complete, the application's web URL will be generated as above.
|
Once the deploy is complete, the application's web URL will be generated as above.
|
||||||
|
|
||||||
Dokku supports deploying applications via [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) with [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks), as well as by using a project's [Dockerfile](https://docs.docker.com/reference/builder/).
|
Dokku supports deploying applications in a few ways:
|
||||||
|
|
||||||
|
- [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) via [Herokuish](https://github.com/gliderlabs/herokuish#buildpacks): See the [herokuish buildpacks documentation](/docs/deployment/methods/herokuish-buildpacks.md) to learn about the different ways to specify a buildpack.
|
||||||
|
- [Dockerfile](https://docs.docker.com/reference/builder/): See the [dockerfile documentation](/docs/deployment/methods/dockerfiles.md) to learn about the different ways to configure Dockerfile-based deploys.
|
||||||
|
- [Docker Image](https://docs.docker.com/get-started/overview/#docker-objects): See the [docker image documentation](/docs/deployment/methods/images.md) to learn about how to deploy a Docker Image.
|
||||||
|
|
||||||
### Skipping deployment
|
### Skipping deployment
|
||||||
|
|
||||||
@@ -121,7 +124,7 @@ If you need to redeploy or restart your app:
|
|||||||
dokku ps:rebuild ruby-getting-started
|
dokku ps:rebuild ruby-getting-started
|
||||||
```
|
```
|
||||||
|
|
||||||
See the [process scaling documentation](/docs/deployment/process-management.md) for more information.
|
See the [process scaling documentation](/docs/deployment/process-management.md) for more information on how to manage your app processes.
|
||||||
|
|
||||||
### Deploying with private Git submodules
|
### Deploying with private Git submodules
|
||||||
|
|
||||||
@@ -144,7 +147,7 @@ If you do not enter a fully qualified domain name when pushing your app, Dokku d
|
|||||||
# from your local machine
|
# from your local machine
|
||||||
# the remote username *must* be dokku or pushes will fail
|
# the remote username *must* be dokku or pushes will fail
|
||||||
git remote add dokku dokku@dokku.me:ruby-getting-started
|
git remote add dokku dokku@dokku.me:ruby-getting-started
|
||||||
git push dokku master
|
git push dokku main:master
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -158,7 +161,7 @@ You can also specify the fully qualified name as follows:
|
|||||||
# from your local machine
|
# from your local machine
|
||||||
# the remote username *must* be dokku or pushes will fail
|
# the remote username *must* be dokku or pushes will fail
|
||||||
git remote add dokku dokku@dokku.me:app.dokku.me
|
git remote add dokku dokku@dokku.me:app.dokku.me
|
||||||
git push dokku master
|
git push dokku main:master
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -172,7 +175,7 @@ This is useful when you want to deploy to the root domain:
|
|||||||
# from your local machine
|
# from your local machine
|
||||||
# the remote username *must* be dokku or pushes will fail
|
# the remote username *must* be dokku or pushes will fail
|
||||||
git remote add dokku dokku@dokku.me:dokku.me
|
git remote add dokku dokku@dokku.me:dokku.me
|
||||||
git push dokku master
|
git push dokku main:master
|
||||||
```
|
```
|
||||||
|
|
||||||
... deployment ...
|
... deployment ...
|
||||||
@@ -188,36 +191,36 @@ Prior to every deployment, Dokku will execute a cleanup function. As of 0.5.x, t
|
|||||||
|
|
||||||
## Adding deploy users
|
## Adding deploy users
|
||||||
|
|
||||||
See the [user management documentation](/docs/deployment/user-management.md).
|
See the [user management documentation](/docs/deployment/user-management.md) for more information on how to manage users with access to your Dokku server.
|
||||||
|
|
||||||
## Default vhost
|
## Default vhost
|
||||||
|
|
||||||
See the [nginx documentation](/docs/configuration/nginx.md#default-site).
|
See the [domains documentation](/docs/configuration/domains.md#default-site) for more information on how to manage the default site.
|
||||||
|
|
||||||
## Deploying non-master branch
|
## Deploying non-master branch
|
||||||
|
|
||||||
See the [Git documentation](/docs/deployment/methods/git.md#changing-the-deploy-branch).
|
See the [Git documentation](/docs/deployment/methods/git.md#changing-the-deploy-branch) for more information on deploying a non-master branch to your application.
|
||||||
|
|
||||||
## Dockerfile deployment
|
## Dockerfile deployment
|
||||||
|
|
||||||
See the [Dockerfile documentation](/docs/deployment/methods/dockerfiles.md).
|
See the [Dockerfile documentation](/docs/deployment/methods/dockerfiles.md) for information Dokku's Dockerfile support.
|
||||||
|
|
||||||
## Image tagging
|
## Image tagging
|
||||||
|
|
||||||
See the [image tagging documentation](/docs/deployment/methods/images.md).
|
See the [image tagging documentation](/docs/deployment/methods/images.md) for more information on how Docker images can be tagged and deployed for a given application.
|
||||||
|
|
||||||
## Specifying a custom buildpack
|
## Specifying a custom buildpack
|
||||||
|
|
||||||
See the [buildpack documentation](/docs/deployment/methods/buildpacks.md).
|
See the [herokuish buildpack documentation](/docs/deployment/methods/herokuish-buildpacks.md) for more information on how to specify a set of custom buildpacks for your application.
|
||||||
|
|
||||||
## Removing a deployed app
|
## Removing a deployed app
|
||||||
|
|
||||||
See the [application management documentation](/docs/deployment/application-management.md#removing-a-deployed-app).
|
See the [application management documentation](/docs/deployment/application-management.md#removing-a-deployed-app) for more information on how to remove an application from your Dokku server.
|
||||||
|
|
||||||
## Renaming a deployed app
|
## Renaming a deployed app
|
||||||
|
|
||||||
See the [application management documentation](/docs/deployment/application-management.md#renaming-a-deployed-app).
|
See the [application management documentation](/docs/deployment/application-management.md#renaming-a-deployed-app) for more information on how an application can be renamed and the impact of doing so upon the application and associated resources.
|
||||||
|
|
||||||
## Zero downtime deploy
|
## Zero downtime deploy
|
||||||
|
|
||||||
See the [zero-downtime deploy documentation](/docs/deployment/zero-downtime-deploys.md).
|
See the [zero-downtime deploy documentation](/docs/deployment/zero-downtime-deploys.md) for more information on how Dokku enables zero-downtime deploys.
|
||||||
|
|||||||
@@ -103,6 +103,16 @@ dokku --force apps:destroy node-js-app
|
|||||||
Destroying node-js-app (including all add-ons)
|
Destroying node-js-app (including all add-ons)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The `--force` flag can also be specified on the command vs globally:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku apps:destroy --force node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Destroying node-js-app (including all add-ons)
|
||||||
|
```
|
||||||
|
|
||||||
Destroying an application will unlink all linked services and destroy any config related to the application. Note that linked services will retain their data for later use (or removal).
|
Destroying an application will unlink all linked services and destroy any config related to the application. Note that linked services will retain their data for later use (or removal).
|
||||||
|
|
||||||
### Renaming a deployed app
|
### Renaming a deployed app
|
||||||
@@ -134,6 +144,12 @@ Renaming node-js-app to io-js-app... done
|
|||||||
|
|
||||||
This will copy all of your app's contents into a new app directory with the name of your choice, delete your old app, then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved.
|
This will copy all of your app's contents into a new app directory with the name of your choice, delete your old app, then rebuild the new version of the app and deploy it. All of your config variables, including database urls, will be preserved.
|
||||||
|
|
||||||
|
By default, Dokku will deploy the renamed app, though you can skip the deploy by using the `--skip-deploy` flag:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku apps:rename --skip-deploy node-js-app io-js-app
|
||||||
|
```
|
||||||
|
|
||||||
### Cloning an existing app
|
### Cloning an existing app
|
||||||
|
|
||||||
> New as of 0.11.5
|
> New as of 0.11.5
|
||||||
@@ -157,7 +173,7 @@ This will copy all of your app's contents into a new app directory with the name
|
|||||||
|
|
||||||
> Warning: If you have exposed specific ports via `docker-options` plugin, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors.
|
> Warning: If you have exposed specific ports via `docker-options` plugin, or performed anything that cannot be done against multiple applications, `apps:clone` may result in errors.
|
||||||
|
|
||||||
By default, Dokku will deploy this new application, though you can skip the deploy by using the `--skip-deploy` flag:
|
By default, Dokku will deploy this new app, though you can skip the deploy by using the `--skip-deploy` flag:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku apps:clone --skip-deploy node-js-app io-js-app
|
dokku apps:clone --skip-deploy node-js-app io-js-app
|
||||||
@@ -228,18 +244,18 @@ dokku apps:report
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> node-js-app
|
=====> node-js-app app information
|
||||||
App dir: /home/dokku/node-js-app
|
App dir: /home/dokku/node-js-app
|
||||||
Git sha: dbddc3f
|
App deploy source: git
|
||||||
Deploy source: git
|
App locked: false
|
||||||
Locked: false
|
=====> python-sample app information
|
||||||
=====> python-sample
|
App dir: /home/dokku/python-sample
|
||||||
not deployed
|
App deploy source:
|
||||||
=====> ruby-sample
|
App locked: false
|
||||||
|
=====> ruby-sample app information
|
||||||
App dir: /home/dokku/ruby-sample
|
App dir: /home/dokku/ruby-sample
|
||||||
Git sha: a2d477c
|
App deploy source: git
|
||||||
Deploy source: git
|
App locked: false
|
||||||
Locked: false
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can run the command for a specific app also.
|
You can run the command for a specific app also.
|
||||||
@@ -249,15 +265,14 @@ dokku apps:report node-js-app
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> node-js-app
|
=====> node-js-app app information
|
||||||
App dir: /home/dokku/node-js-app
|
App dir: /home/dokku/node-js-app
|
||||||
Git sha: dbddc3f
|
App deploy source: git
|
||||||
Deploy source: git
|
App locked: false
|
||||||
Locked: false
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can pass flags which will output only the value of the specific information you want. For example:
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku apps:report node-js-app --git-sha
|
dokku apps:report node-js-app --app-dir
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
logs <app> [-h] [-t] [-n num] [-q] [-p process] # Display recent log output
|
logs <app> [-h] [-t] [-n num] [-q] [-p process] # Display recent log output
|
||||||
logs:failed [<app>] # Shows the last failed deploy logs
|
logs:failed [--parallel count] [--all|<app>] # Shows the last failed deploy logs
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -36,7 +36,7 @@ will show logs continually from the web process.
|
|||||||
|
|
||||||
### Failed deploy logs
|
### Failed deploy logs
|
||||||
|
|
||||||
> Warning: The default `docker-local` scheduler will "store" these until the next deploy or until the old containers are garbage collected - whichever runs first. If you require the logs beyond this point in time, please ship the logs to a centralized log server.
|
> Warning: The default [docker-local scheduler](/docs/advanced-usage/schedulers/docker-local.md) will "store" these until the next deploy or until the old containers are garbage collected - whichever runs first. If you require the logs beyond this point in time, please ship the logs to a centralized log server.
|
||||||
|
|
||||||
In some cases, it may be useful to retrieve the logs from a previously failed deploy.
|
In some cases, it may be useful to retrieve the logs from a previously failed deploy.
|
||||||
|
|
||||||
@@ -46,8 +46,8 @@ You can retrieve these logs by using the `logs:failed` command
|
|||||||
dokku logs:failed node-js-app
|
dokku logs:failed node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also retrieve the failed logs for each app:
|
You may also fetch all failed app logs by using the `--all` flag.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku logs:failed node-js-app
|
dokku logs:failed --all
|
||||||
```
|
```
|
||||||
|
|||||||
35
docs/deployment/methods/cloud-native-buildpacks.md
Normal file
35
docs/deployment/methods/cloud-native-buildpacks.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Cloud Native Buildpacks (Experimental)
|
||||||
|
|
||||||
|
> New as of 0.22.0
|
||||||
|
|
||||||
|
Cloud Native Buildpacks are an evolution over the Buildpacks technology provided by the Herokuish builder. See the [herokuish buildpacks documentation](/docs/deployment/methods/herokuish.md) for more information on how to clear buildpack build cache for an application.
|
||||||
|
|
||||||
|
> Warning: This functionality uses the `pack` cli from the [Cloud Native Buildpacks](https://buildpacks.io) project to build apps. As the integration is experimental in Dokku, it is likely to change over time.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To use this builder instead of either `Dockerfile` or `herokuish`, you must set the `DOKKU_CNB_EXPERIMENTAL` environment variable for your app to `1`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku config:set --no-restart node-js-app DOKKU_CNB_EXPERIMENTAL=1
|
||||||
|
```
|
||||||
|
|
||||||
|
The `pack` cli tool is not included by default with Dokku or as a dependency. It must also be installed as shown on [this page](https://buildpacks.io/docs/tools/pack/).
|
||||||
|
|
||||||
|
Builds will proceed with the `pack` cli for the app from then on.
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
As this functionality is highly experimental, there are a number of caveats. Please note that not all issuesare listed below.
|
||||||
|
|
||||||
|
- The `heroku/buildpacks:latest` CNB builder is currently enforced. Specifying specific builders is not currently possible.
|
||||||
|
- A future release will allow modifying the chosen builder.
|
||||||
|
- Specifying specific buildpacks is not currently possible.
|
||||||
|
- A future release will add support for the `buildpacks` plugin.
|
||||||
|
- There is currently no way to specify extra arguments for `pack` cli invocations.
|
||||||
|
- A future release will add support for injecting extra arguments during the build process.
|
||||||
|
- The default process type is `web`.
|
||||||
|
- Build cache is stored in Docker volumes instead of on disk. As such, `repo:purge-cache` currently has no effect.
|
||||||
|
- A future version will add integration with the `repo` plugin.
|
||||||
|
- `pack` is not currently included with Dokku, nor is it added as a package dependency.
|
||||||
|
- A future version will include it as a package dependency.
|
||||||
@@ -29,10 +29,16 @@ For users that require customization in the `build` phase, you may use build arg
|
|||||||
dokku docker-options:add node-js-app build '--build-arg NODE_ENV=production'
|
dokku docker-options:add node-js-app build '--build-arg NODE_ENV=production'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The location of the `Dockerfile` may also be specified. If the location is changed, the repository **must also** have a `Dockerfile` in the root directory in order to trigger a dockerfile-based deploy.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:add node-js-app build '--file Dockerfile.dokku'
|
||||||
|
```
|
||||||
|
|
||||||
Once set, the Dockerfile usage would be as follows:
|
Once set, the Dockerfile usage would be as follows:
|
||||||
|
|
||||||
```Dockerfile
|
```Dockerfile
|
||||||
FROM debian:jessie
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
# set the argument default
|
# set the argument default
|
||||||
ARG NODE_ENV=production
|
ARG NODE_ENV=production
|
||||||
@@ -44,7 +50,7 @@ RUN echo $NODE_ENV
|
|||||||
You may also set the argument as an environment variable
|
You may also set the argument as an environment variable
|
||||||
|
|
||||||
```Dockerfile
|
```Dockerfile
|
||||||
FROM debian:jessie
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
# set the argument default
|
# set the argument default
|
||||||
ARG NODE_ENV=production
|
ARG NODE_ENV=production
|
||||||
@@ -59,6 +65,10 @@ ENV NODE_ENV ${NODE_ENV}
|
|||||||
RUN echo $NODE_ENV
|
RUN echo $NODE_ENV
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Building images with Docker Buildkit
|
||||||
|
|
||||||
|
If your Dockerfile is using Docker engine's [buildkit](https://docs.docker.com/develop/develop-images/build_enhancements/) (not to be confused with buildpacks), then the `DOCKER_BUILDKIT=1` environment variable needs to be set. One way to do this is to edit `/etc/environment` on your dokku host and reboot your instance. Note, for complete build log output, you should also set `BUILDKIT_PROGRESS=plain` in the same file.
|
||||||
|
|
||||||
## Customizing the run command
|
## Customizing the run command
|
||||||
|
|
||||||
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base Node.js image, with the following `ENTRYPOINT`:
|
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base Node.js image, with the following `ENTRYPOINT`:
|
||||||
@@ -95,7 +105,7 @@ worker: bin/run-worker.sh
|
|||||||
And `Dockerfile`:
|
And `Dockerfile`:
|
||||||
|
|
||||||
```Dockerfile
|
```Dockerfile
|
||||||
FROM debian:jessie
|
FROM ubuntu:18.04
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY . ./
|
COPY . ./
|
||||||
CMD ["bin/run-dev.sh"]
|
CMD ["bin/run-dev.sh"]
|
||||||
@@ -110,4 +120,4 @@ in your `Procfile` will be passed as arguments to the `ENTRYPOINT` script instea
|
|||||||
|
|
||||||
## Exposed ports
|
## Exposed ports
|
||||||
|
|
||||||
See the [port management documentation](/docs/networking/port-management.md).
|
See the [port management documentation](/docs/networking/port-management.md) for more information on how Dokku exposes ports for applications and how you can configure these for your app.
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ git:report [<app>] [<flag>] # Displays a git report for one or more
|
|||||||
git:set <app> <key> (<value>) # Set or clear a git property for an app
|
git:set <app> <key> (<value>) # Set or clear a git property for an app
|
||||||
```
|
```
|
||||||
|
|
||||||
Git-based deployment has been the traditional method of deploying applications in Dokku. As of v0.12.0, Dokku introduces a few ways to customize the experience of deploying via `git push`. A Git-based deployment currently supports building applications via both [Buildpack](/docs/deployment/methods/buildpacks.md) and [Dockerfile](/docs/deployment/methods/dockerfiles.md).
|
Git-based deployment has been the traditional method of deploying applications in Dokku. As of v0.12.0, Dokku introduces a few ways to customize the experience of deploying via `git push`. A Git-based deployment currently supports building applications via:
|
||||||
|
|
||||||
|
- [Cloud Native Buildpacks](/docs/deployment/methods/cloud-native-buildpacks.md)
|
||||||
|
- [Herokuish Buildpack](/docs/deployment/methods/herokuish-buildpacks.md)
|
||||||
|
- [Dockerfiles](/docs/deployment/methods/dockerfiles.md)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -76,3 +80,28 @@ This behavior can be disabled entirely on a per-app basis by setting the `rev-en
|
|||||||
# override for a specific app
|
# override for a specific app
|
||||||
dokku git:set node-js-app rev-env-var ""
|
dokku git:set node-js-app rev-env-var ""
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Keeping the `.git` directory
|
||||||
|
|
||||||
|
By default, Dokku will remove the contents of the `.git` before triggering a build for a given app. This is generally a safe default as shipping the entire source code history of your app in the deployed image artifact is unnecessary as it increases bloat and potentially can leak information if there are any security issues with your app code.
|
||||||
|
|
||||||
|
To enable the `.git` directory, run the `git:set` command as follows:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# on the Dokku host
|
||||||
|
|
||||||
|
# keep the .git directory during builds
|
||||||
|
dokku git:set node-js-app keep-git-dir true
|
||||||
|
```
|
||||||
|
|
||||||
|
The default behavior is to delete this directory and it's contents. To revert to the default behavior, the `keep-git-dir` value can be set to either an empty string or `false`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# on the Dokku host
|
||||||
|
|
||||||
|
# delete the .git directory during builds (default)
|
||||||
|
dokku git:set node-js-app keep-git-dir false
|
||||||
|
|
||||||
|
# delete the .git directory during builds (default)
|
||||||
|
dokku git:set node-js-app keep-git-dir ""
|
||||||
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Buildpack Deployment
|
# Herokuish Buildpack Deployment
|
||||||
|
|
||||||
> Subcommands new as of 0.15.0
|
> Subcommands new as of 0.15.0
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ dokku buildpacks:report node-js-app --buildpacks-list
|
|||||||
If an application was previously deployed via Dockerfile, the following commands should be run before a buildpack deploy will succeed:
|
If an application was previously deployed via Dockerfile, the following commands should be run before a buildpack deploy will succeed:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku config:unset --no-restart node-js-app DOKKU_DOCKERFILE_CMD DOKKU_DOCKERFILE_ENTRYPOINT DOKKU_PROXY_PORT_MAP
|
dokku config:unset --no-restart node-js-app DOKKU_PROXY_PORT_MAP
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using a specific buildpack version
|
### Using a specific buildpack version
|
||||||
@@ -224,4 +224,4 @@ dokku config:set --global CURL_CONNECT_TIMEOUT=180
|
|||||||
|
|
||||||
### Clearing buildpack cache
|
### Clearing buildpack cache
|
||||||
|
|
||||||
See the [repository management documentation](/docs/advanced-usage/repository-management.md#clearing-app-cache).
|
See the [repository management documentation](/docs/advanced-usage/repository-management.md#clearing-app-cache) for more information on how to clear buildpack build cache for an application.
|
||||||
@@ -22,7 +22,7 @@ The Dokku tags plugin allows you to add Docker image tags to the currently deplo
|
|||||||
|
|
||||||
### Exposed ports
|
### Exposed ports
|
||||||
|
|
||||||
See the [port management documentation](/docs/networking/port-management.md).
|
See the [port management documentation](/docs/networking/port-management.md) for more information on how Dokku exposes ports for applications and how you can configure these for your app.
|
||||||
|
|
||||||
### Listing tags for an application
|
### Listing tags for an application
|
||||||
|
|
||||||
@@ -92,7 +92,6 @@ dokku tags:deploy node-js-app v1
|
|||||||
-----> Running post-deploy
|
-----> Running post-deploy
|
||||||
-----> Configuring node-js-app.dokku.me...
|
-----> Configuring node-js-app.dokku.me...
|
||||||
-----> Creating http nginx.conf
|
-----> Creating http nginx.conf
|
||||||
-----> Running nginx-pre-reload
|
|
||||||
Reloading nginx
|
Reloading nginx
|
||||||
-----> Shutting down old containers in 60 seconds
|
-----> Shutting down old containers in 60 seconds
|
||||||
=====> 025eec3fa3b442fded90933d58d8ed8422901f0449f5ea0c23d00515af5d3137
|
=====> 025eec3fa3b442fded90933d58d8ed8422901f0449f5ea0c23d00515af5d3137
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Sometimes you need to either inspect running containers or run a one-off command
|
|||||||
## Run a command in an app environment
|
## Run a command in an app environment
|
||||||
|
|
||||||
```
|
```
|
||||||
run <app> <cmd> # Run a command in a new container using the current application image
|
run [ --env KEY=VALUE | -e KEY=VALUE ] <app> <cmd> # Run a command in a new container using the current application image
|
||||||
```
|
```
|
||||||
|
|
||||||
The `run` command can be used to run a one-off process for a specific command. This will start a new container and run the desired command within that container. Note that this container will be stay around even after command completes. The container will be the same container as was used to start the currently deployed application.
|
The `run` command can be used to run a one-off process for a specific command. This will start a new container and run the desired command within that container. Note that this container will be stay around even after command completes. The container will be the same container as was used to start the currently deployed application.
|
||||||
@@ -13,6 +13,9 @@ The `run` command can be used to run a one-off process for a specific command. T
|
|||||||
```shell
|
```shell
|
||||||
# runs `ls -lah` in the `/app` directory of the application `node-js-app`
|
# runs `ls -lah` in the `/app` directory of the application `node-js-app`
|
||||||
dokku run node-js-app ls -lah
|
dokku run node-js-app ls -lah
|
||||||
|
|
||||||
|
# optionally, run can be passed custom environment variables
|
||||||
|
dokku run --env "NODE_ENV=development" --env "PATH=/custom/path" node-js-app npm run mytask
|
||||||
```
|
```
|
||||||
|
|
||||||
The `run` command can also be used to run a command defined in your Procfile:
|
The `run` command can also be used to run a command defined in your Procfile:
|
||||||
@@ -43,6 +46,12 @@ dokku --rm-container run node-js-app ls -lah
|
|||||||
dokku --rm run node-js-app ls -lah
|
dokku --rm run node-js-app ls -lah
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Containers may have specific labels attached. In order to avoid issues with dokku internals, do not use any labels beginning with either `com.dokku` or `org.label-schema`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku --label=com.example.test-label=value run node-js-app ls -lah
|
||||||
|
```
|
||||||
|
|
||||||
Finally, you may wish to run a container in "detached" mode via the `--detach` Dokku flag. Running a process in detached mode will immediately return a `CONTAINER_ID`. It is up to the user to then further manage this container in whatever manner they see fit, as Dokku will *not* automatically terminate the container.
|
Finally, you may wish to run a container in "detached" mode via the `--detach` Dokku flag. Running a process in detached mode will immediately return a `CONTAINER_ID`. It is up to the user to then further manage this container in whatever manner they see fit, as Dokku will *not* automatically terminate the container.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
@@ -3,82 +3,110 @@
|
|||||||
> New as of 0.3.14, Enhanced in 0.7.0
|
> New as of 0.3.14, Enhanced in 0.7.0
|
||||||
|
|
||||||
```
|
```
|
||||||
ps <app> # List processes running in app container(s)
|
ps:inspect <app> # Displays a sanitized version of docker inspect for an app
|
||||||
ps:inspect <app> # Displays a sanitized version of docker inspect for an app
|
ps:rebuild [--parallel count] [--all|<app>] # Rebuilds an app from source
|
||||||
ps:rebuild <app> # Rebuild an app from source
|
ps:report [<app>] [<flag>] # Displays a process report for one or more apps
|
||||||
ps:rebuildall # Rebuild all apps from source
|
ps:restart [--parallel count] [--all|<app>] # Restart an app
|
||||||
ps:report [<app>] [<flag>] # Displays a process report for one or more apps
|
ps:restore [<app>] # Start previously running apps e.g. after reboot
|
||||||
ps:restart <app> # Restart app container(s)
|
ps:scale [--skip-deploy] <app> <proc>=<count> [<proc>=<count>...] # Get/Set how many instances of a given process to run
|
||||||
ps:restart-policy <app> # Shows the restart-policy for an app
|
ps:set <app> <key> <value> # Set or clear a ps property for an app
|
||||||
ps:restartall # Restart all deployed app containers
|
ps:start [--parallel count] [--all|<app>] # Start an app
|
||||||
ps:scale <app> <proc>=<count> [<proc>=<count>] # Get/Set how many instances of a given process to run
|
ps:stop [--parallel count] [--all|<app>] # Stop an app
|
||||||
ps:set-restart-policy <app> <policy> # Sets app restart-policy
|
|
||||||
ps:start <app> # Start app container(s)
|
|
||||||
ps:startall # Start all deployed app containers
|
|
||||||
ps:stop <app> # Stop app container(s)
|
|
||||||
ps:stopall # Stop all app container(s)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, Dokku will only start a single `web` process - if defined - though process scaling can be managed by the `ps` plugin or [via a custom `DOKKU_SCALE` file](/docs/deployment/process-management.md#manually-managing-process-scaling).
|
|
||||||
|
|
||||||
> The `web` proctype is the only proctype that will invoke custom checks as defined by a `CHECKS` file. It is also the only process type that will be launched in a container that is either proxied via nginx or bound to an external port.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Listing processes running in an app container
|
|
||||||
|
|
||||||
To find out if your application's containers are running the commands you expect, simply run the `ps` command against that application.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku ps node-js-app
|
|
||||||
```
|
|
||||||
|
|
||||||
### Inspecting app containers
|
### Inspecting app containers
|
||||||
|
|
||||||
> New as of 0.13.0
|
> New as of 0.13.0
|
||||||
|
|
||||||
A common administrative task to perform is calling `docker inspect` on the containers that are running for an application. This can be an error-prone task to perform, and may also reveal sensitive environment variables if not done correctly. Dokku provides a wrapper around this command via the `ps:inspect` command:
|
A common administrative task to perform is calling `docker inspect` on the containers that are running for an app. This can be an error-prone task to perform, and may also reveal sensitive environment variables if not done correctly. Dokku provides a wrapper around this command via the `ps:inspect` command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:inspect node-js-app
|
dokku ps:inspect node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
This command will gather all the running container IDs for your application and call `docker inspect`, sanitizing the output data so it can be copy-pasted elsewhere safely.
|
This command will gather all the running container IDs for your app and call `docker inspect`, sanitizing the output data so it can be copy-pasted elsewhere safely.
|
||||||
|
|
||||||
### Rebuilding applications
|
### Rebuilding apps
|
||||||
|
|
||||||
There are some Dokku commands which will not automatically rebuild an application's environment, or which can be told to skip a rebuild. For instance, you may wish to run multiple `config:set` commands without a restart so as to speed up configuration. In these cases, you can ultimately trigger an application rebuild using `ps:rebuild`
|
> Warning: This section applies only to git-based deploys, and only works deterministically for these apps. Please see the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
|
||||||
|
> in for more information concerning rebuilding those apps.
|
||||||
|
|
||||||
|
It may be useful to rebuild an app at will, such as for commands that do not rebuild an app or when skipping a rebuild after setting multiple config values. For these use cases, the `ps:rebuild` function can be used.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:rebuild node-js-app
|
dokku ps:rebuild node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
You may also rebuild all applications at once, which is useful when enabling/disabling a plugin that modifies all applications:
|
All apps may be rebuilt by using the `--all` flag.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:rebuildall
|
dokku ps:rebuild --all
|
||||||
```
|
```
|
||||||
|
|
||||||
> The `ps:rebuild` and `ps:rebuildall` commands only work for applications for which there is a source, and thus
|
By default, rebuilding all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
|
||||||
> will only always work deterministically for Git-deployed application. Please see
|
|
||||||
> the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
|
|
||||||
> in for more information concerning rebuilding those applications.
|
|
||||||
|
|
||||||
### Restarting applications
|
```shell
|
||||||
|
dokku ps:rebuild --all --parallel 2
|
||||||
|
```
|
||||||
|
|
||||||
Applications can be restarted, which is functionally identical to calling the `release_and_deploy` function on an application. Please note that any linked containers *must* be started before the application in order to have a successful boot.
|
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:rebuild --all --parallel -1
|
||||||
|
```
|
||||||
|
|
||||||
|
A missing linked container will result in failure to boot apps. Services should all be started for apps being rebuilt.
|
||||||
|
|
||||||
|
### Restarting apps
|
||||||
|
|
||||||
|
An app may be restarted using the `ps:restart` command.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:restart node-js-app
|
dokku ps:restart node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
You may also trigger a restart on all applications at one time:
|
All apps may be restarted by using the `--all` flag.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:restartall
|
dokku ps:restart --all
|
||||||
```
|
```
|
||||||
|
|
||||||
### `ps:scale` command
|
By default, restarting all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:restart --all --parallel 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:restart --all --parallel -1
|
||||||
|
```
|
||||||
|
|
||||||
|
A missing linked container will result in failure to boot apps. Services should all be started for apps being rebuilt.
|
||||||
|
|
||||||
|
### Displaying existing scale properties
|
||||||
|
|
||||||
|
Issuing the `ps:scale` command with no arguments will output the current scaling properties for an app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:scale node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Scaling for python
|
||||||
|
proctype: qty
|
||||||
|
--------: ---
|
||||||
|
web: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Scaling apps
|
||||||
|
|
||||||
|
#### Via CLI
|
||||||
|
|
||||||
|
> This functionality is disabled if the formation is managed via a file such as `DOKKU_SCALE`.
|
||||||
|
|
||||||
Dokku can also manage scaling itself via the `ps:scale` command. This command can be used to scale multiple process types at the same time.
|
Dokku can also manage scaling itself via the `ps:scale` command. This command can be used to scale multiple process types at the same time.
|
||||||
|
|
||||||
@@ -92,133 +120,178 @@ Multiple process types can be scaled at once:
|
|||||||
dokku ps:scale node-js-app web=1 worker=1
|
dokku ps:scale node-js-app web=1 worker=1
|
||||||
```
|
```
|
||||||
|
|
||||||
Issuing the `ps:scale` command with no process type argument will output the current scaling settings for an application:
|
If desired, the corresponding deploy will be skipped by using the `--skip-deploy` flag:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku ps:scale node-js-app
|
dokku ps:scale --skip-deploy node-js-app web=1
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
#### Manually managing process scaling
|
||||||
-----> Scaling for node-js-app
|
|
||||||
-----> proctype qty
|
|
||||||
-----> -------- ---
|
|
||||||
-----> web 1
|
|
||||||
-----> worker 1
|
|
||||||
```
|
|
||||||
|
|
||||||
### Stopping applications
|
> Using a `DOKKU_SCALE` formation file disables the ability to use `ps:scale` for scaling.
|
||||||
|
|
||||||
Deployed applications can be stopped using the `ps:stop` command. This turns off all running containers for an application, and will result in a **502 Bad Gateway** response for the default nginx proxy implementation.
|
A `DOKKU_SCALE` file can be committed to the root of the pushed app repository, and must be within the built image artifact in the image's working directory as shown below.
|
||||||
|
|
||||||
```shell
|
- Buildpacks: `/app/DOKKU_SCALE`
|
||||||
dokku ps:stop node-js-app
|
- Dockerfile: `WORKDIR/DOKKU_SCALE` or `/DOKKU_SCALE`
|
||||||
```
|
- Docker Image: `WORKDIR/DOKKU_SCALE` or `/DOKKU_SCALE`
|
||||||
|
|
||||||
You may also stop all applications at once:
|
The `DOKKU_SCALE` file format is as follows:
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku ps:stopall
|
|
||||||
```
|
|
||||||
|
|
||||||
### Starting applications
|
|
||||||
|
|
||||||
All stopped containers can be started using the `ps:start` command. This is similar to running `ps:restart`, except no action will be taken if the application containers are running.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku ps:start node-js-app
|
|
||||||
```
|
|
||||||
|
|
||||||
### Starting all applications
|
|
||||||
|
|
||||||
In some cases, it may be necessary to start all applications from scratch - e.g. if all Docker containers have been manually stopped. This can be executed via the `ps:startall` command, which supports parallelism in the same manner `ps:rebuildall`, `ps:restartall`, and `ps:stopall` do.
|
|
||||||
|
|
||||||
Be aware that no action will be taken if the application containers are running.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku ps:startall
|
|
||||||
```
|
|
||||||
|
|
||||||
## Restart policies
|
|
||||||
|
|
||||||
> New as of 0.7.0
|
|
||||||
|
|
||||||
By default, Dokku will automatically restart containers that exit with a non-zero status up to 10 times via the [on-failure Docker restart policy](https://docs.docker.com/engine/reference/run/#restart-policies-restart).
|
|
||||||
|
|
||||||
### Showing the current restart policy
|
|
||||||
|
|
||||||
The `ps:restart-policy` command will show the currently configured restart policy for an application. The default policy is `on-failure:10`
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku ps:restart-policy node-js-app
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
=====> node-js-app restart-policy:
|
|
||||||
on-failure:10
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setting the restart policy
|
|
||||||
|
|
||||||
You can configure this via the `ps:set-restart-policy` command:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# always restart an exited container
|
|
||||||
dokku ps:set-restart-policy node-js-app always
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
-----> Setting restart policy: always
|
|
||||||
```
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# never restart an exited container
|
|
||||||
dokku ps:set-restart-policy node-js-app no
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
-----> Setting restart policy: no
|
|
||||||
```
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# only restart it on Docker restart if it was not manually stopped
|
|
||||||
dokku ps:set-restart-policy node-js-app unless-stopped
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
-----> Setting restart policy: unless-stopped
|
|
||||||
```
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# restart only on non-zero exit status
|
|
||||||
dokku ps:set-restart-policy node-js-app on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
-----> Setting restart policy: on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# restart only on non-zero exit status up to 20 times
|
|
||||||
dokku ps:set-restart-policy node-js-app on-failure:20
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
-----> Setting restart policy: on-failure:20
|
|
||||||
```
|
|
||||||
|
|
||||||
Restart policies have no bearing on server reboot, and Dokku will always attempt to restart your applications at that point unless they were manually stopped.
|
|
||||||
|
|
||||||
## Manually managing process scaling
|
|
||||||
|
|
||||||
You can optionally *commit* a `DOKKU_SCALE` file to the root of your repository - *not* to the `/home/dokku/APP` directory. Dokku expects this file to contain one line for every process defined in your Procfile.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```Procfile
|
```Procfile
|
||||||
web=1
|
web=1
|
||||||
worker=2
|
worker=2
|
||||||
```
|
```
|
||||||
|
|
||||||
If it is not committed to the repository, the `DOKKU_SCALE` file will otherwise be automatically generated based on your `ps:scale` settings.
|
Removing the file will result in Dokku respecting the `ps:scale` command for setting scale values.
|
||||||
|
|
||||||
> *NOTE*: Dokku will always use the `DOKKU_SCALE` file that ships with the repo to override any local settings.
|
#### The `web` process
|
||||||
|
|
||||||
|
For initial app deploys, Dokku will default to starting a single `web` process for each app. This process may be defined within the `Procfile` or as the `CMD` (for Dockerfile or Docker image deploys). Scaling of the `web` process - and others - may be managed via `ps:scale` or a `DOKKU_SCALE` formation file either before or after the initial deploy.
|
||||||
|
|
||||||
|
There are also a few other exceptions for the `web` process.
|
||||||
|
|
||||||
|
- Custom checks defined by a `CHECKS` file only apply to the `web` process type.
|
||||||
|
- By default, the built-in nginx proxy implementation only proxies the `web` process (others may be handled via a custom `nginx.conf.sigil`).
|
||||||
|
- See the [nginx request proxying documentation](/docs/configuration/nginx.md#request-proxying) for more information on how nginx handles proxied requests.
|
||||||
|
- Only the `web` process may be bound to an external port.
|
||||||
|
|
||||||
|
### Stopping apps
|
||||||
|
|
||||||
|
Deployed apps can be stopped using the `ps:stop` command. This turns off all running containers for an app, and will result in a **502 Bad Gateway** response for the default nginx proxy implementation.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:stop node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
All apps may be stopped by using the `--all` flag.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:stop --all
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, stopping all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:stop --all --parallel 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:stop --all --parallel -1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Starting apps
|
||||||
|
|
||||||
|
All stopped containers can be started using the `ps:start` command. This is similar to running `ps:restart`, except no action will be taken if the app containers are running.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:start node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
All apps may be started by using the `--all` flag.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:start --all
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, starting all apps happens serially. The parallelism may be controlled by the `--parallel` flag.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:start --all --parallel 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, the number of parallel workers may be automatically set to the number of CPUs available by setting the `--parallel` flag to `-1`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:start --all --parallel -1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restart policies
|
||||||
|
|
||||||
|
> New as of 0.7.0, Command Changed in 0.22.0
|
||||||
|
|
||||||
|
By default, Dokku will automatically restart containers that exit with a non-zero status up to 10 times via the [on-failure Docker restart policy](https://docs.docker.com/engine/reference/run/#restart-policies---restart).
|
||||||
|
|
||||||
|
#### Setting the restart policy
|
||||||
|
|
||||||
|
> A change in the restart policy must be followed by a `ps:rebuild` call.
|
||||||
|
|
||||||
|
You can configure this via the `ps:set` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# always restart an exited container
|
||||||
|
dokku ps:set node-js-app restart-policy always
|
||||||
|
|
||||||
|
# never restart an exited container
|
||||||
|
dokku ps:set node-js-app restart-policy no
|
||||||
|
|
||||||
|
# only restart it on Docker restart if it was not manually stopped
|
||||||
|
dokku ps:set node-js-app restart-policy unless-stopped
|
||||||
|
|
||||||
|
# restart only on non-zero exit status
|
||||||
|
dokku ps:set node-js-app restart-policy on-failure
|
||||||
|
|
||||||
|
# restart only on non-zero exit status up to 20 times
|
||||||
|
dokku ps:set node-js-app restart-policy on-failure:20
|
||||||
|
```
|
||||||
|
|
||||||
|
Restart policies have no bearing on server reboot, and Dokku will always attempt to restart your apps at that point unless they were manually stopped.
|
||||||
|
|
||||||
|
|
||||||
|
### Displaying reports for an app
|
||||||
|
|
||||||
|
> New as of 0.12.0
|
||||||
|
|
||||||
|
You can get a report about the deployed apps using the `ps:report` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:report
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app ps information
|
||||||
|
Deployed: false
|
||||||
|
Processes: 0
|
||||||
|
Ps can scale: true
|
||||||
|
Ps restart policy: on-failure:10
|
||||||
|
Restore: true
|
||||||
|
Running: false
|
||||||
|
=====> python-sample ps information
|
||||||
|
Deployed: false
|
||||||
|
Processes: 0
|
||||||
|
Ps can scale: true
|
||||||
|
Ps restart policy: on-failure:10
|
||||||
|
Restore: true
|
||||||
|
Running: false
|
||||||
|
=====> ruby-sample ps information
|
||||||
|
Deployed: false
|
||||||
|
Processes: 0
|
||||||
|
Ps can scale: true
|
||||||
|
Ps restart policy: on-failure:10
|
||||||
|
Restore: true
|
||||||
|
Running: false
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:report node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app ps information
|
||||||
|
Deployed: false
|
||||||
|
Processes: 0
|
||||||
|
Ps can scale: true
|
||||||
|
Ps restart policy: on-failure:10
|
||||||
|
Restore: true
|
||||||
|
Running: false
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:report node-js-app --deployed
|
||||||
|
```
|
||||||
|
|||||||
@@ -21,8 +21,75 @@ in order to avoid SSH interpretting Dokku arguments for itself.
|
|||||||
--force force flag. currently used in apps:destroy and other ":destroy" commands
|
--force force flag. currently used in apps:destroy and other ":destroy" commands
|
||||||
```
|
```
|
||||||
|
|
||||||
## Clients
|
## Official Client
|
||||||
|
|
||||||
You may optionally use a client to connect to your Dokku server. Most clients use the configured `git remote` to locate the Dokku server, though some allow for overriding this via an environment variable or flag.
|
You may optionally use the official client when connecting to the Dokku server.
|
||||||
|
|
||||||
Please refer to the [clients](/docs/community/clients.md) list for more details.
|
Of all methods, this is the *most* official method of interacting with your Dokku installation. It is a bash script that interacts with a remote Dokku installation via `ssh`. It is available in `contrib/dokku_client.sh` in the root of the Dokku repository.
|
||||||
|
|
||||||
|
It can be installed either via the [Homebrew](https://brew.sh) package manager (macOS only), or manually.
|
||||||
|
|
||||||
|
### Installation via Homebrew
|
||||||
|
|
||||||
|
To install, simply run the following command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
brew install dokku/repo/dokku
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manual installation
|
||||||
|
|
||||||
|
To install manually, simply clone the Dokku repository down and add the `dokku` alias pointing at the script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone git@github.com:dokku/dokku.git ~/.dokku
|
||||||
|
|
||||||
|
# optional: make sure that the dokku_client.sh version matches your Dokku version
|
||||||
|
cd ~/.dokku
|
||||||
|
git checkout <tag/branch>
|
||||||
|
|
||||||
|
# add the following to either your
|
||||||
|
# .bashrc, .bash_profile, or .profile file
|
||||||
|
alias dokku='$HOME/.dokku/contrib/dokku_client.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, if using another shell such as **zsh**, create an alias command which invokes the script using **bash**:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# zsh: add the following to either .zshenv or .zshrc
|
||||||
|
alias dokku='bash $HOME/.dokku/contrib/dokku_client.sh'
|
||||||
|
|
||||||
|
# fish: add the following to ~/.config/fish/config.fish
|
||||||
|
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
|
||||||
|
|
||||||
|
# csh: add the following to .cshrc
|
||||||
|
alias dokku 'bash $HOME/.dokku/contrib/dokku_client.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
All commands have the application name automatically set via the `--app` flag on the remote server, and thus the app name does not need to be specified manually for core plugins.
|
||||||
|
|
||||||
|
The client supports several environment variables:
|
||||||
|
|
||||||
|
- `DOKKU_HOST` (default: `dokku` git remote): Used to interact with a specific remote server. Can be overriden via `--remote` flag.
|
||||||
|
- `DOKKU_PORT` (default: `22`): Used to specify a port to connect to the Dokku server on.
|
||||||
|
|
||||||
|
It also supports several flags (all flags unspecified here are passed as is to the server):
|
||||||
|
|
||||||
|
- `--app`: Override the remote app in use.
|
||||||
|
- `--trace`: Enable trace mode.
|
||||||
|
- `--remote`: Override the remote server.
|
||||||
|
- `--global`: Unsets the "app" value. May not be supported for the specified command.
|
||||||
|
|
||||||
|
In addition, the following commands have special local side-effects:
|
||||||
|
|
||||||
|
- `apps:create`:
|
||||||
|
- If no local `--app` flag is specified or detected from a `dokku` git remote, a random name is generated and used for the app.
|
||||||
|
- The `dokku` git remote is set if not already set.
|
||||||
|
- `apps:destroy`:
|
||||||
|
- Removes the local `dokku` git remote if set.
|
||||||
|
|
||||||
|
## Unofficial Clients
|
||||||
|
|
||||||
|
Please refer to the [community clients](/docs/community/clients.md) list for more details.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
ssh-keys:add <name> [/path/to/key] # Add a new public key by pipe or path
|
ssh-keys:add <name> [/path/to/key] # Add a new public key by pipe or path
|
||||||
ssh-keys:list # List of all authorized Dokku public ssh keys
|
ssh-keys:list [<name>] # List of all authorized Dokku public ssh keys
|
||||||
ssh-keys:remove <name> # Remove SSH public key by name
|
ssh-keys:remove <name> # Remove SSH public key by name
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ dokku ssh-keys:list
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
61:21:1f:88:7f:86:d4:3a:68:9f:18:aa:41:4f:bc:3d NAME="admin" SSHCOMMAND_ALLOWED_KEYS="no-agent-forwarding,no-user-rc,no-X11-forwarding,no-port-forwarding"
|
SHA256:ABC123ABC123+abc123abc123Zabc123abcZ123abc NAME="admin" SSHCOMMAND_ALLOWED_KEYS="no-agent-forwarding,no-user-rc,no-X11-forwarding,no-port-forwarding"
|
||||||
```
|
```
|
||||||
|
|
||||||
The output contains the following information:
|
The output contains the following information:
|
||||||
@@ -34,6 +34,14 @@ The output contains the following information:
|
|||||||
- The `KEY_NAME`.
|
- The `KEY_NAME`.
|
||||||
- A comma separated list of SSH options under the `SSHCOMMAND_ALLOWED_KEYS` name.
|
- A comma separated list of SSH options under the `SSHCOMMAND_ALLOWED_KEYS` name.
|
||||||
|
|
||||||
|
> New as of 0.20.2
|
||||||
|
|
||||||
|
The keys for a specific user may be listed by specifying a second argument to the `ssh-keys:list` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ssh-keys:list admin
|
||||||
|
```
|
||||||
|
|
||||||
### Adding SSH keys
|
### Adding SSH keys
|
||||||
|
|
||||||
You can add your public key to Dokku with the `ssh-keys:add` command. The output will be the fingerprint of the SSH key:
|
You can add your public key to Dokku with the `ssh-keys:add` command. The output will be the fingerprint of the SSH key:
|
||||||
@@ -43,7 +51,7 @@ dokku ssh-keys:add KEY_NAME path/to/id_rsa.pub
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
b7:76:27:4f:30:90:21:ae:d4:1e:70:20:35:3f:06:d6
|
SHA256:ABC123ABC123+abc123abc123Zabc123abcZ123abc
|
||||||
```
|
```
|
||||||
|
|
||||||
`KEY_NAME` is the name you want to use to refer to this particular key. Including the word `admin` in the name will grant the user privileges to add additional keys remotely.
|
`KEY_NAME` is the name you want to use to refer to this particular key. Including the word `admin` in the name will grant the user privileges to add additional keys remotely.
|
||||||
@@ -72,7 +80,8 @@ dokku ssh-keys:remove KEY_NAME
|
|||||||
|
|
||||||
## Scoping commands to specific users
|
## Scoping commands to specific users
|
||||||
|
|
||||||
Keys are given unique names, which can be used in conjunction with the [user-auth](/docs/development/plugin-triggers.md#user-auth) plugin trigger to handle command authorization. Please see the documentation on that trigger for more information.
|
Support for scoping commands to specific users can be added through plugins that take advantage of the [user-auth](/docs/development/plugin-triggers.md#user-auth) plugin trigger to handle command authorization.
|
||||||
|
See also the list of [community-provided plugins](/docs/community/plugins.md).
|
||||||
|
|
||||||
## Granting other Unix user accounts Dokku access
|
## Granting other Unix user accounts Dokku access
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
> New as of 0.5.0
|
> New as of 0.5.0
|
||||||
|
|
||||||
```
|
```
|
||||||
checks <app> Show zero-downtime status
|
|
||||||
checks:disable <app> [process-type(s)] Disable zero-downtime deployment for all processes (or comma-separated process-type list) ***WARNING: this will cause downtime during deployments***
|
checks:disable <app> [process-type(s)] Disable zero-downtime deployment for all processes (or comma-separated process-type list) ***WARNING: this will cause downtime during deployments***
|
||||||
checks:enable <app> [process-type(s)] Enable zero-downtime deployment for all processes (or comma-separated process-type list)
|
checks:enable <app> [process-type(s)] Enable zero-downtime deployment for all processes (or comma-separated process-type list)
|
||||||
checks:report [<app>] [<flag>] Displays a checks report for one or more apps
|
checks:report [<app>] [<flag>] Displays a checks report for one or more apps
|
||||||
@@ -81,13 +80,13 @@ dokku checks:report
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> search checks information
|
=====> node-js-app checks information
|
||||||
Checks disabled list: none
|
Checks disabled list: none
|
||||||
Checks skipped list: none
|
Checks skipped list: none
|
||||||
=====> python-sample checks information
|
=====> python-app checks information
|
||||||
Checks disabled list: none
|
Checks disabled list: none
|
||||||
Checks skipped list: none
|
Checks skipped list: none
|
||||||
=====> ruby-sample checks information
|
=====> ruby-app checks information
|
||||||
Checks disabled list: _all_
|
Checks disabled list: _all_
|
||||||
Checks skipped list: none
|
Checks skipped list: none
|
||||||
```
|
```
|
||||||
@@ -95,11 +94,11 @@ dokku checks:report
|
|||||||
You can run the command for a specific app also.
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku checks:report node-js-sample
|
dokku checks:report node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> node-js-sample checks information
|
=====> node-js-app checks information
|
||||||
Checks disabled list: none
|
Checks disabled list: none
|
||||||
Checks skipped list: none
|
Checks skipped list: none
|
||||||
```
|
```
|
||||||
@@ -107,7 +106,7 @@ dokku checks:report node-js-sample
|
|||||||
You can pass flags which will output only the value of the specific information you want. For example:
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku checks:report node-js-sample --checks-disabled-list
|
dokku checks:report node-js-app --checks-disabled-list
|
||||||
```
|
```
|
||||||
|
|
||||||
## Customizing checks
|
## Customizing checks
|
||||||
@@ -123,7 +122,7 @@ To specify checks, add a `CHECKS` file to the root of your project directory. Th
|
|||||||
- comments (lines starting with #)
|
- comments (lines starting with #)
|
||||||
- empty lines
|
- empty lines
|
||||||
|
|
||||||
> For Dockerfile-based deploys, the file *must* be in `/app/CHECKS` within the container. `/app` is used by default as the root container directory for buildpack-based deploys.
|
> For Dockerfile and Docker Image based deploys, the file *must* be in the `WORKDIR` directory of the built image. `/app` is used by default as the root container directory for buildpack-based deploys.
|
||||||
|
|
||||||
### Check instructions
|
### Check instructions
|
||||||
|
|
||||||
@@ -327,7 +326,6 @@ curl: (7) Failed to connect to 172.17.0.155 port 5000: Connection refused
|
|||||||
-----> Running post-deploy
|
-----> Running post-deploy
|
||||||
-----> Configuring myapp.dokku.me...
|
-----> Configuring myapp.dokku.me...
|
||||||
-----> Creating http nginx.conf
|
-----> Creating http nginx.conf
|
||||||
-----> Running nginx-pre-reload
|
|
||||||
Reloading nginx
|
Reloading nginx
|
||||||
-----> Shutting down old container in 60 seconds
|
-----> Shutting down old container in 60 seconds
|
||||||
=====> Application deployed:
|
=====> Application deployed:
|
||||||
|
|||||||
@@ -2,96 +2,282 @@
|
|||||||
|
|
||||||
A plugin can be a simple implementation of [triggers](/docs/development/plugin-triggers.md) or can implement a command structure of its own. Dokku has no restrictions on the language in which a plugin is implemented; it only cares that the plugin implements the appropriate [commands](/docs/development/plugin-creation.md#command-api) or [triggers](/docs/development/plugin-triggers.md) for the API. **NOTE:** any file that implements triggers or uses the command API must be executable.
|
A plugin can be a simple implementation of [triggers](/docs/development/plugin-triggers.md) or can implement a command structure of its own. Dokku has no restrictions on the language in which a plugin is implemented; it only cares that the plugin implements the appropriate [commands](/docs/development/plugin-creation.md#command-api) or [triggers](/docs/development/plugin-triggers.md) for the API. **NOTE:** any file that implements triggers or uses the command API must be executable.
|
||||||
|
|
||||||
If you create your own plugin:
|
When creating custom plugins:
|
||||||
|
|
||||||
1. Take a look at [the plugins shipped with Dokku](/docs/community/plugins.md) and hack away!
|
1. Take a look at [the plugins shipped with Dokku](/docs/community/plugins.md) and hack away!
|
||||||
2. Check out the [list of triggers](/docs/development/plugin-triggers.md) your plugin can implement
|
2. Check out the [list of triggers](/docs/development/plugin-triggers.md) the plugin can implement
|
||||||
3. Upload your plugin to GitHub with a repository name following the `dokku-<name>` convention (e.g. `dokku-mariadb`)
|
3. Upload the plugin to GitHub with a repository name following the `dokku-<name>` convention (e.g. `dokku-mariadb`)
|
||||||
4. Edit [this page](/docs/community/plugins.md) and add a link to your plugin
|
4. Edit [this page](/docs/community/plugins.md) and add a link to the plugin
|
||||||
5. Subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases
|
5. Subscribe to the [dokku development blog](http://progrium.com) to be notified about API changes and releases
|
||||||
|
|
||||||
|
|
||||||
## Compilable plugins (Golang, Java(?), C, etc.)
|
## Compilable plugins (Golang, Java(?), C, etc.)
|
||||||
When developing a plugin, you must implement the `install` trigger such that it outputs the built executable(s) using a directory structure that implements the plugin's desired command and/or triggers the API. See the [smoke-test-plugin](https://github.com/dokku/smoke-test-plugin) for an example.
|
|
||||||
|
|
||||||
|
When developing a plugin, the `install` trigger must be implemented such that it outputs the built executable(s) using a directory structure that implements the plugin's desired command and/or triggers the API. See the [smoke-test-plugin](https://github.com/dokku/smoke-test-plugin) for an example.
|
||||||
|
|
||||||
## Command API
|
## Command API
|
||||||
|
|
||||||
There are 3 main integration points: `commands`, `subcommands/default`, and `subcommands/<command-name>`.
|
There are 3 main integration points: `commands`, `subcommands/default`, and `subcommands/<command-name>`.
|
||||||
|
|
||||||
### `commands`
|
### `commands`
|
||||||
|
|
||||||
Primarily used to supply the plugin's usage/help output. (i.e. [plugin help](https://github.com/dokku/dokku/tree/master/plugins/plugin/commands)).
|
Primarily used to supply the plugin's usage/help output. (i.e. [plugin help](https://github.com/dokku/dokku/tree/master/plugins/plugin/commands)).
|
||||||
|
|
||||||
### `subcommands/default`
|
### `subcommands/default`
|
||||||
|
|
||||||
Implements the plugin's default command behavior. (i.e. [`dokku plugin`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/default)).
|
Implements the plugin's default command behavior. (i.e. [`dokku plugin`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/default)).
|
||||||
|
|
||||||
### `subcommands/<command-name>`
|
### `subcommands/<command-name>`
|
||||||
|
|
||||||
Implements the additional command interface and will translate to `dokku plugin:cmd` on the command line. (i.e. [`dokku plugin:install`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/install)).
|
Implements the additional command interface and will translate to `dokku plugin:cmd` on the command line. (i.e. [`dokku plugin:install`](https://github.com/dokku/dokku/tree/master/plugins/plugin/subcommands/install)).
|
||||||
|
|
||||||
|
# Plugin Building Tips
|
||||||
|
|
||||||
|
## Always create a `plugin.toml`
|
||||||
|
|
||||||
|
The `plugin.toml` file is used to describe the plugin in help output, and helps users understand the purpose of the plugin. This _must_ have a description and a version. The version _should_ be bumped at every plugin release.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[plugin]
|
||||||
|
description = "dokku example plugin"
|
||||||
|
version = "0.1.0"
|
||||||
|
[plugin.config]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files should be executable
|
||||||
|
|
||||||
|
Commands, subcommands, triggers and source shell scripts should all be executable. On a Unix-like machine, the following command can be used to make them executable:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
chmod +x path/to/file
|
||||||
|
```
|
||||||
|
|
||||||
|
Non-executable commands, subcommands, and triggers will be ignored.
|
||||||
|
|
||||||
|
## Use the `pipefail` bash option
|
||||||
|
|
||||||
|
Consider whether to include the `set -eo pipefail` option. Look at the following example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
IMAGE=$(docker images | grep "user/repo" | awk '{print $3}')
|
||||||
|
if [[ -z $IMAGE ]]; then
|
||||||
|
dokku_log_fail "user/repo image not found... Did you run 'dokku plugin:install'?"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
If `user/repo` doesn't exist, Dokku exits just before the `awk` command and the `dokku_log_fail` message will never go to `STDOUT`. printed with echo. The `set -e` option should be used in this case.
|
||||||
|
|
||||||
|
Here is the `help` entry for `set`:
|
||||||
|
|
||||||
|
```
|
||||||
|
help set
|
||||||
|
Options:
|
||||||
|
-e Exit immediately if a command exits with a non-zero status.
|
||||||
|
-o option-name
|
||||||
|
pipefail the return value of a pipeline is the status of
|
||||||
|
the last command to exit with a non-zero status,
|
||||||
|
or zero if no command exited with a non-zero status
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support trace mode
|
||||||
|
|
||||||
|
Trace mode is useful for getting debugging output from plugins when the `--trace` flag is specified or `dokku trace:on` is triggered. This should be done at the top of each shell script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
|
```
|
||||||
|
|
||||||
|
In the above example, the third line enables bash's debug mode, which prints command traces before executing command.
|
||||||
|
|
||||||
|
## Verify the existence of dependencies
|
||||||
|
|
||||||
|
If a plugin depends on a specific command-line tool, check whether that tool exists before utilizing it. Either `command -v` or `which` may be used to do so:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# `command -v` example
|
||||||
|
if ! command -v "nginx" &>/dev/null; then
|
||||||
|
dokku_log_fail "Missing nginx, install it"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# `which` example
|
||||||
|
if ! which nginx >/dev/null 2>&1; then
|
||||||
|
dokku_log_fail "Missing nginx, install it"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
In cases where a dependency should be installed before the plugin can be used at all, use the `dependencies` plugin trigger to install the dependency.
|
||||||
|
|
||||||
|
## Implement a help command
|
||||||
|
|
||||||
|
For plugins which expose commands, implement a `help` command. This may be empty, but should contain a listing of all available commands.
|
||||||
|
|
||||||
|
Commas - `,` - are used in the help output for columnizing output. Verify that the plugin conforms to the spec by running `dokku help --all` and manually verifying the output.
|
||||||
|
|
||||||
|
See the sample plugin below for an example.
|
||||||
|
|
||||||
|
## Namespace commands
|
||||||
|
|
||||||
|
All commands *should* be namespaced. In cases where a core plugin is overriden, the plugin _may_ utilize the a namespace in use by the core, but generally this should be avoided to reduce confusion as to where the command is implemented.
|
||||||
|
|
||||||
|
## Implement a proper catch-all command
|
||||||
|
|
||||||
|
As of 0.3.3, a catch-all should be implemented that exits with a `DOKKU_NOT_IMPLEMENTED_EXIT` code. This allows Dokku to output a `command not found` message.
|
||||||
|
|
||||||
|
See the sample plugin below for an example.
|
||||||
|
|
||||||
|
## Set app config without restarting
|
||||||
|
|
||||||
|
In the case that a plugin needs to set app configuration settings and a restart should be avoided (default Heroku-style behavior) these "internal" commands provide this functionality:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
config_set --no-restart node-js-app KEY1=VALUE1 [KEY2=VALUE2 ...]
|
||||||
|
config_unset --no-restart node-js-app KEY1 [KEY2 ...]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expose functionality in a `functions` file
|
||||||
|
|
||||||
|
To allow other plugins access to (some of) a plugin's functionality, functions can expose by including a `functions` file in the plugin for others to source. All functions in that file should be considered publicly accessible by other plugins.
|
||||||
|
|
||||||
|
Any functions that must be kept private should reside in the plugin's `trigger/` or `commands/` directories. Other files may also be used to hide private functions; the official convention for hiding private functions is to place them an `internal-functions` file.
|
||||||
|
|
||||||
|
## Use helper functions to fetch app images
|
||||||
|
|
||||||
|
> New as of 0.4.0
|
||||||
|
|
||||||
|
Dokku allows image tagging and deployment of tagged images. This means hard-coding the `$IMAGE` as `dokku/$APP` is no longer sufficient.
|
||||||
|
|
||||||
|
Plugins should use `get_running_image_tag()` and `get_app_image_name()` as sourced from `common/functions`. See the [plugin triggers](/docs/development/plugin-triggers.md) doc for examples.
|
||||||
|
|
||||||
|
> **Note:** This is only for plugins that are not `pre/post-build-*` plugins
|
||||||
|
|
||||||
|
## Use `$DOCKER_BIN` instead of `docker` directly
|
||||||
|
|
||||||
|
> New as of 0.17.5
|
||||||
|
|
||||||
|
Certain systems may require a wrapper function around the `docker` binary for proper execution. Utilizing the `$DOCKER_BIN` environment variable when calling docker for those functions is preferred.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# good
|
||||||
|
"$DOCKER_BIN" container run -d $IMAGE /bin/bash -e -c "$COMMAND"
|
||||||
|
|
||||||
|
# bad
|
||||||
|
docker run -d $IMAGE /bin/bash -e -c "$COMMAND"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Include labels for all temporary containers and images
|
||||||
|
|
||||||
|
> New as of 0.5.0
|
||||||
|
|
||||||
|
As of 0.5.0, labels are used to help cleanup intermediate containers with `dokku cleanup`. Plugins that create containers and images should add the correct labels to the `build`, `commit`, and `run` docker commands.
|
||||||
|
|
||||||
|
Note that where possible, a label `com.dokku.app-name=$APP` - where `$APP` is the name of the app - should also be included. This enables `dokku cleanup APP` to cleanup the specific containers for a given app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# `docker build` example
|
||||||
|
"$DOCKER_BIN" image build "--label=com.dokku.app-name=${APP}" $DOKKU_GLOBAL_BUILD_ARGS ...
|
||||||
|
|
||||||
|
# `docker commit` example
|
||||||
|
# Note that the arguments must be set as a local array
|
||||||
|
# as arrays cannot be exported in shell
|
||||||
|
local DOKKU_COMMIT_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL $DOKKU_CONTAINER_LABEL=")
|
||||||
|
"$DOCKER_BIN" container commit --change "LABEL com.dokku.app-name=$APP" "${DOKKU_COMMIT_ARGS[@]}" ...
|
||||||
|
|
||||||
|
# `docker run` example
|
||||||
|
"$DOCKER_BIN" container run "--label=com.dokku.app-name=${APP}" $DOKKU_GLOBAL_RUN_ARGS ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Copy files from the built image using `copy_from_image`
|
||||||
|
|
||||||
|
Avoid copying files from running containers as these files may change over time. Instead copy files from the image built during the deploy process. This can be done via the `copy_from_image` helper function. This will correctly handle various corner cases in copying files from an image.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
|
local TMP_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
||||||
|
trap "rm -rf '$TMP_FILE' >/dev/null" RETURN INT TERM
|
||||||
|
|
||||||
|
local IMAGE_TAG="$(get_running_image_tag "$APP")"
|
||||||
|
local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG")
|
||||||
|
copy_from_image "$IMAGE" "file-being-copied" "$TMP_FILE" 2>/dev/null
|
||||||
|
```
|
||||||
|
|
||||||
|
Files are copied from the `/app` directory - for images built via buildpacks - or `WORKDIR` - for images built via Dockerfile.
|
||||||
|
|
||||||
|
## Avoid calling the `dokku` binary directly
|
||||||
|
|
||||||
|
> New as of 0.6.0
|
||||||
|
|
||||||
|
Plugins should **not** call the `dokku` binary directly from within plugins because clients using the `--app` argument are potentially broken when doing so.
|
||||||
|
|
||||||
|
Plugins should instead source the `functions` file for a given plugin when attempting to call Dokku internal functions. In cases where plugin functions cannot be sourced (eg if a plugin is implemented in Golang), then call the relevant [plugin triggers](/docs/development/plugin-triggers.md) instead.
|
||||||
|
|
||||||
# Sample plugin
|
# Sample plugin
|
||||||
|
|
||||||
The below plugin is a dummy `dokku hello` plugin.
|
The below plugin is a dummy `dokku hello` plugin.
|
||||||
|
|
||||||
|
Each plugin requires a `plugin.toml` descriptor file with the following required fields:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[plugin]
|
||||||
|
description = "dokku hello plugin"
|
||||||
|
version = "0.1.0"
|
||||||
|
[plugin.config]
|
||||||
|
```
|
||||||
|
|
||||||
`hello/subcommands/default`
|
`hello/subcommands/default`
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
hello_main_cmd() {
|
cmd-hello-default() {
|
||||||
declare desc="prints Hello \$APP"
|
declare desc="prints Hello \$APP"
|
||||||
local cmd="hello"
|
declare cmd="hello"
|
||||||
|
[[ "$1" == "$cmd" ]] && shift 1
|
||||||
# Support --app/$DOKKU_APP_NAME flag
|
# Support --app/$DOKKU_APP_NAME flag
|
||||||
# Use the following lines to reorder args into "$cmd $DOKKU_APP_NAME $@""
|
# Use the following lines to reorder args into "$cmd $DOKKU_APP_NAME $@""
|
||||||
local argv=("$@")
|
|
||||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
|
||||||
[[ -n $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
|
[[ -n $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
|
||||||
set -- $cmd $@
|
set -- $cmd $@
|
||||||
##
|
#
|
||||||
|
declare APP="$1"
|
||||||
|
|
||||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||||
verify_app_name "$2"
|
verify_app_name "$APP"
|
||||||
local APP="$2";
|
|
||||||
|
|
||||||
echo "Hello $APP"
|
echo "Hello $APP"
|
||||||
}
|
}
|
||||||
|
|
||||||
hello_main_cmd "$@"
|
cmd-hello-default "$@"
|
||||||
```
|
```
|
||||||
|
|
||||||
`hello/subcommands/world`
|
`hello/subcommands/world`
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
hello_world_cmd() {
|
cmd-hello-world() {
|
||||||
declare desc="prints Hello World"
|
declare desc="prints Hello world"
|
||||||
local cmd="hello:world"
|
declare cmd="hello:world"
|
||||||
# Support --app/$DOKKU_APP_NAME flag
|
[[ "$1" == "$cmd" ]] && shift 1
|
||||||
# Use the following lines to reorder args into "$cmd $DOKKU_APP_NAME $@""
|
|
||||||
local argv=("$@")
|
|
||||||
[[ ${argv[0]} == "$cmd" ]] && shift 1
|
|
||||||
[[ -n $DOKKU_APP_NAME ]] && set -- $DOKKU_APP_NAME $@
|
|
||||||
set -- $cmd $@
|
|
||||||
##
|
|
||||||
|
|
||||||
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
|
||||||
verify_app_name "$2"
|
|
||||||
local APP="$2";
|
|
||||||
|
|
||||||
echo "Hello world"
|
echo "Hello world"
|
||||||
}
|
}
|
||||||
|
|
||||||
hello_world_cmd "$@"
|
cmd-hello-world "$@"
|
||||||
```
|
```
|
||||||
|
|
||||||
`hello/commands`
|
`hello/commands`
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
help | hello:help)
|
help | hello:help)
|
||||||
@@ -126,58 +312,3 @@ help_content
|
|||||||
|
|
||||||
esac
|
esac
|
||||||
```
|
```
|
||||||
|
|
||||||
Each plugin requires a `plugin.toml` descriptor file with the following required fields:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[plugin]
|
|
||||||
description = "dokku hello plugin"
|
|
||||||
version = "0.1.0"
|
|
||||||
[plugin.config]
|
|
||||||
```
|
|
||||||
|
|
||||||
# A few notes:
|
|
||||||
|
|
||||||
- Remember to `chmod +x` your executable files
|
|
||||||
- Always support `DOKKU_TRACE` as per the 2nd line of the above example
|
|
||||||
- If your command depends on an application, include a check for whether that application exists (see the above example)
|
|
||||||
- You must implement a `help` command, though you may leave it empty. Also, you must use commas (`,`) in the command syntax to support output in columns
|
|
||||||
- Commands **should** be namespaced
|
|
||||||
- As of 0.3.3, a catch-all should be implemented that exits with a `DOKKU_NOT_IMPLEMENTED_EXIT` code. This allows Dokku to output a `command not found` message.
|
|
||||||
- Consider whether you want to include the `set -eo pipefail` option. Look at the following example :
|
|
||||||
|
|
||||||
```shell
|
|
||||||
IMAGE=$(docker images | grep "user/repo" | awk '{print $3}')
|
|
||||||
if [[ -z $IMAGE ]]; then
|
|
||||||
dokku_log_fail "user/repo image not found... Did you run 'dokku plugin:install'?"
|
|
||||||
fi
|
|
||||||
```
|
|
||||||
|
|
||||||
If `user/repo` doesn't exist, Dokku exits just before the `awk` command and the `dokku_log_fail` message will never go to `STDOUT`. printed with echo. You would want to use `set -e` in this case.
|
|
||||||
|
|
||||||
Here is the `help` entry for `set`:
|
|
||||||
```
|
|
||||||
help set
|
|
||||||
Options:
|
|
||||||
-e Exit immediately if a command exits with a non-zero status.
|
|
||||||
-o option-name
|
|
||||||
pipefail the return value of a pipeline is the status of
|
|
||||||
the last command to exit with a non-zero status,
|
|
||||||
or zero if no command exited with a non-zero status
|
|
||||||
```
|
|
||||||
- In the case that your plugin needs to set application configuration settings and you want to avoid having to restart (default Heroku-style behavior) these "internal" commands provide this functionality:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku config:set --no-restart node-js-app KEY1=VALUE1 [KEY2=VALUE2 ...]
|
|
||||||
dokku config:unset --no-restart node-js-app KEY1 [KEY2 ...]
|
|
||||||
```
|
|
||||||
- If you want to allow other plugins access to (some of) your plugin's functionality, you can expose this by including a `functions` file in your plugin for others to source
|
|
||||||
- You should consider all functions in that file to be publicly accessible by other plugins
|
|
||||||
- Any functions you want to keep private should reside in your plugin's `trigger/` or `commands/` directories
|
|
||||||
- As of 0.4.0, Dokku allows image tagging and deployment of tagged images
|
|
||||||
- This means hard-coding the `$IMAGE` as `dokku/$APP` is no longer sufficient
|
|
||||||
- You should now use `get_running_image_tag()` and `get_app_image_name()` as sourced from `common/functions` (see the [plugin triggers](/docs/development/plugin-triggers.md) doc for examples). **Note:** This is only for plugins that are not `pre/post-build-*` plugins
|
|
||||||
- As of 0.5.0, we use container labels to help cleanup intermediate containers with `dokku cleanup
|
|
||||||
- This means that if you manually call `docker run`, you should include `$DOKKU_GLOBAL_RUN_ARGS` to ensure your intermediate containers are labeled correctly
|
|
||||||
- As of 0.6.0, you should not **not** call the `dokku` binary directly from within plugins because clients using the `--app` argument are potentially broken when doing so (as well as other issues)
|
|
||||||
- You should instead source the `functions` file for a given plugin when attempting to call Dokku internal functions
|
|
||||||
|
|||||||
@@ -29,6 +29,81 @@ The following plugin triggers describe those available to a Dokku installation.
|
|||||||
|
|
||||||
> The example plugin trigger code is not guaranteed to be implemented as in within dokku, and are merely simplified examples. Please look at the Dokku source for larger, more in-depth examples.
|
> The example plugin trigger code is not guaranteed to be implemented as in within dokku, and are merely simplified examples. Please look at the Dokku source for larger, more in-depth examples.
|
||||||
|
|
||||||
|
### `app-create`
|
||||||
|
|
||||||
|
- Description: Creates an app
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `app-destroy`
|
||||||
|
|
||||||
|
- Description: Destroys an app (with confirmation if force isn't specified)
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `app-exists`
|
||||||
|
|
||||||
|
- Description: Creates an app
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `app-maybe-create`
|
||||||
|
|
||||||
|
- Description: Creates an app (gated by whether this is globally enabled or not)
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `app-restart`
|
||||||
|
|
||||||
|
- Description: Triggers an app restart
|
||||||
|
- Invoked by: `dokku config:clear`, `dokku config:set`, `dokku config:unset`
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `app-urls`
|
### `app-urls`
|
||||||
|
|
||||||
- Description: Allows you to change the urls Dokku reports for an application. Will override any auto-detected urls.
|
- Description: Allows you to change the urls Dokku reports for an application. Will override any auto-detected urls.
|
||||||
@@ -53,6 +128,66 @@ case "$URL_TYPE" in
|
|||||||
esac
|
esac
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `builder-build`
|
||||||
|
|
||||||
|
- Description: Triggers the artifact build process
|
||||||
|
- Invoked by: `dokku deploy`
|
||||||
|
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `builder-create-dokku-image`
|
||||||
|
|
||||||
|
- Description: Allows modification of the configured dokku-image
|
||||||
|
- Invoked by: `dokku deploy`
|
||||||
|
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `builder-dokku-image`
|
||||||
|
|
||||||
|
- Description: Allows modification of the used dokku-image.
|
||||||
|
- Invoked by: `dokku deploy`
|
||||||
|
- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `builder-release`
|
||||||
|
|
||||||
|
- Description: Triggers the artifact release process
|
||||||
|
- Invoked by: `dokku deploy`
|
||||||
|
- Arguments: `$BUILDER_TYPE` `$APP` `$IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `check-deploy`
|
### `check-deploy`
|
||||||
|
|
||||||
- Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests.
|
- Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests.
|
||||||
@@ -68,7 +203,7 @@ esac
|
|||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
||||||
|
|
||||||
APP="$1"; CONTAINERID="$2"; PROC_TYPE="$3"; PORT="$4" ; IP="$5"
|
APP="$1"; CONTAINER_ID="$2"; PROC_TYPE="$3"; PORT="$4" ; IP="$5"
|
||||||
|
|
||||||
eval "$(config_export app $APP)"
|
eval "$(config_export app $APP)"
|
||||||
DOKKU_DISABLE_DEPLOY="${DOKKU_DISABLE_DEPLOY:-false}"
|
DOKKU_DISABLE_DEPLOY="${DOKKU_DISABLE_DEPLOY:-false}"
|
||||||
@@ -126,6 +261,36 @@ help_content
|
|||||||
esac
|
esac
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `config-get`
|
||||||
|
|
||||||
|
- Description: Fetches the app config value for a key
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP $KEY`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `config-get-global`
|
||||||
|
|
||||||
|
- Description: Fetches the global config value for a key
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$KEY`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `core-post-deploy`
|
### `core-post-deploy`
|
||||||
|
|
||||||
> To avoid issues with community plugins, this plugin trigger should be used *only* for core plugins. Please avoid using this trigger in your own plugins.
|
> To avoid issues with community plugins, this plugin trigger should be used *only* for core plugins. Please avoid using this trigger in your own plugins.
|
||||||
@@ -162,7 +327,7 @@ export DEBIAN_FRONTEND=noninteractive
|
|||||||
|
|
||||||
case "$DOKKU_DISTRO" in
|
case "$DOKKU_DISTRO" in
|
||||||
debian|ubuntu)
|
debian|ubuntu)
|
||||||
apt-get install --force-yes -qq -y nginx
|
apt-get install -qq -y nginx
|
||||||
;;
|
;;
|
||||||
|
|
||||||
opensuse)
|
opensuse)
|
||||||
@@ -291,6 +456,61 @@ verify_app_name "$APP"
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `docker-args-process-build`
|
||||||
|
|
||||||
|
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
|
||||||
|
- Invoked by: `dokku ps:rebuild`
|
||||||
|
- Arguments: `$APP $IMAGE_SOURCE_TYPE`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
|
APP="$1"; IMAGE_SOURCE_TYPE="$2"
|
||||||
|
verify_app_name "$APP"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `docker-args-process-deploy`
|
||||||
|
|
||||||
|
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
|
||||||
|
- Invoked by: `dokku deploy`
|
||||||
|
- Arguments: `$APP $IMAGE_SOURCE_TYPE $IMAGE_TAG [$PROC_TYPE $CONTAINER_INDEX]`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
APP="$1"; $IMAGE_SOURCE_TYPE="$2" IMAGE_TAG="$3"; PROC_TYPE="$4"; CONTAINER_INDEX="$5"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
||||||
|
verify_app_name "$APP"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `docker-args-process-run`
|
||||||
|
|
||||||
|
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker run options.
|
||||||
|
- Invoked by: `dokku run`
|
||||||
|
- Arguments: `$APP $IMAGE_SOURCE_TYPE $IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
APP="$1"; IMAGE_SOURCE_TYPE="$3"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
||||||
|
verify_app_name "$APP"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `docker-args-run`
|
### `docker-args-run`
|
||||||
|
|
||||||
> Warning: Deprecated, please use `docker-args-process-run` instead
|
> Warning: Deprecated, please use `docker-args-process-run` instead
|
||||||
@@ -311,38 +531,107 @@ verify_app_name "$APP"
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `docker-args-process-deploy`
|
### `domains-add`
|
||||||
|
|
||||||
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
|
- Description: Adds a domain to an app
|
||||||
- Invoked by: `dokku deploy`
|
- Invoked by:
|
||||||
- Arguments: `$APP $IMAGE_TAG $IMAGE_SOURCE_TYPE [$PROC_TYPE $CONTAINER_INDEX]`
|
- Arguments: `$APP` `$DOMAIN`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
||||||
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
|
||||||
verify_app_name "$APP"
|
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `docker-args-process-run`
|
### `domains-disable`
|
||||||
|
|
||||||
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker run options.
|
- Description: Disables domains for an app
|
||||||
- Invoked by: `dokku run`
|
- Invoked by:
|
||||||
- Arguments: `$APP $IMAGE_TAG $IMAGE_SOURCE_TYPE [$PROC_TYPE $CONTAINER_INDEX]`
|
- Arguments: `$APP` `$RESTART_APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `domains-enable`
|
||||||
|
|
||||||
|
- Description: Enables domains for an app
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP` `$RESTART_APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `domains-list`
|
||||||
|
|
||||||
|
- Description: Lists all domains for an app
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `domains-setup`
|
||||||
|
|
||||||
|
- Description: Initializes domains for an app if enabled
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `domains-vhost-enabled`
|
||||||
|
|
||||||
|
- Description: Checks if a virtual hosts are enabled for an app
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `git-deploy-branch`
|
||||||
|
|
||||||
|
- Description: Outputs the deploy branch for an app, inherited or not
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
||||||
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
|
||||||
verify_app_name "$APP"
|
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
@@ -433,7 +722,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
### `network-clear-config`
|
### `network-clear-config`
|
||||||
|
|
||||||
- Description: Clears network configuration
|
- Description: Clears network configuration
|
||||||
- Invoked by: `internally triggered by proxy-clear-config within proxy implementations`
|
- Invoked by: `internally triggered within proxy implementations`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
@@ -449,7 +738,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
|
|
||||||
- Description: Computes the ports for a given app container
|
- Description: Computes the ports for a given app container
|
||||||
- Invoked by: `internally triggered by proxy-build-config within proxy implementations`
|
- Invoked by: `internally triggered by proxy-build-config within proxy implementations`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP $PROC_TYPE $IS_HEROKUISH_CONTAINER $CONTAINER_INDEX`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -494,7 +783,7 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
|
|
||||||
- Description: Return the listeners (host:port combinations) for a given app container
|
- Description: Return the listeners (host:port combinations) for a given app container
|
||||||
- Invoked by: `internally triggered by a deploy`
|
- Invoked by: `internally triggered by a deploy`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP $PROCESS_TYPE`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -565,6 +854,53 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `nginx-app-template-source`
|
||||||
|
|
||||||
|
- Description: Return the path to a `sigil` template that should be used to generate a given nginx configuration file.
|
||||||
|
- Invoked by: `nginx-vhosts#build-config`
|
||||||
|
- Arguments: `$APP $TEMPLATE_TYPE`
|
||||||
|
- The `TEMPLATE_TYPE` argument can be one of: `[app-config, hsts-config, validate-config]`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
|
APP="$1"
|
||||||
|
TEMPLATE_TYPE="$2"
|
||||||
|
case "$TEMPLATE_TYPE" in
|
||||||
|
app-config)
|
||||||
|
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/app.conf.sigil";;
|
||||||
|
hsts-config)
|
||||||
|
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/hsts.conf.sigil";;
|
||||||
|
validate-config)
|
||||||
|
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/validate.conf.sigil";;
|
||||||
|
*)
|
||||||
|
dokku_log_fail "Invalid template type: ${TEMPLATE_TYPE}"
|
||||||
|
esac
|
||||||
|
```
|
||||||
|
|
||||||
|
The default templates are viewable here: [plugins/nginx-vhosts/templates/](https://github.com/dokku/dokku/tree/master/plugins/nginx-vhosts/templates)
|
||||||
|
|
||||||
|
### `nginx-dokku-template-source`
|
||||||
|
|
||||||
|
- Description: Return the path to a `sigil` template that should be used to generate the `dokku.conf` nginx configuration file.
|
||||||
|
- Invoked by: `nginx-vhosts#install`
|
||||||
|
- Arguments: None, however the `sigil` template can make use of the following variables: `$.DOKKU_ROOT $.NGINX_ROOT`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
echo "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku.conf.sigil"
|
||||||
|
```
|
||||||
|
|
||||||
|
The default template is viewable here: [plugins/nginx-vhosts/templates/dokku.conf.sigil](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/dokku.conf.sigil)
|
||||||
|
|
||||||
### `nginx-hostname`
|
### `nginx-hostname`
|
||||||
|
|
||||||
- Description: Allows you to customize the hostname for a given app
|
- Description: Allows you to customize the hostname for a given app
|
||||||
@@ -648,11 +984,45 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `post-app-rename-setup`
|
||||||
|
|
||||||
|
- Description: Allows you to run commands after an app is setup, and before it is rebuild. This is useful for cleaning up tasks, or ensuring configuration from an old app is copied to the new app
|
||||||
|
- Invoked by: `dokku apps:rename`
|
||||||
|
- Arguments: `$OLD_APP_NAME $NEW_APP_NAME`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### `post-build-buildpack`
|
### `post-build-buildpack`
|
||||||
|
|
||||||
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using buildpacks.
|
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using buildpacks.
|
||||||
- Invoked by: `internal function dokku_build() (build phase)`
|
- Invoked by: `internal function dokku_build() (build phase)`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `post-build-cnb`
|
||||||
|
|
||||||
|
> Warning: The cnb plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to run commands after the build image is create for a given app. Only applies to apps using cnb.
|
||||||
|
- Invoked by: `internal function dokku_build() (build phase)`
|
||||||
|
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -727,6 +1097,20 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `post-container-create`
|
||||||
|
|
||||||
|
- Description: This trigger should be used to do stuff to containers after they are created but before they are started. They are explicitely for commands that may involve network traffic, and _not_ for commands that are self-contained, such as chown or tar.
|
||||||
|
- Invoked by: `dokku run`, `dokku ps:rebuild`, `dokku deploy`
|
||||||
|
- Arguments "app|service" "$CONTAINER_ID" "$APP|$SERVICE" "$PHASE"
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `post-create`
|
### `post-create`
|
||||||
|
|
||||||
- Description: Can be used to run commands after an app is created.
|
- Description: Can be used to run commands after an app is created.
|
||||||
@@ -822,6 +1206,7 @@ REV="$3" # optional, may not be sent for tar-based builds
|
|||||||
pushd "$TMP_WORK_DIR" >/dev/null
|
pushd "$TMP_WORK_DIR" >/dev/null
|
||||||
touch Procfile
|
touch Procfile
|
||||||
echo "clock: some-command" >> Procfile
|
echo "clock: some-command" >> Procfile
|
||||||
|
popd >/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
### `post-proxy-ports-update`
|
### `post-proxy-ports-update`
|
||||||
@@ -846,6 +1231,8 @@ haproxy-build-config "$APP"
|
|||||||
|
|
||||||
### `post-release-buildpack`
|
### `post-release-buildpack`
|
||||||
|
|
||||||
|
> Warning: Image mutation in this trigger may result in an invalid run state, and is heavily discouraged.
|
||||||
|
|
||||||
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using buildpacks.
|
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using buildpacks.
|
||||||
- Invoked by: `internal function dokku_release() (release phase)`
|
- Invoked by: `internal function dokku_release() (release phase)`
|
||||||
- Arguments: `$APP $IMAGE_TAG`
|
- Arguments: `$APP $IMAGE_TAG`
|
||||||
@@ -853,26 +1240,42 @@ haproxy-build-config "$APP"
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Installs a package specified by the `CONTAINER_PACKAGE` env var
|
|
||||||
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
||||||
verify_app_name "$APP"
|
verify_app_name "$APP"
|
||||||
|
|
||||||
dokku_log_info1 "Installing $CONTAINER_PACKAGE..."
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
CMD="cat > gm && \
|
### `post-release-cnb`
|
||||||
dpkg -s CONTAINER_PACKAGE >/dev/null 2>&1 || \
|
|
||||||
(apt-get update && apt-get install -y CONTAINER_PACKAGE && apt-get clean)"
|
|
||||||
|
|
||||||
ID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
|
> Warning: The cnb plugin trigger apis are under development and may change
|
||||||
test $(docker wait $ID) -eq 0
|
> between minor releases until the 1.0 release.
|
||||||
docker commit $ID $IMAGE >/dev/null
|
|
||||||
|
> Warning: Image mutation in this trigger may result in an invalid run state, and is heavily discouraged.
|
||||||
|
|
||||||
|
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using cnb.
|
||||||
|
- Invoked by: `internal function dokku_release() (release phase)`
|
||||||
|
- Arguments: `$APP $IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
||||||
|
verify_app_name "$APP"
|
||||||
|
|
||||||
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `post-release-dockerfile`
|
### `post-release-dockerfile`
|
||||||
|
|
||||||
|
> Warning: Image mutation in this trigger may result in an invalid run state, and is heavily discouraged.
|
||||||
|
|
||||||
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using a dockerfile.
|
- Description: Allows you to run commands after environment variables are set for the release step of the deploy. Only applies to apps using a dockerfile.
|
||||||
- Invoked by: `internal function dokku_release() (release phase)`
|
- Invoked by: `internal function dokku_release() (release phase)`
|
||||||
- Arguments: `$APP $IMAGE_TAG`
|
- Arguments: `$APP $IMAGE_TAG`
|
||||||
@@ -892,7 +1295,7 @@ verify_app_name "$APP"
|
|||||||
### `post-stop`
|
### `post-stop`
|
||||||
|
|
||||||
- Description: Can be used to run commands after an app is manually stopped
|
- Description: Can be used to run commands after an app is manually stopped
|
||||||
- Invoked by: `dokku ps:stop` and `dokku ps:stopall`
|
- Invoked by: `dokku ps:stop`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
@@ -911,7 +1314,25 @@ dokku config:set --no-restart $APP MANUALLY_STOPPED=1
|
|||||||
|
|
||||||
- Description: Allows you to run commands before the build image is created for a given app. For instance, this can be useful to add env vars to your container. Only applies to apps using buildpacks.
|
- Description: Allows you to run commands before the build image is created for a given app. For instance, this can be useful to add env vars to your container. Only applies to apps using buildpacks.
|
||||||
- Invoked by: `internal function dokku_build() (build phase)`
|
- Invoked by: `internal function dokku_build() (build phase)`
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `pre-build-cnb`
|
||||||
|
|
||||||
|
> Warning: The cnb plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to run commands before the build image is created for a given app. For instance, this can be useful to add env vars to your container. Only applies to apps using cnb.
|
||||||
|
- Invoked by: `internal function dokku_build() (build phase)`
|
||||||
|
- Arguments: `$APP` `$SOURCECODE_WORK_DIR`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -955,7 +1376,7 @@ APP="$1"; GULP_CACHE_DIR="$DOKKU_ROOT/$APP/gulp"; IMAGE=$(get_app_image_name $AP
|
|||||||
verify_app_name "$APP"
|
verify_app_name "$APP"
|
||||||
|
|
||||||
if [[ -d $GULP_CACHE_DIR ]]; then
|
if [[ -d $GULP_CACHE_DIR ]]; then
|
||||||
docker run $DOKKU_GLOBAL_RUN_ARGS --rm -v "$GULP_CACHE_DIR:/gulp" "$IMAGE" find /gulp -depth -mindepth 1 -maxdepth 1 -exec rm -Rf {} \; || true
|
docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" --rm -v "$GULP_CACHE_DIR:/gulp" "$IMAGE" find /gulp -depth -mindepth 1 -maxdepth 1 -exec rm -Rf {} \; || true
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -976,10 +1397,10 @@ APP="$1"; IMAGE_TAG="$2"; IMAGE=$(get_app_image_name $APP $IMAGE_TAG)
|
|||||||
verify_app_name "$APP"
|
verify_app_name "$APP"
|
||||||
|
|
||||||
dokku_log_info1 "Running gulp"
|
dokku_log_info1 "Running gulp"
|
||||||
id=$(docker run $DOKKU_GLOBAL_RUN_ARGS -d $IMAGE /bin/bash -c "cd /app && gulp default")
|
CID=$(docker run "${DOCKER_COMMIT_LABEL_ARGS[@]}" -d $IMAGE /bin/bash -c "cd /app && gulp default")
|
||||||
test $(docker wait $id) -eq 0
|
test $(docker wait $CID) -eq 0
|
||||||
docker commit $id $IMAGE >/dev/null
|
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
|
||||||
dokku_log_info1 "Building UI Complete"
|
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
### `pre-disable-vhost`
|
### `pre-disable-vhost`
|
||||||
@@ -1057,9 +1478,31 @@ CMD="cat > gm && \
|
|||||||
dpkg -s graphicsmagick >/dev/null 2>&1 || \
|
dpkg -s graphicsmagick >/dev/null 2>&1 || \
|
||||||
(apt-get update && apt-get install -y graphicsmagick && apt-get clean)"
|
(apt-get update && apt-get install -y graphicsmagick && apt-get clean)"
|
||||||
|
|
||||||
ID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
|
CID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
|
||||||
test $(docker wait $ID) -eq 0
|
test $(docker wait $CID) -eq 0
|
||||||
docker commit $ID $IMAGE >/dev/null
|
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
|
||||||
|
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### `pre-release-cnb`
|
||||||
|
|
||||||
|
> Warning: The cnb plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to run commands before environment variables are set for the release step of the deploy. Only applies to apps using cnb.
|
||||||
|
- Invoked by: `internal function dokku_release() (release phase)`
|
||||||
|
- Arguments: `$APP $IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
APP="$1"; IMAGE_TAG="$2";
|
||||||
|
|
||||||
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `pre-release-dockerfile`
|
### `pre-release-dockerfile`
|
||||||
@@ -1114,6 +1557,51 @@ APP="$1";
|
|||||||
curl "https://dokku.me/starting/${APP}" || true
|
curl "https://dokku.me/starting/${APP}" || true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `procfile-extract`
|
||||||
|
|
||||||
|
- Description: Extracts a Procfile from a given image to a path
|
||||||
|
- Invoked by: `internally`
|
||||||
|
- Arguments: `$APP $IMAGE`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `procfile-get-command`
|
||||||
|
|
||||||
|
- Description: Fetches the command for a specific process type
|
||||||
|
- Invoked by: `internally`
|
||||||
|
- Arguments: `$APP $PROCESS_TYPE $PORT`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `procfile-remove`
|
||||||
|
|
||||||
|
- Description: Removes the extracted Procfile
|
||||||
|
- Invoked by: `internally`
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `proxy-build-config`
|
### `proxy-build-config`
|
||||||
|
|
||||||
- Description: Builds the proxy implementation configuration for a given app
|
- Description: Builds the proxy implementation configuration for a given app
|
||||||
@@ -1144,6 +1632,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `proxy-disable`
|
||||||
|
|
||||||
|
- Description: Disables the configured proxy implementation for an app
|
||||||
|
- Invoked by: `internally triggered by ps:restore`
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `proxy-enable`
|
### `proxy-enable`
|
||||||
|
|
||||||
- Description: Enables the configured proxy implementation for an app
|
- Description: Enables the configured proxy implementation for an app
|
||||||
@@ -1159,10 +1662,25 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `proxy-disable`
|
### `proxy-is-enabled`
|
||||||
|
|
||||||
- Description: Disables the configured proxy implementation for an app
|
- Description: Checks if there is a proxy enabled for the app
|
||||||
- Invoked by: `internally triggered by ps:restore`
|
- Invoked by:
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `proxy-type`
|
||||||
|
|
||||||
|
- Description: Returns the proxy type for an app
|
||||||
|
- Invoked by:
|
||||||
- Arguments: `$APP`
|
- Arguments: `$APP`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
@@ -1216,6 +1734,38 @@ fi
|
|||||||
plugn trigger receive-app $APP $newrev
|
plugn trigger receive-app $APP $newrev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `release-and-deploy`
|
||||||
|
|
||||||
|
- Description: Triggers a release of the image tag and a subsequent deploy
|
||||||
|
- Invoked by:
|
||||||
|
- Arguments: `$APP $IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
APP="$1";
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `report`
|
||||||
|
|
||||||
|
- Description: Allows you to report on any custom configuration in use by your application
|
||||||
|
- Invoked by: `dokku report`
|
||||||
|
- Arguments: `$APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
APP="$1";
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `resource-get-property`
|
### `resource-get-property`
|
||||||
|
|
||||||
- Description: Fetches a given resource property value
|
- Description: Fetches a given resource property value
|
||||||
@@ -1249,18 +1799,21 @@ APP="$1"; HOSTNAME=$(hostname -s)
|
|||||||
mail -s "$APP containers on $HOSTNAME failed to retire" ops@dokku.me
|
mail -s "$APP containers on $HOSTNAME failed to retire" ops@dokku.me
|
||||||
```
|
```
|
||||||
|
|
||||||
### `report`
|
### `scheduler-app-status`
|
||||||
|
|
||||||
- Description: Allows you to report on any custom configuration in use by your application
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
- Invoked by: `dokku report`
|
> between minor releases until the 1.0 release.
|
||||||
- Arguments: `$APP`
|
|
||||||
|
- Description: Fetch the status of an app
|
||||||
|
- Invoked by: `dokku ps:report`
|
||||||
|
- Arguments: `$DOKKU_SCHEDULER $APP`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
APP="$1";
|
DOKKU_SCHEDULER="$1"; APP="$2";
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
@@ -1303,6 +1856,25 @@ DOKKU_SCHEDULER="$1"; APP="$2"; FORCE_CLEANUP="$3";
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `scheduler-enter`
|
||||||
|
|
||||||
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to enter a running container for a given app
|
||||||
|
- Invoked by: `dokku enter`
|
||||||
|
- Arguments: `$DOKKU_SCHEDULER $APP $@`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
DOKKU_SCHEDULER="$1"; APP="$2"; ARGS="$@"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `scheduler-inspect`
|
### `scheduler-inspect`
|
||||||
|
|
||||||
> Warning: The scheduler plugin trigger apis are under development and may change
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
@@ -1340,6 +1912,7 @@ DOKKU_SCHEDULER="$1"; APP="$2";
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `scheduler-logs`
|
### `scheduler-logs`
|
||||||
|
|
||||||
> Warning: The scheduler plugin trigger apis are under development and may change
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
@@ -1378,6 +1951,64 @@ DOKKU_SCHEDULER="$1"; APP="$2";
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `scheduler-post-delete`
|
||||||
|
|
||||||
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to run scheduler commands when an app is deleted
|
||||||
|
- Invoked by: `dokku apps:destroy`
|
||||||
|
- Arguments: `$DOKKU_SCHEDULER $APP $IMAGE_TAG`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
DOKKU_SCHEDULER="$1"; APP="$2"; IMAGE_TAG="$3";
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `scheduler-post-run`
|
||||||
|
|
||||||
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows you to run scheduler commands after a `dokku run` invocation is called
|
||||||
|
- Invoked by: `dokku run`
|
||||||
|
- Arguments: `$DOKKU_SCHEDULER $APP $CONTAINER_ID`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
DOKKU_SCHEDULER="$1"; APP="$2"; CONTAINER_ID="$3";
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### `scheduler-register-retired`
|
||||||
|
|
||||||
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Allows scheduling retiring a local container and any related images
|
||||||
|
- Invoked by: `internally`
|
||||||
|
- Arguments: `$APP $CONTAINER_ID`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
APP="$1";
|
||||||
|
CONTAINER_ID="$2";
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `scheduler-retire`
|
### `scheduler-retire`
|
||||||
|
|
||||||
> Warning: The scheduler plugin trigger apis are under development and may change
|
> Warning: The scheduler plugin trigger apis are under development and may change
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ The workflow looks like this:
|
|||||||
```shell
|
```shell
|
||||||
# having dokku-arch in ../dokku-arch
|
# having dokku-arch in ../dokku-arch
|
||||||
vagrant up build-arch
|
vagrant up build-arch
|
||||||
# wait for "==> build-arch: ==> Finished making: dokku 0.16.2-2 (Mon Feb 22 23:20:37 CET 2016)"
|
# wait for "==> build-arch: ==> Finished making: dokku 0.22.0-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||||
cd ../dokku-arch
|
cd ../dokku-arch
|
||||||
git add PKGBUILD .SRCINFO
|
git add PKGBUILD .SRCINFO
|
||||||
git commit -m 'Update to dokku 0.9.9'
|
git commit -m 'Update to dokku 0.9.9'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Dokku test suite
|
# Running Tests
|
||||||
|
|
||||||
Dokku has a full test suite to assist in quick iterating development. These tests include a linter using [shellcheck](https://github.com/koalaman/shellcheck), functional unit tests using the [bats testing framework](https://github.com/sstephenson/bats), and a deployment suite of example apps that use the most popular languages and frameworks.
|
Dokku has a full test suite to assist in quick iterating development. These tests include a linter using [shellcheck](https://github.com/koalaman/shellcheck), functional unit tests using the [Bats testing framework](https://github.com/bats-core/bats-core), and a deployment suite of example apps that use the most popular languages and frameworks.
|
||||||
|
|
||||||
We maintain the Dokku test harness within the `tests` directory:
|
We maintain the Dokku test harness within the `tests` directory:
|
||||||
|
|
||||||
@@ -9,15 +9,15 @@ We maintain the Dokku test harness within the `tests` directory:
|
|||||||
|
|
||||||
## Continuous Integration
|
## Continuous Integration
|
||||||
|
|
||||||
All pull requests have tests run against them on [CircleCI](https://circleci.com/), a continuous integration platform that provides Docker support for Ubuntu Trusty 14.04.
|
All pull requests have tests run against them on [CircleCI](https://circleci.com/), a continuous integration platform that provides Docker support for Ubuntu Trusty 16.04.
|
||||||
|
|
||||||
If you wish to skip tests for a particular commit - e.g. Documentation changes - you may add the `[ci skip]` designator to your commit message. Commits that *should* be tested but have the above designator will not be merged.
|
If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the `[ci skip]` designator to your commit message. Commits that _should_ be tested but have the above designator will not be merged.
|
||||||
|
|
||||||
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Trusty 14.04, we only provide official installation support for that platform.
|
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Trusty 16.04, we only provide official installation support for that platform and the latest LTS release of Ubuntu (currently 18.04).
|
||||||
|
|
||||||
## Local Test Execution
|
## Local Test Execution
|
||||||
|
|
||||||
- Setup Dokku in a [vagrant vm](/docs/getting-started/install/vagrant.md)
|
- Setup Dokku in a [Vagrant VM](/docs/getting-started/install/vagrant.md).
|
||||||
- Run the following to setup tests and execute them:
|
- Run the following to setup tests and execute them:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -29,8 +29,8 @@ While we do provide official packages for a variety of platforms, as our test su
|
|||||||
# execute the entire test suite (linter, bats tests, and app deployment tests)
|
# execute the entire test suite (linter, bats tests, and app deployment tests)
|
||||||
make test
|
make test
|
||||||
|
|
||||||
# run linter & update vagrant Dokku install from local git clone
|
# run linter
|
||||||
make lint copyfiles
|
make lint
|
||||||
|
|
||||||
# execute all bats tests
|
# execute all bats tests
|
||||||
make unit-tests
|
make unit-tests
|
||||||
@@ -39,6 +39,16 @@ While we do provide official packages for a variety of platforms, as our test su
|
|||||||
make deploy-tests
|
make deploy-tests
|
||||||
```
|
```
|
||||||
|
|
||||||
|
After making changes to your local Dokku clone, don't forget to update the Vagrant Dokku install.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# update vagrant dokku install from local git clone
|
||||||
|
make copyfiles
|
||||||
|
|
||||||
|
# build a specific plugin
|
||||||
|
make go-build-plugin copyplugin PLUGIN_NAME=apps
|
||||||
|
```
|
||||||
|
|
||||||
Additionally you may run a specific app deployment tests with a target similar to:
|
Additionally you may run a specific app deployment tests with a target similar to:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -63,7 +73,7 @@ bats tests/unit/10_apps.bats tests/unit/10_certs.bats
|
|||||||
|
|
||||||
## Executing a single test
|
## Executing a single test
|
||||||
|
|
||||||
In order to increase testing velocity, a wrapper script around bats is available that can be used to run a single testcase within a suite.
|
In order to increase testing velocity, a wrapper script around Bats is available that can be used to run a single test case within a suite.
|
||||||
|
|
||||||
Tests within a suite may be listed by specifying the suite as a parameter to the `tests/bats-exec-test-single` script.
|
Tests within a suite may be listed by specifying the suite as a parameter to the `tests/bats-exec-test-single` script.
|
||||||
|
|
||||||
@@ -77,7 +87,7 @@ A single test can be specified as a second parameter. The test is selected by fu
|
|||||||
tests/bats-exec-test-single tests/unit/10_apps.bats clone
|
tests/bats-exec-test-single tests/unit/10_apps.bats clone
|
||||||
```
|
```
|
||||||
|
|
||||||
Some special characters are translated in the test listing - specifically the characters `( ) :` - while others are not. The fuzzy matching happens on the test names listed when no second character is invoked, so executing a test with a more specific name will work as expected.
|
Some special characters are translated in the test listing, specifically the characters `( ) :`, while others are not. The fuzzy matching happens on test names as listed by this script, so executing a test with a more specific name will work as expected.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
tests/bats-exec-test-single tests/unit/10_apps.bats clone_-2d-2dskip-2ddeploy
|
tests/bats-exec-test-single tests/unit/10_apps.bats clone_-2d-2dskip-2ddeploy
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ sudo BUILD_STACK=true STACK_URL=https://github.com/gliderlabs/herokuish.git make
|
|||||||
|
|
||||||
## Skipping Herokuish installation
|
## Skipping Herokuish installation
|
||||||
|
|
||||||
The Herokuish package is recommended but not required if not using Heroku buildpacks for deployment. Debian-based OS users can run the bootstrap installer via `sudo DOKKU_NO_INSTALL_RECOMMENDS=true bash bootstrap.sh` to skip the dependency. Please note that this will _also_ skip installation of other recommended dependencies.
|
The Herokuish package is recommended but not required if not using Heroku buildpacks for deployment. Debian-based OS users can run the bootstrap installer via `sudo DOKKU_NO_INSTALL_RECOMMENDS=" --no-install-recommends " bash bootstrap.sh` to skip the dependency. Please note that this will _also_ skip installation of other recommended dependencies.
|
||||||
|
|
||||||
## Configuring an unattended installation
|
## Configuring an unattended installation
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Microsoft Azure
|
# Microsoft Azure Installation Notes
|
||||||
|
|
||||||
1. If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
|
1. If you don't already have one [generate an SSH key pair](https://help.github.com/articles/generating-ssh-keys/).
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ wget -nv -O - https://get.docker.com/ | sh
|
|||||||
|
|
||||||
# install dokku
|
# install dokku
|
||||||
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
||||||
OS_ID="$(lsb_release -cs 2>/dev/null || echo "trusty")"
|
OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")"
|
||||||
echo "trusty utopic vivid wily xenial yakkety zesty artful bionic" | grep -q "$OS_ID" || OS_ID="trusty"
|
echo "xenial bionic focal" | grep -q "$OS_ID" || OS_ID="bionic"
|
||||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ ${OS_ID} main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ ${OS_ID} main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
||||||
sudo apt-get update -qq >/dev/null
|
sudo apt-get update -qq >/dev/null
|
||||||
sudo apt-get install -qq -y dokku
|
sudo apt-get install -qq -y dokku
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# DigitalOcean Droplet
|
# DigitalOcean Droplet Installation Notes
|
||||||
|
|
||||||
[DigitalOcean](https://www.digitalocean.com/products/compute/) offers a pre-installed Dokku image. You can run this image on any sized Droplet, although larger Droplets will allow you to run larger applications.
|
[DigitalOcean](https://www.digitalocean.com/products/compute/) offers a pre-installed Dokku image. You can run this image on any sized Droplet, although larger Droplets will allow you to run larger applications.
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
1. Login to your [DigitalOcean](https://m.do.co/c/fe06b043a083) account.
|
1. Login to your [DigitalOcean](https://m.do.co/c/fe06b043a083) account.
|
||||||
2. Click **Create a Droplet**.
|
2. Click **Create a Droplet**.
|
||||||
3. Under **Choose an image > One-click apps**, choose the latest **Dokku** release for 16.04 _(version numbers may vary)_.
|
3. Under **Choose an image > One-click apps**, choose the latest **Dokku** release for 18.04 _(version numbers may vary)_.
|
||||||
4. Under **Choose a size**, select your machine spec.
|
4. Under **Choose a size**, select your machine spec.
|
||||||
5. Under **Choose a datacenter region**, select your region.
|
5. Under **Choose a datacenter region**, select your region.
|
||||||
6. Add an SSH Key.
|
6. Add an SSH Key.
|
||||||
|
|||||||
55
docs/getting-started/install/docker.md
Normal file
55
docs/getting-started/install/docker.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Docker Installation Notes
|
||||||
|
|
||||||
|
Pull the dokku/dokku image:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker pull dokku/dokku:0.22.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, run the image.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run \
|
||||||
|
--env DOKKU_HOSTNAME=dokku.me \
|
||||||
|
--name dokku \
|
||||||
|
--publish 3022:22 \
|
||||||
|
--publish 8080:80 \
|
||||||
|
--publish 8443:443 \
|
||||||
|
--volume /var/lib/dokku:/mnt/dokku \
|
||||||
|
--volume /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
dokku/dokku:0.22.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Dokku is run in the following configuration:
|
||||||
|
|
||||||
|
- The global hostname is set to `dokku.me` on boot.
|
||||||
|
- The container name is dokku.
|
||||||
|
- Container SSH port 22 is exposed on the host as 3022.
|
||||||
|
- Container HTTP port 80 is exposed on the host as 8080.
|
||||||
|
- Container HTTPS port 443 is exposed on the host as 8443.
|
||||||
|
- Data within the container is stored on the host within the `/var/lib/dokku` directory.
|
||||||
|
- The docker socket is mounted into container
|
||||||
|
- The "web installer" is not supported.
|
||||||
|
|
||||||
|
Application repositories, plugin config, and plugin data is persisted to disk within the specified host directory for `/var/lib/dokku`.
|
||||||
|
|
||||||
|
To install custom plugins, create a `plugin-list` file in the host's `/var/lib/dokku` directory. The plugins listed herein will be automatically installed by Dokku on container boot. This file should be the following format:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
plugin_name: repository_url
|
||||||
|
```
|
||||||
|
|
||||||
|
An example for installing the postgres and redis plugins follows:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
postgres: https://github.com/dokku/dokku-postgres.git
|
||||||
|
redis: https://github.com/dokku/dokku-redis.git
|
||||||
|
```
|
||||||
|
|
||||||
|
To initialize ssh-keys within the container, use `docker exec` to enter the container and run the appropriate ssh-keys commands.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker exec -it dokku bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Please see the [user management documentation](/docs/deployment/user-management.md) for more information.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Install Dokku on DreamHost Cloud Server with cloud-init
|
# DreamHost Cloud Server Installation Notes
|
||||||
|
|
||||||
Cloud-init script can be used to automate installation of Dokku on
|
Cloud-init script can be used to automate installation of Dokku on
|
||||||
Dreamhost (or any other OpenStack-compatible cloud with minimal
|
Dreamhost (or any other OpenStack-compatible cloud with minimal
|
||||||
@@ -19,7 +19,7 @@ source openrc.sh # Set the environment variables for DreamHost Cloud
|
|||||||
|
|
||||||
This allows OpenStack client to connect to DreamHost API endpoints.
|
This allows OpenStack client to connect to DreamHost API endpoints.
|
||||||
The command below creates a new server instance named `my-dokku-instance`
|
The command below creates a new server instance named `my-dokku-instance`
|
||||||
based on Ubuntu 14.04, with 2 GB RAM and 1 CPU (the flavor called
|
based on Ubuntu 18.04, with 2 GB RAM and 1 CPU (the flavor called
|
||||||
`supersonic`), opening network port access to HTTP and SSH (the
|
`supersonic`), opening network port access to HTTP and SSH (the
|
||||||
`default` security group), and the name of the chosen SSH key. This
|
`default` security group), and the name of the chosen SSH key. This
|
||||||
key will be automatically added to the new server in the
|
key will be automatically added to the new server in the
|
||||||
@@ -28,7 +28,7 @@ be reused by Dokku.
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
openstack server create \
|
openstack server create \
|
||||||
--image Ubuntu-14.04 \
|
--image Ubuntu-18.04 \
|
||||||
--flavor gp1.supersonic \
|
--flavor gp1.supersonic \
|
||||||
--security-group default \
|
--security-group default \
|
||||||
--key-name $YOUR_SSH_KEYNAME \
|
--key-name $YOUR_SSH_KEYNAME \
|
||||||
@@ -43,145 +43,155 @@ server:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#cloud-config
|
#cloud-config
|
||||||
apt_upgrade: true
|
|
||||||
|
|
||||||
apt_sources:
|
apt:
|
||||||
- source: "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main"
|
sources:
|
||||||
key: |
|
source_dokku:
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
source: 'deb https://packagecloud.io/dokku/dokku/ubuntu/ $RELEASE main'
|
||||||
Version: SKS 1.1.5
|
key: |
|
||||||
Comment: Hostname: pgpkeys.eu
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||||
|
|
||||||
mQINBFLUbogBEADceEoxBDoE6QM5xV/13qiELbFIkQgy/eEi3UesXmJblFdU7wcDLOW3NuOI
|
mQINBFu7hksBEADJfS1wB4JJmVcJ3FYoY/F3DmEsg2/NSj/TleB7hkdFPGTaOEef
|
||||||
x/dgbZljeMEerj6N1cR7r7X5sVoFVEZiK4RLkC3Cpdns0d90ud2f3VyKK7PXRBstdLm3JlW9
|
c6SrK6bkQas8CzCZXskg3FFUFyxJwP0yQFosJ7nQCXbuaCzkGyOaob/2D4lqniKu
|
||||||
OWZoe4VSADSMGWm1mIhT601qLKKAuWJoBIhnKY/RhA/RBXt7z22g4ta9bT67PlliTo1a8y6D
|
lyFvZuN0Evh2SoJYB6Idiy3rG58/KMQxJ/73HjcrOPxwpcfIE+rfey0fo6HOcSz7
|
||||||
hUA7gd+5TsVHaxDRrzc3mKObdyS5LOT/gf8Ti2tYBY5MBbQ8NUGExls4dXKlieePhKutFbde
|
AS3pXMbe0VoVOt8107i9qg6PizpaPugbSOP98aq2o0sPkjvKVzPsBvXWe9lDTreI
|
||||||
7sq3n5sdp1Ndoran1u0LsWnaSDx11R3xiYfXJ6xGukAc6pYlUD1yYjU4oRGhD2fPyuewqhHN
|
X+00Z6WXjcDxmKTGvCkcJ6jk0L5r66Y6TNlJeYwFb0o7PbY7YeJSEJxw9eNozZpY
|
||||||
UVwqupTBQtEGULrtdwK04kgIH93ssGRsLqUKe88uZeeBczVuupv8ZLd1YcQ29AfJHe6nsevs
|
EYvHCzHvsv7c8s+s5MeHDvvF5qsvt5qPPfw3zwLT01g1YTQpZdSDKn72YhrQUGJM
|
||||||
gjF+eajYlzsvC8BNq3nOvvedcuI6BW4WWFjraH06GNTyMAZi0HibTg65guZXpLcpPW9hTzXM
|
j/W8ro8Ij9BYhYQMIdy+RPNQrBdKjj75kW1NLCGLlE89+6PYzlQwDFLdl9eZlUdM
|
||||||
oUrZz8MvJ9yUBcFPKuFOLDpRP6uaIbxJsYqiituoltl0vgS/vJcpIVVRwSaqPHa6S63dmKm2
|
rvxbDPM99MRBBq30xfIS6YctHr40mEqZEi6OUoImaj5bbA1H3XHVH2JsWo1ttQYo
|
||||||
6gq18v4l05mVcInPn+ciHtcSlZgQkCsRTSvfUrK+7nzyWtNQMGKstAZ7AHCoA8Pbc3i7wyOt
|
5qOGGhNi7/nyI9zxVo9r97lgGLztyl6ILZt8kxnWIx1QnPmSMuUNqYfuUuKAPs1q
|
||||||
nTgfPFHVpHg3JHsPXKk9/71YogtoNFoETMFeKL1K+O+GMQddYQARAQABtDdwYWNrYWdlY2xv
|
+bisBLvylnFvQSqnpEuPwUS1UDby4CzVBzshTsuykCQRiwdU9tcjzZUlKKKTRLhj
|
||||||
dWQgb3BzIChwcm9kdWN0aW9uIGtleSkgPG9wc0BwYWNrYWdlY2xvdWQuaW8+iQI+BBMBAgAo
|
CZCNxv1Ovgl+3m/4R5L7YOBYGCmVW0/GvlrxPLGCjZa1O8/3nih5+cv5TwARAQAB
|
||||||
BQJS1G6IAhsvBQkJZgGABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDC5zQk1ZCXq13K
|
tGhodHRwczovL3BhY2thZ2VjbG91ZC5pby9kb2trdS9kb2trdSAoaHR0cHM6Ly9w
|
||||||
D/wNzAi6rEzRyx6NH61Hc19s2QAgcU1p1mX1Tw0fU7CThx1nr8JrG63465c9dzUpVzNTYvMs
|
YWNrYWdlY2xvdWQuaW8vZG9jcyNncGdfc2lnbmluZykgPHN1cHBvcnRAcGFja2Fn
|
||||||
USBJwbb1phahCMNGbJpZRQ5bvW/i3azmk/EHKL7wgMV8wu1atu6crrxGoDEfWUa4aIwbxZGk
|
ZWNsb3VkLmlvPokCOAQTAQIAIgUCW7uGSwIbLwYLCQgHAwIGFQgCCQoLBBYCAwEC
|
||||||
oxDZKZeKaLxz2ZChuKzjvkGUk4PUoOxxPn9XeFmJQ68ys4Z0CgIGfx2i64apqfsjVEdWEEBL
|
HgECF4AACgkQ8f9oUSiLMxUN3Q/+LeoFr8p3zSp9tRcCuMXfbc7rnJ/UgJiO53jW
|
||||||
oxHFIPy7FgFafRL0bgsquwPkb5q/dihIzJEZ2EMOGwXuUaKI/UAhgRIUGizuW7ECEjX4FG92
|
8LsXH1h5dWeh2H5VqzGjDJ3SORisAWdOMu1SWkw4mvBZQQL12iwAMZmIDmbWU73c
|
||||||
8RsizHBjYL5Gl7DMt1KcPFe/YU/AdWEirs9pLQUr9eyGZN7HYJ03Aiy8R5aMBoeYsfxjifkb
|
PplwGUQ4sltNxtiAVdntWC1vwSceY6/AQZwE2k60RYzg5bR2KAyZR9yGssGsekFO
|
||||||
WCpbN+SEATaB8YY6Zy2LK/5TiUYNUYb/VHP//ZEv0+uPgkoro6gWVkvGDdXqH2d9svwfrQKf
|
zOuMiTswzEYoZaJla+cduAXZzGf8NZgbzhXKhyfjVodRTyNR0dhoeMwNBlH0WWzW
|
||||||
GSEQYXlLytZKvQSDLAqclSANs/y5HDjUxgtWKdsL3xNPCmffjpyiqS4pvoTiUwS4FwBsIR2s
|
owwNOaJQ1LwDUkjrfRpkT53RJ5olRYa5ONDxuZEvmFy57bqXJh5U13m9FNWEtmF2
|
||||||
BDToIEHDvTNk1imeSmxCUgDxFzWkmB70FBmwz7zs9FzuoegrAxXonVit0+f3CxquN7tS0mHa
|
NySFltZYEL6BZQn5qehF4kqqJ0JSVsHEyEC7sU9yr93khTGjWQfcGaITZXPNyXTC
|
||||||
WrZfhHxEIt65edkIz1wETOch3LIg6RaFwsXgrZCNTB/zjKGAFEzxOSBkjhyJCY2g74QNObKg
|
py/J1TeOEOz2VyvglPx/JL4dTfPg5uZCTWRXzLJDAbW26BcyFI4OyPjFly6FLj0o
|
||||||
TSeGNFqG0ZBHe2/JQ33UxrDtpeKvCYTbjuWlyrkCDQRS1G6IARAArtNBXq+CNU9DR2YCi759
|
nMUuEzdCmNpHCKWkeyXajxtYd4EMo+UHGYC7jrpsAxRib0pdHUwnOG0MeNIUtPm/
|
||||||
fLR9F62Ec/QLWY3c/D26OqjTgjxAzGKbu1aLzphP8tq1GDCbWQ2BMMZI+L0Ed502u6kC0fzv
|
yW8i5St9PnX2y2qSaAoVURAI3irApn4Wc+hgRjo22l/B6ZudMAtASD5Ie8pXHNS0
|
||||||
bppRRXrVaxBrwxY9XhnzvkXXzwNwnBalkrJ5Yk0lN8ocwCuUJohms7V14nEDyHgAB8yqCEWz
|
dlsgiv3sTZachMKU+usoIgejIb0MuBhBwVJ93A4YguEqNgZg0Cz4MUpWNma6zLIN
|
||||||
Qm/SIZw35N/insTXshcdiUGeyufo85SFhCUqZ1x1TkSC/FyDG+BCwArfj8Qwdab3UlUEkF6c
|
Ko+3khp3z2Y/jWfNTKs41sz++png1iqjnvXjGIjKtgcFJyH+AwZzkh5LjRiahM/I
|
||||||
zTjwWIO+5vYuR8bsCGYKCSrGRh5nxw0tuGXWXWFlBMSZP6mFcCDRQDGcKOuGTjiWzLJcgsEc
|
OO/xTaO5Ag0EW7uGSwEQAL39qC95IFVNobRvecddeL26kHPgd0JS4fjB5r01pMFR
|
||||||
BoIX4WpHJYgl6ovex7HkfQsWPYL5V1FIHMlw34ALx4aQDH0dPJpC+FxynrfTfsIzPnmm2huX
|
3fojnEwGTLzRJVR4iTfzOiAG1XKGYmEb15NkEgEcvaLaojSsaaAHv++BqL2qXHJa
|
||||||
PGGYul/TmOp00CsJEcKOjqcrYOgraYkCGVXbd4ri6Pf7wJNiJ8V1iKTzQIrNpqGDk306Fww1
|
sfsgjKqxCAKyJps5wCEIzF1xfxHB/5BIyKenXZw9K/zlZzsfqzyehLAarZ4oMQEN
|
||||||
VsYBLOnrSxNPYOOu1s8c8c9N5qbEbOCtQdFf5pfuqsr5nJ0G4mhjQ/eLtDA4E7GPrdtUoceO
|
u/dG3TlXCf/oSBHDttLTcRTGs1I8FEaA9O0ZeV+2S/WuT0kFa6s1tRUMMWHWzMmR
|
||||||
kYKcQFt/yqnL1Sj9Ojeht3ENPyVSgE8NiWxNIEM0YxPyJEPQawejT66JUnTjzLfGaDUxHfse
|
2a+vLCE3OMWtlRk6sfhfccf4rIzjj3xyieEGKznkOycu8JOqTBRmGMl3wRS2XI7c
|
||||||
RcyMMTbTrZ0fLJSRaIH1AubPxhiYy+IcWOVMyLiUwjBBpKMStej2XILEpIJXP6Pn96KjMcB1
|
PFiV1MGRV5uhJ6a0D6DDAddL13TaXMfsZB0KkFHh8bKvAxJA9opHhl+X2NrdwsLz
|
||||||
grd0J2vMw2Kg3E8AEQEAAYkERAQYAQIADwUCUtRuiAIbLgUJCWYBgAIpCRDC5zQk1ZCXq8Fd
|
crCWF+QdoPX494j2aWnwSOXXtW9c2b6cpDfUoGVD79IYEzL0n6dgBPwCKLcmxotF
|
||||||
IAQZAQIABgUCUtRuiAAKCRA3u+4/etlbPwI5D/4idr7VHQpou6c/YLnK1lmz3hEikdxUxjC4
|
Tv+H3Yy0DBn8BaQ0ZHbEgudwr73vxMgbYStGfu/bQEulcLA0vfTRGBRhzlZLE8k6
|
||||||
ymOyeODsGRlaxXfjvjOCdocMzuCY3C+ZfNFKOTtVY4fV5Pd82MuY1H8lnuzqLxT6UwpIwo+y
|
+fXK23R4T/3kdyJovHdnK6aIN6oFTnVM5pyLrxmUkLCaPEbnoxVtA9zOeiGhqjYT
|
||||||
Ev6xSK0mqm2FhT0JSQ7E7MnoHqsU0aikHegyEucGIFzew6BJUD2xBu/qmVP/YEPUzhW4g8uD
|
pLgZMG95HgoscBlOh8BpuM2E3MSPV6XYjEKtvDpWy/i/oCPhd/PcY/qVxzj6dANU
|
||||||
+oRMxdAHXqvtThvFySY/rakLQRMRVwYdTFHrvu3zHP+6hpZt25llJb3DiO+dTsv+ptLmlUr5
|
gQE/8hdf6Q//SvUxZaVrVwnmWkIZshGDJj/EM8VGhKzEoZF8Xmr/aibyN3CLoSMl
|
||||||
JXLSSw2DfLxQa0kD5PGWpFPVJcxraS2pNDK9KTi2nr1ZqDxeKjDBT6zZOs9+4JQ9fepn1S26
|
ABEBAAGJBD4EGAECAAkFAlu7hksCGy4CKQkQ8f9oUSiLMxXBXSAEGQECAAYFAlu7
|
||||||
AmHWHhyzvpjKxVm4sOilKysi84CYluNrlEnidNf9wQa3NlLmtvxXQfm1py5tlwL5rE+ek1fw
|
hksACgkQ+ytqpCHNGT+1Vg//Z0ZiIoQQCLXmbAPdA79HVLCzsvkKQ3/RlqIR7Nq1
|
||||||
leaKXRcNNmm+T+vDdIw+JcHy8a53nK1JEfBqEuY6IqEPKDke0wDIsDLSwI1OgtQoe7Cm1PBu
|
JzgqPxg8drRo5+Ri+VrsIJt3AYH/lGm1UuSeycM6NrNWBpqL5FLjrMmbILQp9GMf
|
||||||
jfJu4rYQE+wwgWILTAgIy8WZXAloTcwVMtgfSsgHia++LqKfLDZ3JuwpaUAHAtguPy0QddvF
|
bCZLXocOwDvrfpdBuEK+AS8SuLeiZtl8DcOe9Xtv3LSxXre0hsiIZpTRIjP+qkj8
|
||||||
I4R7eFDVwHT0sS3AsG0HAOCY/1FRe8cAw/+9Vp0oDtOvBWAXycnCbdQeHvwh2+Uj2u2f7K3C
|
W7oZqUxwo1Wcnff+0snf6hPiTps/IB1utzSjxXVe86/89BWvLt/mT1o81h5mclgk
|
||||||
DMoevcBl4L5fkFkYTkmixCDy5nst1VM5nINueUIkUAJJbOGpd6yFdif7mQR0JWcPLudb+fwu
|
l1eit6BvZsO/iicLB5KbyA7DVjAnxngze0+cCUAIVbqQbZhAVw5oZbKeXedbGuxr
|
||||||
sJ4UEACYWhPa8Gxa7eYopRsydlcdEzwpmo6E+V8GIdLFRFFpKHQEzbSW5coxzU6oOiPbTurC
|
eRLWx+h5IBbtn+JwWngzueHyc3fY5b6ann06f6y6BF5+XmPRIXakYh4moJxSRQCA
|
||||||
ZorIMHTA9cpAZoMUGKaSt19UKIMvSqtcDayhgf4cZ2ay1z0fdJ2PuLeNnWeiGyfq78q6wqSa
|
GVKGEubH/Y1Vyq8QIX7V6PGpS39mQkoYXEztvEtyZiV3J+SyObYZVTs9d5/rhoE2
|
||||||
Jq/h6JdAiwXplFd3gqJZTrFZz7A6Q6Pd7B+9PZ/DUdEO3JeZlHJDfRmfU2XPoyPUoq79+whP
|
wXQIFTOdyHi52K2VfT3JU7rWOw5/SWuOQyyDdWgxEJuU6bUeOViOwHVkZDzwBX3Y
|
||||||
5Tl3WwHUv7Fg357kRSdzKv9DbgmhqRHlgVeKn9pwN4cpVBN+idzwPefQksSKH4lBDvVr/9j+
|
1to5cgY6dNQARplEgZZjRja4uc06u2d7Bk2CfqO4LvjV5UlPm838Ga+kGzBpp86X
|
||||||
V9mmrOx7QmQ5LCc/1on+L0dqo6suoajADhKy+lDQbzs2mVb4CLpPKncDup/9iJbjiR17DDFM
|
5JBbZz9lPGf+GY7ZcROQp6ONui8P08+7EaTVtILTE0rd5g8umOnWBo1zteMv50As
|
||||||
wgyCoy5OHJICQ5lckNNgkHTS6Xiogkt28YfK4P3S0GaZgIrhKQ7AmO3O+hB12Zr+olpeyhGB
|
jyIPW20kUuJMdz3V+TNag5aCMW7qnO4zwildlQZmL54+xQDuRXK8P5JlKml6gnK+
|
||||||
OpBD80URntdEcenvfnXBY/BsuAVbTGXiBzrlBEyQxg656jUeqAdXg+nzCvP0yJlBUOjEcwyh
|
4SLvUA/8CALEMqxNlb06ZJc1GCU/mcQYXfkNosHaNYpORjziDnH1LBQ7AnhIhhMy
|
||||||
K/U2nw9nGyaR3u0a9r24LgijGpdGabIeJm6O9vuuqFHHGI72pWUEs355lt8q1pAoJUv8NehQ
|
FwcuxpG9bABwQfoQE84Kx3zVU0xEoCGr549Kf5p7ZcqGwn3WzSql+qR/NcPRV9Dp
|
||||||
mlaR0h5wcwhEtwM6fiSIUTnuJnyHT053GjsUD7ef5fY1KEFmaZeW04kRtFDOPinz0faE8hvs
|
tb4iSXoTUeutR1SeVn/TI2aOWez3UyIztnam+p32e4BNuyByFRmo2e8dP1RqCg6b
|
||||||
xzsVgkKye1c2vkXKdOXvA3x+pZzlTHtcgMOhjKQAsA==
|
0KwuxDDE0k3zJCpjsWROrtBVQ9Zt9rsfG5kFxJ6Qi90uJP71f8rFDUuKmxJazDf3
|
||||||
=H60S
|
g3GHEGovUrOJO5JpvCcfCyT9mfOPxUSAKGBHj8NPY84vjqGaA9qqt54D8YT57TjR
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
5oWd8Iwex4XFHAoj59q04KmramVgP5q8VKFrxwVOhYmK6SNmvW9dEI3Y16bu9KF7
|
||||||
filename: dokku.list
|
CJnPq/mQXEI+a/G6hZgZ8eYxOV2812WcORppezALreHJeN1HogxI972G0kalKhNC
|
||||||
- source: "deb https://apt.dockerproject.org/repo ubuntu-trusty main"
|
p3315BKJdw/p6/j/qIob2EZOdqBsdHRKBgBVXVbaCnzgh1kKLEvJnVDio+zjEPDr
|
||||||
key: |
|
lR9wQbcHRbu+ZqRSEbH0of/4rx0CdCPGKSDafviKPDXnvls85tWV/lMtNxamqYvv
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
V0DUeTWQDmfiyWCgqXTiRA9U4ZFgFNWmirh38UmV7VtSlYaRos8fEQTfmN20fqTk
|
||||||
Version: SKS 1.1.5
|
9mVAREENSiAuc4P93l8TtrN1bAqXaTX5oz+lepqWmHWvY+RiNiw=
|
||||||
Comment: Hostname: pgpkeys.co.uk
|
=laU4
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
source_docker:
|
||||||
|
source: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable'
|
||||||
|
key: |
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
mQINBFWln24BEADrBl5p99uKh8+rpvqJ48u4eTtjeXAWbslJotmC/CakbNSqOb9oddfzRvGV
|
mQINBFit2ioBEADhWpZ8/wvZ6hUTiXOwQHXMAlaFHcPH9hAtr4F1y2+OYdbtMuth
|
||||||
eJVERt/Q/mlvEqgnyTQy+e6oEYN2Y2kqXceUhXagThnqCoxcEJ3+KM4RmYdoe/BJ/J/6rHOj
|
lqqwp028AqyY+PRfVMtSYMbjuQuu5byyKR01BbqYhuS3jtqQmljZ/bJvXqnmiVXh
|
||||||
q7Omk24z2qB3RU1uAv57iY5VGw5p45uZB4C4pNNsBJXoCvPnTGAs/7IrekFZDDgVraPx/hdi
|
38UuLa+z077PxyxQhu5BbqntTPQMfiyqEiU+BKbq2WmANUKQf+1AmZY/IruOXbnq
|
||||||
wopQ8NltSfZCyu/jPpWFK28TR8yfVlzYFwibj5WKdHM7ZTqlA1tHIG+agyPf3Rae0jPMsHR6
|
L4C1+gJ8vfmXQt99npCaxEjaNRVYfOS8QcixNzHUYnb6emjlANyEVlZzeqo7XKl7
|
||||||
q+arXVwMccyOi+ULU0z8mHUJ3iEMIrpTX+80KaN/ZjibfsBOCjcfiJSB/acn4nxQQgNZigna
|
UrwV5inawTSzWNvtjEjj4nJL8NsLwscpLPQUhTQ+7BbQXAwAmeHCUTQIvvWXqw0N
|
||||||
32velafhQivsNREFeJpzENiGHOoyC6qVeOgKrRiKxzymj0FIMLru/iFF5pSWcBQB7PYlt8J0
|
cmhh4HgeQscQHYgOJjjDVfoY5MucvglbIgCqfzAHW9jxmRL4qbMZj+b1XoePEtht
|
||||||
G80lAcPr6VCiN+4cNKv03SdvA69dCOj79PuO9IIvQsJXsSq96HB+TeEmmL+xSdpGtGdCJHHM
|
ku4bIQN1X5P07fNWzlgaRL5Z4POXDDZTlIQ/El58j9kp4bnWRCJW0lya+f8ocodo
|
||||||
1fDeCqkZhT+RtBGQL2SEdWjxbF43oQopocT8cHvyX6Zaltn0svoGs+wX3Z/H6/8P5anog43U
|
vZZ+Doi+fy4D5ZGrL4XEcIQP/Lv5uFyf+kQtl/94VFYVJOleAv8W92KdgDkhTcTD
|
||||||
65c0A+64Jj00rNDr8j31izhtQMRo892kGeQAaaxg4Pz6HnS7hRC+cOMHUU4HA7iMzHrouAdY
|
G7c0tIkVEKNUq48b3aQ64NOZQW7fVjfoKwEZdOqPE72Pa45jrZzvUFxSpdiNk2tZ
|
||||||
eTZeZEQOA7SxtCME9ZnGwe2grxPXh/U/80WJGkzLFNcTKdv+rwARAQABtDdEb2NrZXIgUmVs
|
XYukHjlxxEgBdC/J3cMMNRE1F4NCA3ApfV1Y7/hTeOnmDuDYwr9/obA8t016Yljj
|
||||||
ZWFzZSBUb29sIChyZWxlYXNlZG9ja2VyKSA8ZG9ja2VyQGRvY2tlci5jb20+iQIcBBABCgAG
|
q5rdkywPf4JF8mXUW5eCN1vAFHxeg9ZWemhBtQmGxXnw9M+z6hWwc6ahmwARAQAB
|
||||||
BQJWw7vdAAoJEFyzYeVS+w0QHysP/i37m4SyoOCVcnybl18vzwBEcp4VCRbXvHvOXty1gccV
|
tCtEb2NrZXIgUmVsZWFzZSAoQ0UgZGViKSA8ZG9ja2VyQGRvY2tlci5jb20+iQI3
|
||||||
IV8/aJqNKgBV97lY3vrpOyiIeB8ETQegsrxFE7t/Gz0rsLObqfLEHdmn5iBJRkhLfCpzjeOn
|
BBMBCgAhBQJYrefAAhsvBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEI2BgDwO
|
||||||
yB3Z0IJB6UogO/msQVYe5CXJl6uwr0AmoiCBLrVlDAktxVh9RWch0l0KZRX2FpHu8h+uM0/z
|
v82IsskP/iQZo68flDQmNvn8X5XTd6RRaUH33kXYXquT6NkHJciS7E2gTJmqvMqd
|
||||||
ySqIidlYfLa3y5oHscU+nGU1i6ImwDTD3ysZC5jp9aVfvUmcESyAb4vvdcAHR+bXhA/RW8QH
|
tI4mNYHCSEYxI5qrcYV5YqX9P6+Ko+vozo4nseUQLPH/ATQ4qL0Zok+1jkag3Lgk
|
||||||
eeMFliWw7Z2jYHyuHmDnWG2yUrnCqAJTrWV+OfKRIzzJFBs4e88ru5h2ZIXdRepw/+COYj34
|
jonyUf9bwtWxFp05HC3GMHPhhcUSexCxQLQvnFWXD2sWLKivHp2fT8QbRGeZ+d3m
|
||||||
LyzxR2cxr2u/xvxwXCkSMe7F4KZAphD+1ws61FhnUMi/PERMYfTFuvPrCkq4gyBjt3fFpZ2N
|
6fqcd5Fu7pxsqm0EUDK5NL+nPIgYhN+auTrhgzhK1CShfGccM/wfRlei9Utz6p9P
|
||||||
R/fKW87QOeVcn1ivXl9id3MMs9KXJsg7QasT7mCsee2VIFsxrkFQ2jNpD+JAERRn9Fj4ArHL
|
XRKIlWnXtT4qNGZNTN0tR+NLG/6Bqd8OYBaFAUcue/w1VW6JQ2VGYZHnZu9S8LMc
|
||||||
5TbwkkFbZZvSi6fr5h2GbCAXIGhIXKnjjorPY/YDX6X8AaHOW1zblWy/CFr6VFl963jrjJga
|
FYBa5Ig9PxwGQOgq6RDKDbV+PqTQT5EFMeR1mrjckk4DQJjbxeMZbiNMG5kGECA8
|
||||||
g0G6tNtBZLrclZgWhOQpeZZ5Lbvz2ZA5CqRrfAVcwPNW1fObFIRtqV6vuVluFOPCMAAnOnqR
|
g383P3elhn03WGbEEa4MNc3Z4+7c236QI3xWJfNPdUbXRaAwhy/6rTSFbzwKB0Jm
|
||||||
02w9t17iVQjO3oVN0mbQi9vjuExXh1YoScVetiO6LSmlQfVEVRTqHLMgXyR/EMo7iQIcBBAB
|
ebwzQfwjQY6f55MiI/RqDCyuPj3r3jyVRkK86pQKBAJwFHyqj9KaKXMZjfVnowLh
|
||||||
CgAGBQJXSWBlAAoJEFyzYeVS+w0QeH0QAI6btAfYwYPuAjfRUy9qlnPhZ+xt1rnwsUzsbmo8
|
9svIGfNbGHpucATqREvUHuQbNnqkCx8VVhtYkhDb9fEP2xBu5VvHbR+3nfVhMut5
|
||||||
K3XTNh+l/R08nu0dsczw30Q1wju28fh1N8ay223+69f0+yICaXqR18AbGgFGKX7vo0gfEVax
|
G34Ct5RS7Jt6LIfFdtcn8CaSas/l1HbiGeRgc70X/9aYx/V/CEJv0lIe8gP6uDoW
|
||||||
dItUN3eHNydGFzmeOKbAlrxIMECnSTG/TkFVYO9Ntlv9vSN2BupmTagTRErxLZKnVsWRzp+X
|
FPIZ7d6vH+Vro6xuWEGiuMaiznap2KhZmpkgfupyFmplh0s6knymuQINBFit2ioB
|
||||||
elwlgU5BCZ6U6Ze8+bIc6F1bZstf17X8i6XNV/rOCLx2yP0hn1osoljoLPpW8nzkwvqYsYbC
|
EADneL9S9m4vhU3blaRjVUUyJ7b/qTjcSylvCH5XUE6R2k+ckEZjfAMZPLpO+/tF
|
||||||
A28lMt1aqe0UWvRCqR0zxlKn17NZQqjbxcajEMCajoQ01MshmO5GWePViv2abCZ/iaC5zKqV
|
M2JIJMD4SifKuS3xck9KtZGCufGmcwiLQRzeHF7vJUKrLD5RTkNi23ydvWZgPjtx
|
||||||
T3deMJHLq7lum6qhA41E9gJH9QoqT+qgadheeFfoC1QP7cke+tXmYg2R39p3l5Hmm+JQbP4f
|
Q+DTT1Zcn7BrQFY6FgnRoUVIxwtdw1bMY/89rsFgS5wwuMESd3Q2RYgb7EOFOpnu
|
||||||
9V5mpWExvHGCSbcatr35tnakIJZugq2ogzsm1djCSz9222RXl9OoFqsm1bNzA78+/cOt5N2c
|
w6da7WakWf4IhnF5nsNYGDVaIHzpiqCl+uTbf1epCjrOlIzkZ3Z3Yk5CM/TiFzPk
|
||||||
yhU0bM2T/zgh42YbDD+JDU/HSmxUIpU+wrGvZGM2FU/up0DRxOC4U1fL6HHlj8liNJWfEg3v
|
z2lLz89cpD8U+NtCsfagWWfjd2U3jDapgH+7nQnCEWpROtzaKHG6lA3pXdix5zG8
|
||||||
hougOh66gGF9ik5j4eIlNoz6lst+gmvlZQ9/9hRDeoG+AbhZeIlQ4CCw+Y1j/+fUxIzKHPVK
|
eRc6/0IbUSWvfjKxLLPfNeCS2pCL3IeEI5nothEEYdQH6szpLog79xB9dVnJyKJb
|
||||||
+aFJd+oJVNvbojJW/SgDdSMtFwqOvXyYcHl30Ws0gZUeDyAmNGZeJ3kFklnApDmeKK+OiQIi
|
VfxXnseoYqVrRz2VVbUI5Blwm6B40E3eGVfUQWiux54DspyVMMk41Mx7QJ3iynIa
|
||||||
BBABCgAMBQJXe5zTBYMHhh+AAAoJEDG4FaMBBnSp7YMQAJqrXoBonZAq07B6qUaT3aBCgnY4
|
1N4ZAqVMAEruyXTRTxc9XW0tYhDMA/1GYvz0EmFpm8LzTHA6sFVtPm/ZlNCX6P1X
|
||||||
JshbXmFb/XrrS75f7YJDPx2fJJdqrbYDIHHgOjzxvp3ngPpOpJzI5sYmkaugeoCO/KHu/+39
|
zJwrv7DSQKD6GGlBQUX+OeEJ8tTkkf8QTJSPUdh8P8YxDFS5EOGAvhhpMBYD42kQ
|
||||||
XqgTB7fguzapRfbvuWp+qzPcHSdb9opnagfzKAze3DQnnLiwCPlsyvGpzC4KzXgV2ze/4raa
|
pqXjEC+XcycTvGI7impgv9PDY1RCC1zkBjKPa120rNhv/hkVk/YhuGoajoHyy4h7
|
||||||
Oye1kK7O0cHyapmn/q/TR3S8YapyXq5VpLThwJAw1SRDu0YxeXIAQiIfaSxT79EktoioW2CS
|
ZQopdcMtpN2dgmhEegny9JCSwxfQmQ0zK0g7m6SHiKMwjwARAQABiQQ+BBgBCAAJ
|
||||||
V8/djt+gBjXnKYJJA8P1zzX7GNt/Rc2YG0Ot4v6tBW16xqFTg+n5JzbeK5cZ1jbIXXfCcaZJ
|
BQJYrdoqAhsCAikJEI2BgDwOv82IwV0gBBkBCAAGBQJYrdoqAAoJEH6gqcPyc/zY
|
||||||
yiM2MzYGhSJ9+EV7JYF05OAIWE4SGTRjXMquQ2oMLSwMCPQHm+FCD9PXQ0tHYx6tKT34wksd
|
1WAP/2wJ+R0gE6qsce3rjaIz58PJmc8goKrir5hnElWhPgbq7cYIsW5qiFyLhkdp
|
||||||
moWsdejl/n3NS+178mG1WI/lN079h3im2gRwOykMou/QWs3vGw/xDoOYHPV2gJ7To9BLVnVK
|
YcMmhD9mRiPpQn6Ya2w3e3B8zfIVKipbMBnke/ytZ9M7qHmDCcjoiSmwEXN3wKYI
|
||||||
/hROgdFLZFeyRScNzwKm57HmYMFA74tX601OiHhk1ymP2UUc25oDWpLXlfcRULJJlo/KfZZF
|
mD9VHONsl/CG1rU9Isw1jtB5g1YxuBA7M/m36XN6x2u+NtNMDB9P56yc4gfsZVES
|
||||||
3pmKwIq3CilGayFUi1NNwuavG76EcAVtVFUVFFIITwkhkuRbBHIytzEHYosFgD5/acK0Pauq
|
KA9v+yY2/l45L8d/WUkUi0YXomn6hyBGI7JrBLq0CX37GEYP6O9rrKipfz73XfO7
|
||||||
JnwrwKv0nWq3aK7nKiALAD+iZvPNjFZau3/APqLEmvmRnAElmugcHsWREFxMMjMMVgYFiYKU
|
JIGzOKZlljb/D9RX/g7nRbCn+3EtH7xnk+TK/50euEKw8SMUg147sJTcpQmv6UzZ
|
||||||
AJO8u46eiQI4BBMBAgAiBQJVpZ9uAhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD3
|
cM4JgL0HbHVCojV4C/plELwMddALOFeYQzTif6sMRPf+3DSj8frbInjChC3yOLy0
|
||||||
YiFXLFJgnbRfEAC9Uai7Rv20QIDlDogRzd+Vebg4ahyoUdj0CH+nAk40RIoq6G26u1e+sdgj
|
6br92KFom17EIj2CAcoeq7UPhi2oouYBwPxh5ytdehJkoo+sN7RIWua6P2WSmon5
|
||||||
pCa8jF6vrx+smpgd1HeJdmpahUX0XN3X9f9qU9oj9A4I1WDalRWJh+tP5WNv2ySy6AwcP9Qn
|
U888cSylXC0+ADFdgLX9K2zrDVYUG1vo8CX0vzxFBaHwN6Px26fhIT1/hYUHQR1z
|
||||||
juBMRTnTK27pk1sEMg9oJHK5p+ts8hlSC4SluyMKH5NMVy9c+A9yqq9NF6M6d6/ehKfBFFLG
|
VfNDcyQmXqkOnZvvoMfz/Q0s9BhFJ/zU6AgQbIZE/hm1spsfgvtsD1frZfygXJ9f
|
||||||
9BX+XLBATvf1ZemGVHQusCQebTGv0C0V9yqtdPdRWVIEhHxyNHATaVYOafTj/EF0lDxLl6zD
|
irP+MSAI80xHSf91qSRZOj4Pl3ZJNbq4yYxv0b1pkMqeGdjdCYhLU+LZ4wbQmpCk
|
||||||
T6trRV5n9F1VCEh4Aal8L5MxVPcIZVO7NHT2EkQgn8CvWjV3oKl2GopZF8V4XdJRl90U/WDv
|
SVe2prlLureigXtmZfkqevRz7FrIZiu9ky8wnCAPwC7/zmS18rgP/17bOtL4/iIz
|
||||||
/6cmfI08GkzDYBHhS8ULWRFwGKobsSTyIvnbk4NtKdnTGyTJCQ8+6i52s+C54PiNgfj2ieNn
|
QhxAAoAMWVrGyJivSkjhSGx1uCojsWfsTAm11P7jsruIL61ZzMUVE2aM3Pmj5G+W
|
||||||
6oOR7d+bNCcG1CdOYY+ZXVOcsjl73UYvtJrO0Rl/NpYERkZ5d/tzw4jZ6FCXgggA/Zxcjk6Y
|
9AcZ58Em+1WsVnAXdUR//bMmhyr8wL/G1YO1V3JEJTRdxsSxdYa4deGBBY/Adpsw
|
||||||
1ZvIm8Mt8wLRFH9Nww+FVsCtaCXJLP8DlJLASMD9rl5QS9Ku3u7ZNrr5HWXPHXITX660jgly
|
24jxhOJR+lsJpqIUeb999+R8euDhRHG9eFO7DRu6weatUJ6suupoDTRWtr/4yGqe
|
||||||
shch6CWeiUATqjIAzkEQom/kEnOrvJAtkypRJ59vYQOedZ1sFVELMXg2UCkD/FwojfnVtjzY
|
dKxV3qQhNLSnaAzqW/1nA3iUB4k7kCaKZxhdhDbClf9P37qaRW467BLCVO/coL3y
|
||||||
aTCeGwFQeqzHmM241iuOmBYPeyTY5veF49aBJA1gEJOQTvBR8Q==
|
Vm50dwdrNtKpMBh3ZpbB1uJvgi9mXtyBOMJ3v8RZeDzFiG8HdCtg9RvIt/AIFoHR
|
||||||
=Yhur
|
H3S+U79NT6i0KPzLImDfs8T7RlpyuMc4Ufs8ggyg9v3Ae6cN3eQyxcK3w0cbBwsh
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
/nQNfsA6uu+9H7NhbehBMhYnpNZyrHzCmzyXkauwRAqoCbGCNykTRwsur9gS41TQ
|
||||||
filename: docker.list
|
M8ssD1jFheOJf3hODnkKU+HKjvMROl1DK7zdmLdNzA1cvtZH/nCC9KPj1z8QC47S
|
||||||
|
xx+dTZSx4ONAhwbS/LN3PoKtn8LPjY9NP9uDWI+TWYquS2U+KHDrBDlsgozDbs/O
|
||||||
|
jCxcpDzNmXpWQHEtHU7649OXHP7UeNST1mCUCH5qdank0V1iejF6/CfTFU4MfcrG
|
||||||
|
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
|
||||||
|
=0YYh
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
package_upgrade: true
|
debconf_selections:
|
||||||
|
web: dokku dokku/web_config boolean false
|
||||||
debconf_selections: |
|
vhost: dokku dokku/vhost_enable boolean true
|
||||||
|
|
||||||
dokku dokku/web_config boolean false
|
|
||||||
dokku dokku/vhost_enable boolean true
|
|
||||||
# set the domain name of the new Dokku server
|
# set the domain name of the new Dokku server
|
||||||
dokku dokku/hostname string $YOUR_FULL_QUALIFIED_DOMAIN
|
hostname: dokku dokku/hostname string $YOUR_FULL_QUALIFIED_DOMAIN
|
||||||
# this copies over the public SSH key assigned to the server
|
# this copies over the public SSH key assigned to the server
|
||||||
dokku dokku/key_file string /home/ubuntu/.ssh/authorized_keys
|
key: dokku dokku/key_file string /home/ubuntu/.ssh/authorized_keys
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
- dokku
|
- dokku
|
||||||
|
package_update: true
|
||||||
|
package_upgrade: true
|
||||||
|
package_reboot_if_required: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Shortly after running the create command you will get a confirmation that the
|
Shortly after running the create command you will get a confirmation that the
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Install Dokku using Vagrant
|
# Vagrant Installation Notes
|
||||||
|
|
||||||
1. Download and install [VirtualBox](https://www.virtualbox.org/wiki/Downloads).
|
1. Download and install [VirtualBox](https://www.virtualbox.org/wiki/Downloads).
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Dokku is an extensible, open source Platform as a Service that runs on a single
|
|||||||
|
|
||||||
To start using Dokku, you'll need a system that meets the following minimum requirements:
|
To start using Dokku, you'll need a system that meets the following minimum requirements:
|
||||||
|
|
||||||
- A fresh installation of [Ubuntu x64 - Any currently supported release](https://www.ubuntu.com/download), [Debian 8.2 x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
|
- A fresh installation of [Ubuntu 16.04/18.04 x64](https://www.ubuntu.com/download), [Debian 9+ x64](https://www.debian.org/distrib/) or [CentOS 7 x64](https://www.centos.org/download/) *(experimental)* with the FQDN set <sup>[1]</sup>
|
||||||
- At least 1 GB of system memory <sup>[2]</sup>
|
- At least 1 GB of system memory <sup>[2]</sup>
|
||||||
|
|
||||||
You can *optionally* have a domain name pointed at the host's IP, though this is not necessary.
|
You can *optionally* have a domain name pointed at the host's IP, though this is not necessary.
|
||||||
@@ -21,13 +21,13 @@ To install the latest stable version of Dokku, you can run the following shell c
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
# for debian systems, installs Dokku via apt-get
|
# for debian systems, installs Dokku via apt-get
|
||||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.16.2/bootstrap.sh;
|
wget https://raw.githubusercontent.com/dokku/dokku/v0.22.0/bootstrap.sh;
|
||||||
sudo DOKKU_TAG=v0.16.2 bash bootstrap.sh
|
sudo DOKKU_TAG=v0.22.0 bash bootstrap.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||||
|
|
||||||
If you're using Debian 8 or Ubuntu 14.04, make sure your package manager is configured to install a sufficiently recent version of nginx<sup>[3]</sup>, otherwise, the installation may fail due to `unmet dependencies` relating nginx.
|
If you're using Debian 9+ or Ubuntu 18.04, make sure your package manager is configured to install a sufficiently recent version of nginx<sup>[3]</sup>, otherwise, the installation may fail due to `unmet dependencies` relating nginx.
|
||||||
|
|
||||||
#### 2. Setup SSH key and Virtualhost Settings
|
#### 2. Setup SSH key and Virtualhost Settings
|
||||||
|
|
||||||
@@ -54,9 +54,11 @@ For various reasons, certain hosting providers may have other steps that should
|
|||||||
As well, you may wish to customize your installation in some other fashion. or experiment with Vagrant. The guides below should get you started:
|
As well, you may wish to customize your installation in some other fashion. or experiment with Vagrant. The guides below should get you started:
|
||||||
|
|
||||||
- [Debian Package Installation Notes](/docs/getting-started/install/debian.md)
|
- [Debian Package Installation Notes](/docs/getting-started/install/debian.md)
|
||||||
|
- [Docker-based Installation Notes](/docs/getting-started/install/docker.md)
|
||||||
- [RPM Package Installation Notes](/docs/getting-started/install/rpm.md)
|
- [RPM Package Installation Notes](/docs/getting-started/install/rpm.md)
|
||||||
- [Vagrant Installation Notes](/docs/getting-started/install/vagrant.md)
|
- [Vagrant Installation Notes](/docs/getting-started/install/vagrant.md)
|
||||||
- [Advanced Install Customization](/docs/getting-started/advanced-installation.md)
|
- [Advanced Install Customization](/docs/getting-started/advanced-installation.md)
|
||||||
|
- [Automated deployment via ansible](https://github.com/dokku/ansible-dokku)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,38 @@
|
|||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
|
> New as of 0.17.0
|
||||||
|
|
||||||
|
```
|
||||||
|
trace:on # Enables trace mode
|
||||||
|
trace:off # Disables trace mode
|
||||||
|
```
|
||||||
|
|
||||||
|
## Trace Mode
|
||||||
|
|
||||||
|
By default, Dokku will constrain the amount of output displayed for any given command run. The verbosity of output can be increased by enabling trace mode. Trace mode will turn on the `set -x` flag for bash plugins, while other plugins are free to respect the environment variable `DOKKU_TRACE` and log differently as approprate. Trace mode can be useful to see _where_ plugins are running commands that would otherwise be unexpected.
|
||||||
|
|
||||||
|
To enable trace mode, run `trace:on`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku trace:on
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Enabling trace mode
|
||||||
|
```
|
||||||
|
|
||||||
|
Trace mode can be disabled with `trace:off`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku trace:off
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Disabling trace mode
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Problems
|
||||||
|
|
||||||
__Symptom:__ I deployed my app but I am getting the default nginx page.
|
__Symptom:__ I deployed my app but I am getting the default nginx page.
|
||||||
|
|
||||||
__Solution:__
|
__Solution:__
|
||||||
@@ -41,22 +74,10 @@ __Symptom:__ I want to deploy my app, but while pushing I get the following erro
|
|||||||
|
|
||||||
__Solution:__
|
__Solution:__
|
||||||
|
|
||||||
The `remote rejected` error does not give enough information. Anything could have failed.
|
The `remote rejected` error does not give enough information. Anything could have failed. Enable trace mode and begin debugging. If this does not help you, create a [gist](https://gist.github.com) containing the full log, and create an issue.
|
||||||
|
|
||||||
To enable Dokku tracing, simply run the following command:
|
One the reasons why you may get this error is because the command that is run in the container exited (without errors). For example, (in Procfile) when you define a new worker container to run Delayed Job and use the bin/delayed_job start command. This command deamonizes the process and exists. The container thinks it's done so it closes itself. The error you get is the one above. To fix the above problem for Delayed Job, you must define the worker to user rake jobs:work, which doesn't deamonize the process.
|
||||||
|
|
||||||
```shell
|
|
||||||
# since 0.3.9
|
|
||||||
dokku trace on
|
|
||||||
```
|
|
||||||
|
|
||||||
In versions older than 0.3.9, you can create a `/home/dokku/dokkurc` file containing the following:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
export DOKKU_TRACE=1
|
|
||||||
```
|
|
||||||
|
|
||||||
This will trace all of Dokku's activity. If this does not help you, create a [gist](https://gist.github.com) containing the full log, and create an issue.
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -94,6 +115,18 @@ Please see https://github.com/dokku/dokku/issues/841 and https://github.com/dokk
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
__Symptom:__ After adding an SSH key, I still see the following error on deploy:
|
||||||
|
|
||||||
|
Connection closed by <host> port 22
|
||||||
|
fatal: Could not read from remote repository.
|
||||||
|
|
||||||
|
Please make sure you have the correct access rights
|
||||||
|
and the repository exists.
|
||||||
|
|
||||||
|
Certain systems may have access to the `dokku` user via SSH disabled. Please check that the `dokku` user is allowed access to the system in the file `/etc/security/access.conf`. As Dokku does not manage this file, please consult your Operating System's documentation for more information.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
__Symptom:__ I want to deploy my app but I am getting asked for the password of the Git user and the error message.
|
__Symptom:__ I want to deploy my app but I am getting asked for the password of the Git user and the error message.
|
||||||
|
|
||||||
fatal: 'NAME' does not appear to be a git repository
|
fatal: 'NAME' does not appear to be a git repository
|
||||||
@@ -180,7 +213,7 @@ __Symptom:__ I successfully deployed my application with no deployment errors bu
|
|||||||
|
|
||||||
__Solution:__
|
__Solution:__
|
||||||
|
|
||||||
This can occur if Dokku is running on a system with a firewall like UFW enabled (some OS versions like Ubuntu 16.04 have this enabled by default). You can check if this is your case by running the following script:
|
This can occur if Dokku is running on a system with a firewall like UFW enabled (some OS versions like Ubuntu have this enabled by default). You can check if this is your case by running the following script:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo ufw status
|
sudo ufw status
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
|
|
||||||
While we hate to see you go, if you need to uninstall Dokku, the following may help you out:
|
While we hate to see you go, if you need to uninstall Dokku, the following may help you out:
|
||||||
|
|
||||||
## Arch Installation
|
## Arch Uninstallation
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# purge dokku from your system
|
# purge dokku from your system
|
||||||
yaourt -Rsn dokku
|
yay -Rsn dokku
|
||||||
```
|
```
|
||||||
|
|
||||||
## CentOS Installation
|
## CentOS Uninstallation
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# uninstall dokku
|
# uninstall dokku
|
||||||
yum remove dokku herokuish
|
yum remove dokku herokuish
|
||||||
```
|
```
|
||||||
|
|
||||||
## Debian Installation
|
## Debian Uninstallation
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# purge dokku from your system
|
# purge dokku from your system
|
||||||
apt-get purge -y --force-yes dokku herokuish
|
apt-get purge dokku herokuish
|
||||||
|
|
||||||
# remove any dependencies that are no longer necessary
|
# remove any dependencies that are no longer necessary
|
||||||
apt-get -y --force-yes autoremove
|
apt-get autoremove
|
||||||
```
|
```
|
||||||
|
|
||||||
## Makefile Installation
|
## Makefile Uninstallation
|
||||||
|
|
||||||
This is a manual deletion process, and as it is not a recommended installation method, there is currently no automated uninstallation.
|
This is a manual deletion process, and as it is not a recommended installation method, there is currently no automated uninstallation.
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ All applications should be stopped, and all docker containers and images deleted
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
# stop all applications
|
# stop all applications
|
||||||
dokku ps:stopall
|
dokku ps:stop --all
|
||||||
|
|
||||||
# cleanup containers and images
|
# cleanup containers and images
|
||||||
dokku cleanup
|
dokku cleanup
|
||||||
|
|||||||
@@ -15,66 +15,58 @@ Your operating system may occasionally provide security updates. We recommend se
|
|||||||
|
|
||||||
Docker releases updates periodically to their engine. We recommend reading their release notes and upgrading accordingly. Please see the [Docker documentation](https://docs.docker.com/) for more details.
|
Docker releases updates periodically to their engine. We recommend reading their release notes and upgrading accordingly. Please see the [Docker documentation](https://docs.docker.com/) for more details.
|
||||||
|
|
||||||
Finally, we provide a helpful binary called `dokku-update`. This is a recommended package that:
|
|
||||||
|
|
||||||
- Can be installed separately, so upgrading Dokku will not affect the running of this package.
|
|
||||||
- Automates many of the upgrade instructions for you.
|
|
||||||
- Provides a clean way for us to further enhance the upgrade process in the future.
|
|
||||||
|
|
||||||
When installing from source, this is available from `contrib/dokku-update`, and is also available on Debian and RPM-based systems from our package repositories under the name `dokku-update`.
|
|
||||||
|
|
||||||
## Migration Guides
|
## Migration Guides
|
||||||
|
|
||||||
Before upgrading, check the migration guides to get comfortable with new features and prepare your deployment to be upgraded.
|
Before upgrading, check the migration guides to get comfortable with new features and prepare your deployment to be upgraded.
|
||||||
|
|
||||||
### 0.5 Migration Guide
|
- [Upgrading to 0.22](/docs/appendices/0.22.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.21](/docs/appendices/0.21.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.20](/docs/appendices/0.20.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.10](/docs/appendices/0.10.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.9](/docs/appendices/0.9.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.8](/docs/appendices/0.8.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.7](/docs/appendices/0.7.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.6](/docs/appendices/0.6.0-migration-guide.md)
|
||||||
|
- [Upgrading to 0.5](/docs/appendices/0.5.0-migration-guide.md)
|
||||||
|
|
||||||
- [0.5 Migration Guide](/docs/appendices/0.5.0-migration-guide.md)
|
## Before upgrading
|
||||||
|
|
||||||
### 0.6 Migration Guide
|
If you'll be updating docker or the herokuish package simultaneously, it's recommended
|
||||||
|
that you stop all applications before upgrading and rebuild afterwards. This is not
|
||||||
|
required if the upgrade only impacts the `dokku` package.
|
||||||
|
|
||||||
- [0.6 Migration Guide](/docs/appendices/0.6.0-migration-guide.md)
|
Why do we recommend stopping all apps?
|
||||||
|
|
||||||
### 0.7 Migration Guide
|
- `docker`: Containers may be randomly reset during the upgrade process, resulting in
|
||||||
|
requests being sent to the wrong containers. Acknowledging and scheduling downtime
|
||||||
- [0.7 Migration Guide](/docs/appendices/0.7.0-migration-guide.md)
|
thus becomes much more important.
|
||||||
|
- `herokuish`: While not required, it may be useful to take advantage of the latest
|
||||||
### 0.8 Migration Guide
|
base image. Herokuish changes do not cause issues unless the base OS changes, which
|
||||||
|
may happen in minor or major releases.
|
||||||
- [0.8 Migration Guide](/docs/appendices/0.8.0-migration-guide.md)
|
|
||||||
|
|
||||||
### 0.9 Migration Guide
|
|
||||||
|
|
||||||
- [0.9 Migration Guide](/docs/appendices/0.9.0-migration-guide.md)
|
|
||||||
|
|
||||||
### 0.10 Migration Guide
|
|
||||||
|
|
||||||
- [0.10 Migration Guide](/docs/appendices/0.10.0-migration-guide.md)
|
|
||||||
|
|
||||||
## Upgrade Instructions
|
|
||||||
|
|
||||||
If Dokku was installed via `apt-get install dokku` or `bootstrap.sh` (most common), upgrade with:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# update your local apt cache
|
# for 0.22.0 and newer versions, use
|
||||||
sudo apt-get update
|
|
||||||
|
|
||||||
# stop each running app
|
# for versions between 0.11.4 and 0.21.4, use
|
||||||
# for 0.11.4 and newer versions, use
|
|
||||||
dokku ps:stopall
|
dokku ps:stopall
|
||||||
|
|
||||||
# for versions between 0.8.1 and 0.11.3, use
|
# for versions between 0.8.1 and 0.11.3, use
|
||||||
dokku --quiet apps:list | xargs -L1 dokku ps:stop
|
dokku --quiet apps:list | xargs -L1 dokku ps:stop
|
||||||
|
|
||||||
# for versions versions older than 0.8.1, use
|
# for versions versions older than 0.8.1, use
|
||||||
dokku --quiet apps | xargs -L1 dokku ps:stop
|
dokku --quiet apps | xargs -L1 dokku ps:stop
|
||||||
|
|
||||||
# update dokku and its dependencies
|
|
||||||
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
|
|
||||||
|
|
||||||
# rebuild all of your applications
|
|
||||||
dokku ps:rebuildall # rebuilds all applications
|
|
||||||
```
|
```
|
||||||
|
|
||||||
> If you have any applications deployed via the `tags` or `tar` commands, do not run the `ps:rebuildall` command,
|
## After upgrading
|
||||||
|
|
||||||
|
After upgrading, you should rebuild the applications to take advantage of any
|
||||||
|
new buildpacks that were released:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:rebuild --all
|
||||||
|
```
|
||||||
|
|
||||||
|
> If you have any applications deployed via the `tags` or `tar` commands, do not run the `ps:rebuild --all` command,
|
||||||
> and instead trigger `ps:rebuild` manually for each `git`-deployed application:
|
> and instead trigger `ps:rebuild` manually for each `git`-deployed application:
|
||||||
>
|
>
|
||||||
> ```
|
> ```
|
||||||
@@ -84,12 +76,36 @@ dokku ps:rebuildall # rebuilds all applications
|
|||||||
> Please see the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
|
> Please see the [images documentation](/docs/deployment/methods/images.md) and [tar documentation](/docs/deployment/methods/tar.md)
|
||||||
> for instructions on rebuilding applications deployed by those plugins.
|
> for instructions on rebuilding applications deployed by those plugins.
|
||||||
|
|
||||||
### Upgrade From Source
|
## Upgrading using `dokku-update`
|
||||||
|
|
||||||
|
We provide a helpful binary called `dokku-update`. This is a recommended package that:
|
||||||
|
|
||||||
|
- Can be installed separately, so upgrading Dokku will not affect the running of this package.
|
||||||
|
- Automates many of the upgrade instructions for you.
|
||||||
|
- Provides a clean way for us to further enhance the upgrade process in the future.
|
||||||
|
|
||||||
|
When installing from source, this is available from `contrib/dokku-update`, and is also available on Debian and RPM-based systems from our package repositories under the name `dokku-update`.
|
||||||
|
|
||||||
|
## Upgrading using `apt`
|
||||||
|
|
||||||
|
If Dokku was installed in a Debian or Ubuntu system, via `apt install dokku` or `bootstrap.sh`, you can upgrade with `apt`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# update your local apt cache
|
||||||
|
sudo apt update
|
||||||
|
|
||||||
|
# update dokku and its dependencies
|
||||||
|
sudo apt install -qq -y dokku herokuish sshcommand plugn gliderlabs-sigil
|
||||||
|
|
||||||
|
# or just upgrade every package:
|
||||||
|
sudo apt upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
## Upgrading from source
|
||||||
|
|
||||||
If you installed Dokku from source (less common), upgrade with:
|
If you installed Dokku from source (less common), upgrade with:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku --quiet apps | xargs -L1 dokku ps:stop # stops each running app
|
|
||||||
cd ~/dokku
|
cd ~/dokku
|
||||||
git pull --tags origin master
|
git pull --tags origin master
|
||||||
|
|
||||||
@@ -98,7 +114,6 @@ sudo DOKKU_BRANCH=master make install
|
|||||||
|
|
||||||
# upgrade to debian package-based installation
|
# upgrade to debian package-based installation
|
||||||
sudo make install
|
sudo make install
|
||||||
dokku ps:rebuildall # rebuilds all applications
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To upgrade Herokuish from source, upgrade with:
|
To upgrade Herokuish from source, upgrade with:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ The Official Dokku website is always a great place to visit. It features links t
|
|||||||
## The IRC and Slack Channels
|
## The IRC and Slack Channels
|
||||||
|
|
||||||
- [irc.freenode.net/#dokku](https://webchat.freenode.net/?channels=dokku)
|
- [irc.freenode.net/#dokku](https://webchat.freenode.net/?channels=dokku)
|
||||||
- [Gliderlabs Slack](https://glider-slackin.herokuapp.com/)
|
- [Gliderlabs Slack](https://glider-slackin.herokuapp.com/) (Join the `#dokku` channel)
|
||||||
|
|
||||||
If you’re stumped, give us a holler in the Dokku IRC or Slack channels. Someone from the development team is usually there, especially during the daylight hours for North and South America users. We’d love to hear from you, whether you need some help, want to find users in your area, or would like to donate your brand new sports car.
|
If you’re stumped, give us a holler in the Dokku IRC or Slack channels. Someone from the development team is usually there, especially during the daylight hours for North and South America users. We’d love to hear from you, whether you need some help, want to find users in your area, or would like to donate your brand new sports car.
|
||||||
|
|
||||||
|
|||||||
@@ -10,30 +10,30 @@
|
|||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
|
||||||
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-57x57.png">
|
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-60x60.png">
|
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-72x72.png">
|
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-76x76.png">
|
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-114x114.png">
|
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-120x120.png">
|
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-144x144.png">
|
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-152x152.png">
|
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/apple-touch-icon-180x180.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/manifest.json">
|
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/manifest.json">
|
||||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/favicon.ico">
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/favicon.ico">
|
||||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||||
<meta name="application-name" content="Dokku">
|
<meta name="application-name" content="Dokku">
|
||||||
<meta name="msapplication-TileColor" content="#da532c">
|
<meta name="msapplication-TileColor" content="#da532c">
|
||||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/mstile-144x144.png">
|
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/mstile-144x144.png">
|
||||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/favicons/browserconfig.xml">
|
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/favicons/browserconfig.xml">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.16.2/docs/assets/style.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.22.0/docs/assets/style.css" rel="stylesheet">
|
||||||
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
|
<!-- <link href="/dokku/docs/assets/style.css" rel="stylesheet"> -->
|
||||||
<style>
|
<style>
|
||||||
.sponsors {
|
.sponsors {
|
||||||
@@ -127,12 +127,12 @@
|
|||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.16.2/bootstrap.sh</span>
|
<span class="command">wget https://raw.githubusercontent.com/dokku/dokku/v0.22.0/bootstrap.sh</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">sudo DOKKU_TAG=v0.16.2 bash bootstrap.sh</span>
|
<span class="command">sudo DOKKU_TAG=v0.22.0 bash bootstrap.sh</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="output"> # go to your server's IP and follow the web installer</span>
|
<span class="output"> # go to your server's IP and follow the web installer</span>
|
||||||
@@ -164,12 +164,12 @@
|
|||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">export OS_ID="$(lsb_release -cs 2>/dev/null || echo "trusty")"</span>
|
<span class="command">export OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")"</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">echo "utopicvividwilyxenialyakketyzestyartfulbionic" | grep -q "$OS_ID" || OS_ID="trusty"</span>
|
<span class="command">echo "xenial bionic focal" | grep -q "$OS_ID" || OS_ID="bionic"</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
@@ -201,12 +201,12 @@
|
|||||||
|
|
||||||
<div class="shell shell-arch">
|
<div class="shell shell-arch">
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="output"> # install dokku via yaourt</span>
|
<span class="output"> # install dokku via yay</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="path"></span>
|
<span class="path"></span>
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">yaourt -S dokku</span>
|
<span class="command">yay -S dokku</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -312,7 +312,7 @@
|
|||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<footer>
|
<footer>
|
||||||
<p>© 2013-2019 Dokku</p>
|
<p>© 2013-2020 Dokku</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
# Network Management
|
# Network Management
|
||||||
|
|
||||||
> New as of 0.11.0
|
> New as of 0.11.0, Enhanced in 0.20.0
|
||||||
|
|
||||||
```
|
```
|
||||||
|
network:create <network> # Creates an attachable docker network
|
||||||
|
network:destroy <network> # Destroys a docker network
|
||||||
|
network:exists <network> # Checks if a docker network exists
|
||||||
|
network:info <network> # Outputs information about a docker network
|
||||||
|
network:list # Lists all docker networks
|
||||||
network:report [<app>] [<flag>] # Displays a network report for one or more apps
|
network:report [<app>] [<flag>] # Displays a network report for one or more apps
|
||||||
network:rebuild <app> # Rebuilds network settings for an app
|
network:rebuild <app> # Rebuilds network settings for an app
|
||||||
network:rebuildall # Rebuild network settings for all apps
|
network:rebuildall # Rebuild network settings for all apps
|
||||||
@@ -13,6 +18,194 @@ The Network plugin allows developers to abstract the concept of container networ
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
### Listing networks
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
You can easily list all available networks using the `network:list` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:list
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Networks
|
||||||
|
bridge
|
||||||
|
host
|
||||||
|
none
|
||||||
|
test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that you can easily hide extra output from Dokku commands by using the `--quiet` flag, which makes it easier to parse on the command line.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku --quiet network:list
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
bridge
|
||||||
|
host
|
||||||
|
none
|
||||||
|
test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a network
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
Docker networks can be created via the `network:create` command. Executing this command will create an attachable `bridge` network. This can be used to route requests between containers without going through any public network.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:create test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Creating network test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
Specifying other additional flags or other types of networks can be created directly via the `docker` command.
|
||||||
|
|
||||||
|
### Destroying a network
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
A Docker network without any associated containers may be destroyed via the `network:destroy` command. Docker will refuse to destroy networks that have containers attached.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:destroy test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
! WARNING: Potentially Destructive Action
|
||||||
|
! This command will destroy network test.
|
||||||
|
! To proceed, type "test"
|
||||||
|
> test
|
||||||
|
-----> Destroying network test
|
||||||
|
```
|
||||||
|
|
||||||
|
As the command is destructive, it will default to asking for confirmation before executing the removal of the network. This may be avoided by providing the `--force` flag:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku --force network:destroy test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
-----> Destroying network test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checking if a network exists
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
For CI/CD pipelines, it may be useful to see if an network exists before creating a new network. You can do so via the `network:exists` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:exists nonexistent-network
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Network does not exist
|
||||||
|
```
|
||||||
|
|
||||||
|
The `network:exists` command will return non-zero if the network does not exist, and zero if it does.
|
||||||
|
|
||||||
|
### Checking network info
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
Network information can be retrieved via the `network:info` command. This is a slightly different version of the `docker network` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:info test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
// TODO
|
||||||
|
```
|
||||||
|
|
||||||
|
### Attaching an app to a network
|
||||||
|
|
||||||
|
> New as of 0.20.0, Requires Docker 1.21+
|
||||||
|
|
||||||
|
Apps will default to being associated with the `bridge` network, but can be attached to `attachable` networks by changing the `attach-post-create` or `attach-post-deploy` network properties when using the [docker-local scheduler](/docs/advanced-usage/schedulers/docker-local.md). A change in these values will require an app deploy or rebuild.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# associates the network after a container is created but before it is started
|
||||||
|
dokku network:set node-js-app attach-post-create test-network
|
||||||
|
|
||||||
|
# associates the network after the deploy is successful but before the proxy is updated
|
||||||
|
dokku network:set node-js-app attach-post-deploy other-test-network
|
||||||
|
```
|
||||||
|
|
||||||
|
Setting the `attach` network property to an empty value will de-associate the container with the network.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku network:set node-js-app attach-post-create
|
||||||
|
dokku network:set node-js-app attach-post-deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Network Aliases
|
||||||
|
|
||||||
|
When a container created for a deployment is being attached to a network - regardless of which `attach` property was used - a network alias of the pattern `APP.PROC_TYPE` will be added to all containers. This can be used to load-balance requests between containers. For an application named `node-js-app` with a process type of web, the network alias - or resolvable DNS record within the network - will be:
|
||||||
|
|
||||||
|
```
|
||||||
|
node-js-app.web
|
||||||
|
```
|
||||||
|
|
||||||
|
The fully-qualified URL for the resource will depend upon the `PORT` being listened to by the application. Applications built via buildpacks will have their `PORT` environment variable set to `5000`, and as such internal network requests for the above example should point to the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://node-js-app.web:5000
|
||||||
|
```
|
||||||
|
|
||||||
|
Dockerfile-based applications may listen on other ports. For more information on how ports are specified for applications, please refer to the [port management documentation](/docs/networking/port-management.md).
|
||||||
|
|
||||||
|
#### Specifying a custom TLD
|
||||||
|
|
||||||
|
When attaching applications to networks, a custom TLD can be specified via the `network:set` command. This TLD is suffixed to the network alias for the application/process-type combination for _all_ networks to which the application is attached, and cannot be customized per network.
|
||||||
|
|
||||||
|
To specify a TLD of `svc.cluster.local` for your application, run the following command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# replace node-js-app with your application name
|
||||||
|
dokku network:set node-js-app tld svc.cluster.local
|
||||||
|
```
|
||||||
|
|
||||||
|
With an application named `node-js-app` and a process-type named `web`, the above command will turn the network alias into:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
node-js-app.web.svc.cluster.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that this has no impact on container port handling, and users must still specify the container port when making internal network requests.
|
||||||
|
|
||||||
|
#### When to attach containers to a network
|
||||||
|
|
||||||
|
Containers can be attached to a network for a variety of reasons:
|
||||||
|
|
||||||
|
- A background process in one app needs to communicate to a webservice in another app
|
||||||
|
- An app needs to talk to a container not managed by Dokku in a secure manner
|
||||||
|
- A custom network that allows transparent access to another host exists and is necessary for an app to run
|
||||||
|
|
||||||
|
Whatever the reason, the semantics of the two network hooks are important and are outlined before.
|
||||||
|
|
||||||
|
- `attach-post-create`:
|
||||||
|
- Phase it applies to:
|
||||||
|
- `build`: Intermediate containers created during the build process.
|
||||||
|
- `deploy`: Deployed app containers.
|
||||||
|
- `run`: Containers created by the `run` command.
|
||||||
|
- Container state on attach: `created` but not `running`
|
||||||
|
- Use case: When the container needs to access a resource on the network.
|
||||||
|
- Example: The app needs to talk to a database on the same network when it first boots.
|
||||||
|
- `attach-post-deploy`
|
||||||
|
- Phase it applies to:
|
||||||
|
- `deploy`: Deployed app containers.
|
||||||
|
- Container state on attach: `running`
|
||||||
|
- Use case: When another container on the network needs to access _this_ container.
|
||||||
|
- Example: A background process needs to communicate with the web process exposed by this container.
|
||||||
|
|
||||||
|
> Warning: If the attachment fails at this stage, this may result in your application failing to respond to proxied requests once older containers are removed.
|
||||||
|
|
||||||
### Rebuilding network settings
|
### Rebuilding network settings
|
||||||
|
|
||||||
There are cases where you may need to rebuild the network configuration for an app, such as on app boot or container restart. In these cases, you can use the `network:rebuild` command:
|
There are cases where you may need to rebuild the network configuration for an app, such as on app boot or container restart. In these cases, you can use the `network:rebuild` command:
|
||||||
@@ -37,7 +230,7 @@ dokku network:rebuildall
|
|||||||
|
|
||||||
> This functionality does not control the `--network` docker flag. Please use the [docker-options plugin](docs/advanced-usage/docker-options.md) to manage this flag.
|
> This functionality does not control the `--network` docker flag. Please use the [docker-options plugin](docs/advanced-usage/docker-options.md) to manage this flag.
|
||||||
|
|
||||||
By default, an application will only bind to the internal interface. This behavior can be modified per app by changing the `bind-all-interfaces` network property.
|
By default, an app will only bind to the internal interface. This behavior can be modified per app by changing the `bind-all-interfaces` network property.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# bind to the default docker interface (`docker0`) with a random internal ip
|
# bind to the default docker interface (`docker0`) with a random internal ip
|
||||||
|
|||||||
@@ -3,23 +3,29 @@
|
|||||||
> New as of 0.5.0, Enhanced in 0.6.0
|
> New as of 0.5.0, Enhanced in 0.6.0
|
||||||
|
|
||||||
```
|
```
|
||||||
proxy:ports <app> # List proxy port mappings for app
|
proxy:ports <app> # List proxy port mappings for an app
|
||||||
proxy:ports-set <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Set proxy port mappings for app
|
proxy:ports-add <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Add proxy port mappings to an app
|
||||||
proxy:ports-add <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Add proxy port mappings for app
|
proxy:ports-clear <app> # Clear all proxy port mappings for an app
|
||||||
proxy:ports-clear <app> # Clear all proxy port mappings for app
|
proxy:ports-remove <app> <host-port> [<host-port>|<scheme>:<host-port>:<container-port>...] # Remove specific proxy port mappings from an app
|
||||||
proxy:ports-remove <app> <host-port> [<host-port>|<scheme>:<host-port>:<container-port>...] # Unset proxy port mappings for app
|
proxy:ports-set <app> <scheme>:<host-port>:<container-port> [<scheme>:<host-port>:<container-port>...] # Set proxy port mappings for an app
|
||||||
```
|
```
|
||||||
|
|
||||||
In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. In the future this will allow other proxy software - such as HAProxy or Caddy - to be used in place of nginx.
|
In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. In the future this will allow other proxy software - such as HAProxy or Caddy - to be used in place of nginx.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Proxy port mapping
|
> Warning: Mapping alternative ports may conflict with the active firewall installed on your server or hosting provider. Such software includes - but is not limited to - AWS Security Groups, iptables, and UFW. Please consult the documentation for those softwares as applicable.
|
||||||
|
|
||||||
> New as of 0.6.0
|
> New as of 0.6.0
|
||||||
|
|
||||||
You can now configure `host -> container` port mappings with the `proxy:ports-*` commands. This mapping is currently supported by the built-in nginx-vhosts plugin.
|
You can now configure `host -> container` port mappings with the `proxy:ports-*` commands. This mapping is currently supported by the built-in nginx-vhosts plugin.
|
||||||
|
|
||||||
|
By default, buildpack apps and dockerfile apps **without** explicitly exposed ports (i.e. using the `EXPOSE` directive) will be configured with a listener on port `80` (and additionally a listener on 443 if ssl is enabled) that will proxy to the application container on port `5000`. Dockerfile apps **with** explicitly exposed ports will be configured with a listener on each exposed port and will proxy to that same port of the deployed application container.
|
||||||
|
|
||||||
|
> Note: This default behavior **will not** be automatically changed on subsequent pushes and must be manipulated with the `proxy:ports-*` commands detailed below.
|
||||||
|
|
||||||
|
### Listing port mappings
|
||||||
|
|
||||||
To inspect the port mapping for a given application, use the `proxy:ports` command:
|
To inspect the port mapping for a given application, use the `proxy:ports` command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -42,6 +48,8 @@ curl http://node-js-app.dokku.me
|
|||||||
Hello World!
|
Hello World!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Adding a custom port mapping
|
||||||
|
|
||||||
There are cases where we may wish for the service to be listening on more than one port, such as port 8080. Normally, this would not be possible:
|
There are cases where we may wish for the service to be listening on more than one port, such as port 8080. Normally, this would not be possible:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -63,7 +71,6 @@ dokku proxy:ports-add node-js-app http:8080:5000
|
|||||||
DOKKU_PROXY_PORT_MAP: http:80:5000 http:8080:5000
|
DOKKU_PROXY_PORT_MAP: http:80:5000 http:8080:5000
|
||||||
-----> Configuring node-js-app.dokku.me...(using built-in template)
|
-----> Configuring node-js-app.dokku.me...(using built-in template)
|
||||||
-----> Creating http nginx.conf
|
-----> Creating http nginx.conf
|
||||||
-----> Running nginx-pre-reload
|
|
||||||
Reloading nginx
|
Reloading nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -87,6 +94,8 @@ curl http://node-js-app.dokku.me:8080
|
|||||||
Hello World!
|
Hello World!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Setting all port mappings at once
|
||||||
|
|
||||||
Port mappings can also be force set using the `proxy:ports-set` command.
|
Port mappings can also be force set using the `proxy:ports-set` command.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -98,19 +107,22 @@ dokku proxy:ports-set node-js-app http:8080:5000
|
|||||||
DOKKU_PROXY_PORT_MAP: http:80:5000 http:8080:5000
|
DOKKU_PROXY_PORT_MAP: http:80:5000 http:8080:5000
|
||||||
-----> Configuring node-js-app.dokku.me...(using built-in template)
|
-----> Configuring node-js-app.dokku.me...(using built-in template)
|
||||||
-----> Creating http nginx.conf
|
-----> Creating http nginx.conf
|
||||||
-----> Running nginx-pre-reload
|
|
||||||
Reloading nginx
|
Reloading nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Removing a port mapping
|
||||||
|
|
||||||
A port mapping can be removed using the `proxy:ports-remove` command if it no longer necessary:
|
A port mapping can be removed using the `proxy:ports-remove` command if it no longer necessary:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku proxy:ports-remove node-js-app http:80:5000
|
dokku proxy:ports-remove node-js-app http:80:5000
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, buildpack apps and dockerfile apps **without** explicitly exposed ports (i.e. using the `EXPOSE` directive) will be configured with a listener on port `80` (and additionally a listener on 443 if ssl is enabled) that will proxy to the application container on port `5000`. Dockerfile apps **with** explicitly exposed ports will be configured with a listener on each exposed port and will proxy to that same port of the deployed application container.
|
Ports may also be removed by specifying only the `host-port` value. This effectively acts as a wildcard and removes all mappings for that particular host port.
|
||||||
|
|
||||||
> Note: This default behavior **will not** be automatically changed on subsequent pushes and must be manipulated with the `proxy:ports-*` syntax detailed above.
|
```shell
|
||||||
|
dokku proxy:ports-remove node-js-app http:80
|
||||||
|
```
|
||||||
|
|
||||||
## Port management by Deployment Method
|
## Port management by Deployment Method
|
||||||
|
|
||||||
@@ -124,7 +136,7 @@ For buildpack deployments, your application *must* respect the `PORT` environmen
|
|||||||
|
|
||||||
> Changed as of 0.5.0
|
> Changed as of 0.5.0
|
||||||
|
|
||||||
Dokku's default proxy implementation - nginx - only supports HTTP request proxying. At this time, we do not support proxying plain TCP or UDP ports. UDP ports can be exposed by disabling the nginx proxy with `dokku proxy:disable myapp`. If you would like to investigate alternative proxy methods, please refer to our [proxy management documentation](/docs/advanced-usage/proxy-management.md).
|
Dokku's default proxy implementation - nginx - supports HTTP and GRPC request proxying. At this time, we do not support proxying plain TCP or UDP ports. UDP ports can be exposed by disabling the nginx proxy with `dokku proxy:disable myapp`. If you would like to investigate alternative proxy methods, please refer to our [proxy management documentation](/docs/advanced-usage/proxy-management.md).
|
||||||
|
|
||||||
#### Applications using EXPOSE
|
#### Applications using EXPOSE
|
||||||
|
|
||||||
@@ -133,7 +145,7 @@ Dokku will extract all tcp ports exposed using the `EXPOSE` directive (one port
|
|||||||
For example, if the Dokku installation is configured with the domain `dokku.me` and an application named `node-js-app` is deployed with following Dockerfile:
|
For example, if the Dokku installation is configured with the domain `dokku.me` and an application named `node-js-app` is deployed with following Dockerfile:
|
||||||
|
|
||||||
```
|
```
|
||||||
FROM ubuntu:14.04
|
FROM ubuntu:18.04
|
||||||
EXPOSE 1234
|
EXPOSE 1234
|
||||||
RUN python -m SimpleHTTPServer 1234
|
RUN python -m SimpleHTTPServer 1234
|
||||||
```
|
```
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user