Compare commits
987 Commits
release_mo
...
ghcr/serve
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fe2a941ff | ||
|
|
4e622fc48a | ||
|
|
b11d0e7c94 | ||
|
|
ea0e2ed664 | ||
|
|
01d70d1b5e | ||
|
|
7165db3cd9 | ||
|
|
ee3829675b | ||
|
|
9ee86fc6a0 | ||
|
|
c46c009bee | ||
|
|
e9786d8ee5 | ||
|
|
dbc36c7129 | ||
|
|
e00c9795f0 | ||
|
|
db7a7c3f7a | ||
|
|
33b8039348 | ||
|
|
249206eadf | ||
|
|
2bf24be08e | ||
|
|
7cc4ab57f3 | ||
|
|
c84c29ed74 | ||
|
|
cb03173c46 | ||
|
|
13a015434b | ||
|
|
249009ae7e | ||
|
|
b82956792a | ||
|
|
4ba03d9a6a | ||
|
|
d6b4eec9b4 | ||
|
|
fb2743a8fe | ||
|
|
c9c39b30ec | ||
|
|
9eeb7efd4f | ||
|
|
9fb52b8f95 | ||
|
|
8e7a6d2034 | ||
|
|
9568c4819f | ||
|
|
6e6ed7ea64 | ||
|
|
da590a643f | ||
|
|
21c8af01a2 | ||
|
|
00549d413e | ||
|
|
75e7fa5cde | ||
|
|
1e81abf9d9 | ||
|
|
e9c41aed1e | ||
|
|
0784da5b4e | ||
|
|
633caa7883 | ||
|
|
d4635c415b | ||
|
|
f3e5297878 | ||
|
|
5e993b9526 | ||
|
|
29d316349b | ||
|
|
95ed8d23de | ||
|
|
97d8d9fa8d | ||
|
|
149eb6c38d | ||
|
|
4c57c6b30f | ||
|
|
3d12812671 | ||
|
|
440818f1af | ||
|
|
18e7a52848 | ||
|
|
b099d16a32 | ||
|
|
46c588c512 | ||
|
|
f248dbabe0 | ||
|
|
799e844de3 | ||
|
|
5090e16d54 | ||
|
|
1d649c5a79 | ||
|
|
9d4474393e | ||
|
|
073235c294 | ||
|
|
fe8da0b332 | ||
|
|
b98294c073 | ||
|
|
c962508987 | ||
|
|
4ff211868e | ||
|
|
527f2557b6 | ||
|
|
a945753629 | ||
|
|
22c60fb83e | ||
|
|
740ba4a9bf | ||
|
|
229bfdc7ec | ||
|
|
93b1af6ec0 | ||
|
|
e8dde48688 | ||
|
|
d9145353b2 | ||
|
|
49c966f50c | ||
|
|
0ad83a3924 | ||
|
|
187a60ec3a | ||
|
|
cabae4cca0 | ||
|
|
cdfb9a7d0e | ||
|
|
4860236f66 | ||
|
|
903762f283 | ||
|
|
143d758b5b | ||
|
|
1d25f23053 | ||
|
|
67d661eeb6 | ||
|
|
fe86363b1f | ||
|
|
15967713a0 | ||
|
|
2dafd62e14 | ||
|
|
46865eff26 | ||
|
|
36d45c7774 | ||
|
|
fc0b86ffe6 | ||
|
|
1c75259e8f | ||
|
|
6ac19de2af | ||
|
|
a4e8a70c31 | ||
|
|
4875ddf30c | ||
|
|
72f9d9e756 | ||
|
|
e32698e4be | ||
|
|
0b73388b0b | ||
|
|
8fa63ba9fb | ||
|
|
15175a261a | ||
|
|
b0eb362037 | ||
|
|
8c2cb6dcad | ||
|
|
692f77c9bc | ||
|
|
7996ab4a3e | ||
|
|
d4bfbbf04c | ||
|
|
92a03ce585 | ||
|
|
1c37332f37 | ||
|
|
23103c3bcc | ||
|
|
920702c5dd | ||
|
|
3167d85f06 | ||
|
|
dd2a5d6191 | ||
|
|
bc1ae62477 | ||
|
|
1af834aa7a | ||
|
|
e66045dc74 | ||
|
|
69f6fdc9c7 | ||
|
|
1327a1f8cf | ||
|
|
52d2577236 | ||
|
|
f2dc157e8a | ||
|
|
d9e860466c | ||
|
|
1633c478e3 | ||
|
|
5eb7cadc4d | ||
|
|
af5de77880 | ||
|
|
58279b668b | ||
|
|
7537614fc2 | ||
|
|
0db2385dbd | ||
|
|
fbb5397217 | ||
|
|
f4605f86a4 | ||
|
|
1f1cad181f | ||
|
|
7942c4d642 | ||
|
|
625410852b | ||
|
|
970ca59077 | ||
|
|
3ee021c9de | ||
|
|
0f8a8a7579 | ||
|
|
33703072eb | ||
|
|
83395641ef | ||
|
|
8cbdd4cc98 | ||
|
|
6c614f2649 | ||
|
|
df5a7d6c19 | ||
|
|
95347022e8 | ||
|
|
4f224e7eba | ||
|
|
fc593e86ee | ||
|
|
5c489f3358 | ||
|
|
899993a23b | ||
|
|
6dd23fa5ff | ||
|
|
1c2f8a74c4 | ||
|
|
d86f9d2ffa | ||
|
|
ffdc21d15c | ||
|
|
abe5548202 | ||
|
|
769adb75c5 | ||
|
|
1648f62da6 | ||
|
|
97d66a3afa | ||
|
|
99556dbbcd | ||
|
|
d7fdca78f7 | ||
|
|
f7858a96ed | ||
|
|
63f24966ce | ||
|
|
047c2954f8 | ||
|
|
11786057e2 | ||
|
|
12648ce726 | ||
|
|
782618d26f | ||
|
|
824b071af4 | ||
|
|
f1f84af3a7 | ||
|
|
8d484528e7 | ||
|
|
e95aa55339 | ||
|
|
0d139df652 | ||
|
|
568c5393a8 | ||
|
|
8d8ce6487f | ||
|
|
658ba49186 | ||
|
|
fa230333a4 | ||
|
|
75bc07f08f | ||
|
|
b7ff0ca985 | ||
|
|
a9cba0c7a6 | ||
|
|
a4b938b5d5 | ||
|
|
0174d82829 | ||
|
|
101458e5cd | ||
|
|
6fbea6232e | ||
|
|
ecf236ad54 | ||
|
|
3c8d8067c1 | ||
|
|
7cd95e6369 | ||
|
|
1487362366 | ||
|
|
54911cce15 | ||
|
|
5a9684f251 | ||
|
|
0f6ae20402 | ||
|
|
2fe3c61621 | ||
|
|
e5afa0f88f | ||
|
|
783d70a8f1 | ||
|
|
1c14896fd6 | ||
|
|
640f8c6867 | ||
|
|
7beba5fb99 | ||
|
|
b4ebc8482f | ||
|
|
9b42f06152 | ||
|
|
574cfd5165 | ||
|
|
19e353453b | ||
|
|
927e1fef80 | ||
|
|
767703c383 | ||
|
|
fa47f34e74 | ||
|
|
545b8d21bd | ||
|
|
557563e1b7 | ||
|
|
bd9dd0a839 | ||
|
|
8da1f638e1 | ||
|
|
97b4b6080a | ||
|
|
e2dd3b462f | ||
|
|
f060d10802 | ||
|
|
bd2dff3a8a | ||
|
|
fd0ee96808 | ||
|
|
f53a27a60d | ||
|
|
22e1b68ea8 | ||
|
|
92d6a6af8e | ||
|
|
7b528a7e20 | ||
|
|
655336a92c | ||
|
|
851ce8147c | ||
|
|
9d6c9b659c | ||
|
|
40d5b26301 | ||
|
|
a4d29adaf4 | ||
|
|
40f979ae2d | ||
|
|
9d2986157d | ||
|
|
6ea6493cbc | ||
|
|
856ca0447e | ||
|
|
4076d1d7af | ||
|
|
da53831cf1 | ||
|
|
1ab9b38c79 | ||
|
|
af1fa494d8 | ||
|
|
fe8fd519a9 | ||
|
|
75ae1bf2e6 | ||
|
|
401d5f44a1 | ||
|
|
13247b153c | ||
|
|
2a1620cb36 | ||
|
|
bc00276316 | ||
|
|
9840d65f40 | ||
|
|
fcf3cadb21 | ||
|
|
be5e1a9840 | ||
|
|
d62f1d50ca | ||
|
|
bf90190b38 | ||
|
|
19979b4f61 | ||
|
|
9df9830fd0 | ||
|
|
1148e524f0 | ||
|
|
516396fb85 | ||
|
|
2c842c9c65 | ||
|
|
fe7ba3895d | ||
|
|
fe7486ea68 | ||
|
|
198cd89eb1 | ||
|
|
ae2145f51f | ||
|
|
41143cb20a | ||
|
|
3ee300a294 | ||
|
|
d077d5dcbb | ||
|
|
6e59c4e915 | ||
|
|
21b930d617 | ||
|
|
644fdd16f5 | ||
|
|
3ce835cf31 | ||
|
|
1ab4cf5fd7 | ||
|
|
c62a7c8265 | ||
|
|
a3333e48f6 | ||
|
|
669cecb4a0 | ||
|
|
0ea5783e23 | ||
|
|
7a6a5892b0 | ||
|
|
cf590e8e02 | ||
|
|
709d4d121a | ||
|
|
556f933d19 | ||
|
|
90d307ab1c | ||
|
|
42f0ee26b6 | ||
|
|
5e367f9165 | ||
|
|
5d5cafad72 | ||
|
|
37707f9db3 | ||
|
|
da08e1cb09 | ||
|
|
05f530283f | ||
|
|
5b16dcdce4 | ||
|
|
cdc2a1f63c | ||
|
|
dccc880b68 | ||
|
|
aaa53d7dc4 | ||
|
|
38008cb760 | ||
|
|
92590e51c2 | ||
|
|
438eb32872 | ||
|
|
02a09ea206 | ||
|
|
435a803eab | ||
|
|
973c1f872a | ||
|
|
e45db814fa | ||
|
|
d0196a1813 | ||
|
|
fcdbef557a | ||
|
|
e3b3cbc1b2 | ||
|
|
e1d3e2dac4 | ||
|
|
19b41d365e | ||
|
|
b5c47734da | ||
|
|
bf0e4cc8e0 | ||
|
|
24e81f9dc0 | ||
|
|
ec0520bd2f | ||
|
|
d4c3063ecf | ||
|
|
c8e84c9af3 | ||
|
|
85efa544b6 | ||
|
|
b1f6c57601 | ||
|
|
3c1bd34058 | ||
|
|
6d31cf40da | ||
|
|
278156b11d | ||
|
|
ce48e2610a | ||
|
|
926715a4a8 | ||
|
|
e152c04a65 | ||
|
|
03d21bc3ff | ||
|
|
79fdfdd72b | ||
|
|
27d3acb192 | ||
|
|
82c8ce3f86 | ||
|
|
93259dc28c | ||
|
|
064da1be08 | ||
|
|
dd0cfc4656 | ||
|
|
62049275f3 | ||
|
|
9aa6023720 | ||
|
|
660bf78123 | ||
|
|
35ede58e78 | ||
|
|
2cba00c45c | ||
|
|
3133a757ce | ||
|
|
f621461ba8 | ||
|
|
2aebeef31d | ||
|
|
ba9337a3b6 | ||
|
|
203357f2c8 | ||
|
|
a0d7a88a6b | ||
|
|
50dc5d3b4b | ||
|
|
58bf661e19 | ||
|
|
a7f56d3dab | ||
|
|
3e51fa1f83 | ||
|
|
99720996bf | ||
|
|
050d5ea3e9 | ||
|
|
89078d2adf | ||
|
|
cdd1353bb2 | ||
|
|
3680ccddfd | ||
|
|
e5c658fcd7 | ||
|
|
111b4c40c7 | ||
|
|
277189ca88 | ||
|
|
2f991272a2 | ||
|
|
58baa04df3 | ||
|
|
de481cc689 | ||
|
|
0bbd32873f | ||
|
|
b0c11911eb | ||
|
|
8a55131025 | ||
|
|
17632a07e8 | ||
|
|
701f42fa74 | ||
|
|
88eb935d2f | ||
|
|
d71f50b79b | ||
|
|
25eaee57e9 | ||
|
|
cf3b5897d2 | ||
|
|
c00ad310ef | ||
|
|
13302460bd | ||
|
|
10101c697b | ||
|
|
8ad1b94b87 | ||
|
|
783f53bfdc | ||
|
|
3e5ba6f939 | ||
|
|
b3c0681d54 | ||
|
|
98951e2d2a | ||
|
|
e8edacf924 | ||
|
|
508e83acd4 | ||
|
|
702b03a288 | ||
|
|
2c6f4228d2 | ||
|
|
95228cc0a6 | ||
|
|
b8c7079c94 | ||
|
|
754dd48367 | ||
|
|
2b4ed5b43c | ||
|
|
7c87f27539 | ||
|
|
aae1caf37d | ||
|
|
0a6558bf48 | ||
|
|
7bd22fd5b8 | ||
|
|
32b7081b02 | ||
|
|
676c3fd22c | ||
|
|
b305d3c9bf | ||
|
|
ad9cb3cb8d | ||
|
|
b833487c54 | ||
|
|
fcc90c6725 | ||
|
|
7037d67a45 | ||
|
|
0a19245c76 | ||
|
|
a60172473b | ||
|
|
b66348f277 | ||
|
|
e4b1adfd1d | ||
|
|
7325b7a385 | ||
|
|
0f78e90aa7 | ||
|
|
5c6ae7dcea | ||
|
|
46bcab26d5 | ||
|
|
4523a4272f | ||
|
|
4d6d3d651a | ||
|
|
a71663032d | ||
|
|
495d8449f7 | ||
|
|
4e7f95e999 | ||
|
|
5890c35050 | ||
|
|
bb1719c59f | ||
|
|
bd58becd38 | ||
|
|
d6fa9d1257 | ||
|
|
ee42e71168 | ||
|
|
0f2e7b40d0 | ||
|
|
79b1ecfcd6 | ||
|
|
ecf56dfd60 | ||
|
|
75d919e815 | ||
|
|
ed7cc5f8c1 | ||
|
|
aede55eb72 | ||
|
|
50790bf241 | ||
|
|
93b7cb8bea | ||
|
|
8f8eeb82a9 | ||
|
|
62baa623c9 | ||
|
|
b71651220b | ||
|
|
74d930005c | ||
|
|
25117f846a | ||
|
|
3ca5303db6 | ||
|
|
bc3302157c | ||
|
|
d57daf91a0 | ||
|
|
0d162b6075 | ||
|
|
f47cff472a | ||
|
|
463602c425 | ||
|
|
8cc6bd6621 | ||
|
|
78864b9301 | ||
|
|
ee864ee0a5 | ||
|
|
4c61fd248d | ||
|
|
446195b8f6 | ||
|
|
382cd90ea1 | ||
|
|
4f8b2e9fa0 | ||
|
|
fad05f3a7f | ||
|
|
99de753c44 | ||
|
|
88e0c6cdbf | ||
|
|
7a35748e30 | ||
|
|
21d59fa0a3 | ||
|
|
b89a9a7307 | ||
|
|
79eff8aa5a | ||
|
|
ba07894d18 | ||
|
|
41593eecda | ||
|
|
b59a23d0ac | ||
|
|
d30fb6fc3c | ||
|
|
d06db67e3e | ||
|
|
0906fddfc6 | ||
|
|
637f11ac23 | ||
|
|
e9da23aff9 | ||
|
|
d466b77f0e | ||
|
|
4e0fa8fecf | ||
|
|
f951880ed1 | ||
|
|
050d7d3725 | ||
|
|
0289a5535e | ||
|
|
8242916172 | ||
|
|
241dcd64bf | ||
|
|
0b8f26d0bb | ||
|
|
7d9cfd8587 | ||
|
|
da7edac292 | ||
|
|
daaf73664a | ||
|
|
20fed3b65a | ||
|
|
8330e2902c | ||
|
|
8613d0d338 | ||
|
|
a33938a620 | ||
|
|
17127b8f0e | ||
|
|
b9c8fdb080 | ||
|
|
98868dd76f | ||
|
|
b58aeddeba | ||
|
|
f8fe2bd7f2 | ||
|
|
59888840b5 | ||
|
|
be3568c3ba | ||
|
|
d606d9c1e0 | ||
|
|
bb9dd31520 | ||
|
|
a8cc1ab4f0 | ||
|
|
c87065b1c2 | ||
|
|
88aa5fbfe1 | ||
|
|
b8bb3d5730 | ||
|
|
cf75528f5e | ||
|
|
7a6fb1ba31 | ||
|
|
774292bdea | ||
|
|
4dd7305c46 | ||
|
|
3d952a2ecc | ||
|
|
9386e3796c | ||
|
|
04e3ad2b77 | ||
|
|
77d7d358f3 | ||
|
|
b64a69ebf0 | ||
|
|
e9ef9d55a4 | ||
|
|
968f04c04a | ||
|
|
59cb3f091e | ||
|
|
227ea4a371 | ||
|
|
630f5a2706 | ||
|
|
4a743be322 | ||
|
|
c2db1f7da9 | ||
|
|
843e956a8a | ||
|
|
c2d1c66888 | ||
|
|
e2aabfb95a | ||
|
|
cd46db3d30 | ||
|
|
4f00296933 | ||
|
|
7ff2c8f424 | ||
|
|
dbf88c7bed | ||
|
|
a06a5be983 | ||
|
|
a3340d684f | ||
|
|
cfbacc3b45 | ||
|
|
f2791abd7c | ||
|
|
3387361489 | ||
|
|
3bba125f1c | ||
|
|
e9c084bd54 | ||
|
|
8d848050d1 | ||
|
|
3756a56776 | ||
|
|
1718e5d1d6 | ||
|
|
e4a0ed7ec1 | ||
|
|
b96e1a2536 | ||
|
|
78055a25d0 | ||
|
|
b050f683c8 | ||
|
|
9141db8d47 | ||
|
|
b16c9af36b | ||
|
|
6b5131ec45 | ||
|
|
4e8fa3babd | ||
|
|
1cc3499019 | ||
|
|
4260c3c769 | ||
|
|
209291e09a | ||
|
|
c34d214313 | ||
|
|
b209779f59 | ||
|
|
dd08ca82fe | ||
|
|
8d71a6bb58 | ||
|
|
c583fa4742 | ||
|
|
ec0d3c4266 | ||
|
|
55cc92e57d | ||
|
|
3f71d491e9 | ||
|
|
304daf0b09 | ||
|
|
e1281657ba | ||
|
|
595871f571 | ||
|
|
d31127c2e3 | ||
|
|
51891996a2 | ||
|
|
5fd861b60a | ||
|
|
09d7b82c08 | ||
|
|
88c9f4943b | ||
|
|
cacc7dc85a | ||
|
|
24a30709cd | ||
|
|
caa092f6c5 | ||
|
|
bbcb6dc702 | ||
|
|
e443838621 | ||
|
|
d9710555ea | ||
|
|
662f4a3fb7 | ||
|
|
6bed9bd8a2 | ||
|
|
b053b0082f | ||
|
|
c57d467965 | ||
|
|
e8e7f81593 | ||
|
|
8e4e06af73 | ||
|
|
439b4fdeec | ||
|
|
32efdf464e | ||
|
|
3578df0ac0 | ||
|
|
f76fa34e5b | ||
|
|
868c45baa4 | ||
|
|
fa1838c82e | ||
|
|
6b5db8d85b | ||
|
|
9c071c0dab | ||
|
|
73b87950de | ||
|
|
ee0c7472a1 | ||
|
|
ba56908d2d | ||
|
|
b5d725e139 | ||
|
|
5750d72c5a | ||
|
|
8b6d7e049a | ||
|
|
00a430927f | ||
|
|
ab57a1f8fe | ||
|
|
cfdeb475ef | ||
|
|
1f0f240f97 | ||
|
|
2ff5058a3e | ||
|
|
641dfdd11e | ||
|
|
054ad8b480 | ||
|
|
4ff77067dc | ||
|
|
437b3d028a | ||
|
|
8afc4bb0cb | ||
|
|
ecd3ce850f | ||
|
|
bc61727e8b | ||
|
|
32f987e551 | ||
|
|
3596d0e42d | ||
|
|
b3827dd812 | ||
|
|
087ba629e0 | ||
|
|
50ea38d471 | ||
|
|
e0c647f583 | ||
|
|
e08f97e543 | ||
|
|
43c06d93c7 | ||
|
|
ecad643ea6 | ||
|
|
9241755d44 | ||
|
|
efa82b7fb7 | ||
|
|
3ff0356dd2 | ||
|
|
3fdb906834 | ||
|
|
7c325065a5 | ||
|
|
4a346c47d1 | ||
|
|
dee38e3ed8 | ||
|
|
69237fa659 | ||
|
|
f32b98c1bc | ||
|
|
fb8a22d370 | ||
|
|
e69276cf5f | ||
|
|
eb8737cb46 | ||
|
|
764921ec69 | ||
|
|
02b93b12fc | ||
|
|
8a177bbe2c | ||
|
|
06397a4992 | ||
|
|
943a524ba9 | ||
|
|
2d0d914fd3 | ||
|
|
dbb1ad66d3 | ||
|
|
f232fc401d | ||
|
|
a10dcd01b0 | ||
|
|
552003600a | ||
|
|
3aa419b430 | ||
|
|
944bdfc7fa | ||
|
|
13420e4440 | ||
|
|
63746523e2 | ||
|
|
b5868468bd | ||
|
|
aa48543a98 | ||
|
|
164da10772 | ||
|
|
291368f7ba | ||
|
|
b6d797681d | ||
|
|
d67dc4b76f | ||
|
|
9b289d7845 | ||
|
|
21a843fb3b | ||
|
|
51c00eefd4 | ||
|
|
401c8e160a | ||
|
|
c2374ed14e | ||
|
|
8d108dc719 | ||
|
|
2e49f581c4 | ||
|
|
dc6221c977 | ||
|
|
c5d9b2408f | ||
|
|
d78fa3f27d | ||
|
|
e30b8024e2 | ||
|
|
c95d3b8c00 | ||
|
|
ec532ad2ac | ||
|
|
479f2188b6 | ||
|
|
c7d96482cb | ||
|
|
67e1a64e7f | ||
|
|
49a8016786 | ||
|
|
39558a27c9 | ||
|
|
f7d4273c1d | ||
|
|
3369e14f69 | ||
|
|
9b28996d3f | ||
|
|
fd98243394 | ||
|
|
9cd6784837 | ||
|
|
127c480855 | ||
|
|
d1717ef308 | ||
|
|
08a43f5d64 | ||
|
|
46ba71a15a | ||
|
|
bcb389c56d | ||
|
|
689edebec4 | ||
|
|
5b4d4b86f7 | ||
|
|
6423901165 | ||
|
|
4672b44d48 | ||
|
|
a97658b67d | ||
|
|
576f85055e | ||
|
|
8a4ef26a6e | ||
|
|
b6dafd5a17 | ||
|
|
a6e78ab732 | ||
|
|
e3ab4eda15 | ||
|
|
de8fa9f9e9 | ||
|
|
8541657ee0 | ||
|
|
14bc47c055 | ||
|
|
99a8f5152a | ||
|
|
7340e5a100 | ||
|
|
30f8162ee4 | ||
|
|
99f4d4ca4d | ||
|
|
b68fda70ef | ||
|
|
ef08c4bd96 | ||
|
|
776c3158a7 | ||
|
|
987c02fdac | ||
|
|
0f8ea1e814 | ||
|
|
27af2c3bbc | ||
|
|
96c2270062 | ||
|
|
56d0acc501 | ||
|
|
e3a5cd060d | ||
|
|
781583c1db | ||
|
|
06d3f679f1 | ||
|
|
a809ab58b3 | ||
|
|
f06314fb13 | ||
|
|
9696409b01 | ||
|
|
e4f10d0e69 | ||
|
|
03c116c2ba | ||
|
|
b8d69e79f0 | ||
|
|
7f3311ad36 | ||
|
|
47f0722687 | ||
|
|
c318162feb | ||
|
|
60485e98c2 | ||
|
|
76e30fe959 | ||
|
|
2bee2fe71c | ||
|
|
1b1e82ebbd | ||
|
|
d319b244ee | ||
|
|
18dba3f629 | ||
|
|
22e85b0364 | ||
|
|
26fbe84d9c | ||
|
|
880594398d | ||
|
|
82cc0559b4 | ||
|
|
1c780c4b02 | ||
|
|
86f14f985b | ||
|
|
fa6694e2f9 | ||
|
|
35f0251064 | ||
|
|
aa60c3c71a | ||
|
|
d2c1437210 | ||
|
|
e31768afe9 | ||
|
|
a475cc9933 | ||
|
|
b260648192 | ||
|
|
be6f596b79 | ||
|
|
90c1638e7d | ||
|
|
8a4b038e86 | ||
|
|
99d84a1154 | ||
|
|
126a96326f | ||
|
|
a3dbaf7015 | ||
|
|
b7ead2004a | ||
|
|
3b7d13aec0 | ||
|
|
034eb69473 | ||
|
|
f06403adc7 | ||
|
|
b580d6ce35 | ||
|
|
caf664f11d | ||
|
|
2d90c14890 | ||
|
|
4d078c094c | ||
|
|
cbfcbe8da2 | ||
|
|
d0f637b154 | ||
|
|
87fad99863 | ||
|
|
d2228ccd58 | ||
|
|
9233149e25 | ||
|
|
4d8d0d1b07 | ||
|
|
59b07f3507 | ||
|
|
38e5135878 | ||
|
|
2426b7405c | ||
|
|
0e66632337 | ||
|
|
b092d2e250 | ||
|
|
e259b06d63 | ||
|
|
2920f77c75 | ||
|
|
884e805f46 | ||
|
|
9f727bb95d | ||
|
|
848771dcaa | ||
|
|
97b3a3cb57 | ||
|
|
57ec62e45e | ||
|
|
bd42a4d1f6 | ||
|
|
22e0cd2168 | ||
|
|
0662baac73 | ||
|
|
ef3c561cf1 | ||
|
|
8f55749607 | ||
|
|
384a2f2c0a | ||
|
|
03c903fc5b | ||
|
|
d7d5e85618 | ||
|
|
f04b62e540 | ||
|
|
9db925c3a6 | ||
|
|
aeac72e35c | ||
|
|
85bea417a1 | ||
|
|
cb282aa56e | ||
|
|
834234143a | ||
|
|
4fc8f32df8 | ||
|
|
6f07399b5a | ||
|
|
25c962c001 | ||
|
|
8524742c92 | ||
|
|
9937b9f096 | ||
|
|
407a8bd257 | ||
|
|
7eea133441 | ||
|
|
37e2ccaac3 | ||
|
|
0f101110e6 | ||
|
|
69fcdcf14b | ||
|
|
9125090a3d | ||
|
|
4a552fbcb4 | ||
|
|
85ef085084 | ||
|
|
f1d128f6b0 | ||
|
|
c925ed2117 | ||
|
|
142a5f9661 | ||
|
|
567582b423 | ||
|
|
937af3da37 | ||
|
|
9f028adb63 | ||
|
|
7e08f2ab3c | ||
|
|
2595fdebae | ||
|
|
9938db6af4 | ||
|
|
da4e0aa826 | ||
|
|
372c4d9086 | ||
|
|
80e28ee1a3 | ||
|
|
abd5704ebb | ||
|
|
ae0c83b1aa | ||
|
|
8f1ee2ef15 | ||
|
|
f1d978fbf7 | ||
|
|
30262f82a5 | ||
|
|
fddbbe5135 | ||
|
|
db981d0344 | ||
|
|
6f15b4178b | ||
|
|
bfd0bc116d | ||
|
|
ae28125a7a | ||
|
|
aa80f86a7a | ||
|
|
6221f904e4 | ||
|
|
beb3276c53 | ||
|
|
96276a1234 | ||
|
|
6e025945ae | ||
|
|
3fb02cf343 | ||
|
|
6d20b9cd55 | ||
|
|
a34a07644e | ||
|
|
67b9ba09fa | ||
|
|
01d3c80240 | ||
|
|
be7b57f3d5 | ||
|
|
786620a5ac | ||
|
|
2a0795dd47 | ||
|
|
68d831ef3d | ||
|
|
5b175b3734 | ||
|
|
1d7f9522e3 | ||
|
|
f9adbdf639 | ||
|
|
d327eb027c | ||
|
|
ef1a5358fd | ||
|
|
f4b909f4a7 | ||
|
|
236c6f612b | ||
|
|
c54ca8c7ae | ||
|
|
4c5d340b57 | ||
|
|
02ea875497 | ||
|
|
bafa3b5c5b | ||
|
|
4604280ef8 | ||
|
|
1dc83b272a | ||
|
|
1d3b3eb1cf | ||
|
|
6a5e012236 | ||
|
|
f1cc16ddae | ||
|
|
6e14aaaad7 | ||
|
|
62a798d527 | ||
|
|
0e41627306 | ||
|
|
bcd5ca7bf5 | ||
|
|
ba94427b36 | ||
|
|
b7c11998c6 | ||
|
|
4864091202 | ||
|
|
72c45bd706 | ||
|
|
28be02bb9a | ||
|
|
93851db27a | ||
|
|
8335c9ac7e | ||
|
|
8a0f61a1c7 | ||
|
|
db30b8cfe8 | ||
|
|
65f75e3467 | ||
|
|
18ab4060b2 | ||
|
|
9a4d465672 | ||
|
|
b9d9c6f65a | ||
|
|
7ea9483cca | ||
|
|
e07fdfb5e1 | ||
|
|
2a7b218fed | ||
|
|
d9add4f827 | ||
|
|
3c19c00a70 | ||
|
|
12c19d1ed1 | ||
|
|
c757b837f1 | ||
|
|
a9f1c0dbd4 | ||
|
|
63a9ef9455 | ||
|
|
148a3c13db | ||
|
|
896d77a83e | ||
|
|
e79426e47f | ||
|
|
a5f3085e01 | ||
|
|
ec5b5ca80d | ||
|
|
2d076c3df8 | ||
|
|
6e67a8b815 | ||
|
|
896c2a3fe9 | ||
|
|
cbe7d2532b | ||
|
|
099b4202c0 | ||
|
|
6f181a7bbd | ||
|
|
211fa7cc11 | ||
|
|
043f8913c2 | ||
|
|
0748c9bf8d | ||
|
|
6e979c7591 | ||
|
|
53210c2212 | ||
|
|
85fb861980 | ||
|
|
efc19d1262 | ||
|
|
172531c585 | ||
|
|
8cc0fa7305 | ||
|
|
cc19b24cc4 | ||
|
|
87f04dbaa6 | ||
|
|
bf644477dc | ||
|
|
5748039371 | ||
|
|
7e93b52e5e | ||
|
|
e173982115 | ||
|
|
4445ef8aef | ||
|
|
3b273a9e7b | ||
|
|
ec23e869e8 | ||
|
|
dcb4dd4944 | ||
|
|
12f890a501 | ||
|
|
b1210e1d15 | ||
|
|
127df30242 | ||
|
|
4e474d4f29 | ||
|
|
c0c17af51a | ||
|
|
d92ec2276e | ||
|
|
1f99727ab9 | ||
|
|
85784920a9 | ||
|
|
d7b3af063b | ||
|
|
9020907b56 | ||
|
|
3812a92913 | ||
|
|
369fcddc39 | ||
|
|
b08545d40d | ||
|
|
99d7685be2 | ||
|
|
9f12229b28 | ||
|
|
d1951a1f10 | ||
|
|
85a3a2f2ea | ||
|
|
275c1d4705 | ||
|
|
f70c284b58 | ||
|
|
d3bef2e8cb | ||
|
|
522704ccb8 | ||
|
|
6ae0516bd7 | ||
|
|
e64d66a320 | ||
|
|
27faef415f | ||
|
|
fd05961303 | ||
|
|
093624a6ee | ||
|
|
9d87560d5c | ||
|
|
04a23c03d2 | ||
|
|
23728107a3 | ||
|
|
2ffce031de | ||
|
|
cde42eb43a | ||
|
|
ce380b3b7a | ||
|
|
d4d29d1957 | ||
|
|
94b4c6b0bb | ||
|
|
a2072c022c | ||
|
|
7dabd9545e | ||
|
|
46dc71ebd2 | ||
|
|
bbe10b1618 | ||
|
|
c9521fb626 | ||
|
|
70b5b8e682 | ||
|
|
5c0b3795c2 | ||
|
|
69cf09e13d | ||
|
|
9e4a67312f | ||
|
|
4e8a4250dc | ||
|
|
1cc80aab75 | ||
|
|
ea5ebd0965 | ||
|
|
ef752a244c | ||
|
|
0d55ae1a6d | ||
|
|
ad892c1055 | ||
|
|
6249211bca | ||
|
|
5b7d4a8806 | ||
|
|
337c25b670 | ||
|
|
595e458c49 | ||
|
|
eb92929647 | ||
|
|
9d24914c1c | ||
|
|
e68b695284 | ||
|
|
0343bdd393 | ||
|
|
745528a9f1 | ||
|
|
b7e6015720 | ||
|
|
a3364408b7 | ||
|
|
67c65657a4 | ||
|
|
29f7a54950 | ||
|
|
fd39c78e5d | ||
|
|
e88a3b59e7 | ||
|
|
2b258f984d | ||
|
|
44c73cb110 | ||
|
|
5c4b4b9194 | ||
|
|
3cf4d3ee31 | ||
|
|
b1386b8f57 | ||
|
|
802a3edf9b | ||
|
|
aec3ec718b | ||
|
|
e856a653b8 | ||
|
|
21fb4e6a03 | ||
|
|
ef7ff0b186 | ||
|
|
95c35d7df8 | ||
|
|
0d5b1ef094 | ||
|
|
033caedfb5 | ||
|
|
32d1d357ba | ||
|
|
9927cc1988 | ||
|
|
efaab96e2c | ||
|
|
1a6c6d2b67 | ||
|
|
093e3a0061 | ||
|
|
f7597e5ea5 | ||
|
|
2c57a99b5f | ||
|
|
d7b6c771e8 | ||
|
|
1feebfdb83 | ||
|
|
f1f0a77bc0 | ||
|
|
a8c270433a | ||
|
|
7aa327badd | ||
|
|
042e08f504 | ||
|
|
c2a84cd707 | ||
|
|
45d89e4108 | ||
|
|
290df814b8 | ||
|
|
42f2d51766 | ||
|
|
06656c1d88 | ||
|
|
794d1e0112 | ||
|
|
d2a0c74554 | ||
|
|
cd51f1f147 | ||
|
|
089a5835b0 | ||
|
|
c74f79e93b | ||
|
|
1634c90ad9 | ||
|
|
2235482345 | ||
|
|
e2bee5d5a4 | ||
|
|
5e4ad6e6a4 | ||
|
|
ad7dad59bc | ||
|
|
cf99651e2d | ||
|
|
4a26ce1b58 | ||
|
|
9bdb0f6a94 | ||
|
|
f66304815e | ||
|
|
17ac627ddd | ||
|
|
d319f42a4d | ||
|
|
6d576adce0 | ||
|
|
af6942e99d | ||
|
|
bb75627383 | ||
|
|
828ade2609 | ||
|
|
36880fac6d | ||
|
|
328b2f5961 | ||
|
|
3244686058 | ||
|
|
baa3d49d4b | ||
|
|
d2c2062256 | ||
|
|
c646909765 | ||
|
|
8b4f03b256 | ||
|
|
976bd0134c | ||
|
|
8a785aac8f | ||
|
|
452812af11 | ||
|
|
44fb8fec1a | ||
|
|
1d8fc7aba8 | ||
|
|
654db76175 | ||
|
|
364170f38d | ||
|
|
0cd7c92672 | ||
|
|
962aaa1b7a | ||
|
|
6ec0c550a3 | ||
|
|
b67fcdb9ed | ||
|
|
2f4c3c7777 | ||
|
|
cb84164466 | ||
|
|
7b6aed426d | ||
|
|
81c539979d | ||
|
|
3cffd969b4 | ||
|
|
bbf4462c6c | ||
|
|
cf5aabbde1 | ||
|
|
b9b239c207 | ||
|
|
aa181b1f1f | ||
|
|
daec225ef8 | ||
|
|
c94878e190 | ||
|
|
fbb15adf11 | ||
|
|
3efd36ab7b | ||
|
|
11cb355e98 | ||
|
|
caadca9a48 | ||
|
|
0a50e33023 | ||
|
|
5eef2a5816 | ||
|
|
fe4bf5c217 | ||
|
|
912fc72600 |
27
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,39 +1,22 @@
|
||||
name: Report a bug
|
||||
description: For regressions only (things that were working earlier)
|
||||
description: Things that were working earlier but don't anymore
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before opening a new issue, **please** ensure
|
||||
1. You are on the latest version,
|
||||
2. You've searched for existing issues,
|
||||
3. It was working earlier (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/enhancements))
|
||||
4. It is not about self hosting (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
|
||||
**Checklist**
|
||||
1. You've searched existing [issues](https://github.com/search?q=repo%3Aente-io%2Fente+&type=issues) and [discussions](https://github.com/search?q=repo%3Aente-io%2Fente+&type=discussions)
|
||||
2. It was working earlier (otherwise use [enhancements](https://github.com/ente-io/ente/discussions/categories/enhancements))
|
||||
3. It is not about self hosting (for those use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: >
|
||||
Describe the bug and steps to reproduce the behaviour, and how it
|
||||
differs from the previously working behaviour.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Version
|
||||
description: The version can be seen at the bottom of settings.
|
||||
placeholder: e.g. v1.2.3
|
||||
- type: input
|
||||
attributes:
|
||||
label: Last working version
|
||||
description: >
|
||||
The version where things were last known to be working. It is fine
|
||||
if you don't remember the exact version (mention roughly then),
|
||||
but **if there just isn't a last working version, then please file
|
||||
it as an
|
||||
[enhancement](https://github.com/ente-io/ente/discussions/categories/enhancements))**
|
||||
(where the community upvotes can be used to help prioritize).
|
||||
placeholder: e.g. v1.2.3
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: What product are you using?
|
||||
|
||||
6
.github/workflows/auth-crowdin-push.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
branches: [main]
|
||||
paths:
|
||||
# Run workflow when auth's intl_en.arb is changed
|
||||
- "auth/lib/l10n/arb/app_en.arb"
|
||||
- "mobile/apps/auth/lib/l10n/arb/app_en.arb"
|
||||
# Or the workflow itself is changed
|
||||
- ".github/workflows/auth-crowdin.yml"
|
||||
|
||||
@@ -24,8 +24,8 @@ jobs:
|
||||
- name: Crowdin's action
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
base_path: "auth/"
|
||||
config: "auth/crowdin.yml"
|
||||
base_path: "mobile/apps/auth/"
|
||||
config: "mobile/apps/auth/crowdin.yml"
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: false
|
||||
|
||||
4
.github/workflows/auth-crowdin-sync.yml
vendored
@@ -23,8 +23,8 @@ jobs:
|
||||
- name: Crowdin's action
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
base_path: "auth/"
|
||||
config: "auth/crowdin.yml"
|
||||
base_path: "mobile/apps/auth/"
|
||||
config: "mobile/apps/auth/crowdin.yml"
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
|
||||
6
.github/workflows/auth-internal-release.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
working-directory: mobile/apps/auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.auth
|
||||
releaseFiles: auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
releaseFiles: mobile/apps/auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
|
||||
- name: Notify Discord
|
||||
|
||||
6
.github/workflows/auth-lint.yml
vendored
@@ -4,11 +4,11 @@ on:
|
||||
# Run on every pull request (open or push to it) that changes auth/
|
||||
pull_request:
|
||||
paths:
|
||||
- "auth/**"
|
||||
- "mobile/apps/auth/**"
|
||||
- ".github/workflows/auth-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
working-directory: mobile/apps/auth
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
|
||||
22
.github/workflows/auth-release.yml
vendored
@@ -29,7 +29,7 @@ on:
|
||||
- "auth-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -40,7 +40,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
working-directory: mobile/apps/auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -98,7 +98,7 @@ jobs:
|
||||
|
||||
- name: Install appimagetool
|
||||
run: |
|
||||
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod +x appimagetool
|
||||
mv appimagetool /usr/local/bin/
|
||||
|
||||
@@ -124,7 +124,7 @@ jobs:
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "auth/artifacts/*"
|
||||
artifacts: "mobile/apps/auth/artifacts/*"
|
||||
draft: true
|
||||
allowUpdates: true
|
||||
updateOnlyUnreleased: true
|
||||
@@ -136,7 +136,7 @@ jobs:
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.auth
|
||||
releaseFiles: auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
releaseFiles: mobile/apps/auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
|
||||
build-windows:
|
||||
@@ -145,7 +145,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
working-directory: mobile/apps/auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -185,8 +185,8 @@ jobs:
|
||||
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
|
||||
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
|
||||
files: |
|
||||
${{ github.workspace }}/auth/artifacts/ente-${{ github.ref_name }}-installer.exe
|
||||
${{ github.workspace }}/auth/ente-${{ github.ref_name }}-windows/auth.exe
|
||||
${{ github.workspace }}/mobile/apps/auth/artifacts/ente-${{ github.ref_name }}-installer.exe
|
||||
${{ github.workspace }}/mobile/apps/auth/ente-${{ github.ref_name }}-windows/auth.exe
|
||||
file-digest: SHA256
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
@@ -201,7 +201,7 @@ jobs:
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "auth/artifacts/*"
|
||||
artifacts: "mobile/apps/auth/artifacts/*"
|
||||
draft: true
|
||||
allowUpdates: true
|
||||
updateOnlyUnreleased: true
|
||||
@@ -211,7 +211,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
working-directory: mobile/apps/auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -298,7 +298,7 @@ jobs:
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "auth/artifacts/*"
|
||||
artifacts: "mobile/apps/auth/artifacts/*"
|
||||
draft: true
|
||||
allowUpdates: true
|
||||
updateOnlyUnreleased: true
|
||||
|
||||
70
.github/workflows/auth-win-sign.yml
vendored
@@ -1,70 +0,0 @@
|
||||
name: "Windows build & Sign (auth)"
|
||||
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
environment: "auth-win-build"
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Create artifacts directory
|
||||
run: mkdir artifacts
|
||||
|
||||
- name: Build Windows installer
|
||||
run: |
|
||||
flutter config --enable-windows-desktop
|
||||
# dart pub global activate flutter_distributor
|
||||
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
|
||||
make innoinstall
|
||||
flutter_distributor package --platform=windows --targets=exe --skip-clean
|
||||
mv dist/**/*-windows-setup.exe artifacts/ente-${{ github.ref_name }}-installer.exe
|
||||
|
||||
- name: Retain Windows EXE and DLLs
|
||||
run: cp -r build/windows/x64/runner/Release ente-${{ github.ref_name }}-windows
|
||||
|
||||
- name: Sign files with Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
with:
|
||||
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
|
||||
endpoint: ${{ secrets.AZURE_ENDPOINT }}
|
||||
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
|
||||
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
|
||||
files: |
|
||||
${{ github.workspace }}/auth/artifacts/ente-${{ github.ref_name }}-installer.exe
|
||||
${{ github.workspace }}/auth/ente-${{ github.ref_name }}-windows/auth.exe
|
||||
file-digest: SHA256
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
|
||||
- name: Zip Windows EXE and DLLs
|
||||
run: tar.exe -a -c -f artifacts/ente-${{ github.ref_name }}-windows.zip ente-${{ github.ref_name }}-windows
|
||||
|
||||
- name: Generate checksums
|
||||
run: sha256sum artifacts/ente-* > artifacts/sha256sum-windows
|
||||
6
.github/workflows/mobile-crowdin-push.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
branches: [main]
|
||||
paths:
|
||||
# Run workflow when mobiles's intl_en.arb is changed
|
||||
- "mobile/lib/l10n/intl_en.arb"
|
||||
- "mobile/apps/photos/lib/l10n/intl_en.arb"
|
||||
# Or the workflow itself is changed
|
||||
- ".github/workflows/mobile-crowdin.yml"
|
||||
|
||||
@@ -24,8 +24,8 @@ jobs:
|
||||
- name: Crowdin's action
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
base_path: "mobile/"
|
||||
config: "mobile/crowdin.yml"
|
||||
base_path: "mobile/apps/photos/"
|
||||
config: "mobile/apps/photos/crowdin.yml"
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: false
|
||||
|
||||
8
.github/workflows/mobile-crowdin-sync.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: "Sync Crowdin translations (mobile)"
|
||||
name: "Sync Crowdin translations (mobile/photos)"
|
||||
|
||||
on:
|
||||
schedule:
|
||||
@@ -23,14 +23,14 @@ jobs:
|
||||
- name: Crowdin's action
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
base_path: "mobile/"
|
||||
config: "mobile/crowdin.yml"
|
||||
base_path: "mobile/apps/photos/"
|
||||
config: "mobile/apps/photos/crowdin.yml"
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
localization_branch_name: translations/mobile
|
||||
create_pull_request: true
|
||||
pull_request_title: "[mobile] New translations"
|
||||
pull_request_title: "[mobile/photos] New translations"
|
||||
pull_request_body: "New translations from [Crowdin](https://crowdin.com/project/ente-photos-app)"
|
||||
pull_request_base_branch_name: "main"
|
||||
project_id: 574741
|
||||
|
||||
140
.github/workflows/mobile-daily-internal.yml
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
name: "Internal release (photos)"
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Runs daily at 12:30 UTC (6:00 PM IST)
|
||||
- cron: "30 12 * * *"
|
||||
workflow_dispatch: # Allow manual trigger
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup JDK 17
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 17
|
||||
|
||||
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Increment version code for build
|
||||
run: |
|
||||
CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
|
||||
VERSION_NAME=$(echo $CURRENT_VERSION | cut -d'+' -f1)
|
||||
CURRENT_BUILD=$(echo $CURRENT_VERSION | cut -d'+' -f2)
|
||||
NEW_BUILD=$((CURRENT_BUILD + ${{ github.run_number }}))
|
||||
NEW_VERSION="${VERSION_NAME}+${NEW_BUILD}"
|
||||
|
||||
sed -i "s/^version: .*/version: $NEW_VERSION/" pubspec.yaml
|
||||
echo "Building with version ${NEW_VERSION}"
|
||||
|
||||
# Store version for later use
|
||||
echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare and validate changelog for Play Store
|
||||
run: |
|
||||
mkdir -p whatsnew
|
||||
CHANGELOG_FILE="scripts/store_changes.txt"
|
||||
DISCORD_FILE="scripts/internal_changes.txt"
|
||||
OUTPUT_FILE="whatsnew/whatsnew-en-US"
|
||||
|
||||
# Use provided changelog or fallback
|
||||
if [ -f "$CHANGELOG_FILE" ]; then
|
||||
head -c 500 "$CHANGELOG_FILE" > "$OUTPUT_FILE"
|
||||
else
|
||||
echo "Bug fixes and improvements" > "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
# Validate: file exists
|
||||
if [ ! -s "$OUTPUT_FILE" ]; then
|
||||
echo "❌ Changelog is empty."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate: <= 500 chars
|
||||
LENGTH=$(wc -m < "$OUTPUT_FILE")
|
||||
if [ "$LENGTH" -gt 500 ]; then
|
||||
echo "❌ Changelog exceeds 500 characters ($LENGTH)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate: no markdown or HTML
|
||||
if grep -Eq '[\*\_\<\>\[\]\(\)]' "$OUTPUT_FILE"; then
|
||||
echo "❌ Changelog contains markdown/HTML formatting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Changelog valid:"
|
||||
cat "$OUTPUT_FILE"
|
||||
|
||||
# Store changelog for Play Store (with escaped newlines)
|
||||
CHANGELOG_PLAYSTORE=$(cat "$OUTPUT_FILE" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
|
||||
echo "CHANGELOG=${CHANGELOG_PLAYSTORE}" >> $GITHUB_ENV
|
||||
|
||||
# Store changelog for Discord (with proper newlines)
|
||||
CHANGELOG_DISCORD=$(cat "$DISCORD_FILE" | sed 's/"/\\"/g')
|
||||
echo "CHANGELOG_DISCORD<<EOF" >> $GITHUB_ENV
|
||||
echo "$CHANGELOG_DISCORD" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Setup keys
|
||||
uses: timheuer/base64-to-file@v1
|
||||
with:
|
||||
fileName: "keystore/ente_photos_key.jks"
|
||||
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
|
||||
|
||||
- name: Build PlayStore AAB
|
||||
run: |
|
||||
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
|
||||
env:
|
||||
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
|
||||
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
|
||||
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
|
||||
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
|
||||
|
||||
- name: Upload AAB to PlayStore
|
||||
uses: r0adkll/upload-google-play@v1
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.photos
|
||||
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
whatsNewDirectory: mobile/apps/photos/whatsnew
|
||||
mappingFile: mobile/apps/photos/build/app/outputs/mapping/playstoreRelease/mapping.txt
|
||||
|
||||
- name: Notify Discord
|
||||
uses: sarisia/actions-status-discord@v1
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
|
||||
nodetail: true
|
||||
title: "🏆 Daily release Photos v${{ env.NEW_VERSION }} (Branch: ${{ github.ref_name }})"
|
||||
description: |
|
||||
**Version:** ${{ env.NEW_VERSION }}
|
||||
**Flutter:** ${{ env.FLUTTER_VERSION }}
|
||||
**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})
|
||||
**Download:** [Play Store](https://play.google.com/store/apps/details?id=io.ente.photos)
|
||||
|
||||
**Changes:**
|
||||
${{ env.CHANGELOG_DISCORD }}
|
||||
color: 0x00ff00
|
||||
@@ -1,10 +1,10 @@
|
||||
name: "Internal release (photos)"
|
||||
name: "Internal release (photos with rust)"
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
RUST_VERSION: "1.85.1"
|
||||
|
||||
permissions:
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.photos
|
||||
releaseFiles: mobile/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
|
||||
- name: Notify Discord
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
name: "Internal release (photos)"
|
||||
name: "Old Internal release (photos)"
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Allow manually running the action
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
with:
|
||||
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
packageName: io.ente.photos
|
||||
releaseFiles: mobile/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
|
||||
- name: Notify Discord
|
||||
|
||||
6
.github/workflows/mobile-lint.yml
vendored
@@ -4,11 +4,11 @@ on:
|
||||
# Run on every pull request (open or push to it) that changes mobile/
|
||||
pull_request:
|
||||
paths:
|
||||
- "mobile/**"
|
||||
- "mobile/apps/photos/**"
|
||||
- ".github/workflows/mobile-lint.yml"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile
|
||||
working-directory: mobile/apps/photos
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
|
||||
6
.github/workflows/mobile-release.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
- "photos-v*"
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
@@ -62,5 +62,5 @@ jobs:
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "mobile/build/app/outputs/flutter-apk/ente-${{ github.ref_name }}.apk,mobile/build/app/outputs/flutter-apk/sha256sum"
|
||||
artifacts: "mobile/apps/photos/build/app/outputs/flutter-apk/ente-${{ github.ref_name }}.apk,mobile/apps/photos/build/app/outputs/flutter-apk/sha256sum"
|
||||
draft: true
|
||||
|
||||
126
.github/workflows/photos-internal-release.yml
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
name: "Internal Release V2 (photos)"
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger only
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.32.8"
|
||||
ANDROID_KEYSTORE_PATH: "keystore/ente_photos_key.jks"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest # Required for iOS builds
|
||||
environment: "ios-build"
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: mobile/apps/photos
|
||||
|
||||
steps:
|
||||
# Common Setup
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup JDK 17
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 17
|
||||
|
||||
- name: Install Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
# Android Build
|
||||
- name: Setup Android signing key
|
||||
uses: timheuer/base64-to-file@v1
|
||||
with:
|
||||
fileName: ${{ env.ANDROID_KEYSTORE_PATH }}
|
||||
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
|
||||
|
||||
# - name: Build Android AAB
|
||||
# run: |
|
||||
# flutter build appbundle \
|
||||
# --dart-define=cronetHttpNoPlay=true \
|
||||
# --release \
|
||||
# --flavor playstore
|
||||
# env:
|
||||
# SIGNING_KEY_PATH: ${{ env.ANDROID_KEYSTORE_PATH }}
|
||||
# SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
|
||||
# SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
|
||||
# SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
|
||||
|
||||
# iOS Build (new secure implementation)
|
||||
- name: Install fastlane
|
||||
run: gem install fastlane
|
||||
|
||||
- name: Create ExportOptions.plist
|
||||
run: |
|
||||
cat <<EOF > ios/ExportOptions.plist
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>app-store</string>
|
||||
<key>teamID</key>
|
||||
<string>${{ secrets.IOS_TEAM_ID }}</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
- name: Setup App Store Connect API Key
|
||||
run: |
|
||||
echo '${{ secrets.IOS_API_KEY }}' > api_key.json
|
||||
chmod 600 api_key.json
|
||||
|
||||
- name: Build iOS IPA
|
||||
run: |
|
||||
flutter build ipa \
|
||||
--release \
|
||||
--export-options-plist=ExportOptions.plist \
|
||||
--dart-define=cronetHttpNoPlay=true
|
||||
env:
|
||||
SIGNING_TEAM_ID: ${{ secrets.IOS_TEAM_ID }}
|
||||
|
||||
# Uploads
|
||||
# - name: Upload to Play Store
|
||||
# uses: r0adkll/upload-google-play@v1
|
||||
# with:
|
||||
# serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
|
||||
# packageName: io.ente.photos
|
||||
# releaseFiles: build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
# track: internal
|
||||
|
||||
- name: Upload to TestFlight
|
||||
run: |
|
||||
fastlane pilot upload \
|
||||
--api_key_path api_key.json \
|
||||
--ipa "build/ios/ipa/Ente Photos.ipa" \
|
||||
--skip_waiting_for_build_processing \
|
||||
--apple_id ${{ secrets.IOS_APPLE_ID }} \
|
||||
--app_identifier "io.ente.photos"
|
||||
env:
|
||||
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.IOS_API_KEY_ID }}
|
||||
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.IOS_ISSUER_ID }}
|
||||
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.IOS_APP_SPECIFIC_PASSWORD }}
|
||||
|
||||
- name: Clean sensitive files
|
||||
run: |
|
||||
rm -f api_key.json
|
||||
rm -f ${{ env.ANDROID_KEYSTORE_PATH }}
|
||||
|
||||
- name: Notify Discord
|
||||
uses: sarisia/actions-status-discord@v1
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
|
||||
title: "🚀 Dual Platform Release Uploaded"
|
||||
description: |
|
||||
**Android**: [Play Store Internal](https://play.google.com/store/apps/details?id=io.ente.photos)
|
||||
**iOS**: TestFlight build processing
|
||||
color: 0x00ff00
|
||||
44
.github/workflows/rust-lint.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: "Lint (rust)"
|
||||
|
||||
on:
|
||||
# Run on every pull request (open or push to it) that changes rust/
|
||||
pull_request:
|
||||
paths:
|
||||
- "rust/**"
|
||||
- ".github/workflows/rust-lint.yml"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# Cancel in-progress lint runs when a new commit is pushed.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
RUSTFLAGS: -D warnings
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: rust
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
target
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
|
||||
- run: cargo fmt --check
|
||||
|
||||
- run: cargo clippy --all-targets --all-features
|
||||
|
||||
- run: cargo build
|
||||
22
.github/workflows/web-deploy.yml
vendored
@@ -54,6 +54,18 @@ jobs:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
|
||||
|
||||
- name: Build custom-albums
|
||||
run: yarn build:photos
|
||||
env:
|
||||
NEXT_PUBLIC_ENTE_ONLY_SERVE_ALBUMS_APP: 1
|
||||
|
||||
- name: Publish custom-albums
|
||||
uses: cloudflare/wrangler-action@v3
|
||||
with:
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/custom-albums web/apps/photos/out
|
||||
|
||||
- name: Build accounts
|
||||
run: yarn build:accounts
|
||||
|
||||
@@ -93,3 +105,13 @@ jobs:
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/payments web/apps/payments/dist
|
||||
|
||||
- name: Build locker
|
||||
run: yarn build:locker
|
||||
|
||||
- name: Publish locker
|
||||
uses: cloudflare/wrangler-action@v3
|
||||
with:
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/locker web/apps/locker/out
|
||||
|
||||
4
.gitmodules
vendored
@@ -3,9 +3,9 @@
|
||||
url = https://github.com/ente-io/sentry-dart.git
|
||||
branch = sentry_flutter_ente
|
||||
[submodule "auth/flutter"]
|
||||
path = auth/flutter
|
||||
path = mobile/apps/auth/flutter
|
||||
url = https://github.com/flutter/flutter.git
|
||||
branch = stable
|
||||
[submodule "auth/assets/simple-icons"]
|
||||
path = auth/assets/simple-icons
|
||||
path = mobile/apps/auth/assets/simple-icons
|
||||
url = https://github.com/simple-icons/simple-icons.git
|
||||
|
||||
@@ -1,54 +1,42 @@
|
||||
# Contributing
|
||||
|
||||
First and foremost, thank you for your interest in contributing to Ente 🙏
|
||||
|
||||
There are many ways to contribute, and most of them don't require writing code.
|
||||
|
||||
* [Spread the word](#spread-the-word)
|
||||
* [Engage with the community](#engage-with-the-community)
|
||||
* [Translate](#translate)
|
||||
* [Document](#document)
|
||||
|
||||
- [Spread the word](#spread-the-word)
|
||||
- [Engage with the community](#engage-with-the-community)
|
||||
- [Translate](#translate)
|
||||
- [Document](#document)
|
||||
|
||||
## Spread the word
|
||||
|
||||
This is perhaps the most impactful contribution you can make. [Spread the
|
||||
word](https://help.ente.io/photos/features/referral-program/). Online on your
|
||||
favorite social media channels. Offline to your friends and family who are
|
||||
looking for a privacy-friendly alternative to big tech.
|
||||
**This is the most impactful contribution you can make**.
|
||||
|
||||
[Spread the word](https://help.ente.io/photos/features/referral-program/). Online on your favorite social media channels. Offline to your friends and family who are looking for a privacy-friendly alternative to big tech.
|
||||
|
||||
## Engage with the community
|
||||
|
||||
Just hang around, enjoy the vibe. Answer someone's query on our
|
||||
[Discord](https://discord.gg/z2YVKkycX3), or pile on in the sporadic #off-topic
|
||||
rants there. Chuckle (or wince!) at our [Twitter](https://twitter.com/enteio)
|
||||
memes. Suggest a new feature in our [Github
|
||||
Discussions](https://github.com/ente-io/ente/discussions/new?category=enhancements),
|
||||
or upvote the existing ones that you feel we should focus on first. Provide your
|
||||
opinion on existing threads.
|
||||
Just hang around, enjoy the vibe. The Ente community — the people who are building Ente, and the people who are using Ente — hang out at various places depending on their proclivity:
|
||||
|
||||
These might seem like small things, but it provides us energy. Knowing that
|
||||
there is a community of people who care for what we are building.
|
||||
- [Discord](https://discord.ente.io)
|
||||
- [Mastodon](https://fosstodon.org/@ente)
|
||||
- [X / Twitter](https://twitter.com/enteio)
|
||||
- [Github Discussions](https://github.com/ente-io/ente/discussions)
|
||||
|
||||
Just being around might seem a small thing, but it provides us energy. Knowing that there is a community of people who care for what we are building, **who want us to do better**.
|
||||
|
||||
## Translate
|
||||
|
||||
If you're interested in helping out with translation, please visit our Crowdin
|
||||
projects to get started:
|
||||
|
||||
| Project | |
|
||||
| ------------- | ------------- |
|
||||
| [Auth](https://crowdin.com/project/ente-authenticator-app) | [](https://crowdin.com/project/ente-authenticator-app) |
|
||||
| [Photos](https://crowdin.com/project/ente-photos-app) | [](https://crowdin.com/project/ente-photos-app) |
|
||||
| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [](https://crowdin.com/project/ente-photos-web) |
|
||||
Visit our Crowdin projects to help with translations:
|
||||
|
||||
| Project | |
|
||||
| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [Auth](https://crowdin.com/project/ente-authenticator-app) | [](https://crowdin.com/project/ente-authenticator-app) |
|
||||
| [Photos](https://crowdin.com/project/ente-photos-app) | [](https://crowdin.com/project/ente-photos-app) |
|
||||
| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [](https://crowdin.com/project/ente-photos-web) |
|
||||
|
||||
If your language is not listed for translation, please [create a GitHub
|
||||
issue](https://github.com/ente-io/ente/issues/new?title=Request+for+New+Language+Translation&body=Language+name%3A+%0AProject%3A+auth%2Fphotos%2Fboth)
|
||||
to have it added. It is okay to have partial translations. Once ~90% of the
|
||||
strings in a language get translated, we will start surfacing it in the apps.
|
||||
|
||||
Thank you for your support.
|
||||
|
||||
## Document
|
||||
|
||||
The help guides and FAQs for users of Ente products are also open source, and
|
||||
@@ -60,25 +48,9 @@ See [docs/](docs/README.md) for how to edit these documents.
|
||||
|
||||
## Code contributions
|
||||
|
||||
Code is a small aspect of community, and the ways mentioned above are more
|
||||
important in helping us. But if you'd _really_ like to contribute code, it is
|
||||
best to start small. Consider some well-scoped changes, say like adding more
|
||||
[custom icons to auth](auth/docs/adding-icons.md).
|
||||
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](mobile/apps/auth/docs/adding-icons.md), or fixing a specific bug.
|
||||
|
||||
Each of the individual product/platform specific directories in this repository
|
||||
have instructions on setting up a dev environment.
|
||||
|
||||
For anything beyond trivial bug fixes, please use
|
||||
[discussions](https://github.com/ente-io/ente/discussions) instead of performing
|
||||
code changes directly.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> Please remember that code is a important, but small, part of the overall big
|
||||
> picture that makes a product a joy to use. Something that's easy in code is
|
||||
> not necessarily the right choice for the product as a whole. So we'll repeat -
|
||||
> there are other ways to contribute than code that we'd request you to
|
||||
> consider.
|
||||
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.
|
||||
|
||||
## Leave a review or star
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"flutter": "3.24.3"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 23 KiB |
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
aria-label="Ubiquiti" role="img"
|
||||
viewBox="0 0 512 512"><rect
|
||||
width="512" height="512"
|
||||
rx="15"
|
||||
fill="#399cdb"/><path d="M112 94v18h18V94h-18zm288 0c-82 0-90 31-90 61v172a147 147 0 01-3 28c43-9 72-36 86-82l7-23V94zm-234 18v18h18v-18h-18zm-18 18v18h18v-18h-18zm36 9v18h18v-18h-18zm-72 4v147c0 73 53 128 144 128 0 0-54-30-54-91V197h-18v66h-18v-39h-18v17h-18v-98h-18zm54 18v18h18v-18h-18zm-18 27v18h18v-18h-18zm252 87c-19 64-65 92-131 89-24-1-43-7-57-16 10 42 46 63 48 64l10 6c82-5 130-59 130-128v-15z" fill="#ffffff"/></svg>
|
||||
|
Before Width: | Height: | Size: 679 B |
@@ -1,34 +0,0 @@
|
||||
ente's Authenticator app helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
|
||||
|
||||
|
||||
FEATURES
|
||||
|
||||
- Secure Backups
|
||||
ente provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
|
||||
|
||||
- Multi Device Synchronization
|
||||
ente will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
|
||||
|
||||
- Web access
|
||||
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
|
||||
|
||||
- Offline Mode
|
||||
ente generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
|
||||
|
||||
- Import and Export Tokens
|
||||
You can add tokens to ente by one of the following methods:
|
||||
1. Scanning a QR code
|
||||
2. Manually entering (copy-pasting) a 2FA secret
|
||||
3. Bulk importing from a file that contains a list of codes in the following format:
|
||||
|
||||
otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
|
||||
|
||||
The codes maybe separated by new lines or commas.
|
||||
|
||||
You can also export the codes you have added to ente, to an **unencrypted** text file, that adheres to the above format.
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
If you need help, please visit @ https://github.com/ente-io/ente/discussions/new?category=q-a, and someone will get in touch with you.
|
||||
If you have feature requests, please create an issue @ https://github.com/ente-io/ente
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 58 KiB |
@@ -1 +0,0 @@
|
||||
ente is an end-to-end encrypted authenticator app
|
||||
@@ -1 +0,0 @@
|
||||
Ente Authenticator
|
||||
@@ -1,268 +0,0 @@
|
||||
{
|
||||
"account": "Уліковы запіс",
|
||||
"unlock": "Разблакіраваць",
|
||||
"recoveryKey": "Ключ аднаўлення",
|
||||
"counterAppBarTitle": "Лічыльнік",
|
||||
"@counterAppBarTitle": {
|
||||
"description": "Text shown in the AppBar of the Counter Page"
|
||||
},
|
||||
"onBoardingBody": "Бяспечна зрабіць рэзервовую копію кодаў 2ФА",
|
||||
"onBoardingGetStarted": "Пачаць",
|
||||
"setupFirstAccount": "Наладзіць свой першы ўліковы запіс",
|
||||
"importScanQrCode": "Сканіраваць код QR-код",
|
||||
"qrCode": "QR-код",
|
||||
"importEnterSetupKey": "Увесці ключ наладжвання",
|
||||
"importAccountPageTitle": "Увесці падрабязнасці ўліковага запісу",
|
||||
"secretCanNotBeEmpty": "Сакрэт не можа быць пустым",
|
||||
"bothIssuerAndAccountCanNotBeEmpty": "І выдавец, і ўліковы запіс не могуць быць пустымі",
|
||||
"incorrectDetails": "Няправільныя падрабязнасці",
|
||||
"pleaseVerifyDetails": "Праверце падрабязнасці і паспрабуйце яшчэ раз",
|
||||
"codeIssuerHint": "Выдавец",
|
||||
"codeSecretKeyHint": "Сакрэтны ключ",
|
||||
"secret": "Сакрэт",
|
||||
"all": "Усе",
|
||||
"notes": "Нататкі",
|
||||
"notesLengthLimit": "Максімальная колькасць сімвалаў у нататках не больш за {count}",
|
||||
"@notesLengthLimit": {
|
||||
"description": "Text to indicate the maximum number of characters allowed for notes",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"description": "The maximum number of characters allowed for notes",
|
||||
"type": "int",
|
||||
"example": "100"
|
||||
}
|
||||
}
|
||||
},
|
||||
"codeAccountHint": "Уліковы запіс (vy@damen.com)",
|
||||
"codeTagHint": "Тэг",
|
||||
"accountKeyType": "Тып ключа",
|
||||
"sessionExpired": "Сеанс завяршыўся",
|
||||
"@sessionExpired": {
|
||||
"description": "Title of the dialog when the users current session is invalid/expired"
|
||||
},
|
||||
"pleaseLoginAgain": "Аўтарызуйцеся яшчэ раз",
|
||||
"loggingOut": "Выхад...",
|
||||
"timeBasedKeyType": "Заснаваныя на часе (TOTP)",
|
||||
"counterBasedKeyType": "Заснаваныя на лічыльніку (HOTP)",
|
||||
"saveAction": "Захаваць",
|
||||
"nextTotpTitle": "далей",
|
||||
"deleteCodeTitle": "Выдаліць код?",
|
||||
"deleteCodeMessage": "Вы сапраўды хочаце выдаліць гэты код? Гэта дзеянне з'яўляецца незваротным.",
|
||||
"trashCode": "Выдаліць код?",
|
||||
"trashCodeMessage": "Вы сапраўды хочаце выдаліць код для {account}?",
|
||||
"trash": "Сметніца",
|
||||
"viewLogsAction": "Паглядзець журналы",
|
||||
"preparingLogsTitle": "Падрыхтоўка журналаў...",
|
||||
"emailLogsTitle": "Адправіць журнал па электроннай пошце",
|
||||
"emailLogsMessage": "Адпраўце журналы на {email}",
|
||||
"@emailLogsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyEmailAction": "Скапіяваць электронную пошту",
|
||||
"exportLogsAction": "Экспартаваць журналы",
|
||||
"reportABug": "Паведаміць аб памылцы",
|
||||
"crashAndErrorReporting": "Справаздачы аб збоях і памылках",
|
||||
"reportBug": "Паведаміць аб памылцы",
|
||||
"emailUsMessage": "Адпраўце нам ліст на {email}",
|
||||
"@emailUsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contactSupport": "Звярнуцца ў службу падтрымкі",
|
||||
"rateUsOnStore": "Ацаніць нас у {storeName}",
|
||||
"blog": "Блог",
|
||||
"verifyPassword": "Праверыць пароль",
|
||||
"pleaseWait": "Пачакайце...",
|
||||
"generatingEncryptionKeysTitle": "Генерацыя ключоў шыфравання...",
|
||||
"recreatePassword": "Стварыць пароль паўторна",
|
||||
"useRecoveryKey": "Выкарыстоўваць ключ аднаўлення",
|
||||
"incorrectPasswordTitle": "Няправільны пароль",
|
||||
"welcomeBack": "З вяртаннем!",
|
||||
"changeEmail": "Змяніць адрас электроннай пошты",
|
||||
"changePassword": "Змяніць пароль",
|
||||
"data": "Даныя",
|
||||
"importCodes": "Імпартаваць коды",
|
||||
"importTypePlainText": "Звычайны тэкст",
|
||||
"importTypeEnteEncrypted": "Шыфраванне экспартавання з Ente",
|
||||
"passwordForDecryptingExport": "Пароль для дэшыфроўкі экспартавання",
|
||||
"passwordEmptyError": "Пароль не можа быць пустым",
|
||||
"importFromApp": "Імпартаваць коды з {appName}",
|
||||
"exportCodes": "Экспартаваць коды",
|
||||
"importLabel": "Імпарт",
|
||||
"selectFile": "Выбраць файл",
|
||||
"ok": "OK",
|
||||
"cancel": "Скасаваць",
|
||||
"yes": "Так",
|
||||
"no": "Не",
|
||||
"email": "Электронная пошта",
|
||||
"support": "Падтрымка",
|
||||
"general": "Агульныя",
|
||||
"settings": "Налады",
|
||||
"copied": "Скапіявана",
|
||||
"pleaseTryAgain": "Калі ласка, паспрабуйце яшчэ раз",
|
||||
"existingUser": "Існуючы карыстальнік",
|
||||
"newUser": "Навічок у Ente",
|
||||
"delete": "Выдаліць",
|
||||
"enterYourPasswordHint": "Увядзіце ваш пароль",
|
||||
"forgotPassword": "Забылі пароль",
|
||||
"oops": "Вой",
|
||||
"faq": "Частыя пытанні",
|
||||
"leaveFamily": "Пакінуць сямейны план",
|
||||
"scan": "Сканіраваць",
|
||||
"scanACode": "Сканіраваць код",
|
||||
"verify": "Праверыць",
|
||||
"verifyEmail": "Праверыць электронную пошту",
|
||||
"lostDeviceTitle": "Згубілі прыладу?",
|
||||
"verifyPasskey": "Праверыць ключ доступу",
|
||||
"loginWithTOTP": "Увайсці з TOTP",
|
||||
"recoverAccount": "Аднавіць уліковы запіс",
|
||||
"recover": "Аднавіць",
|
||||
"invalidQRCode": "Памылковы QR-код",
|
||||
"deleteAccount": "Выдаліць уліковы запіс",
|
||||
"noDeleteAccountAction": "Не, выдаліць уліковы запіс",
|
||||
"sendEmail": "Адправіць ліст",
|
||||
"createNewAccount": "Стварыць новы ўліковы запіс",
|
||||
"weakStrength": "Ненадзейны",
|
||||
"strongStrength": "Надзейны",
|
||||
"moderateStrength": "Умераная",
|
||||
"confirmPassword": "Пацвердзіць пароль",
|
||||
"close": "Закрыць",
|
||||
"oopsSomethingWentWrong": "Штосьці пайшло не так.",
|
||||
"selectLanguage": "Выберыце мову",
|
||||
"language": "Мова",
|
||||
"social": "Сацыяльныя сеткі",
|
||||
"security": "Бяспека",
|
||||
"lockscreen": "Экран блакіроўкі",
|
||||
"searchHint": "Пошук...",
|
||||
"search": "Пошук",
|
||||
"noResult": "Няма вынікаў",
|
||||
"addCode": "Дадаць код",
|
||||
"scanAQrCode": "Сканіраваць QR-код",
|
||||
"edit": "Рэдагаваць",
|
||||
"share": "Абагуліць",
|
||||
"shareCodes": "Абагуліць коды",
|
||||
"restore": "Аднавіць",
|
||||
"error": "Памылка",
|
||||
"doThisLater": "Зрабіць гэта пазней",
|
||||
"saveKey": "Захаваць ключ",
|
||||
"save": "Захаваць",
|
||||
"send": "Адправіць",
|
||||
"back": "Назад",
|
||||
"createAccount": "Стварыць уліковы запіс",
|
||||
"password": "Пароль",
|
||||
"privacyPolicyTitle": "Палітыка прыватнасці",
|
||||
"termsOfServicesTitle": "Умовы",
|
||||
"encryption": "Шыфраванне",
|
||||
"setPasswordTitle": "Задаць пароль",
|
||||
"changePasswordTitle": "Змяніць пароль",
|
||||
"resetPasswordTitle": "Скінуць пароль",
|
||||
"encryptionKeys": "Ключы шыфравання",
|
||||
"continueLabel": "Працягнуць",
|
||||
"insecureDevice": "Небяспечная прылада",
|
||||
"howItWorks": "Як гэта працуе",
|
||||
"logInLabel": "Увайсці",
|
||||
"logout": "Выйсці",
|
||||
"yesLogout": "Так, выйсці",
|
||||
"exit": "Выхад",
|
||||
"theme": "Тема",
|
||||
"lightTheme": "Светлая",
|
||||
"darkTheme": "Цёмная",
|
||||
"systemTheme": "Сістэманая",
|
||||
"invalidKey": "Памылковы ключ",
|
||||
"tryAgain": "Паспрабуйце яшчэ раз",
|
||||
"confirm": "Пацвердзіць",
|
||||
"emailYourLogs": "Адправіць журналы",
|
||||
"exportLogs": "Экспартаваць журналы",
|
||||
"about": "Аб праграме",
|
||||
"privacy": "Прыватнасць",
|
||||
"terms": "Умовы",
|
||||
"checkStatus": "Праверыць статус",
|
||||
"downloadUpdate": "Спампаваць",
|
||||
"update": "Абнавіць",
|
||||
"checking": "Праверка...",
|
||||
"warning": "Папярэджанне",
|
||||
"iUnderStand": "Ясна",
|
||||
"@iUnderStand": {
|
||||
"description": "Text for the button to confirm the user understands the warning"
|
||||
},
|
||||
"importSuccessTitle": "Ура!",
|
||||
"sorry": "Прабачце",
|
||||
"pendingSyncs": "Папярэджанне",
|
||||
"resendEmail": "Адправіць ліст яшчэ раз",
|
||||
"manualSort": "Карыстальніцкая",
|
||||
"editOrder": "Рэдагаваць заказ",
|
||||
"mostFrequentlyUsed": "Часта выкарыстоўваюцца",
|
||||
"mostRecentlyUsed": "Нядаўна выкарыстаныя",
|
||||
"activeSessions": "Актыўныя сеансы",
|
||||
"terminate": "Перарваць",
|
||||
"thisDevice": "Гэта прылада",
|
||||
"incorrectCode": "Няправільны код",
|
||||
"enterPassword": "Увядзіце пароль",
|
||||
"encrypted": "Зашыфравана",
|
||||
"plainText": "Звычайны тэкст",
|
||||
"export": "Экспартаваць",
|
||||
"singIn": "Увайсці",
|
||||
"compactMode": "Кампактны рэжым",
|
||||
"shouldHideCode": "Схаваць коды",
|
||||
"androidBiometricHint": "Праверыць ідэнтыфікацыю",
|
||||
"@androidBiometricHint": {
|
||||
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricSuccess": "Паспяхова",
|
||||
"@androidBiometricSuccess": {
|
||||
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidCancelButton": "Скасаваць",
|
||||
"@androidCancelButton": {
|
||||
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
|
||||
},
|
||||
"goToSettings": "Перайсці ў налады",
|
||||
"@goToSettings": {
|
||||
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
|
||||
},
|
||||
"iOSOkButton": "OK",
|
||||
"@iOSOkButton": {
|
||||
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
|
||||
},
|
||||
"doNotSignOut": "Не выходзіць",
|
||||
"passkey": "Ключ доступу",
|
||||
"loginSessionExpired": "Сеанс завяршыўся",
|
||||
"pinText": "Замацаваць",
|
||||
"unpinText": "Адмацаваць",
|
||||
"pinned": "Замацавана",
|
||||
"tags": "Тэгі",
|
||||
"createNewTag": "Стварыць новы тэг",
|
||||
"tag": "Тэг",
|
||||
"create": "Стварыць",
|
||||
"editTag": "Рэдагаванне тэг",
|
||||
"deleteTagTitle": "Выдаліць тэг?",
|
||||
"viewRawCodes": "Паглядзець неапрацаваныя коды",
|
||||
"rawCodes": "Неапрацаваныя коды",
|
||||
"rawCodeData": "Неапрацаваныя даныя кода",
|
||||
"appLock": "Блакіроўка праграмы",
|
||||
"autoLock": "Аўтаблакіроўка",
|
||||
"immediately": "Адразу",
|
||||
"reEnterPin": "Увядзіце PIN-код яшчэ раз",
|
||||
"next": "Далей",
|
||||
"tapToUnlock": "Націсніце для разблакіроўкі",
|
||||
"deviceLock": "Блакіроўка прылады",
|
||||
"hideContent": "Схаваць змест",
|
||||
"pinLock": "Блакіроўка PIN'ам",
|
||||
"enterPin": "Увядзіце PIN-код",
|
||||
"setNewPin": "Задаць новы PIN",
|
||||
"deselectAll": "Зняць выбар з усіх",
|
||||
"selectAll": "Выбраць усе",
|
||||
"plainHTML": "Звычайны HTML",
|
||||
"advanced": "Пашыраныя",
|
||||
"algorithm": "Алгарытм",
|
||||
"type": "Тып",
|
||||
"period": "Перыяд",
|
||||
"digits": "Лічбы"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"loggingOut": "Väljalogimine...",
|
||||
"useRecoveryKey": "Kasuta taastevõtit"
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import "package:flutter/widgets.dart";
|
||||
import "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
|
||||
export "package:flutter_gen/gen_l10n/app_localizations.dart";
|
||||
|
||||
extension AppLocalizationsX on BuildContext {
|
||||
AppLocalizations get l10n => AppLocalizations.of(this);
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
import 'package:ente_auth/ente_theme_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
|
||||
void showToast(
|
||||
BuildContext context,
|
||||
String message, {
|
||||
toastLength = Toast.LENGTH_LONG,
|
||||
iOSDismissOnTap = true,
|
||||
}) async {
|
||||
try {
|
||||
await Fluttertoast.cancel();
|
||||
await Fluttertoast.showToast(
|
||||
msg: message,
|
||||
toastLength: toastLength,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
timeInSecForIosWeb: 1,
|
||||
backgroundColor: Theme.of(context).colorScheme.toastBackgroundColor,
|
||||
textColor: Theme.of(context).colorScheme.toastTextColor,
|
||||
fontSize: 16.0,
|
||||
);
|
||||
} on MissingPluginException catch (_) {
|
||||
Widget toast = Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(25.0),
|
||||
color: Theme.of(context).colorScheme.toastBackgroundColor,
|
||||
),
|
||||
child: Text(
|
||||
message,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.toastTextColor,
|
||||
fontSize: 16.0,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
final fToast = FToast();
|
||||
fToast.init(context);
|
||||
|
||||
fToast.showToast(
|
||||
child: toast,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
toastDuration: const Duration(seconds: 2),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void showShortToast(context, String message) {
|
||||
showToast(context, message, toastLength: Toast.LENGTH_SHORT);
|
||||
}
|
||||
@@ -44,8 +44,7 @@ jobs:
|
||||
# If triggered by a tag, checkout photosd-$tag from the source
|
||||
# repository. Otherwise checkout $source (default: "main").
|
||||
repository: ente-io/ente
|
||||
ref:
|
||||
"${{ startsWith(github.ref, 'refs/tags/v') &&
|
||||
ref: "${{ startsWith(github.ref, 'refs/tags/v') &&
|
||||
format('photosd-{0}', github.ref_name) || ( inputs.source
|
||||
|| 'main' ) }}"
|
||||
|
||||
@@ -110,8 +109,7 @@ jobs:
|
||||
env:
|
||||
# macOS notarization credentials key details
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD:
|
||||
${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
# Windows Azure Trusted Signing related values
|
||||
# https://www.electron.build/code-signing-win#using-azure-trusted-signing-beta
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"tabWidth": 4,
|
||||
"proseWrap": "always",
|
||||
"objectWrap": "collapse",
|
||||
"plugins": [
|
||||
"prettier-plugin-organize-imports",
|
||||
|
||||
@@ -144,21 +144,10 @@ watcher for the watch folders functionality.
|
||||
|
||||
## Pinned
|
||||
|
||||
- `electron-builder` is pinned to 26.0.16 because of
|
||||
https://github.com/electron-userland/electron-builder/issues/9161#issuecomment-2977829326
|
||||
|
||||
- `electron-builder` is pinned to 26.0.14 because of a new error when building:
|
||||
|
||||
> Detected file
|
||||
> "Contents/Resources/app.asar.unpacked/node_modules/onnxruntime-node/bin/napi-v3/darwin/arm64/libonnxruntime.1.20.1.dylib"
|
||||
> that's the same in both x64 and arm64 builds and not covered by the
|
||||
> x64ArchFiles rule: "undefined" failedTask=build stackTrace=Error: Detected
|
||||
> file
|
||||
> "Contents/Resources/app.asar.unpacked/node_modules/onnxruntime-node/bin/napi-v3/darwin/arm64/libonnxruntime.1.20.1.dylib"
|
||||
> that's the same in both x64 and arm64 builds and not covered by the
|
||||
> x64ArchFiles rule: "undefined"
|
||||
- `electron-builder` is pinned to 26.0.14 because of
|
||||
https://github.com/electron-userland/electron-builder/issues/9161
|
||||
|
||||
To reproduce this locally, add `x64ArchFiles: "ffmpeg"` to
|
||||
`electron-builder.yml`, then run `node_modules/.bin/electron-builder --mac`
|
||||
`electron-builder.yml`, then run `node_modules/.bin/electron-builder --mac`.
|
||||
|
||||
- `electron-store` is pinned to 8.2.0 because subsequent versions are ESM only.
|
||||
|
||||
@@ -21,9 +21,6 @@
|
||||
"lint-fix": "yarn prettier --write --log-level warn . && yarn eslint && yarn tsc",
|
||||
"prepare": "node scripts/vips.js"
|
||||
},
|
||||
"resolutions": {
|
||||
"jackspeak": "2.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"any-shell-escape": "^0.1.1",
|
||||
"auto-launch": "^5.0.6",
|
||||
@@ -38,25 +35,25 @@
|
||||
"lru-cache": "^11.1.0",
|
||||
"next-electron-server": "^1.0.0",
|
||||
"node-stream-zip": "^1.15.0",
|
||||
"onnxruntime-node": "^1.20.1",
|
||||
"onnxruntime-node": "1.22.0-rev",
|
||||
"zod": "^3.25.67"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.29.0",
|
||||
"@eslint/js": "^9.30.1",
|
||||
"@tsconfig/node22": "^22.0.2",
|
||||
"@types/auto-launch": "^5.0.5",
|
||||
"ajv": "^8.17.1",
|
||||
"concurrently": "^9.1.2",
|
||||
"concurrently": "^9.2.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^37.1.0",
|
||||
"electron-builder": "26.0.14",
|
||||
"eslint": "^9",
|
||||
"prettier": "3.5.3",
|
||||
"prettier": "3.6.2",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"prettier-plugin-packagejson": "^2.5.15",
|
||||
"prettier-plugin-packagejson": "^2.5.17",
|
||||
"shx": "^0.4.0",
|
||||
"typescript": "^5.8.3",
|
||||
"typescript-eslint": "^8.34.1"
|
||||
"typescript-eslint": "^8.35.1"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"productName": "ente"
|
||||
|
||||
@@ -175,10 +175,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
|
||||
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
|
||||
|
||||
"@eslint/js@^9.29.0":
|
||||
version "9.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56"
|
||||
integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==
|
||||
"@eslint/js@^9.30.1":
|
||||
version "9.30.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.30.1.tgz#ebe9dd52a38345784c486300175a28c6013c088d"
|
||||
integrity sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==
|
||||
|
||||
"@eslint/object-schema@^2.1.4":
|
||||
version "2.1.4"
|
||||
@@ -212,12 +212,17 @@
|
||||
dependencies:
|
||||
"@isaacs/balanced-match" "^4.0.1"
|
||||
|
||||
"@isaacs/fs-minipass@^4.0.0":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
|
||||
integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
|
||||
"@isaacs/cliui@^8.0.2":
|
||||
version "8.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
|
||||
integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
|
||||
dependencies:
|
||||
minipass "^7.0.4"
|
||||
string-width "^5.1.2"
|
||||
string-width-cjs "npm:string-width@^4.2.0"
|
||||
strip-ansi "^7.0.1"
|
||||
strip-ansi-cjs "npm:strip-ansi@^6.0.1"
|
||||
wrap-ansi "^8.1.0"
|
||||
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
|
||||
|
||||
"@malept/cross-spawn-promise@^2.0.0":
|
||||
version "2.0.0"
|
||||
@@ -390,78 +395,78 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz#56cf35b89383eaf2bdcf602f5bbdac6dbb11e51b"
|
||||
integrity sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==
|
||||
"@typescript-eslint/eslint-plugin@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz#06b1129fe26d6532abd58fb2b3fe9810bd016935"
|
||||
integrity sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.34.1"
|
||||
"@typescript-eslint/type-utils" "8.34.1"
|
||||
"@typescript-eslint/utils" "8.34.1"
|
||||
"@typescript-eslint/visitor-keys" "8.34.1"
|
||||
"@typescript-eslint/scope-manager" "8.35.1"
|
||||
"@typescript-eslint/type-utils" "8.35.1"
|
||||
"@typescript-eslint/utils" "8.35.1"
|
||||
"@typescript-eslint/visitor-keys" "8.35.1"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^7.0.0"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/parser@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.34.1.tgz#f102357ab3a02d5b8aa789655905662cc5093067"
|
||||
integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==
|
||||
"@typescript-eslint/parser@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.35.1.tgz#787312e80f0f337d85f4c2a569411c469e852d44"
|
||||
integrity sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.34.1"
|
||||
"@typescript-eslint/types" "8.34.1"
|
||||
"@typescript-eslint/typescript-estree" "8.34.1"
|
||||
"@typescript-eslint/visitor-keys" "8.34.1"
|
||||
"@typescript-eslint/scope-manager" "8.35.1"
|
||||
"@typescript-eslint/types" "8.35.1"
|
||||
"@typescript-eslint/typescript-estree" "8.35.1"
|
||||
"@typescript-eslint/visitor-keys" "8.35.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/project-service@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.34.1.tgz#20501f8b87202c45f5e70a5b24dcdcb8fe12d460"
|
||||
integrity sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==
|
||||
"@typescript-eslint/project-service@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.35.1.tgz#815bb771f2f6c97780e44299434ece3c2e526127"
|
||||
integrity sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==
|
||||
dependencies:
|
||||
"@typescript-eslint/tsconfig-utils" "^8.34.1"
|
||||
"@typescript-eslint/types" "^8.34.1"
|
||||
"@typescript-eslint/tsconfig-utils" "^8.35.1"
|
||||
"@typescript-eslint/types" "^8.35.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz#727ea43441f4d23d5c73d34195427d85042e5117"
|
||||
integrity sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==
|
||||
"@typescript-eslint/scope-manager@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz#b19f9be65c8d1059e88a323a1a6567dbfe0a1a4e"
|
||||
integrity sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.34.1"
|
||||
"@typescript-eslint/visitor-keys" "8.34.1"
|
||||
"@typescript-eslint/types" "8.35.1"
|
||||
"@typescript-eslint/visitor-keys" "8.35.1"
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz#d6abb1b1e9f1f1c83ac92051c8fbf2dbc4dc9f5e"
|
||||
integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==
|
||||
"@typescript-eslint/tsconfig-utils@8.35.1", "@typescript-eslint/tsconfig-utils@^8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz#c2db8714c181cc0700216c1a2e3cf55719c58006"
|
||||
integrity sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==
|
||||
|
||||
"@typescript-eslint/type-utils@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz#df860d8edefbfe142473ea4defb7408edb0c379e"
|
||||
integrity sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==
|
||||
"@typescript-eslint/type-utils@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz#4f9a07d6efa0e617a67e1890d28117e68ce154bd"
|
||||
integrity sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.34.1"
|
||||
"@typescript-eslint/utils" "8.34.1"
|
||||
"@typescript-eslint/typescript-estree" "8.35.1"
|
||||
"@typescript-eslint/utils" "8.35.1"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.34.1.tgz#565a46a251580dae674dac5aafa8eb14b8322a35"
|
||||
integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==
|
||||
"@typescript-eslint/types@8.35.1", "@typescript-eslint/types@^8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.35.1.tgz#4344dcf934495bbf25a9f83a06dd9fe2acf15780"
|
||||
integrity sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz#befdb042a6bc44fdad27429b2d3b679c80daad71"
|
||||
integrity sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==
|
||||
"@typescript-eslint/typescript-estree@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz#b80e85fcb6bfbcbacb3224b1367f6ca3f03e6183"
|
||||
integrity sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==
|
||||
dependencies:
|
||||
"@typescript-eslint/project-service" "8.34.1"
|
||||
"@typescript-eslint/tsconfig-utils" "8.34.1"
|
||||
"@typescript-eslint/types" "8.34.1"
|
||||
"@typescript-eslint/visitor-keys" "8.34.1"
|
||||
"@typescript-eslint/project-service" "8.35.1"
|
||||
"@typescript-eslint/tsconfig-utils" "8.35.1"
|
||||
"@typescript-eslint/types" "8.35.1"
|
||||
"@typescript-eslint/visitor-keys" "8.35.1"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
@@ -469,22 +474,22 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/utils@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.34.1.tgz#f98c9b0c5cae407e34f5131cac0f3a74347a398e"
|
||||
integrity sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==
|
||||
"@typescript-eslint/utils@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.35.1.tgz#a9a0ceeb81c9d132f3f75537ad2ca7f6ca266523"
|
||||
integrity sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.7.0"
|
||||
"@typescript-eslint/scope-manager" "8.34.1"
|
||||
"@typescript-eslint/types" "8.34.1"
|
||||
"@typescript-eslint/typescript-estree" "8.34.1"
|
||||
"@typescript-eslint/scope-manager" "8.35.1"
|
||||
"@typescript-eslint/types" "8.35.1"
|
||||
"@typescript-eslint/typescript-estree" "8.35.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.34.1":
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz#28a1987ea3542ccafb92aa792726a304b39531cf"
|
||||
integrity sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==
|
||||
"@typescript-eslint/visitor-keys@8.35.1":
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz#aac78ab2265dd11927bc6af3f9c5a021bbc1670a"
|
||||
integrity sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.34.1"
|
||||
"@typescript-eslint/types" "8.35.1"
|
||||
eslint-visitor-keys "^4.2.1"
|
||||
|
||||
"@xmldom/xmldom@^0.8.8":
|
||||
@@ -507,6 +512,11 @@ acorn@^8.12.0:
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
|
||||
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
|
||||
|
||||
adm-zip@^0.5.16:
|
||||
version "0.5.16"
|
||||
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.16.tgz#0b5e4c779f07dedea5805cdccb1147071d94a909"
|
||||
integrity sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==
|
||||
|
||||
agent-base@6, agent-base@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||
@@ -573,6 +583,11 @@ ansi-regex@^5.0.1:
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-regex@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
|
||||
integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
|
||||
|
||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||
@@ -580,6 +595,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
dependencies:
|
||||
color-convert "^2.0.1"
|
||||
|
||||
ansi-styles@^6.1.0:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
|
||||
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
|
||||
|
||||
any-shell-escape@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/any-shell-escape/-/any-shell-escape-0.1.1.tgz#d55ab972244c71a9a5e1ab0879f30bf110806959"
|
||||
@@ -852,11 +872,6 @@ chownr@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||
|
||||
chownr@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
|
||||
integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
|
||||
|
||||
chromium-pickle-js@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
|
||||
@@ -972,10 +987,10 @@ concat-stream@^2.0.0:
|
||||
readable-stream "^3.0.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
concurrently@^9.1.2:
|
||||
version "9.1.2"
|
||||
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.2.tgz#22d9109296961eaee773e12bfb1ce9a66bc9836c"
|
||||
integrity sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==
|
||||
concurrently@^9.2.0:
|
||||
version "9.2.0"
|
||||
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.2.0.tgz#233e3892ceb0b5db9fd49e9c8c739737a7b638b5"
|
||||
integrity sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==
|
||||
dependencies:
|
||||
chalk "^4.1.2"
|
||||
lodash "^4.17.21"
|
||||
@@ -1184,6 +1199,11 @@ dotenv@^16.4.4, dotenv@^16.4.5:
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
|
||||
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
|
||||
|
||||
eastasianwidth@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||
|
||||
ejs@^3.1.8:
|
||||
version "3.1.10"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b"
|
||||
@@ -1262,6 +1282,11 @@ emoji-regex@^8.0.0:
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
emoji-regex@^9.2.2:
|
||||
version "9.2.2"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
|
||||
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
|
||||
|
||||
encoding@^0.1.13:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
|
||||
@@ -1672,7 +1697,7 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob@^10.3.12, glob@^10.3.7:
|
||||
glob@^10.3.12:
|
||||
version "10.4.5"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
|
||||
integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
|
||||
@@ -2027,12 +2052,12 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
jackspeak@2.1.1, jackspeak@^3.1.2:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.1.1.tgz#2a42db4cfbb7e55433c28b6f75d8b796af9669cd"
|
||||
integrity sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw==
|
||||
jackspeak@^3.1.2:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
|
||||
integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
|
||||
dependencies:
|
||||
cliui "^8.0.1"
|
||||
"@isaacs/cliui" "^8.0.2"
|
||||
optionalDependencies:
|
||||
"@pkgjs/parseargs" "^0.11.0"
|
||||
|
||||
@@ -2362,7 +2387,7 @@ minipass@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
|
||||
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
|
||||
|
||||
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2:
|
||||
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
|
||||
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
|
||||
@@ -2375,14 +2400,6 @@ minizlib@^2.1.1, minizlib@^2.1.2:
|
||||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
minizlib@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012"
|
||||
integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==
|
||||
dependencies:
|
||||
minipass "^7.0.4"
|
||||
rimraf "^5.0.5"
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||
@@ -2395,11 +2412,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
mkdirp@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
|
||||
integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
|
||||
|
||||
ms@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
@@ -2492,18 +2504,19 @@ onetime@^5.1.0, onetime@^5.1.2:
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
onnxruntime-common@1.20.1:
|
||||
version "1.20.1"
|
||||
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.20.1.tgz#b42e317d4d6728745b9e8089617c8cd938d312dc"
|
||||
integrity sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==
|
||||
onnxruntime-common@1.22.0:
|
||||
version "1.22.0"
|
||||
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.22.0.tgz#27d7d06ebb6c7d3dd773dfa21b6fa2ae86f64983"
|
||||
integrity sha512-vcuaNWgtF2dGQu/EP5P8UI5rEPEYqXG2sPPe5j9lg2TY/biJF8eWklTMwlDO08iuXq48xJo0awqIpK5mPG+IxA==
|
||||
|
||||
onnxruntime-node@^1.20.1:
|
||||
version "1.20.1"
|
||||
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.20.1.tgz#a5ba0bd160aeccdb4b7d36fbc2f6a97bde1f7843"
|
||||
integrity sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==
|
||||
onnxruntime-node@1.22.0-rev:
|
||||
version "1.22.0-rev"
|
||||
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.22.0-rev.tgz#068c85adb6b938cbaaef2ffba4b35fcac3e683f4"
|
||||
integrity sha512-9vh50/mnwauFUex0NYyyLf9pmRp8q6DVMG8K+xtoXv68SSB9bESa1bEbWLqfUncgB3XucQaOV+wfMPcqANMYhQ==
|
||||
dependencies:
|
||||
onnxruntime-common "1.20.1"
|
||||
tar "^7.0.1"
|
||||
adm-zip "^0.5.16"
|
||||
global-agent "^3.0.0"
|
||||
onnxruntime-common "1.22.0"
|
||||
|
||||
optionator@^0.9.3:
|
||||
version "0.9.4"
|
||||
@@ -2683,18 +2696,18 @@ prettier-plugin-organize-imports@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f"
|
||||
integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==
|
||||
|
||||
prettier-plugin-packagejson@^2.5.15:
|
||||
version "2.5.15"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.15.tgz#7ea880d4bb1681b5331ea7044efd3d653776f469"
|
||||
integrity sha512-2QSx6y4IT6LTwXtCvXAopENW5IP/aujC8fobEM2pDbs0IGkiVjW/ipPuYAHuXigbNe64aGWF7vIetukuzM3CBw==
|
||||
prettier-plugin-packagejson@^2.5.17:
|
||||
version "2.5.17"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.17.tgz#98df28819bb5071c9330eec31ff029acf538f96e"
|
||||
integrity sha512-1WYvhTix+4EMYZQYSjAxb6+KTCULINuHUTBcxYa2ipoUS9Y2zJVjE3kuZ5I7ZWIFqyK8xpwYIunXqN5eiT7Hew==
|
||||
dependencies:
|
||||
sort-package-json "3.2.1"
|
||||
sort-package-json "3.3.1"
|
||||
synckit "0.11.8"
|
||||
|
||||
prettier@3.5.3:
|
||||
version "3.5.3"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5"
|
||||
integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==
|
||||
prettier@3.6.2:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
|
||||
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
|
||||
|
||||
proc-log@^2.0.1:
|
||||
version "2.0.1"
|
||||
@@ -2838,13 +2851,6 @@ rimraf@^3.0.2:
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
rimraf@^5.0.5:
|
||||
version "5.0.10"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c"
|
||||
integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==
|
||||
dependencies:
|
||||
glob "^10.3.7"
|
||||
|
||||
roarr@^2.15.3:
|
||||
version "2.15.4"
|
||||
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
|
||||
@@ -3025,10 +3031,10 @@ sort-object-keys@^1.1.3:
|
||||
resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45"
|
||||
integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==
|
||||
|
||||
sort-package-json@3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-3.2.1.tgz#889f3bdf43ceeff5fa4278a7c53ae5b1520d287e"
|
||||
integrity sha512-rTfRdb20vuoAn7LDlEtCqOkYfl2X+Qze6cLbNOzcDpbmKEhJI30tTN44d5shbKJnXsvz24QQhlCm81Bag7EOKg==
|
||||
sort-package-json@3.3.1:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-3.3.1.tgz#c31c0b4cd970b7fde6b1d0197f8b768584e2e65c"
|
||||
integrity sha512-awjhQR2Iy5UN3NuguAK5+RezcEuUg9Ra4O8y2Aj+DlJa7MywyHaipAPf9bu4qqFj0hsYHHoT9sS3aV7Ucu728g==
|
||||
dependencies:
|
||||
detect-indent "^7.0.1"
|
||||
detect-newline "^4.0.1"
|
||||
@@ -3068,6 +3074,15 @@ stat-mode@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
|
||||
integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
@@ -3077,6 +3092,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^5.0.1, string-width@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
|
||||
dependencies:
|
||||
eastasianwidth "^0.2.0"
|
||||
emoji-regex "^9.2.2"
|
||||
strip-ansi "^7.0.1"
|
||||
|
||||
string_decoder@^1.1.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
||||
@@ -3084,6 +3108,13 @@ string_decoder@^1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.2.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
@@ -3091,6 +3122,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
|
||||
dependencies:
|
||||
ansi-regex "^6.0.1"
|
||||
|
||||
strip-eof@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
@@ -3146,18 +3184,6 @@ tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.2.1:
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
tar@^7.0.1:
|
||||
version "7.4.3"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
|
||||
integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==
|
||||
dependencies:
|
||||
"@isaacs/fs-minipass" "^4.0.0"
|
||||
chownr "^3.0.0"
|
||||
minipass "^7.1.2"
|
||||
minizlib "^3.0.1"
|
||||
mkdirp "^3.0.1"
|
||||
yallist "^5.0.0"
|
||||
|
||||
temp-file@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7"
|
||||
@@ -3254,14 +3280,14 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
|
||||
|
||||
typescript-eslint@^8.34.1:
|
||||
version "8.34.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.34.1.tgz#4bab64b298531b9f6f3ff59b41a7161321ef8cd6"
|
||||
integrity sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==
|
||||
typescript-eslint@^8.35.1:
|
||||
version "8.35.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.35.1.tgz#4ddeda5c5777a7bd86516280d8099ada06055f2f"
|
||||
integrity sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.34.1"
|
||||
"@typescript-eslint/parser" "8.34.1"
|
||||
"@typescript-eslint/utils" "8.34.1"
|
||||
"@typescript-eslint/eslint-plugin" "8.35.1"
|
||||
"@typescript-eslint/parser" "8.35.1"
|
||||
"@typescript-eslint/utils" "8.35.1"
|
||||
|
||||
typescript@^5.4.3, typescript@^5.8.3:
|
||||
version "5.8.3"
|
||||
@@ -3359,6 +3385,15 @@ word-wrap@^1.2.5:
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
@@ -3368,6 +3403,15 @@ wrap-ansi@^7.0.0:
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
|
||||
dependencies:
|
||||
ansi-styles "^6.1.0"
|
||||
string-width "^5.0.1"
|
||||
strip-ansi "^7.0.1"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
@@ -3388,11 +3432,6 @@ yallist@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yallist@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
|
||||
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
|
||||
|
||||
yargs-parser@^21.1.1:
|
||||
version "21.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
{
|
||||
"tabWidth": 4,
|
||||
"proseWrap": "always"
|
||||
"tabWidth": 4
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ export default defineConfig({
|
||||
},
|
||||
},
|
||||
sidebar: sidebar,
|
||||
outline: {
|
||||
level: [2, 3],
|
||||
},
|
||||
socialLinks: [
|
||||
{ icon: "github", link: "https://github.com/ente-io/ente/" },
|
||||
{ icon: "twitter", link: "https://twitter.com/enteio" },
|
||||
|
||||
@@ -207,22 +207,22 @@ export const sidebar = [
|
||||
text: "Migration",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Introduction", link: "/auth/migration-guides/" },
|
||||
{ text: "Introduction", link: "/auth/migration/" },
|
||||
{
|
||||
text: "From Authy",
|
||||
link: "/auth/migration-guides/authy/",
|
||||
link: "/auth/migration/authy/",
|
||||
},
|
||||
{
|
||||
text: "From Steam",
|
||||
link: "/auth/migration-guides/steam/",
|
||||
link: "/auth/migration/steam/",
|
||||
},
|
||||
{
|
||||
text: "From others",
|
||||
link: "/auth/migration-guides/import",
|
||||
link: "/auth/migration/import",
|
||||
},
|
||||
{
|
||||
text: "Exporting your data",
|
||||
link: "/auth/migration-guides/export",
|
||||
link: "/auth/migration/export",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -239,76 +239,84 @@ export const sidebar = [
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Self hosting",
|
||||
text: "Self-hosting",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Getting started", link: "/self-hosting/" },
|
||||
{
|
||||
text: "Connecting to custom server",
|
||||
link: "/self-hosting/guides/custom-server/",
|
||||
text: "Quickstart",
|
||||
link: "/self-hosting/",
|
||||
},
|
||||
{
|
||||
text: "Creating accounts",
|
||||
link: "/self-hosting/creating-accounts",
|
||||
},
|
||||
{
|
||||
text: "Configuring your server",
|
||||
link: "/self-hosting/museum",
|
||||
},
|
||||
{
|
||||
text: "Configuring S3",
|
||||
link: "/self-hosting/guides/configuring-s3",
|
||||
},
|
||||
{
|
||||
text: "Reverse proxy",
|
||||
link: "/self-hosting/reverse-proxy",
|
||||
},
|
||||
{
|
||||
text: "Guides",
|
||||
text: "Installation",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Introduction", link: "/self-hosting/guides/" },
|
||||
{
|
||||
text: "Administering your server",
|
||||
link: "/self-hosting/guides/admin",
|
||||
text: "Requirements",
|
||||
link: "/self-hosting/installation/requirements",
|
||||
},
|
||||
{
|
||||
text: "Configuring CLI for your instance",
|
||||
link: "/self-hosting/guides/selfhost-cli",
|
||||
text: "Quickstart script (Recommended)",
|
||||
link: "/self-hosting/installation/quickstart",
|
||||
},
|
||||
{
|
||||
text: "Running Ente from source",
|
||||
link: "/self-hosting/guides/from-source",
|
||||
text: "Docker Compose",
|
||||
link: "/self-hosting/installation/compose",
|
||||
},
|
||||
{
|
||||
text: "Running Ente without Docker",
|
||||
link: "/self-hosting/guides/standalone-ente",
|
||||
text: "Manual setup (without Docker)",
|
||||
link: "/self-hosting/installation/manual",
|
||||
},
|
||||
{
|
||||
text: "Environment variables and defaults",
|
||||
link: "/self-hosting/installation/env-var",
|
||||
},
|
||||
{
|
||||
text: "Configuration",
|
||||
link: "/self-hosting/installation/config",
|
||||
},
|
||||
{
|
||||
text: "Post-installation steps",
|
||||
link: "/self-hosting/installation/post-install/",
|
||||
},
|
||||
{
|
||||
text: "Upgrade",
|
||||
link: "/self-hosting/installation/upgrade",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Troubleshooting",
|
||||
text: "Administration",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "General",
|
||||
link: "/self-hosting/troubleshooting/misc",
|
||||
text: "User management",
|
||||
link: "/self-hosting/administration/users",
|
||||
},
|
||||
{
|
||||
text: "Bucket CORS",
|
||||
link: "/self-hosting/troubleshooting/bucket-cors",
|
||||
text: "Reverse proxy",
|
||||
link: "/self-hosting/administration/reverse-proxy",
|
||||
},
|
||||
{
|
||||
text: "Uploads",
|
||||
link: "/self-hosting/troubleshooting/uploads",
|
||||
text: "Object storage",
|
||||
link: "/self-hosting/administration/object-storage",
|
||||
},
|
||||
{
|
||||
text: "Docker / quickstart",
|
||||
link: "/self-hosting/troubleshooting/docker",
|
||||
text: "Ente CLI",
|
||||
link: "/self-hosting/administration/cli",
|
||||
},
|
||||
{
|
||||
text: "Ente CLI secrets",
|
||||
link: "/self-hosting/troubleshooting/keyring",
|
||||
text: "Backup",
|
||||
link: "/self-hosting/administration/backup",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Development",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Building mobile apps",
|
||||
link: "/self-hosting/development/mobile-build",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -321,31 +329,30 @@ export const sidebar = [
|
||||
link: "/self-hosting/guides/tailscale",
|
||||
},
|
||||
{
|
||||
text: "Ente with External S3",
|
||||
link: "/self-hosting/guides/external-s3",
|
||||
text: "Running Ente using systemd",
|
||||
link: "/self-hosting/guides/systemd",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
text: "Troubleshooting",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "General", link: "/self-hosting/faq/" },
|
||||
{
|
||||
text: "Verification code",
|
||||
link: "/self-hosting/faq/otp",
|
||||
text: "General",
|
||||
link: "/self-hosting/troubleshooting/misc",
|
||||
},
|
||||
{
|
||||
text: "Shared albums",
|
||||
link: "/self-hosting/faq/sharing",
|
||||
text: "Docker / quickstart",
|
||||
link: "/self-hosting/troubleshooting/docker",
|
||||
},
|
||||
{
|
||||
text: "Backups",
|
||||
link: "/self-hosting/faq/backup",
|
||||
text: "Uploads",
|
||||
link: "/self-hosting/troubleshooting/uploads",
|
||||
},
|
||||
{
|
||||
text: "Environment variables",
|
||||
link: "/self-hosting/faq/environment",
|
||||
text: "Ente CLI",
|
||||
link: "/self-hosting/troubleshooting/cli",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -12,7 +12,7 @@ This page outlines the key features available in Ente Auth.
|
||||
Ente Auth supports the icon pack provided by
|
||||
[simple-icons](https://github.com/simple-icons/simple-icons). If an icon you
|
||||
need is missing, please refer to the
|
||||
[docs/adding-icons](https://github.com/ente-io/ente/blob/main/auth/docs/adding-icons.md)
|
||||
[docs/adding-icons](https://github.com/ente-io/ente/blob/main/mobile/apps/auth/docs/adding-icons.md)
|
||||
guide for instructions on how to contribute.
|
||||
|
||||
### Search
|
||||
@@ -105,8 +105,7 @@ Ente Auth offers various import and export options for your codes.
|
||||
automatically via the CLI.
|
||||
- **Import:** Import codes from various other authentication apps.
|
||||
|
||||
For detailed instructions, refer to the
|
||||
[migration guides](../migration-guides/).
|
||||
For detailed instructions, refer to the [migration guides](../migration/).
|
||||
|
||||
### Deduplicate codes
|
||||
|
||||
@@ -136,4 +135,4 @@ Easily add or share entries using QR codes:
|
||||
right-click (desktop) a code and select "QR". This allows you to easily share
|
||||
the complete entry (including the secret) with others by letting them scan the
|
||||
displayed QR code. This can also be used to easily add the same entry to
|
||||
another authenticatior app or service.
|
||||
another authenticator app or service.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Migrating to Ente Auth
|
||||
description:
|
||||
Guides for migrating your existing 2FA tokens into or out of Ente Auth
|
||||
description: Guides for migrating your existing 2FA tokens into or out of Ente Auth
|
||||
---
|
||||
|
||||
# Migrating to/from Ente Auth
|
||||
@@ -6,7 +6,7 @@ description: >
|
||||
|
||||
# Welcome!
|
||||
|
||||
{width=50% style="margin: 0 auto"}
|
||||
{width=50% style="margin: 0 auto"}
|
||||
|
||||
## Introduction
|
||||
|
||||
@@ -14,16 +14,16 @@ Ente (pronounced en-_tay_) is a end-to-end encrypted platform for privately,
|
||||
reliably, and securely storing your data on the cloud, over which 2 applications
|
||||
have been developed and made available for mobile, web and desktop, namely:
|
||||
|
||||
- **Ente Photos** - An alternative to Google Photos and Apple Photos
|
||||
- **Ente Auth** - A free 2FA alternative to Authy
|
||||
- **Ente Photos** - An alternative to Google Photos and Apple Photos.
|
||||
- **Ente Auth** - A free 2FA alternative to Authy.
|
||||
|
||||
## History
|
||||
|
||||
Ente was the founded by Vishnu Mohandas (he's also Ente's CEO) in response to
|
||||
privacy concerns with major tech companies. The underlying motivation was the
|
||||
understanding that big tech had no incentive to fix their act, but with
|
||||
end-to-end encrypted cross platform apps, there was a way for people to take
|
||||
back control over their own data without sacrificing on features.
|
||||
Ente was founded by Vishnu Mohandas (Ente's CEO) in response to privacy concerns
|
||||
with major tech companies. The underlying motivation was the understanding that
|
||||
big tech had no incentive to fix their act, but with end-to-end encrypted cross
|
||||
platform apps, there was a way for people to take back control over their own
|
||||
data without sacrificing on features.
|
||||
|
||||
### Origin of the name
|
||||
|
||||
@@ -76,7 +76,7 @@ and stay updated:
|
||||
|
||||
If you encounter any issues with any of the products that's not answered by our
|
||||
documentation, please reach out to our team by sending an email to
|
||||
[support@ente.io](mailto:support@ente.io)
|
||||
[support@ente.io](mailto:support@ente.io).
|
||||
|
||||
For community support, please post your queries on
|
||||
[Discord](https://discord.gg/z2YVKkycX3)
|
||||
For community support, please post your queries on our
|
||||
[Discord](https://discord.gg/z2YVKkycX3) server.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Desktop app FAQ
|
||||
description:
|
||||
An assortment of frequently asked questions about Ente Photos desktop app
|
||||
description: An assortment of frequently asked questions about Ente Photos desktop app
|
||||
---
|
||||
|
||||
# Desktop app FAQ
|
||||
@@ -36,4 +35,4 @@ be specific to your distro (e.g. `xdg-desktop-menu forceupdate`).
|
||||
> [!NOTE]
|
||||
>
|
||||
> If you're using an AppImage and not seeing the icon, you'll need to
|
||||
> [enable AppImage desktop integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).
|
||||
> [enable AppImage desktop integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).
|
||||
@@ -67,7 +67,7 @@ reliable as any one can be.
|
||||
If you would like to fund the development of this project, please consider
|
||||
[subscribing](https://ente.io/download).
|
||||
|
||||
## How do I pronounce ente?
|
||||
## How do I pronounce Ente?
|
||||
|
||||
It's like cafe 😊. kaf-_ay_. en-_tay_.
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Security and Privacy FAQ
|
||||
description:
|
||||
Comprehensive information about security and privacy measures in Ente Photos
|
||||
description: Comprehensive information about security and privacy measures in Ente Photos
|
||||
---
|
||||
|
||||
# Security and Privacy FAQ
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Cast
|
||||
description:
|
||||
Casting your photos on to a large screen or a TV or a Chromecast device
|
||||
description: Casting your photos on to a large screen or a TV or a Chromecast device
|
||||
---
|
||||
|
||||
# Cast
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Family plans
|
||||
description:
|
||||
Share your Ente Photos plan with your family members with no extra cost
|
||||
description: Share your Ente Photos plan with your family members with no extra cost
|
||||
---
|
||||
|
||||
# Family plans
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Watch folder
|
||||
description:
|
||||
Automatic syncing of selected folders using the Ente Photos desktop app
|
||||
description: Automatic syncing of selected folders using the Ente Photos desktop app
|
||||
---
|
||||
|
||||
# Watch folders
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Import from local hard disk
|
||||
description:
|
||||
Migrating to Ente Photos by importing data from your local hard disk
|
||||
description: Migrating to Ente Photos by importing data from your local hard disk
|
||||
---
|
||||
|
||||
# Import photos from your local hard disk
|
||||
|
||||
@@ -99,3 +99,17 @@ If you do want to run it from the command line, you can do so by passing the
|
||||
|
||||
For more details, see this upstream issue on
|
||||
[electron](https://github.com/electron/electron/issues/17972).
|
||||
|
||||
### Application reporting offline despite Internet connectivity
|
||||
|
||||
Due to unreliability of usage of `navigator.onLine` in Linux, the app may report that you are offline, even though the internet connection is functional.
|
||||
|
||||
You can resolve the issue by adding a dummy network interface using the following command:
|
||||
|
||||
```shell
|
||||
ip link add dummy0 type dummy
|
||||
ip addr add 10.10.10.1/24 dev dummy0
|
||||
ip link set dummy0 up
|
||||
```
|
||||
|
||||
Once the interface is up, Ente correctly detects that the system is online.
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Files not uploading
|
||||
description:
|
||||
Troubleshooting when files are not uploading from your Ente Photos app
|
||||
description: Troubleshooting when files are not uploading from your Ente Photos app
|
||||
---
|
||||
|
||||
# Files not uploading
|
||||
|
||||
BIN
docs/docs/public/developer-settings-endpoint.png
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
docs/docs/public/developer-settings.png
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
docs/docs/public/onboarding.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/docs/public/sign-up.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
47
docs/docs/self-hosting/administration/backup.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Backups - Self-hosting
|
||||
description: General introduction to backing up your self hosted Ente instance
|
||||
---
|
||||
|
||||
# Backing up your Ente instance
|
||||
|
||||
A functional Ente backend needs three things:
|
||||
|
||||
1. Museum (the API server)
|
||||
2. Postgres (the database)
|
||||
3. Object storage (any S3-compatible object storage)
|
||||
|
||||
Thus, when thinking about backups:
|
||||
|
||||
1. For Museum, you should backup your `museum.yaml`, `credentials.yaml` or any
|
||||
other custom configuration that you created.
|
||||
2. The entire data volume needs to be backed up for the database and object
|
||||
storage.
|
||||
|
||||
A common oversight is taking a lot of care for backing up the object storage,
|
||||
even going as far as enabling replication and backing up the the multiple object
|
||||
storage volumes, but not applying the same care to the database backup.
|
||||
|
||||
While the actual encrypted photos are indeed stored in the object storage,
|
||||
**this encrypted data will not be usable without the database** since the
|
||||
database contains information like a file specific encryption key.
|
||||
|
||||
Viewed differently, to decrypt your data you need three pieces of information:
|
||||
|
||||
1. The encrypted file data itself (which comes from the object storage backup).
|
||||
2. The encrypted file and collection specific encryption keys (which come from
|
||||
the database backup).
|
||||
3. The master key (which comes from your password).
|
||||
|
||||
If you're starting out with self hosting, we recommend keeping plaintext backup
|
||||
of your photos.
|
||||
|
||||
[You can use the CLI or the desktop app to automate this](/photos/faq/export).
|
||||
|
||||
Once you get more comfortable with the various parts, you can try backing up
|
||||
your instance.
|
||||
|
||||
If you rely on your instance backup, ensure that you do full restoration to
|
||||
verify that you are able to access your data.
|
||||
|
||||
As the industry saying goes, a backup without a restore is no backup at all.
|
||||
83
docs/docs/self-hosting/administration/cli.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: Ente CLI for Self-hosted Instance - Self-hosting
|
||||
description: Guide to configuring Ente CLI for Self Hosted Instance
|
||||
---
|
||||
|
||||
# Ente CLI for self-hosted instance
|
||||
|
||||
If you are self-hosting, you can configure Ente CLI to export data & perform
|
||||
basic administrative actions.
|
||||
|
||||
## Step 1: Configure endpoint
|
||||
|
||||
To do this, first configure the CLI to use your server's endpoint.
|
||||
|
||||
Define `config.yaml` and place it in `~/.ente/` or directory specified by
|
||||
`ENTE_CLI_CONFIG_DIR` or directory where Ente CLI is present.
|
||||
|
||||
```yaml
|
||||
# Set the API endpoint to your domain where Museum is being served.
|
||||
endpoint:
|
||||
api: http://localhost:8080
|
||||
```
|
||||
|
||||
## Step 2: Whitelist admins
|
||||
|
||||
You can whitelist administrator users by following this
|
||||
[guide](/self-hosting/administration/users#whitelist-admins).
|
||||
|
||||
## Step 3: Add an account
|
||||
|
||||
::: info You can not create new accounts using Ente CLI.
|
||||
|
||||
You can only log in to your existing accounts.
|
||||
|
||||
To create a new account, use Ente Photos (or Ente Auth) web application, desktop
|
||||
or mobile.
|
||||
|
||||
:::
|
||||
|
||||
You can add your existing account using Ente CLI.
|
||||
|
||||
```shell
|
||||
ente account add
|
||||
```
|
||||
|
||||
This should prompt you for authentication details and export directory. Your
|
||||
account should be added after successful authentication.
|
||||
|
||||
It can be used for exporting data (for plain-text backup), managing Ente Auth
|
||||
and performing administrative actions.
|
||||
|
||||
## Step 4: Increase storage and account validity
|
||||
|
||||
You can use `ente admin update-subscription` to increase storage quota and
|
||||
account validity (duration).
|
||||
|
||||
For infinite storage and validity, use the following command:
|
||||
|
||||
```shell
|
||||
ente admin update-subscription -a <admin-user-mail> -u <user-email-to-update> --no-limit
|
||||
|
||||
# Set a limit
|
||||
ente admin update-subscription -a <admin-user-mail> -u <user-email-to-update> --no-limit False
|
||||
```
|
||||
|
||||
::: info The users must be registered on the server with same e-mail address.
|
||||
|
||||
If the commands are failing, ensure:
|
||||
|
||||
1. `<admin-user-mail>` is whitelisted as administrator user in `museum.yaml`.
|
||||
For more information, check this
|
||||
[guide](/self-hosting/administration/users#whitelist-admins).
|
||||
2. `<user-email-to-update>` is a registered user with completed verification.
|
||||
|
||||
:::
|
||||
|
||||
For more information, check out the documentation for setting
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md)
|
||||
using the CLI.
|
||||
|
||||
## References
|
||||
|
||||
1. [Ente CLI Documentation](https://github.com/ente-io/ente/blob/main/cli/docs/generated)
|
||||
133
docs/docs/self-hosting/administration/object-storage.md
Normal file
@@ -0,0 +1,133 @@
|
||||
---
|
||||
title: Configuring Object Storage - Self-hosting
|
||||
description:
|
||||
Configure Object Storage for storing files along with some troubleshooting
|
||||
tips
|
||||
---
|
||||
|
||||
# Configuring Object Storage
|
||||
|
||||
Ente relies on [S3-compatible](https://docs.aws.amazon.com/s3/) cloud storage
|
||||
for storing files (photos, thumbnails and videos) as objects.
|
||||
|
||||
Ente ships MinIO as S3-compatible storage by default in quickstart and Docker
|
||||
Compose for quick testing.
|
||||
|
||||
This document outlines configuration of S3 buckets and enabling replication for
|
||||
further usage.
|
||||
|
||||
## Museum
|
||||
|
||||
The S3-compatible buckets have to be configured in `museum.yaml` file.
|
||||
|
||||
### General Configuration
|
||||
|
||||
Some of the common configuration that can be done at top-level are:
|
||||
|
||||
1. **SSL Configuration:** If you need to configure SSL (i. e., the buckets are
|
||||
accessible via HTTPS), you'll need to set `s3.are_local_buckets` to `false`.
|
||||
2. **Path-style URLs:** Disabling `s3.are_local_buckets` also switches to the
|
||||
subdomain-style URLs for the buckets. However, some S3 providers such as
|
||||
MinIO do not support this.
|
||||
|
||||
Set `s3.use_path_style_urls` to `true` for such cases.
|
||||
|
||||
### Replication
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> Replication works only if all 3 storage buckets are configured (2 hot and 1
|
||||
> cold storage).
|
||||
>
|
||||
> For more information, check
|
||||
> [this discussion](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970)
|
||||
> and our article on ensuring [reliability](https://ente.io/reliability/).
|
||||
|
||||
Replication is disabled by default in self-hosted instance. Only the first
|
||||
bucket (`b2-eu-cen`) is used.
|
||||
|
||||
Only the names are specifically fixed, you can put any other keys in
|
||||
configuration body.
|
||||
|
||||
Use the `s3.hot_storage.primary` option if you'd like to set one of the other
|
||||
pre-defined buckets as the primary bucket.
|
||||
|
||||
### Bucket configuration
|
||||
|
||||
The keys `b2-eu-cen` (primary storage), `wasabi-eu-central-2-v3` (secondary
|
||||
storage) and `scw-eu-fr-v3` (cold storage) are hardcoded, however, the keys and
|
||||
secret can be anything.
|
||||
|
||||
It has no relation to Backblaze, Wasabi or Scaleway.
|
||||
|
||||
Each bucket's endpoint, region, key and secret should be configured accordingly
|
||||
if using an external bucket.
|
||||
|
||||
A sample configuration for `b2-eu-cen` is provided, which can be used for other
|
||||
2 buckets as well:
|
||||
|
||||
```yaml
|
||||
b2-eu-cen:
|
||||
key: <key>
|
||||
secret: <secret>
|
||||
endpoint: localhost:3200
|
||||
region: eu-central-2
|
||||
bucket: b2-eu-cen
|
||||
```
|
||||
|
||||
## CORS (Cross-Origin Resource Sharing)
|
||||
|
||||
If you cannot upload a photo due to CORS error, you need to fix the CORS
|
||||
configuration of your bucket.
|
||||
|
||||
Use the content provided below for creating a `cors.json` file:
|
||||
|
||||
```json
|
||||
{
|
||||
"CORSRules": [
|
||||
{
|
||||
"AllowedOrigins": ["*"],
|
||||
"AllowedHeaders": ["*"],
|
||||
"AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"],
|
||||
"MaxAgeSeconds": 3000,
|
||||
"ExposeHeaders": ["Etag"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You may have to change the `AllowedOrigins` to allow only certain origins (your
|
||||
Ente web apps and Museum) for security.
|
||||
|
||||
Assuming you have AWS CLI on your system and that you have configured it with
|
||||
your access key and secret, you can execute the below command to set bucket
|
||||
CORS. Make sure to enter the right path for the `cors.json` file.
|
||||
|
||||
```shell
|
||||
aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json
|
||||
```
|
||||
|
||||
### MinIO
|
||||
|
||||
Assuming you have configured an alias for MinIO account using the command:
|
||||
|
||||
```shell
|
||||
mc alias set storage-account-alias minio-endpoint minio-key minio-secret
|
||||
```
|
||||
|
||||
where,
|
||||
|
||||
1. `storage-account-alias` is a valid storage account alias name
|
||||
2. `minio-endpoint` is the endpoint where MinIO is being served without the
|
||||
protocol (http or https). Example: `localhost:3200`
|
||||
3. `minio-key` is the MinIO username defined in `MINIO_ROOT_USER`
|
||||
4. `minio-secret` is the MinIO password defined in `MINIO_PASSWORD`
|
||||
|
||||
To set the `AllowedOrigins` Header, you can use the following command:.
|
||||
|
||||
```shell
|
||||
mc admin config set storage-account-alias api cors_allow_origin="*"
|
||||
```
|
||||
|
||||
You can create also `.csv` file and dump the list of origins you would like to
|
||||
allow and replace the `*` with path to the CSV file.
|
||||
101
docs/docs/self-hosting/administration/reverse-proxy.md
Normal file
@@ -0,0 +1,101 @@
|
||||
---
|
||||
Title: Configuring Reverse Proxy - Self-hosting
|
||||
Description: Configuring reverse proxy for Museum and other services
|
||||
---
|
||||
|
||||
# Reverse proxy
|
||||
|
||||
Reverse proxy helps in making application services accessible via the Internet
|
||||
without exposing multiple ports for various services.
|
||||
|
||||
It also allows configuration of HTTPS through SSL certificate management.
|
||||
|
||||
We highly recommend using HTTPS for Museum (Ente's server). For security
|
||||
reasons, Museum will not accept incoming HTTP traffic.
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
1. **Reverse Proxy:** We recommend using Caddy for simplicity of configuration
|
||||
and automatic certificate generation and management, although you can use
|
||||
other alternatives such as NGINX, Traefik, etc.
|
||||
|
||||
Install Caddy using the following command on Debian/Ubuntu-based systems:
|
||||
|
||||
```shell
|
||||
sudo apt install caddy
|
||||
```
|
||||
|
||||
Start the service and enable it to start upon system boot.
|
||||
|
||||
```shell
|
||||
sudo systemctl start caddy
|
||||
sudo systemctl enable caddy
|
||||
```
|
||||
|
||||
## Step 1: Configure A or AAAA records
|
||||
|
||||
Set up the appropriate records for the endpoints in your DNS management
|
||||
dashboard (usually associated with your domain registrar).
|
||||
|
||||
`A` or `AAAA` records pointing to your server's IP address are sufficient.
|
||||
|
||||
DNS propagation can take a few minutes to take effect.
|
||||
|
||||

|
||||
|
||||
## Step 2: Configure reverse proxy
|
||||
|
||||
After installing Caddy, `Caddyfile` is created at `/etc/caddy/`. Edit
|
||||
`/etc/caddy/Caddyfile` to configure reverse proxies.
|
||||
|
||||
You can edit the minimal configuration provided below for your own needs.
|
||||
|
||||
> yourdomain.tld is an example. Replace it with your own domain.
|
||||
|
||||
```groovy
|
||||
# For Museum
|
||||
api.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:8080
|
||||
}
|
||||
|
||||
# For Ente Photos web app
|
||||
web.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:3000
|
||||
}
|
||||
|
||||
# For Ente Accounts web app
|
||||
accounts.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:3001
|
||||
}
|
||||
|
||||
# For Ente Albums web app
|
||||
albums.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:3002
|
||||
}
|
||||
|
||||
# For Ente Auth web app
|
||||
auth.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:3003
|
||||
}
|
||||
|
||||
# For Ente Cast web app
|
||||
cast.ente.yourdomain.tld {
|
||||
reverse_proxy http://localhost:3004
|
||||
}
|
||||
```
|
||||
|
||||
## Step 3: Reload reverse proxy
|
||||
|
||||
Reload Caddy for changes to take effect.
|
||||
|
||||
```shell
|
||||
sudo systemctl caddy reload
|
||||
```
|
||||
|
||||
## Step 4: Verify the setup
|
||||
|
||||
Ente Photos web app should be up on https://web.ente.yourdomain.tld and Museum
|
||||
at https://api.ente.yourdomain.tld.
|
||||
|
||||
> [!TIP] If you are using other reverse proxy servers such as NGINX, Traefik,
|
||||
> etc., please check out their documentation.
|
||||
126
docs/docs/self-hosting/administration/users.md
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
title: User Management - Self-hosting
|
||||
description: Guide to configuring Ente CLI for Self Hosted Instance
|
||||
---
|
||||
|
||||
# User Management
|
||||
|
||||
You may wish to self-host Ente for your family or close circle. In such cases,
|
||||
you may wish to enable administrative access for few users, disable new
|
||||
registrations, manage one-time tokens (OTTs), etc.
|
||||
|
||||
This document covers the details on how you can administer users on your server.
|
||||
|
||||
## Whitelist admins
|
||||
|
||||
The administrator users have to be explicitly whitelisted in `museum.yaml`. You
|
||||
can achieve this the following steps:
|
||||
|
||||
1. Connect to `ente_db` (the database used for storing data related to Ente).
|
||||
|
||||
```shell
|
||||
# Change the DB name and DB user name if you use different
|
||||
# values.
|
||||
# If using Docker
|
||||
|
||||
docker exec -it <postgres-ente-container-name>
|
||||
psql -U pguser -d ente_db
|
||||
|
||||
# Or when using psql directly
|
||||
psql -U pguser -d ente_db
|
||||
```
|
||||
|
||||
2. Get the user ID of the first user by running the following SQL query:
|
||||
|
||||
```sql
|
||||
SELECT * from users;
|
||||
```
|
||||
|
||||
3. Edit `internal.admins` or `internal.admin` (if you wish to whitelist only
|
||||
single user) in `museum.yaml` to add the user ID you wish to whitelist.
|
||||
|
||||
- For multiple admins:
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admins:
|
||||
- <user_id>
|
||||
```
|
||||
|
||||
- For single admin:
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admin: <user_id>
|
||||
```
|
||||
|
||||
4. Restart Museum by restarting the cluster
|
||||
|
||||
::: tip Restart your Compose clusters whenever you make changes
|
||||
|
||||
If you have edited the Compose file or configuration file (`museum.yaml`), make
|
||||
sure to recreate the cluster's containers.
|
||||
|
||||
You can do this by the following command:
|
||||
|
||||
```shell
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Increase storage and account validity
|
||||
|
||||
You can use Ente CLI for increasing storage quota and account validity for users
|
||||
on your instance. Check this guide for more
|
||||
[information](/self-hosting/administration/cli#step-4-increase-storage-and-account-validity)
|
||||
|
||||
## Handle user verification codes
|
||||
|
||||
Ente currently relies on verification codes for completion of registration.
|
||||
|
||||
These are accessible in server logs. If using Docker Compose, they can be
|
||||
accessed by running `sudo docker compose logs` in the cluster folder where
|
||||
Compose file resides.
|
||||
|
||||
However, you may wish to streamline this workflow. You can follow one of the 2
|
||||
methods if you wish to have many users in the system.
|
||||
|
||||
### Use hardcoded OTTs
|
||||
|
||||
You can configure to use hardcoded OTTs only for specific emails, or based on
|
||||
suffix.
|
||||
|
||||
A sample configuration for the same is provided below, which is to be used in
|
||||
`museum.yaml`:
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
hardcoded-ott:
|
||||
emails:
|
||||
- "example@example.org,123456"
|
||||
local-domain-suffix: "@example.org"
|
||||
local-domain-value: 012345
|
||||
```
|
||||
|
||||
This sets OTT to 123456 for the email address example@example.com and 012345 for
|
||||
emails having @example.com as suffix.
|
||||
|
||||
### Send email with verification code
|
||||
|
||||
You can configure SMTP for sending verification code e-mails to users, if you do
|
||||
not wish to hardcode OTTs and have larger audience.
|
||||
|
||||
For more information on configuring email, check out the
|
||||
[email configuration](/self-hosting/installation/config#email) section.
|
||||
|
||||
## Disable registrations
|
||||
|
||||
For security purposes, you may choose to disable registrations on your instance.
|
||||
You can disable new registrations by using the following configuration in
|
||||
`museum.yaml`.
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
disable-registration: true
|
||||
```
|
||||
@@ -1,27 +0,0 @@
|
||||
---
|
||||
title: Creating accounts
|
||||
description: Creating accounts on your deployment
|
||||
---
|
||||
|
||||
# Creating accounts
|
||||
|
||||
Once Ente is up and running, the Ente Photos web app will be accessible on
|
||||
`http://localhost:3000`. Open this URL in your browser and proceed with creating
|
||||
an account.
|
||||
|
||||
The default API endpoint for museum will be `localhost:8080`.
|
||||
|
||||

|
||||
|
||||
To complete your account registration you will need to enter a 6-digit
|
||||
verification code.
|
||||
|
||||
This code can be found in the server logs, which should already be shown in your
|
||||
quickstart terminal. Alternatively, you can open the server logs with the
|
||||
following command from inside the `my-ente` folder:
|
||||
|
||||
```sh
|
||||
sudo docker compose logs
|
||||
```
|
||||
|
||||

|
||||
@@ -1,65 +0,0 @@
|
||||
---
|
||||
title: Backups
|
||||
description: General introduction to backing up your self hosted Ente instance
|
||||
---
|
||||
|
||||
# Backing up your Ente instance
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> This is not meant to be a comprehensive and bullet proof guide. There are many
|
||||
> moving parts, and small mistakes might make your backups unusable.
|
||||
>
|
||||
> Please treat this only as a general introduction. And remember to test your
|
||||
> restores.
|
||||
|
||||
At the minimum, a functional Ente backend needs three things:
|
||||
|
||||
1. Museum (the API server)
|
||||
2. Postgres (the database)
|
||||
3. Object storage (any S3-compatible object storage)
|
||||
|
||||
When thinking about backups, this translates into backing up the relevant state
|
||||
from each of these:
|
||||
|
||||
1. For museum, you'd want to backup your `museum.yaml`, `credentials.yaml` or
|
||||
any other custom configuration that you created. In particular, you should
|
||||
backup the
|
||||
[secrets that are specific to your instance](https://github.com/ente-io/ente/blob/74377a93d8e20e969d9a2531f32f577b5f0ef090/server/configurations/local.yaml#L188)
|
||||
(`key.encryption`, `key.hash` and `jwt.secret`).
|
||||
|
||||
2. For postgres, the entire data volume needs to be backed up.
|
||||
|
||||
3. For object storage, the entire data volume needs to be backed up.
|
||||
|
||||
A common oversight is taking a lot of care for backing up the object storage,
|
||||
even going as far as enabling replication and backing up the the multiple object
|
||||
storage volumes, but not applying the same care to the database backup.
|
||||
|
||||
While the actual encrypted photos are indeed stored in the object storage,
|
||||
**this encrypted data will not be usable without the database** since the
|
||||
database contains information like a file specific encryption key.
|
||||
|
||||
Viewed differently, to decrypt your data you need three pieces of information:
|
||||
|
||||
1. The encrypted file data itself (which comes from the object storage backup).
|
||||
|
||||
2. The ([encrypted](https://ente.io/architecture/)) file and collection specific
|
||||
encryption keys (which come from the database backup).
|
||||
|
||||
3. The master key (which comes from your password).
|
||||
|
||||
---
|
||||
|
||||
If you're starting out with self hosting, our recommendation is to start by
|
||||
keeping a plaintext backup of your photos.
|
||||
[You can use the CLI or the desktop app to automate this](/photos/faq/export).
|
||||
|
||||
Once you get more comfortable with the various parts, you can try backing up
|
||||
your instance. As a reference,
|
||||
[this document outlines how Ente itself treats backups](https://ente.io/reliability).
|
||||
|
||||
If you stop doing plaintext backups and instead rely on your instance backup,
|
||||
ensure that you do the full restore process also to verify you can get back your
|
||||
data. As the industry saying goes, a backup without a restore is no backup at
|
||||
all.
|
||||
@@ -1,52 +0,0 @@
|
||||
---
|
||||
title: "Environment Variables and Ports"
|
||||
description:
|
||||
"Information about all the Environment Variables needed to run Ente"
|
||||
---
|
||||
|
||||
# Environment variables and ports
|
||||
|
||||
A self-hosted Ente instance requires specific endpoints in both Museum (the
|
||||
server) and web apps. This document outlines the essential environment variables
|
||||
and port mappings of the web apps.
|
||||
|
||||
Here's the list of important variables that a self hoster should know about:
|
||||
|
||||
### Museum
|
||||
|
||||
1. `NEXT_PUBLIC_ENTE_ENDPOINT`
|
||||
|
||||
The above environment variable is used to configure Museums endpoint. Where
|
||||
Museum is running and which port it is listening on. This endpoint should be
|
||||
configured for all the apps to connect to your self hosted endpoint.
|
||||
|
||||
All the apps (regardless of platform) by default connect to api.ente.io - which
|
||||
is our production instance of Museum.
|
||||
|
||||
### Web Apps
|
||||
|
||||
> [!IMPORTANT] Web apps don't need to be configured with the below endpoints.
|
||||
> Web app environment variables are being documented here just so that the users
|
||||
> know everything in detail. Checkout
|
||||
> [Configuring your Server](/self-hosting/museum) to configure endpoints for
|
||||
> particular app.
|
||||
|
||||
In Ente, all the web apps are separate NextJS applications. Therefore, they are
|
||||
all configured via environment variables. The photos app (Ente Photos) has
|
||||
information about and connects to other web apps like albums, cast, etc.
|
||||
|
||||
1. `NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT`
|
||||
|
||||
This environment variable is used to configure and declare the endpoint for the
|
||||
Albums web app.
|
||||
|
||||
## Ports
|
||||
|
||||
The below format is according to how ports are mapped in Docker.
|
||||
Typically,`<host>:<container-port>`
|
||||
|
||||
1. `8080:8080`: Museum (Ente's server)
|
||||
2. `3000:3000`: Ente Photos web app
|
||||
3. `3001:3001`: Ente Accounts web app
|
||||
4. `3003:3003`: [Ente Auth web app](https://ente.io/auth/)
|
||||
5. `3004:3004`: [Ente Cast web app](http://ente.io/cast)
|
||||
@@ -1,47 +0,0 @@
|
||||
---
|
||||
title: FAQ - Self hosting
|
||||
description: Frequently asked questions about self hosting Ente
|
||||
---
|
||||
|
||||
# Frequently Asked Questions
|
||||
|
||||
### Do Ente Photos and Ente Auth share the same backend?
|
||||
|
||||
Yes. The apps share the same backend, the same database and the same object
|
||||
storage namespace. The same user account works for both of them.
|
||||
|
||||
### Can I just self host Ente Auth?
|
||||
|
||||
Yes, if you wish, you can self-host the server and use it only for the 2FA auth
|
||||
app. The starter Docker compose will work fine for either Photos or Auth (or
|
||||
both!).
|
||||
|
||||
> You currently don't need to configure the S3 object storage (e.g. minio
|
||||
> containers) if you're only using your self hosted Ente instance for auth.
|
||||
|
||||
### Can I use the server with _X_ as the object storage?
|
||||
|
||||
Yes. As long as whatever X you're using provides an S3 compatible API, you can
|
||||
use it as the underlying object storage. For example, the starter self-hosting
|
||||
Docker compose file we offer uses MinIO, and on our production deployments we
|
||||
use Backblaze/Wasabi/Scaleway. But that's not the full list - as long as the
|
||||
service you intend to use has a S3 compatible API, it can be used.
|
||||
|
||||
### How do I increase storage space for users on my self hosted instance?
|
||||
|
||||
See the [guide for administering your server](/self-hosting/guides/admin). In
|
||||
particular, you can use the `ente admin update-subscription` CLI command to
|
||||
increase the
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md)
|
||||
of accounts on your instance.
|
||||
|
||||
### How can I become an admin on my self hosted instance?
|
||||
|
||||
The first user you create on your instance is treated as an admin.
|
||||
|
||||
If you want, you can modify this behaviour by providing an explicit list of
|
||||
admins in the [configuration](/self-hosting/guides/admin#becoming-an-admin).
|
||||
|
||||
### Can I disable registration of new accounts on my self hosted instance?
|
||||
|
||||
Yes. See `internal.disable-registration` in local.yaml.
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
title: Verification code
|
||||
description: Getting the OTP for a self hosted Ente
|
||||
---
|
||||
|
||||
# Verification code
|
||||
|
||||
The self-hosted Ente by default does not send out emails, so you can pick the
|
||||
verification code by:
|
||||
|
||||
- Getting it from the server logs, or
|
||||
|
||||
- Reading it from the DB (otts table)
|
||||
|
||||
The easiest option when getting started is to look for it in the server (museum)
|
||||
logs. If you're already running the docker compose cluster using the quickstart
|
||||
script, you should be already seeing the logs in your terminal. Otherwise you
|
||||
can go to the folder (e.g. `my-ente`) where your `compose.yaml` is, then run
|
||||
`docker compose logs museum --follow`. Once you can see the logs, look for a
|
||||
line like:
|
||||
|
||||
```
|
||||
... Skipping sending email to email@example.com: *Verification code: 112089*
|
||||
```
|
||||
|
||||
That is the verification code.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> You can also configure your instance to send out emails so that you can get
|
||||
> your verification code via emails by using the `smtp` section in the config.
|
||||
|
||||
You can also set pre-defined hardcoded OTTs for certain users when running
|
||||
locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott`
|
||||
configuration setting to it. See
|
||||
[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml)
|
||||
in the server source code for details about how to define this.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> If you're not able to get the OTP with the above methods, make sure that you
|
||||
> are actually connecting to your self hosted instance and not to Ente's
|
||||
> production servers. e.g. you can use the network requests tab in the browser
|
||||
> console to verify that the API requests are going to your server instead of
|
||||
> `api.ente.io`.
|
||||
@@ -1,104 +0,0 @@
|
||||
---
|
||||
title: Album sharing
|
||||
description: Getting album sharing to work using an self-hosted Ente
|
||||
---
|
||||
|
||||
# Is public sharing available for self-hosted instances?
|
||||
|
||||
Yes.
|
||||
|
||||
You'll need to run two instances of the web app, one is regular web app, but
|
||||
another one is the same code but running on a different origin (i.e. on a
|
||||
different hostname or different port).
|
||||
|
||||
Then, you need to tell the regular web app to use your second instance to
|
||||
service public links. You can do this by setting the
|
||||
`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` to point to your second instance when running
|
||||
or building the regular web app.
|
||||
|
||||
For more details, see
|
||||
[.env](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env) and
|
||||
[.env.development](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env.development).
|
||||
|
||||
As a concrete example, assuming we have a Ente server running on
|
||||
`localhost:8080`, we can start two instances of the web app, passing them
|
||||
`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` that points to the origin
|
||||
("scheme://host[:port]") of the second "albums" instance.
|
||||
|
||||
The first one, the normal web app
|
||||
|
||||
```sh
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \
|
||||
NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \
|
||||
yarn dev:photos
|
||||
```
|
||||
|
||||
The second one, the same code but acting as the "albums" app (the only
|
||||
difference is the port it is running on):
|
||||
|
||||
```sh
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \
|
||||
NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \
|
||||
yarn dev:albums
|
||||
```
|
||||
|
||||
If you also want to change the prefix (the origin) in the generated public
|
||||
links, to use your custom albums endpoint in the generated public link instead
|
||||
of albums.ente.io, set `apps.public-albums` property in museum's configuration
|
||||
|
||||
For example, when running using the starter docker compose file, you can do this
|
||||
by creating a `museum.yaml` and defining the following configuration there:
|
||||
|
||||
```yaml
|
||||
apps:
|
||||
public-albums: http://localhost:3002
|
||||
```
|
||||
|
||||
(For more details, see
|
||||
[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml)
|
||||
in the server's source code).
|
||||
|
||||
## Dockerfile example
|
||||
|
||||
Here is an example of a Dockerfile by @Dylanger on our community Discord. This
|
||||
runs a standalone self-hosted version of the public albums app in production
|
||||
mode.
|
||||
|
||||
```Dockerfile
|
||||
FROM node:20-alpine as builder
|
||||
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
|
||||
ARG NEXT_PUBLIC_ENTE_ENDPOINT=https://your.ente.example.org
|
||||
ARG NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your.albums.example.org
|
||||
|
||||
RUN yarn install && yarn build
|
||||
|
||||
FROM node:20-alpine
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/apps/photos/out .
|
||||
|
||||
RUN npm install -g serve
|
||||
|
||||
ENV PORT=3000
|
||||
EXPOSE ${PORT}
|
||||
|
||||
CMD serve -s . -l tcp://0.0.0.0:${PORT}
|
||||
```
|
||||
|
||||
Note that this only runs the public albums app, but the same principle can be
|
||||
used to run both the normal Ente photos app and the public albums app. There is
|
||||
a slightly more involved example showing how to do this also provided by in a
|
||||
community contributed guide about
|
||||
[configuring external S3](/self-hosting/guides/external-s3).
|
||||
|
||||
You will also want to tell museum about your custom shared albums endpoint so
|
||||
that it uses that instead of the default URL when creating share links. You can
|
||||
configure that in museum's `config.yaml`:
|
||||
|
||||
```
|
||||
apps:
|
||||
public-albums: https://your.albums.example.org
|
||||
```
|
||||
@@ -1,88 +0,0 @@
|
||||
---
|
||||
title: Server admin
|
||||
description: Administering your custom self-hosted Ente instance using the CLI
|
||||
---
|
||||
|
||||
## Becoming an admin
|
||||
|
||||
By default, the first user (and only the first user) created on the system is
|
||||
considered as an admin.
|
||||
|
||||
This facility is provided as a convenience for people who are getting started
|
||||
with self hosting. For more serious deployments, we recommend creating an
|
||||
explicit whitelist of admins.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> The first user is only treated as the admin if the list of admins in the
|
||||
> configuration is empty.
|
||||
>
|
||||
> Also, if at some point you delete the first user, then you will need to define
|
||||
> a whitelist to make some other user as the admin if you wish (since the first
|
||||
> account has been deleted).
|
||||
|
||||
To whitelist the user IDs that can perform admin actions on the server, use the
|
||||
following steps:
|
||||
|
||||
- Create a `museum.yaml` in the directory where you're starting museum from. For
|
||||
example, if you're running using `docker compose up`, then this file should be
|
||||
in the same directory as `compose.yaml` (generally, `server/museum.yaml`).
|
||||
|
||||
> Docker might've created an empty `museum.yaml` _directory_ on your machine
|
||||
> previously. If so, delete that empty directory and create a new file named
|
||||
> `museum.yaml`.
|
||||
|
||||
- In this `museum.yaml` we can add overrides over the default configuration.
|
||||
|
||||
For whitelisting the admin userIDs we need to define an `internal.admins`. See
|
||||
the "internal" section in
|
||||
[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml)
|
||||
in the server source code for details about how to define this.
|
||||
|
||||
Here is an example. Suppose we wanted to whitelist a user with ID
|
||||
`1580559962386440`, we can create the following `museum.yaml`
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admins:
|
||||
- 1580559962386440
|
||||
```
|
||||
|
||||
You can use
|
||||
[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md)
|
||||
command to find the user id of any account.
|
||||
|
||||
# Administering your custom server
|
||||
|
||||
> [!NOTE] For the first user (admin) to perform administrative actions using the
|
||||
> CLI, their userID must be whitelisted in the `museum.yaml` configuration file
|
||||
> under `internal.admins`. While the first user is automatically granted admin
|
||||
> privileges on the server, this additional step is required for CLI operations.
|
||||
|
||||
You can use
|
||||
[Ente's CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) to
|
||||
administer your self hosted server.
|
||||
|
||||
First we need to get your CLI to connect to your custom server. Define a
|
||||
config.yaml and put it either in the same directory as CLI or path defined in
|
||||
env variable `ENTE_CLI_CONFIG_PATH`
|
||||
|
||||
```yaml
|
||||
endpoint:
|
||||
api: "http://localhost:8080"
|
||||
```
|
||||
|
||||
Now you should be able to
|
||||
[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md),
|
||||
and subsequently increase the
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md)
|
||||
using the CLI.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> The CLI command to add an account does not create Ente accounts. It only adds
|
||||
> existing accounts to the list of (existing) accounts that the CLI can use.
|
||||
|
||||
## Backups
|
||||
|
||||
See this [FAQ](/self-hosting/faq/backup).
|
||||
@@ -1,123 +0,0 @@
|
||||
---
|
||||
title: Configuring S3 buckets
|
||||
description:
|
||||
Configure S3 endpoints to fix upload errors or use your self hosted ente
|
||||
from outside localhost
|
||||
---
|
||||
|
||||
# Architecture
|
||||
|
||||

|
||||
|
||||
There are three components involved in uploading a file:
|
||||
|
||||
1. The client (e.g. the web app or the mobile app)
|
||||
2. Ente's server (museum)
|
||||
3. The S3-compatible object storage (e.g. MinIO in the default starter)
|
||||
|
||||
For the uploads to work, all three of them need to be able to reach each other.
|
||||
This is because the client uploads directly to the object storage.
|
||||
|
||||
A file upload flows as follows:
|
||||
|
||||
1. Client that wants to upload a file asks museum where it should upload the
|
||||
file to
|
||||
2. museum creates pre-signed URLs for the S3 bucket that was configured
|
||||
3. Client directly uploads to the S3 buckets these URLs
|
||||
4. Client finally informs museum that a file has been uploaded to this URL
|
||||
|
||||
The upshot of this is that _both_ the client and museum should be able to reach
|
||||
your S3 bucket.
|
||||
|
||||
## Configuring S3
|
||||
|
||||
The URL for the S3 bucket is configured in
|
||||
[scripts/compose/credentials.yaml](https://github.com/ente-io/ente/blob/main/server/scripts/compose/credentials.yaml#L10).
|
||||
|
||||
You can edit this file directly while testing, though it is more robust to
|
||||
create a `museum.yaml` (in the same folder as the Docker compose file) and to
|
||||
setup your custom configuration there.
|
||||
|
||||
> [!TIP] For more details about these configuration objects, see the
|
||||
> documentation for the `s3` object in
|
||||
> [configurations/local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml).
|
||||
|
||||
By default, you only need to configure the endpoint for the first bucket.
|
||||
|
||||
The Docker compose file is shipped with MinIO as the self hosted S3 compatible
|
||||
storage. By default, MinIO server is served on `localhost:3200` and the MinIO UI
|
||||
on `localhost:3201`.
|
||||
|
||||
For example, in a localhost network situation, the way this connection works is,
|
||||
museum (`1`) and MinIO (`2`) run on the same Docker network and the web app
|
||||
(`3`) will also be hosted on your localhost. This enables all the three
|
||||
components of the setup to communicate with each other seamlessly.
|
||||
|
||||
The same principle applies if you're deploying to your custom domain.
|
||||
|
||||
## Replication
|
||||
|
||||

|
||||
|
||||
<p align="center">Community contributed diagram of Ente's replication process</p>
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> As of now, replication works only if all the 3 storage type needs are
|
||||
> fulfilled (1 hot, 1 cold and 1 glacier storage).
|
||||
>
|
||||
> [Reference](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970)
|
||||
|
||||
If you're wondering why there are 3 buckets on the MinIO UI - that's because our
|
||||
production instance uses these to perform
|
||||
[replication](https://ente.io/reliability/).
|
||||
|
||||
If you're also wondering about why the bucket names are specifically what they
|
||||
are, it's because that is exactly what we are using on our production instance.
|
||||
We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary
|
||||
hot) and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded.
|
||||
Hence, the same hardcoded configuration is applied when you self host Ente.
|
||||
|
||||
In a self hosted Ente instance replication is turned off by default. When
|
||||
replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the
|
||||
other two are ignored. Only the names here are specifically fixed, but in the
|
||||
configuration body you can put any other keys. It does not have any relation
|
||||
with `b2`, `wasabi` or even `scaleway`.
|
||||
|
||||
Use the `s3.hot_storage.primary` option if you'd like to set one of the other
|
||||
predefined buckets as the primary bucket.
|
||||
|
||||
## SSL Configuration
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets`
|
||||
> (which disables SSL in the default starter compose template).
|
||||
|
||||
Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for
|
||||
the buckets. However, not all S3 providers support these. In particular, MinIO
|
||||
does not work with these in default configuration. So in such cases you'll also
|
||||
need to enable `s3.use_path_style_urls`.
|
||||
|
||||
## Summary
|
||||
|
||||
Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or
|
||||
some such IP / hostname that is accessible from both where you are running the
|
||||
Ente clients (e.g. the mobile app) and also from within the Docker compose
|
||||
cluster.
|
||||
|
||||
### Example
|
||||
|
||||
An example `museum.yaml` when you're trying to connect to museum running on your
|
||||
computer from your phone on the same WiFi network:
|
||||
|
||||
```yaml
|
||||
s3:
|
||||
are_local_buckets: true
|
||||
b2-eu-cen:
|
||||
key: test
|
||||
secret: testtest
|
||||
endpoint: http://<YOUR-WIFI-IP>:3200
|
||||
region: eu-central-2
|
||||
bucket: b2-eu-cen
|
||||
```
|
||||
@@ -1,115 +0,0 @@
|
||||
---
|
||||
title: Custom server
|
||||
description: Using a custom self-hosted server with Ente client apps and CLI
|
||||
---
|
||||
|
||||
# Connecting to a custom server
|
||||
|
||||
You can modify various Ente client apps and CLI to connect to a self hosted
|
||||
custom server endpoint.
|
||||
|
||||
[[toc]]
|
||||
|
||||
## Mobile
|
||||
|
||||
The pre-built Ente apps from GitHub / App Store / Play Store / F-Droid can be
|
||||
easily configured to use a custom server.
|
||||
|
||||
You can tap 7 times on the onboarding screen to bring up a page where you can
|
||||
configure the endpoint the app should be connecting to.
|
||||
|
||||

|
||||
|
||||
## Desktop and web
|
||||
|
||||
Same as the mobile app, you can tap 7 times on the onboarding screen to
|
||||
configure the endpoint the app should connect to.
|
||||
|
||||
<div align="center">
|
||||
|
||||
{width=400px}
|
||||
|
||||
</div>
|
||||
|
||||
This works on both the desktop app and web app (if you deploy on your own).
|
||||
|
||||
To make it easier to identify when a custom server is being used, app will
|
||||
thereafter show the endpoint in use (if not Ente's production server) at the
|
||||
bottom of the login prompt:
|
||||
|
||||

|
||||
|
||||
Similarly, it'll be shown at other screens during the login flow. After login,
|
||||
you can also see it at the bottom of the sidebar.
|
||||
|
||||
Note that the custom server configured this way is cleared when you reset the
|
||||
state during logout. In particular, the app also does a reset when you press the
|
||||
change email button during the login flow.
|
||||
|
||||
### Building from source
|
||||
|
||||
Alternatively (e.g. if you don't wish to configure this setting and just want to
|
||||
change the endpoint the client connects to by default), you can build the app
|
||||
from source and use the `NEXT_PUBLIC_ENTE_ENDPOINT` environment variable to tell
|
||||
it which server to connect to. For example:
|
||||
|
||||
```sh
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos
|
||||
```
|
||||
|
||||
For more details, see
|
||||
[hosting the web app](https://help.ente.io/self-hosting/guides/web-app).
|
||||
|
||||
## CLI
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> You can download the CLI from
|
||||
> [here](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0)
|
||||
|
||||
Define a config.yaml and put it either in the same directory as where you run
|
||||
the CLI from ("current working directory"), or in the path defined in env
|
||||
variable `ENTE_CLI_CONFIG_PATH`:
|
||||
|
||||
```yaml
|
||||
endpoint:
|
||||
api: "http://localhost:8080"
|
||||
```
|
||||
|
||||
(Another
|
||||
[example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example))
|
||||
|
||||
## Find the hostname of your server
|
||||
|
||||
If you want to access your museum within your own network, you can use the
|
||||
`hostname` command to find a addressable local network hostname or IP for your
|
||||
computer, and then use it by suffixing it with the port number.
|
||||
|
||||
First, run
|
||||
|
||||
```sh
|
||||
hostname
|
||||
```
|
||||
|
||||
The result will look something like this
|
||||
|
||||
```sh
|
||||
my-computer.local
|
||||
```
|
||||
|
||||
You will need to replace the server endpoint with an address that uses your
|
||||
server's hostname and the port number. Here's an example:
|
||||
|
||||
```
|
||||
http://my-computer.local:8080
|
||||
```
|
||||
|
||||
Note that this will only work within your network. To access it from outside the
|
||||
network, you need to use the public IP or hostname.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> If you're having trouble uploading from your mobile app, it is likely that
|
||||
> museum is not able to connect to your S3 storage. See the
|
||||
> [Configuring S3](/self-hosting/guides/configuring-s3) guide for more details.
|
||||
@@ -1,158 +0,0 @@
|
||||
---
|
||||
title: DB Migration
|
||||
description:
|
||||
Migrating your self hosted Postgres 12 database to newer Postgres versions
|
||||
---
|
||||
|
||||
# Migrating Postgres 12 to 15
|
||||
|
||||
The old sample docker compose file used Postgres 12, which is now nearing end of
|
||||
life, so we've updated it to Postgres 15. Postgres major versions changes
|
||||
require a migration step. This document mentions some approaches you can use.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> Ente itself does not use any specific Postgres 12 or Postgres 15 features, and
|
||||
> will talk to either happily. It should also work with newer Postgres versions,
|
||||
> but let us know if you run into any problems and we'll update this page.
|
||||
|
||||
### Taking a backup
|
||||
|
||||
`docker compose exec` allows us to run a command against a running container. We
|
||||
can use it to run the `pg_dumpall` command on the postgres container to create a
|
||||
plaintext backup.
|
||||
|
||||
Assuming your cluster is already running, and you are in the `ente/server`
|
||||
directory, you can run the following (this command uses the default credentials,
|
||||
you'll need to change these to match your setup):
|
||||
|
||||
```sh
|
||||
docker compose exec postgres env PGPASSWORD=pgpass PGUSER=pguser PG_DB=ente_db pg_dumpall >pg12.backup.sql
|
||||
```
|
||||
|
||||
This will produce a `pg12.backup.sql` in your current directory. You can open it
|
||||
in a text editor (it can be huge!) to verify that it looks correct.
|
||||
|
||||
We won't be needing this file, this backup is recommended just in case something
|
||||
goes amiss with the actual migration.
|
||||
|
||||
> If you need to restore from this plaintext backup, you could subsequently run
|
||||
> something like:
|
||||
>
|
||||
> ```sh
|
||||
> docker compose up postgres
|
||||
> cat pg12.backup.sql | docker compose exec -T postgres env PGPASSWORD=pgpass psql -U pguser -d ente_db
|
||||
> ```
|
||||
|
||||
## The migration
|
||||
|
||||
At the high level, the steps are
|
||||
|
||||
1. Stop your cluster.
|
||||
|
||||
2. Start just the postgres container after changing the image to
|
||||
`pgautoupgrade/pgautoupgrade:15-bookworm`.
|
||||
|
||||
3. Once the in-place migration completes, stop the container, and change the
|
||||
image to `postgres:15`.
|
||||
|
||||
#### 1. Stop the cluster
|
||||
|
||||
Stop your running Ente cluster.
|
||||
|
||||
```sh
|
||||
docker compose down
|
||||
```
|
||||
|
||||
#### 2. Run `pgautoupgrade`
|
||||
|
||||
Modify your `compose.yaml`, changing the image for the "postgres" container from
|
||||
"postgres:12" to "pgautoupgrade/pgautoupgrade:15-bookworm"
|
||||
|
||||
```diff
|
||||
diff a/server/compose.yaml b/server/compose.yaml
|
||||
|
||||
postgres:
|
||||
- image: postgres:12
|
||||
+ image: pgautoupgrade/pgautoupgrade:15-bookworm
|
||||
ports:
|
||||
```
|
||||
|
||||
[pgautoupgrade](https://github.com/pgautoupgrade/docker-pgautoupgrade) is a
|
||||
community docker image that performs an in-place migration.
|
||||
|
||||
After making the change, run only the `postgres` container in the cluster
|
||||
|
||||
```sh
|
||||
docker compose up postgres
|
||||
```
|
||||
|
||||
The container will start and peform an in-place migration. Once it is done, it
|
||||
will start postgres normally. You should see something like this is the logs
|
||||
|
||||
```
|
||||
postgres-1 | Automatic upgrade process finished with no errors reported
|
||||
...
|
||||
postgres-1 | ... starting PostgreSQL 15...
|
||||
```
|
||||
|
||||
At this point, you can stop the container (`CTRL-C`).
|
||||
|
||||
#### 3. Finish by changing image
|
||||
|
||||
Modify `compose.yaml` again, changing the image to "postgres:15".
|
||||
|
||||
```diff
|
||||
diff a/server/compose.yaml b/server/compose.yaml
|
||||
|
||||
postgres:
|
||||
- image: pgautoupgrade/pgautoupgrade:15-bookworm
|
||||
+ image: postgres:15
|
||||
ports:
|
||||
```
|
||||
|
||||
And cleanup the temporary containers by
|
||||
|
||||
```sh
|
||||
docker compose down --remove-orphans
|
||||
```
|
||||
|
||||
Migration is now complete. You can start your Ente cluster normally.
|
||||
|
||||
```sh
|
||||
docker compose up
|
||||
```
|
||||
|
||||
## Migration elsewhere
|
||||
|
||||
The above instructions are for Postgres running inside docker, as the sample
|
||||
docker compose file does. There are myriad other ways to run Postgres, and the
|
||||
migration sequence then will depend on your exact setup.
|
||||
|
||||
Two common approaches are
|
||||
|
||||
1. Backup and restore, the `pg_dumpall` + `psql` import sequence described in
|
||||
[Taking a backup](#taking-a-backup) above.
|
||||
|
||||
2. In place migrations using `pg_upgrade`, which is what the
|
||||
[pgautoupgrade](#the-migration) migration above does under the hood.
|
||||
|
||||
The first method, backup and restore, is low tech and will work similarly in
|
||||
most setups. The second method is more efficient, but requires a bit more
|
||||
careful preparation.
|
||||
|
||||
As another example, here is how one can migrate 12 to 15 when running Postgres
|
||||
on macOS, installed using Homebrew.
|
||||
|
||||
1. Stop your postgres. Make sure there are no more commands shown by
|
||||
`ps aux | grep '[p]ostgres'`.
|
||||
|
||||
2. Install postgres15.
|
||||
|
||||
3. Migrate data using `pg_upgrade`:
|
||||
|
||||
```sh
|
||||
/opt/homebrew/Cellar/postgresql@15/15.8/bin/pg_upgrade -b /opt/homebrew/Cellar/postgresql@12/12.18_1/bin -B /opt/homebrew/Cellar/postgresql@15/15.8/bin/ -d /opt/homebrew/var/postgresql@12 -D /opt/homebrew/var/postgresql@15
|
||||
```
|
||||
|
||||
4. Start postgres 15 and verify version using `SELECT VERSION()`.
|
||||
@@ -1,261 +0,0 @@
|
||||
---
|
||||
title: External S3 buckets
|
||||
description:
|
||||
Self hosting Ente's server and photos web app when using an external S3
|
||||
bucket
|
||||
---
|
||||
|
||||
# Hosting server and web app using external S3
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> This is a community contributed guide, and some of these steps ~~might be~~
|
||||
> ARE out of sync with the upstream changes. This document is retained for
|
||||
> reference purposes, but if something is not working correctly, please see the
|
||||
> latest [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md)
|
||||
> in the repository and/or other guides in [self-hosting](/self-hosting/).
|
||||
|
||||
This guide is for self hosting the server and the web application of Ente Photos
|
||||
using docker compose and an external S3 bucket. So we assume that you already
|
||||
have the keys and secrets for the S3 bucket. The plan is as follows:
|
||||
|
||||
1. Create a `compose.yaml` file
|
||||
2. Set up the `.credentials.env` file
|
||||
3. Run `docker-compose up`
|
||||
4. Create an account and increase storage quota
|
||||
5. Fix potential CORS issue with your bucket
|
||||
|
||||
## 1. Create a `compose.yaml` file
|
||||
|
||||
After cloning the main repository with
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ente-io/ente.git
|
||||
# Or git clone git@github.com:ente-io/ente.git
|
||||
cd ente
|
||||
```
|
||||
|
||||
Create a `compose.yaml` file at the root of the project with the following
|
||||
content (there is nothing to change here):
|
||||
|
||||
```yaml
|
||||
services:
|
||||
museum:
|
||||
build:
|
||||
context: server
|
||||
args:
|
||||
GIT_COMMIT: local
|
||||
ports:
|
||||
- 8080:8080 # API
|
||||
- 2112:2112 # Prometheus metrics
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
|
||||
# Wait for museum to ping pong before starting the webapp.
|
||||
healthcheck:
|
||||
test: [
|
||||
"CMD",
|
||||
"echo",
|
||||
"1", # I don't know what to put here
|
||||
]
|
||||
environment:
|
||||
# no need to touch these
|
||||
ENTE_DB_HOST: postgres
|
||||
ENTE_DB_PORT: 5432
|
||||
ENTE_DB_NAME: ente_db
|
||||
ENTE_DB_USER: pguser
|
||||
ENTE_DB_PASSWORD: pgpass
|
||||
env_file:
|
||||
- ./.credentials.env
|
||||
volumes:
|
||||
- custom-logs:/var/logs
|
||||
- museum.yaml:/museum.yaml:ro
|
||||
networks:
|
||||
- internal
|
||||
|
||||
web:
|
||||
build:
|
||||
context: web
|
||||
ports:
|
||||
- 8081:80
|
||||
- 8082:80
|
||||
depends_on:
|
||||
museum:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ./.credentials.env
|
||||
|
||||
postgres:
|
||||
image: postgres:12
|
||||
ports:
|
||||
- 5432:5432
|
||||
environment:
|
||||
POSTGRES_USER: pguser
|
||||
POSTGRES_PASSWORD: pgpass
|
||||
POSTGRES_DB: ente_db
|
||||
# Wait for postgres to be accept connections before starting museum.
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-q", "-d", "ente_db", "-U", "pguser"]
|
||||
interval: 1s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- internal
|
||||
volumes:
|
||||
custom-logs:
|
||||
postgres-data:
|
||||
networks:
|
||||
internal:
|
||||
```
|
||||
|
||||
It maybe be added in the future, but if it does not exist, create a `Dockerfile`
|
||||
in the `web` directory with the following content:
|
||||
|
||||
```Dockerfile
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM node:21-bookworm-slim as ente-builder
|
||||
WORKDIR /app
|
||||
RUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||
COPY . .
|
||||
RUN yarn install
|
||||
ENV NEXT_PUBLIC_ENTE_ENDPOINT=DOCKER_RUNTIME_REPLACE_ENDPOINT
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT
|
||||
RUN yarn build
|
||||
|
||||
|
||||
FROM nginx:1.25-alpine-slim
|
||||
COPY --from=ente-builder /app/apps/photos/out /usr/share/nginx/html
|
||||
COPY <<EOF /etc/nginx/conf.d/default.conf
|
||||
server {
|
||||
listen 80 default_server;
|
||||
root /usr/share/nginx/html;
|
||||
location / {
|
||||
try_files \$uri \$uri.html \$uri/ =404;
|
||||
}
|
||||
error_page 404 /404.html;
|
||||
location = /404.html {
|
||||
internal;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
ARG ENDPOINT="http://localhost:8080"
|
||||
ENV ENDPOINT "$ENDPOINT"
|
||||
ARG ALBUMS_ENDPOINT="http://localhost:8082"
|
||||
ENV ALBUMS_ENDPOINT "$ALBUMS_ENDPOINT"
|
||||
COPY <<EOF /docker-entrypoint.d/replace_ente_endpoints.sh
|
||||
echo "Replacing endpoints"
|
||||
echo " Endpoint: \$ENDPOINT"
|
||||
echo " Albums Endpoint: \$ALBUMS_ENDPOINT"
|
||||
|
||||
replace_enpoints() {
|
||||
sed -i -e 's,DOCKER_RUNTIME_REPLACE_ENDPOINT,'"\$ENDPOINT"',g' \$1
|
||||
sed -i -e 's,DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT,'"\$ALBUMS_ENDPOINT"',g' \$1
|
||||
}
|
||||
for jsfile in `find '/usr/share/nginx/html' -type f -name '*.js'`
|
||||
do
|
||||
replace_enpoints "\$jsfile"
|
||||
done
|
||||
EOF
|
||||
|
||||
RUN chmod +x /docker-entrypoint.d/replace_ente_endpoints.sh
|
||||
```
|
||||
|
||||
This runs nginx inside to handle both the web & album URLs so we don't have to
|
||||
make two web images with different port.
|
||||
|
||||
- `DOCKER_RUNTIME_REPLACE_ENDPOINT` this is your public museum API URL.
|
||||
- `DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT` this is the shared albums URL (for
|
||||
more details about configuring shared albums, see
|
||||
[faq/sharing](/self-hosting/faq/sharing)).
|
||||
|
||||
Note how above we had updated the `compose.yaml` file for the server with
|
||||
|
||||
```yaml
|
||||
web:
|
||||
build:
|
||||
context: web
|
||||
ports:
|
||||
- 8081:80
|
||||
- 8082:80
|
||||
```
|
||||
|
||||
so that web and album both point to the same container and nginx will handle it.
|
||||
|
||||
## 2. Set up the `.credentials.env` file
|
||||
|
||||
Create a `.credentials.env` file at the root of the project with the following
|
||||
content (here you need to set the correct value of each variable):
|
||||
|
||||
<!-- The following code block should have language env, but vitepress currently
|
||||
doesn't support that language, so use sh as a reasonable fallback instead. -->
|
||||
|
||||
```sh
|
||||
# run `go run tools/gen-random-keys/main.go` in the server directory to generate the keys
|
||||
ENTE_KEY_ENCRYPTION=
|
||||
ENTE_KEY_HASH=
|
||||
ENTE_JWT_SECRET=
|
||||
|
||||
# if you deploy it on a server under a domain, you need to set the correct value of the following variables
|
||||
# it can be changed later
|
||||
|
||||
# The backend server URL (Museum) to be used by the webapp
|
||||
ENDPOINT=http://localhost:8080
|
||||
# The URL of the public albums webapp (also need to be updated in museum.yml so the correct links are generated)
|
||||
ALBUMS_ENDPOINT=http://localhost:8082
|
||||
```
|
||||
|
||||
Create the `museum.yaml` with additional configuration, this will be mounted
|
||||
(read-only) into the container:
|
||||
|
||||
```yaml
|
||||
s3:
|
||||
are_local_buckets: false
|
||||
# For some self-hosted S3 deployments you (e.g. Minio) you might need to disable bucket subdomains
|
||||
use_path_style_urls: true
|
||||
# The key must be named like so
|
||||
b2-eu-cen:
|
||||
key: $YOUR_S3_KEY
|
||||
secret: $YOUR_S3_SECRET
|
||||
endpoint: $YOUR_S3_ENDPOINT
|
||||
region: $YOUR_S3_REGION
|
||||
bucket: $YOUR_S3_BUCKET_NAME
|
||||
# The same value as the one specified in ALBUMS_ENDPOINT
|
||||
apps:
|
||||
public-albums: http://localhost:8082
|
||||
```
|
||||
|
||||
## 3. Run `docker-compose up`
|
||||
|
||||
Run `docker-compose up` at the root of the project (add `-d` to run it in the
|
||||
background).
|
||||
|
||||
## 4. Create an account and increase storage quota
|
||||
|
||||
Open `http://localhost:8080` or whatever Endpoint you mentioned for the web app
|
||||
and create an account. If your SMTP related configurations are all set and
|
||||
right, you will receive an email with your OTT in it. There are two work arounds
|
||||
to retrieve the OTP, checkout
|
||||
[this document](https://help.ente.io/self-hosting/faq/otp) for getting your
|
||||
OTT's..
|
||||
|
||||
If you successfully log in, select any plan and increase the storage quota with
|
||||
the following command:
|
||||
|
||||
```bash
|
||||
docker compose exec -i postgres psql -U pguser -d ente_db -c "INSERT INTO storage_bonus (bonus_id, user_id, storage, type, valid_till) VALUES ('self-hosted-myself', (SELECT user_id FROM users), 1099511627776, 'ADD_ON_SUPPORT', 0)"
|
||||
```
|
||||
|
||||
After few reloads, you should see 1 To of quota.
|
||||
|
||||
## Related
|
||||
|
||||
Some other users have also shared their setups.
|
||||
|
||||
- [Using Traefik](https://github.com/ente-io/ente/pull/3663)
|
||||
|
||||
- [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778)
|
||||
|
||||
- [Troubleshooting Bucket CORS](/self-hosting/troubleshooting/bucket-cors)
|
||||
@@ -1,229 +0,0 @@
|
||||
---
|
||||
title: Ente from Source
|
||||
description: Getting started self hosting Ente Photos and/or Ente Auth
|
||||
---
|
||||
|
||||
# Ente from Source
|
||||
|
||||
> [!WARNING] NOTE The below documentation will cover instructions about
|
||||
> self-hosting the web app manually. If you want to deploy Ente hassle free, use
|
||||
> the [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup
|
||||
> Ente. This guide might be deprecated in the near future.
|
||||
|
||||
## Installing Docker
|
||||
|
||||
Refer to
|
||||
[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)
|
||||
for detailed instructions.
|
||||
|
||||
## Start the server
|
||||
|
||||
```sh
|
||||
git clone https://github.com/ente-io/ente
|
||||
cd ente/server
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> You can also use a pre-built Docker image from `ghcr.io/ente-io/server`
|
||||
> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md))
|
||||
|
||||
Install the necessary dependencies for running the web client
|
||||
|
||||
```sh
|
||||
# installing npm and yarn
|
||||
|
||||
sudo apt update
|
||||
sudo apt install nodejs npm
|
||||
sudo npm install -g yarn // to install yarn globally
|
||||
```
|
||||
|
||||
Then in a separate terminal, you can run (e.g) the web client
|
||||
|
||||
```sh
|
||||
cd ente/web
|
||||
git submodule update --init --recursive
|
||||
yarn install
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev
|
||||
```
|
||||
|
||||
That's about it. If you open http://localhost:3000, you will be able to create
|
||||
an account on a Ente Photos web app running on your machine, and this web app
|
||||
will be connecting to the server running on your local machine at
|
||||
`localhost:8080`.
|
||||
|
||||
For the mobile apps, you don't even need to build, and can install normal Ente
|
||||
apps and configure them to use your
|
||||
[custom self-hosted server](/self-hosting/guides/custom-server/).
|
||||
|
||||
> If you want to build the mobile apps from source, see the instructions
|
||||
> [here](/self-hosting/guides/mobile-build).
|
||||
|
||||
## Web app with Docker and Compose
|
||||
|
||||
The instructoins in previous section were just a temporary way to run the web
|
||||
app locally. To run the web apps as services, the user has to build a docker
|
||||
image manually.
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> Recurring changes might be made by the team or from community if more
|
||||
> improvements can be made so that we are able to build a full-fledged docker
|
||||
> image.
|
||||
|
||||
```dockerfile
|
||||
FROM node:20-bookworm-slim as builder
|
||||
|
||||
WORKDIR ./ente
|
||||
|
||||
COPY . .
|
||||
COPY apps/ .
|
||||
|
||||
# Will help default to yarn versoin 1.22.22
|
||||
RUN corepack enable
|
||||
|
||||
# Endpoint for Ente Server
|
||||
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com
|
||||
|
||||
RUN yarn cache clean
|
||||
RUN yarn install --network-timeout 1000000000
|
||||
RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast
|
||||
|
||||
FROM node:20-bookworm-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /ente/apps/photos/out /app/photos
|
||||
COPY --from=builder /ente/apps/accounts/out /app/accounts
|
||||
COPY --from=builder /ente/apps/auth/out /app/auth
|
||||
COPY --from=builder /ente/apps/cast/out /app/cast
|
||||
|
||||
RUN npm install -g serve
|
||||
|
||||
ENV PHOTOS=3000
|
||||
EXPOSE ${PHOTOS}
|
||||
|
||||
ENV ACCOUNTS=3001
|
||||
EXPOSE ${ACCOUNTS}
|
||||
|
||||
ENV AUTH=3002
|
||||
EXPOSE ${AUTH}
|
||||
|
||||
ENV CAST=3003
|
||||
EXPOSE ${CAST}
|
||||
|
||||
# The albums app does not have navigable pages on it, but the
|
||||
# port will be exposed in-order to self up the albums endpoint
|
||||
# `apps.public-albums` in museum.yaml configuration file.
|
||||
ENV ALBUMS=3004
|
||||
EXPOSE ${ALBUMS}
|
||||
|
||||
CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"]
|
||||
```
|
||||
|
||||
The above is a multi-stage Dockerfile which creates a production ready static
|
||||
output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static
|
||||
content with Caddy.
|
||||
|
||||
Looking at 2 different node base-images doing different tasks in the same
|
||||
Dockerfile would not make sense, but the Dockerfile is divided into two just to
|
||||
improve the build efficiency as building this Dockerfile will arguably take more
|
||||
time.
|
||||
|
||||
Lets build a Docker image from the above Dockerfile. Copy and paste the above
|
||||
Dockerfile contents in the root of your web directory which is inside
|
||||
`ente/web`. Execute the below command to create an image from this Dockerfile.
|
||||
|
||||
```sh
|
||||
# Build the image
|
||||
docker build -t <image-name>:<tag> --no-cache --progress plain .
|
||||
```
|
||||
|
||||
You can always edit the Dockerfile and remove the steps for apps which you do
|
||||
not intend to install on your system (like auth or cast) and opt out of those.
|
||||
|
||||
Regarding Albums App, take a note that they are not apps with navigable pages,
|
||||
if accessed on the web-browser they will simply redirect to ente.web.io.
|
||||
|
||||
## compose.yaml
|
||||
|
||||
Moving ahead, we need to paste the below contents into the compose.yaml inside
|
||||
`ente/server/compose.yaml` under the services section.
|
||||
|
||||
```yaml
|
||||
ente-web:
|
||||
image: <image-name> # name of the image you used while building
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 3001:3001
|
||||
- 3002:3002
|
||||
- 3003:3003
|
||||
- 3004:3004
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
restart: always
|
||||
```
|
||||
|
||||
Now, we're good to go. All we are left to do now is start the containers.
|
||||
|
||||
```sh
|
||||
docker compose up -d # --build
|
||||
|
||||
# Accessing the logs
|
||||
docker compose logs <container-name>
|
||||
```
|
||||
|
||||
## Configure App Endpoints
|
||||
|
||||
> [!NOTE] Previously, this was dependent on the env variables
|
||||
> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below
|
||||
> documentation to update your setup configurations
|
||||
|
||||
You can configure the web endpoints for the other apps including Accounts,
|
||||
Albums Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89)
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly
|
||||
to the similar URL's you set up in `museum.yaml`.
|
||||
|
||||
Next part is to configure the web server.
|
||||
|
||||
# Web server configuration
|
||||
|
||||
The last step ahead is configuring reverse_proxy for the ports on which the apps
|
||||
are being served (you will have to make changes, if you have cusotmized the
|
||||
ports). The web server of choice in this guide is
|
||||
[Caddy](https://caddyserver.com) because with caddy you don't have to manually
|
||||
configure/setup SSL ceritifcates as caddy will take care of that.
|
||||
|
||||
```groovy
|
||||
photos.yourdomain.com {
|
||||
reverse_proxy http://localhost:3001
|
||||
# for logging
|
||||
log {
|
||||
level error
|
||||
}
|
||||
}
|
||||
|
||||
auth.yourdomain.com {
|
||||
reverse_proxy http://localhost:3002
|
||||
}
|
||||
# and so on ...
|
||||
```
|
||||
|
||||
Next, start the caddy server :).
|
||||
|
||||
```sh
|
||||
# If caddy service is not enabled
|
||||
sudo systemctl enable caddy
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
sudo systemctl start caddy
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Please start a discussion on the Github Repo if you have any suggestions for the
|
||||
Dockerfile, You can also share your setups on Github Discussions.
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Self Hosting
|
||||
title: Guides - Self-hosting
|
||||
description: Guides for self hosting Ente Photos and/or Ente Auth
|
||||
---
|
||||
|
||||
@@ -10,14 +10,12 @@ walkthroughs, tutorials and other FAQ pages in this directory.
|
||||
|
||||
See the sidebar for existing guides. In particular:
|
||||
|
||||
- If you're just looking to get started, see
|
||||
[configure custom server](custom-server/).
|
||||
- If you're just looking to get started, see installation.
|
||||
|
||||
- For various admin related tasks, e.g. increasing the storage quota on your
|
||||
self hosted instance, see [administering your custom server](admin).
|
||||
- For various administrative tasks, e.g. increasing the storage quota for user
|
||||
on your self-hosted instance, see
|
||||
[user management](/self-hosting/administration/users).
|
||||
|
||||
- For configuring your S3 buckets to get the object storage to work from your
|
||||
mobile device or for fixing an upload errors, see
|
||||
[configuring S3](configuring-s3). There is also a longer
|
||||
[community contributed guide](external-s3) for a more self hosted setup of
|
||||
both the server and web app using external S3 buckets for object storage.
|
||||
[object storage](/self-hosting/administration/object-storage).
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
---
|
||||
title: CLI for Self Hosted Instance
|
||||
description: Guide to configuring Ente CLI for Self Hosted Instance
|
||||
---
|
||||
|
||||
## Self Hosting
|
||||
|
||||
If you are self-hosting the server, you can still configure CLI to export data &
|
||||
perform basic admin actions.
|
||||
|
||||
To do this, first configure the CLI to point to your server. Define a
|
||||
config.yaml and put it either in the same directory as CLI binary or path
|
||||
defined in env variable `ENTE_CLI_CONFIG_DIR`
|
||||
|
||||
```yaml
|
||||
endpoint:
|
||||
api: "http://localhost:8080"
|
||||
```
|
||||
|
||||
You should be able to
|
||||
[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md),
|
||||
and subsequently increase the
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md)
|
||||
using the CLI.
|
||||
|
||||
For the admin actions, you first need to whitelist admin users. You can create
|
||||
`server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See
|
||||
[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1)
|
||||
in the server source code for details about how to define this.
|
||||
|
||||
You can use
|
||||
[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md)
|
||||
command to find the user id of any account.
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admins:
|
||||
# - 1580559962386440
|
||||
```
|
||||
@@ -1,116 +0,0 @@
|
||||
---
|
||||
title: Installing Ente Standalone (without Docker)
|
||||
description: Installing and setting up Ente standalone without docker.
|
||||
---
|
||||
|
||||
# Installing and Deploying Ente Standalone (without Docker)
|
||||
|
||||
## Running Museum (Ente's server) without Docker
|
||||
|
||||
First, start by installing all the dependencies to get your machine ready for
|
||||
development.
|
||||
|
||||
```sh
|
||||
# For MacOS
|
||||
brew tap homebrew/core
|
||||
brew update
|
||||
brew install go
|
||||
|
||||
# For Ubuntu based distros
|
||||
sudo apt update && sudo apt upgrade
|
||||
sudo apt install golang-go
|
||||
```
|
||||
|
||||
Alternatively, you can also download the latest binaries from
|
||||
['All Release'](https://go.dev/dl/) page from the official website.
|
||||
|
||||
```sh
|
||||
brew install postgres@15
|
||||
# Link the postgres keg
|
||||
brew link postgresql@15
|
||||
|
||||
brew install libsodium
|
||||
|
||||
# For Ubuntu based distros
|
||||
sudo apt install postgresql
|
||||
sudo apt install libsodium23 libsodium-dev
|
||||
```
|
||||
|
||||
The package `libsodium23` might be installed already in some cases.
|
||||
|
||||
Installing pkg-config
|
||||
|
||||
```sh
|
||||
brew install pkg-config
|
||||
|
||||
# For Ubuntu based distros
|
||||
sudo apt install pkg-config
|
||||
```
|
||||
|
||||
## Starting Postgres
|
||||
|
||||
### With pg_ctl
|
||||
|
||||
```sh
|
||||
pg_ctl -D /usr/local/var/postgres -l logfile start
|
||||
```
|
||||
|
||||
Dependeing on the Operating System type the path for postgres binary or
|
||||
configuration file might be different, please check if the command keeps failing
|
||||
for you.
|
||||
|
||||
Ideally, if you are on a Linux system with systemd as the init. You can also
|
||||
start postgres as a systemd service. After Installation execute the following
|
||||
commands:
|
||||
|
||||
```sh
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl daemon-reload && sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
### Create user
|
||||
|
||||
```sh
|
||||
createuser -s postgres
|
||||
```
|
||||
|
||||
## Start Museum
|
||||
|
||||
Start by cloning ente to your system.
|
||||
|
||||
```sh
|
||||
git clone https://github.com/ente-io/ente
|
||||
```
|
||||
|
||||
```sh
|
||||
export ENTE_DB_USER=postgres
|
||||
cd ente/server
|
||||
go run cmd/museum/main.go
|
||||
```
|
||||
|
||||
You can also add the export line to your shell's RC file, to avoid exporting the
|
||||
environment variable every time.
|
||||
|
||||
For live reloads, install [air](https://github.com/air-verse/air#installation).
|
||||
Then you can just call air after declaring the required environment variables.
|
||||
For example,
|
||||
|
||||
```sh
|
||||
ENTE_DB_USER=postgres
|
||||
air
|
||||
```
|
||||
|
||||
## Museum as a background service
|
||||
|
||||
Please check the below links if you want to run Museum as a service, both of
|
||||
them are battle tested.
|
||||
|
||||
1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323)
|
||||
2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4)
|
||||
|
||||
Once you are done with setting and running Museum, all you are left to do is run
|
||||
the web app and reverse_proxy it with a webserver. You can check the following
|
||||
resources for Deploying your web app.
|
||||
|
||||
1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app).
|
||||
2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd)
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: System requirements
|
||||
description: System requirements for running Ente's server
|
||||
---
|
||||
|
||||
# System requirements
|
||||
|
||||
There aren't any "minimum" system requirements as such, the server process is
|
||||
very light weight - it's just a single go binary, and it doesn't do any server
|
||||
side ML, so I feel it should be able to run on anything reasonable.
|
||||
|
||||
We've used the server quite easily on small cloud instances, old laptops etc. A
|
||||
community member also reported being able to run the server on
|
||||
[very low-end embedded devices](https://github.com/ente-io/ente/discussions/594).
|
||||
23
docs/docs/self-hosting/guides/systemd.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: Running Ente using systemd - Self-hosting
|
||||
description: Running Ente services (Museum and web application) via systemd
|
||||
---
|
||||
|
||||
# Running Ente using `systemd`
|
||||
|
||||
On Linux distributions using `systemd` as initialization system, Ente can be
|
||||
configured to run as a background service, upon system startup by service files.
|
||||
|
||||
## Museum as a background service
|
||||
|
||||
Please check the below links if you want to run Museum as a service, both of
|
||||
them are battle tested.
|
||||
|
||||
1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323)
|
||||
2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4)
|
||||
|
||||
Once you are done with setting and running Museum, all you are left to do is run
|
||||
the web app and set up reverse proxy. Check out the documentation for
|
||||
[more information](/self-hosting/installation/manual#step-3-configure-web-application).
|
||||
|
||||
> **Credits:** [mngshm](https://github.com/mngshm)
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Self Hosting with Tailscale (Community)
|
||||
title: Self-hosting with Tailscale - Self-hosting
|
||||
description: Guides for self-hosting Ente Photos and/or Ente Auth with Tailscale
|
||||
---
|
||||
|
||||
@@ -347,3 +347,5 @@ This will list all account details. Copy Acount ID.
|
||||
> ente-museum-1 container from linux terminal. Run
|
||||
> `docker restart ente-museum-1`. All well, now you will have 100TB storage.
|
||||
> Repeat if for any other accounts you want to give unlimited storage access.
|
||||
|
||||
> **Credits:** [A4alli](https://github.com/A4alli)
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
---
|
||||
title: Hosting the web apps
|
||||
description:
|
||||
Building and hosting Ente's web apps, connecting it to your self-hosted
|
||||
server
|
||||
---
|
||||
|
||||
> [!WARNING] NOTE This page covers documentation around self-hosting the web app
|
||||
> manually. If you want to deploy Ente hassle free, please use the
|
||||
> [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup
|
||||
> Ente. This guide might be deprecated in the near future.
|
||||
|
||||
# Web app
|
||||
|
||||
The getting started instructions mention using `yarn dev` (which is an alias of
|
||||
`yarn dev:photos`) to serve your web app.
|
||||
|
||||
> [!IMPORTANT] Please note that Ente's Web App supports the Yarn version 1.22.xx
|
||||
> or 1.22.22 specifically. Make sure to install the right version or modify your
|
||||
> yarn installation to meet the requirements. The user might end up into unknown
|
||||
> version and dependency related errors if yarn is on different version.
|
||||
|
||||
```sh
|
||||
cd ente/web
|
||||
yarn install
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos
|
||||
```
|
||||
|
||||
This is fine for trying the web app and verifying that your self-hosted server
|
||||
is working as expected etc. But if you would like to use the web app for a
|
||||
longer term, then it is recommended to follow the Docker approach.
|
||||
|
||||
## With Docker/Docker Compose (Recommended)
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> Recurring changes might be made by the team or from community if more
|
||||
> improvements can be made so that we are able to build a full-fledged docker
|
||||
> image.
|
||||
|
||||
```dockerfile
|
||||
FROM node:20-bookworm-slim as builder
|
||||
|
||||
WORKDIR ./ente
|
||||
|
||||
COPY . .
|
||||
COPY apps/ .
|
||||
|
||||
# Will help default to yarn versoin 1.22.22
|
||||
RUN corepack enable
|
||||
|
||||
# Endpoint for Ente Server
|
||||
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://changeme.com
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://changeme.com
|
||||
|
||||
RUN yarn cache clean
|
||||
RUN yarn install --network-timeout 1000000000
|
||||
RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast
|
||||
|
||||
FROM node:20-bookworm-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /ente/apps/photos/out /app/photos
|
||||
COPY --from=builder /ente/apps/accounts/out /app/accounts
|
||||
COPY --from=builder /ente/apps/auth/out /app/auth
|
||||
COPY --from=builder /ente/apps/cast/out /app/cast
|
||||
|
||||
RUN npm install -g serve
|
||||
|
||||
ENV PHOTOS=3000
|
||||
EXPOSE ${PHOTOS}
|
||||
|
||||
ENV ACCOUNTS=3001
|
||||
EXPOSE ${ACCOUNTS}
|
||||
|
||||
ENV AUTH=3002
|
||||
EXPOSE ${AUTH}
|
||||
|
||||
ENV CAST=3003
|
||||
EXPOSE ${CAST}
|
||||
|
||||
# The albums app does not have navigable pages on it, but the
|
||||
# port will be exposed in-order to self up the albums endpoint
|
||||
# `apps.public-albums` in museum.yaml configuration file.
|
||||
ENV ALBUMS=3004
|
||||
EXPOSE ${ALBUMS}
|
||||
|
||||
CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"]
|
||||
```
|
||||
|
||||
The above is a multi-stage Dockerfile which creates a production ready static
|
||||
output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static
|
||||
content with Caddy.
|
||||
|
||||
Looking at 2 different node base-images doing different tasks in the same
|
||||
Dockerfile would not make sense, but the Dockerfile is divided into two just to
|
||||
improve the build efficiency as building this Dockerfile will arguably take more
|
||||
time.
|
||||
|
||||
Lets build a Docker image from the above Dockerfile. Copy and paste the above
|
||||
Dockerfile contents in the root of your web directory which is inside
|
||||
`ente/web`. Execute the below command to create an image from this Dockerfile.
|
||||
|
||||
```sh
|
||||
# Build the image
|
||||
docker build -t <image-name>:<tag> --no-cache --progress plain .
|
||||
```
|
||||
|
||||
You can always edit the Dockerfile and remove the steps for apps which you do
|
||||
not intend to install on your system (like auth or cast) and opt out of those.
|
||||
|
||||
Regarding Albums App, please take a note that they are not web pages with
|
||||
navigable pages, if accessed on the web-browser they will simply redirect to
|
||||
ente.web.io.
|
||||
|
||||
## compose.yaml
|
||||
|
||||
Moving ahead, we need to paste the below contents into the compose.yaml inside
|
||||
`ente/server/compose.yaml` under the services section.
|
||||
|
||||
```yaml
|
||||
ente-web:
|
||||
image: <image-name> # name of the image you used while building
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 3001:3001
|
||||
- 3002:3002
|
||||
- 3003:3003
|
||||
- 3004:3004
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
restart: always
|
||||
```
|
||||
|
||||
Now, we're good to go. All we are left to do now is start the containers.
|
||||
|
||||
```sh
|
||||
docker compose up -d # --build
|
||||
|
||||
# Accessing the logs
|
||||
docker compose logs <container-name>
|
||||
```
|
||||
|
||||
## Configure App Endpoints
|
||||
|
||||
> [!NOTE] Previously, this was dependent on the env variables
|
||||
> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below
|
||||
> documentation to update your setup configurations
|
||||
|
||||
You can configure the web endpoints for the other apps including Accounts,
|
||||
Albums Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89)
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly
|
||||
to the similar URL's you set up in `museum.yaml`.
|
||||
|
||||
Next part is to configure the web server.
|
||||
|
||||
# Web server configuration
|
||||
|
||||
The last step ahead is configuring reverse_proxy for the ports on which the apps
|
||||
are being served (you will have to make changes, if you have cusotmized the
|
||||
ports). The web server of choice in this guide is
|
||||
[Caddy](https://caddyserver.com) because with caddy you don't have to manually
|
||||
configure/setup SSL ceritifcates as caddy will take care of that.
|
||||
|
||||
```sh
|
||||
photos.yourdomain.com {
|
||||
reverse_proxy http://localhost:3001
|
||||
# for logging
|
||||
log {
|
||||
level error
|
||||
}
|
||||
}
|
||||
|
||||
auth.yourdomain.com {
|
||||
reverse_proxy http://localhost:3002
|
||||
}
|
||||
# and so on ...
|
||||
```
|
||||
|
||||
Next, start the caddy server :).
|
||||
|
||||
```sh
|
||||
# If caddy service is not enabled
|
||||
sudo systemctl enable caddy
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl start caddy
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Please start a discussion on the Github Repo if you have any suggestions for the
|
||||
Dockerfile, You can also share your setups on Github Discussions.
|
||||
@@ -1,37 +1,29 @@
|
||||
---
|
||||
title: Self Hosting
|
||||
description: Getting started self hosting Ente Photos and/or Ente Auth
|
||||
title: Quickstart - Self-hosting
|
||||
description: Getting started with self-hosting Ente
|
||||
---
|
||||
|
||||
# Self Hosting
|
||||
# Quickstart
|
||||
|
||||
The entire source code for Ente is open source,
|
||||
[including the servers](https://ente.io/blog/open-sourcing-our-server/). This is
|
||||
the same code we use for our own cloud service.
|
||||
If you're looking to spin up Ente on your server, you are in the right place!
|
||||
|
||||
Our entire source code,
|
||||
[including the server](https://ente.io/blog/open-sourcing-our-server/) is open
|
||||
source. This is the same code we use on production.
|
||||
|
||||
For a quick preview, make sure your system meets the requirements mentioned
|
||||
below. After trying the preview, you can explore other ways of self-hosting Ente
|
||||
on your server as described in the documentation.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Hardware
|
||||
- A system with at least 1 GB of RAM and 1 CPU core
|
||||
- [Docker Compose](https://docs.docker.com/compose/)
|
||||
|
||||
The server is capable of running on minimal resource requirements as a
|
||||
lightweight Go binary, since most of the intensive computational tasks are done
|
||||
on the client. It performs well on small cloud instances, old laptops, and even
|
||||
[low-end embedded devices](https://github.com/ente-io/ente/discussions/594).
|
||||
> For more details, check out the
|
||||
> [requirements page](/self-hosting/installation/requirements).
|
||||
|
||||
### Software
|
||||
|
||||
#### Operating System
|
||||
|
||||
Any Linux or \*nix operating system, Ubuntu or Debian is recommended to have a
|
||||
good Docker experience. Non-Linux operating systems tend to provide poor
|
||||
experience with Docker and difficulty with troubleshooting and assistance.
|
||||
|
||||
#### Docker
|
||||
|
||||
Required for running Ente's server, web application and dependent services
|
||||
(database and object storage)
|
||||
|
||||
## Getting started
|
||||
## Set up the server
|
||||
|
||||
Run this command on your terminal to setup Ente.
|
||||
|
||||
@@ -39,17 +31,60 @@ Run this command on your terminal to setup Ente.
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
|
||||
```
|
||||
|
||||
The above `curl` command pulls the Docker image, creates a directory `my-ente`
|
||||
in the current working directory, prompts to start the cluster and starts all the containers required to run Ente.
|
||||
This creates a directory `my-ente` in the current working directory, prompts to
|
||||
start the cluster with needed containers after pulling the images required to
|
||||
run Ente.
|
||||
|
||||

|
||||
::: info
|
||||
|
||||

|
||||
Make sure to modify the default values in `compose.yaml` and `museum.yaml` if
|
||||
you wish to change endpoints, bucket configuration or server configuration.
|
||||
|
||||
> [!TIP] Important:
|
||||
> If you have used quickstart for self-hosting Ente and are facing issues while > trying to run the cluster due to MinIO buckets not being created, please check [troubleshooting MinIO](/self-hosting/troubleshooting/docker#minio-provisioning-error)
|
||||
>
|
||||
>
|
||||
:::
|
||||
|
||||
## Try the web app
|
||||
|
||||
Open Ente Photos web app at `http://<machine-ip>:3000` (or
|
||||
`http://localhost:3000` if using on same local machine). Select **Don't have an
|
||||
account?** to create a new user.
|
||||
|
||||
Follow the prompts to sign up.
|
||||
|
||||
<div style="display: flex; gap: 10px;">
|
||||
<img alt="Onboarding screen" src="/onboarding.png" style="width: 50%; height: auto;">
|
||||
<img alt="Sign up page" src="/sign-up.png" style="width: 50%; height: auto;">
|
||||
</div>
|
||||
|
||||
Enter the verification code by checking the cluster logs using
|
||||
`sudo docker compose logs`.
|
||||
|
||||

|
||||
|
||||
Upload a picture via the web user interface.
|
||||
|
||||
Alternatively, if using Ente Auth, get started by adding an account (assuming
|
||||
you are running Ente Auth at `http://<machine-ip>:3002` or
|
||||
`http://localhost:3002`).
|
||||
|
||||
## Try the mobile app
|
||||
|
||||
You can install Ente Photos from [here](/photos/faq/installing) and Ente Auth
|
||||
from [here](/auth/faq/installing).
|
||||
|
||||
Connect to your server from
|
||||
[mobile apps](/self-hosting/installation/post-install/#step-6-configure-apps-to-use-your-server).
|
||||
|
||||
## What next?
|
||||
|
||||
You may wish to install using a different way for your needs. Check the
|
||||
"Installation" section for information regarding that.
|
||||
|
||||
You can import your pictures from Google Takeout or from other services to Ente
|
||||
Photos. For more information, check out our
|
||||
[migration guide](/photos/migration/) for more information.
|
||||
|
||||
You can import your codes from other authenticator providers to Ente Auth. Check
|
||||
out our [migration guide](/auth/migration/) for more information.
|
||||
|
||||
## Queries?
|
||||
|
||||
|
||||
83
docs/docs/self-hosting/installation/compose.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: Docker Compose - Self-hosting
|
||||
description: Running Ente with Docker Compose from source
|
||||
---
|
||||
|
||||
# Docker Compose
|
||||
|
||||
If you wish to run Ente via Docker Compose from source, do the following:
|
||||
|
||||
## Requirements
|
||||
|
||||
Check out the [requirements](/self-hosting/installation/requirements) page to
|
||||
get started.
|
||||
|
||||
## Step 1: Clone the repository
|
||||
|
||||
Clone the repository. Change into the `server/config` directory of the
|
||||
repository, where the Compose file for running the cluster is present.
|
||||
|
||||
Run the following command for the same:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/ente-io/ente
|
||||
cd ente/server/config
|
||||
```
|
||||
|
||||
## Step 2: Populate the configuration file and environment variables
|
||||
|
||||
In order to run the cluster, you will have to provide environment variable
|
||||
values.
|
||||
|
||||
Copy the configuration files for modification by the following command inside
|
||||
`server/config` directory of the repository.
|
||||
|
||||
This allows you to modify configuration without having to face hassle while
|
||||
pulling in latest changes.
|
||||
|
||||
```shell
|
||||
# Inside the cloned repository's directory (usually `ente`)
|
||||
cd server/config
|
||||
cp example.env .env
|
||||
cp example.yaml museum.yaml
|
||||
```
|
||||
|
||||
Change the values present in `.env` file along with `museum.yaml` file
|
||||
accordingly.
|
||||
|
||||
::: tip
|
||||
|
||||
Make sure to enter the correct values for the database and object storage.
|
||||
|
||||
You should consider generating values for JWT and encryption keys for emails if
|
||||
you intend to use for long-term needs.
|
||||
|
||||
You can do by running the following command inside `ente/server`, assuming you
|
||||
cloned the repository to `ente`:
|
||||
|
||||
```shell
|
||||
# Change into the ente/server
|
||||
cd ente/server
|
||||
# Generate secrets
|
||||
go run tools/gen-random-keys/main.go
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Step 3: Start the cluster
|
||||
|
||||
Start the cluster by running the following command:
|
||||
|
||||
```sh
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
This builds Museum and web applications based on the Dockerfile and starts the
|
||||
containers needed for Ente.
|
||||
|
||||
::: tip
|
||||
|
||||
Check out [post-installations steps](/self-hosting/installation/post-install/)
|
||||
for further usage.
|
||||
|
||||
:::
|
||||
233
docs/docs/self-hosting/installation/config.md
Normal file
@@ -0,0 +1,233 @@
|
||||
---
|
||||
title: Configuration - Self-hosting
|
||||
description:
|
||||
"Information about all the configuration variables needed to run Ente with
|
||||
museum.yaml"
|
||||
---
|
||||
|
||||
# Configuration
|
||||
|
||||
Museum is designed to be configured either via environment variables or via
|
||||
YAML. We recommend using YAML for maintaining your configuration as it can be
|
||||
backed up easily, helping in restoration.
|
||||
|
||||
## Configuration File
|
||||
|
||||
Museum's configuration file (`museum.yaml`) is responsible for making database
|
||||
configuration, bucket configuration, internal configuration, etc. accessible for
|
||||
other internal services.
|
||||
|
||||
By default, Museum runs in local environment, thus `local.yaml` configuration is
|
||||
loaded.
|
||||
|
||||
If `ENVIRONMENT` environment variable is set (say, to `production`), Museum will
|
||||
attempt to load `configurations/production.yaml`.
|
||||
|
||||
If `credentials-file` is defined and found, it overrides the defaults.
|
||||
|
||||
Use `museum.yaml` file for declaring configuration over `local.yaml`.
|
||||
|
||||
All configuration values can be overridden via environment variables using the
|
||||
`ENTE_` prefix and replacing dots (`.`) or hyphens (`-`) with underscores (`_`).
|
||||
|
||||
Museum reads configuration from `museum.yaml`. Any environment variables
|
||||
prefixed with `ENTE_` takes precedence.
|
||||
|
||||
For example,
|
||||
|
||||
```yaml
|
||||
s3:
|
||||
b2-eu-cen:
|
||||
endpoint:
|
||||
```
|
||||
|
||||
in `museum.yaml` is read as `s3.b2-eu-cen.endpoint` by Museum.
|
||||
|
||||
`ENTE_S3_B2_EU_CEN_ENDPOINT` declared as environment variable is same as the
|
||||
above and `ENTE_S3_B2_EU_CEN_ENDPOINT` overrides `s3.b2-eu-cen.endpoint`.
|
||||
|
||||
### General Settings
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ------------------ | --------------------------------------------------------- | ------------------ |
|
||||
| `credentials-file` | Path to optional credentials override file | `credentials.yaml` |
|
||||
| `credentials-dir` | Directory to look for credentials (TLS, service accounts) | `credentials/` |
|
||||
| `log-file` | Log output path. Required in production. | `""` |
|
||||
|
||||
### HTTP
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------- | --------------------------------- | ------- |
|
||||
| `http.use-tls` | Enables TLS and binds to port 443 | `false` |
|
||||
|
||||
### App Endpoints
|
||||
|
||||
The web apps for Ente (Auth, Cast, Albums) use different endpoints.
|
||||
|
||||
These endpoints are configurable in `museum.yaml` under the apps.\* section.
|
||||
|
||||
Upon configuration, the application will start utilizing the specified endpoints
|
||||
instead of Ente's production instances or local endpoints (overridden values
|
||||
used for Compose and quickstart for ease of use.)
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------------- | ------------------------------------------------------- | -------------------------- |
|
||||
| `apps.public-albums` | Albums app base endpoint for public sharing | `https://albums.ente.io` |
|
||||
| `apps.cast` | Cast app base endpoint | `https://cast.ente.io` |
|
||||
| `apps.accounts` | Accounts app base endpoint (used for passkey-based 2FA) | `https://accounts.ente.io` |
|
||||
|
||||
### Database
|
||||
|
||||
The `db` section is used for configuring database connectivity. Ensure you
|
||||
provide correct credentials for proper connectivity within Museum.
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ------------- | -------------------------- | ----------- |
|
||||
| `db.host` | DB hostname | `localhost` |
|
||||
| `db.port` | DB port | `5432` |
|
||||
| `db.name` | Database name | `ente_db` |
|
||||
| `db.sslmode` | SSL mode for DB connection | `disable` |
|
||||
| `db.user` | Database username | |
|
||||
| `db.password` | Database password | |
|
||||
| `db.extra` | Additional DSN parameters | |
|
||||
|
||||
### Object Storage
|
||||
|
||||
The `s3` section within `museum.yaml` is by default configured to use local
|
||||
MinIO buckets when using `quickstart.sh` or Docker Compose.
|
||||
|
||||
If you wish to use an external S3 provider, you can edit the configuration with
|
||||
your provider's credentials, and set `s3.are_local_buckets` to `false`.
|
||||
|
||||
If you are using default MinIO, it is accessible at port `3200`. Web Console can
|
||||
be accessed by enabling port `3201` in the Compose file.
|
||||
|
||||
For more information on object storage configuration, check our
|
||||
[documentation](/self-hosting/administration/object-storage).
|
||||
|
||||
If you face any issues related to uploads then check out
|
||||
[CORS](/self-hosting/administration/object-storage#cors-cross-origin-resource-sharing)
|
||||
and [troubleshooting](/self-hosting/troubleshooting/uploads) sections.
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------------------------------- | -------------------------------------------- | ------- |
|
||||
| `s3.b2-eu-cen` | Primary hot storage S3 config | |
|
||||
| `s3.wasabi-eu-central-2-v3.compliance` | Whether to disable compliance lock on delete | `true` |
|
||||
| `s3.scw-eu-fr-v3` | Optional secondary S3 config | |
|
||||
| `s3.wasabi-eu-central-2-derived` | Derived data storage | |
|
||||
| `s3.are_local_buckets` | Use local MinIO-compatible storage | `false` |
|
||||
| `s3.use_path_style_urls` | Enable path-style URLs for MinIO | `false` |
|
||||
|
||||
### Encryption Keys
|
||||
|
||||
These values are used for encryption of user e-mails. Default values are
|
||||
provided by Museum.
|
||||
|
||||
They are generated by random in quickstart script, so no intervention is
|
||||
necessary if using quickstart.
|
||||
|
||||
However, if you are using Ente for long-term needs and you have not installed
|
||||
Ente via quickstart, consider generating values for these along with [JWT](#jwt)
|
||||
by following the steps described below:
|
||||
|
||||
```shell
|
||||
# If you have not cloned already
|
||||
git clone https://github.com/ente-io/ente
|
||||
|
||||
# Generate the values
|
||||
cd ente/server
|
||||
go run tools/gen-random-keys/main.go
|
||||
```
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ---------------- | ------------------------------ | ----------- |
|
||||
| `key.encryption` | Key for encrypting user emails | Pre-defined |
|
||||
| `key.hash` | Hash key | Pre-defined |
|
||||
|
||||
### JWT
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ------------ | ----------------------- | ---------- |
|
||||
| `jwt.secret` | Secret for signing JWTs | Predefined |
|
||||
|
||||
### Email
|
||||
|
||||
You may wish to send emails for verification codes instead of
|
||||
[hardcoding them](/self-hosting/administration/users#use-hardcoded-otts). In
|
||||
such cases, you can configure SMTP (or Zoho Transmail, for bulk emails).
|
||||
|
||||
Set the host and port accordingly with your credentials in `museum.yaml`
|
||||
|
||||
You may skip the username and password if using a local relay server.
|
||||
|
||||
```yaml
|
||||
smtp:
|
||||
host:
|
||||
port:
|
||||
# Optional username and password if using local relay server
|
||||
username:
|
||||
password:
|
||||
# Email address used for sending emails (this mail's credentials have to be provided)
|
||||
email:
|
||||
# Optional name for sender
|
||||
sender-name:
|
||||
```
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ------------------ | ---------------------------- | ------- |
|
||||
| `smtp.host` | SMTP server host | |
|
||||
| `smtp.port` | SMTP server port | |
|
||||
| `smtp.username` | SMTP auth username | |
|
||||
| `smtp.password` | SMTP auth password | |
|
||||
| `smtp.email` | Sender email address | |
|
||||
| `smtp.sender-name` | Custom name for email sender | |
|
||||
| `transmail.key` | Zeptomail API key | |
|
||||
|
||||
### WebAuthn Passkey Support
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------------- | ---------------------------- | --------------------------- |
|
||||
| `webauthn.rpid` | Relying Party ID | `localhost` |
|
||||
| `webauthn.rporigins` | Allowed origins for WebAuthn | `["http://localhost:3001"]` |
|
||||
|
||||
### Internal
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------------------------------------- | --------------------------------------------- | ------- |
|
||||
| `internal.silent` | Suppress external effects (e.g. email alerts) | `false` |
|
||||
| `internal.health-check-url` | External healthcheck URL | |
|
||||
| `internal.hardcoded-ott` | Predefined OTPs for testing | |
|
||||
| `internal.hardcoded-ott.emails` | E-mail addresses with hardcoded OTTs | `[]` |
|
||||
| `internal.hardcoded-ott.local-domain-suffix` | Suffix for which hardcoded OTT is to be used | |
|
||||
| `internal.hardcoded-ott.local-domain-value` | Hardcoded OTT value for the above suffix | |
|
||||
| `internal.admins` | List of admin user IDs | `[]` |
|
||||
| `internal.admin` | Single admin user ID | |
|
||||
| `internal.disable-registration` | Disable user registration | `false` |
|
||||
|
||||
### Replication
|
||||
|
||||
By default, replication of objects (photos, thumbnails, videos) is disabled and
|
||||
only one bucket is used.
|
||||
|
||||
To enable replication, set `replication.enabled` to `true`. For this to work, 3
|
||||
buckets have to be configured in total.
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------------------------- | ------------------------------------ | ----------------- |
|
||||
| `replication.enabled` | Enable replication across buckets | `false` |
|
||||
| `replication.worker-url` | Cloudflare Worker for replication | |
|
||||
| `replication.worker-count` | Number of goroutines for replication | `6` |
|
||||
| `replication.tmp-storage` | Temp directory for replication | `tmp/replication` |
|
||||
|
||||
### Background Jobs
|
||||
|
||||
This configuration is for enabling background cron jobs for tasks such as
|
||||
sending mails, removing unused objects (clean up) and worker configuration for
|
||||
the same.
|
||||
|
||||
| Variable | Description | Default |
|
||||
| --------------------------------------------- | --------------------------------------- | ------- |
|
||||
| `jobs.cron.skip` | Skip all cron jobs | `false` |
|
||||
| `jobs.remove-unreported-objects.worker-count` | Workers for removing unreported objects | `1` |
|
||||
| `jobs.clear-orphan-objects.enabled` | Enable orphan cleanup | `false` |
|
||||
| `jobs.clear-orphan-objects.prefix` | Prefix filter for orphaned objects | |
|
||||
53
docs/docs/self-hosting/installation/env-var.md
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Environment variables and defaults - Self-hosting
|
||||
description:
|
||||
"Information about all the configuration variables needed to run Ente along
|
||||
with description on default configuration"
|
||||
---
|
||||
|
||||
# Environment variables and defaults
|
||||
|
||||
The environment variables needed for running Ente and the default configuration
|
||||
are documented below:
|
||||
|
||||
## Environment Variables
|
||||
|
||||
A self-hosted Ente instance has to specify endpoints for both Museum (the
|
||||
server) and web apps.
|
||||
|
||||
This document outlines the essential environment variables and port mappings of
|
||||
the web apps.
|
||||
|
||||
Here's the list of environment variables that is used by the cluster:
|
||||
|
||||
| Service | Environment Variable | Description | Default Value |
|
||||
| ---------- | --------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------- |
|
||||
| `web` | `ENTE_API_ORIGIN` | Alias for `NEXT_PUBLIC_ENTE_ENDPOINT`. API Endpoint for Ente's API (Museum). | http://localhost:8080 |
|
||||
| `web` | `ENTE_ALBUMS_ORIGIN` | Alias for `NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT`. Base URL for Ente Album, used for public sharing. | http://localhost:3002 |
|
||||
| `postgres` | `POSTGRES_USER` | Username for PostgreSQL database | `pguser` |
|
||||
| `postgres` | `POSTGRES_DB` | Name of database for use with Ente | `ente_db` |
|
||||
| `postgres` | `POSTGRES_PASSWORD` | Password for PostgreSQL database's user | Randomly generated (quickstart) |
|
||||
| `minio` | `MINIO_ROOT_USER` | Username for MinIO | Randomly generated (quickstart) |
|
||||
| `minio` | `MINIO_ROOT_PASSWORD` | Password for MinIO | Randomly generated (quickstart) |
|
||||
|
||||
## Default Configuration
|
||||
|
||||
Self-hosted Ente clusters have certain default configuration for ease of use,
|
||||
which is documented below to understand its behavior:
|
||||
|
||||
### Ports
|
||||
|
||||
The below format is according to how ports are mapped in Docker when using the
|
||||
quickstart script. The mapping is of the format `<host-port>:<container-port>`
|
||||
in `ports` in compose file.
|
||||
|
||||
| Service | Type | Host Port | Container Port |
|
||||
| ------------------------------------------------------- | -------- | --------- | -------------- |
|
||||
| Museum | Server | 8080 | 8080 |
|
||||
| Ente Photos | Web | 3000 | 3000 |
|
||||
| Ente Accounts | Web | 3001 | 3001 |
|
||||
| Ente Albums | Web | 3002 | 3002 |
|
||||
| [Ente Auth](https://ente.io/auth/) | Web | 3003 | 3003 |
|
||||
| [Ente Cast](https://help.ente.io/photos/features/cast/) | Web | 3004 | 3004 |
|
||||
| MinIO | S3 | 3200 | 3200 |
|
||||
| PostgreSQL | Database | | 5432 |
|
||||
234
docs/docs/self-hosting/installation/manual.md
Normal file
@@ -0,0 +1,234 @@
|
||||
---
|
||||
title: Manual setup (without Docker) - Self-hosting
|
||||
description: Installing and setting up Ente without Docker
|
||||
---
|
||||
|
||||
# Manual setup (without Docker)
|
||||
|
||||
If you wish to run Ente from source without using Docker, follow the steps
|
||||
described below:
|
||||
|
||||
## Requirements
|
||||
|
||||
1. **Go:** Install Go on your system. This is needed for building Museum (Ente's
|
||||
server)
|
||||
|
||||
```shell
|
||||
sudo apt update && sudo apt upgrade
|
||||
sudo apt install golang-go
|
||||
```
|
||||
|
||||
Alternatively, you can also download the latest binaries from the
|
||||
[official website](https://go.dev/dl/).
|
||||
|
||||
2. **PostgreSQL and `libsodium`:** Install PostgreSQL (database) and `libsodium`
|
||||
(high level API for encryption) via package manager.
|
||||
|
||||
```shell
|
||||
sudo apt install postgresql
|
||||
sudo apt install libsodium23 libsodium-dev
|
||||
```
|
||||
|
||||
Start the database using `systemd` automatically when the system starts.
|
||||
|
||||
```shell
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
Ensure the database is running using
|
||||
|
||||
```shell
|
||||
sudo systemctl status postgresql
|
||||
```
|
||||
|
||||
3. **`pkg-config`:** Install `pkg-config` for dependency handling.
|
||||
|
||||
```shell
|
||||
sudo apt install pkg-config
|
||||
```
|
||||
|
||||
4. **yarn, npm and Node.js:** Needed for building the web application.
|
||||
|
||||
Install npm and Node using your package manager.
|
||||
|
||||
```shell
|
||||
sudo apt install npm nodejs
|
||||
```
|
||||
|
||||
Install yarn by following the
|
||||
[official documentation](https://yarnpkg.com/getting-started/install)
|
||||
|
||||
5. **Git:** Needed for cloning the repository and pulling in latest changes
|
||||
|
||||
6. **Caddy:** Used for setting reverse proxy and file servers
|
||||
|
||||
7. **Object Storage:** Ensure you have an object storage configured for usage,
|
||||
needed for storing files. You can choose to run MinIO or Garage locally
|
||||
without Docker, however, an external bucket will be reliable and suited for
|
||||
long-term storage.
|
||||
|
||||
## Step 1: Clone the repository
|
||||
|
||||
Start by cloning Ente's repository from GitHub to your local machine.
|
||||
|
||||
```shell
|
||||
git clone https://github.com/ente-io/ente
|
||||
```
|
||||
|
||||
## Step 2: Configure Museum (Ente's server)
|
||||
|
||||
1. Install all the needed dependencies for the server.
|
||||
|
||||
```shell
|
||||
# Change into server directory, where the source code for Museum is
|
||||
# present inside the repo
|
||||
cd ente/server
|
||||
|
||||
# Install the needed dependencies
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
2. Build the server. The server binary should be available as `./main` relative
|
||||
to `server` directory
|
||||
|
||||
```shell
|
||||
go build cmd/museum/main.go
|
||||
```
|
||||
|
||||
3. Create `museum.yaml` file inside `server` for configuring the needed
|
||||
variables. You can copy the templated configuration file for editing with
|
||||
ease.
|
||||
|
||||
```shell
|
||||
cp config/example.yaml ./museum.yaml
|
||||
```
|
||||
|
||||
::: tip
|
||||
|
||||
Make sure to enter the correct values for the database and object storage.
|
||||
|
||||
You should consider generating values for JWT and encryption keys for emails
|
||||
if you intend to use for long-term needs.
|
||||
|
||||
You can do by running the following command inside `ente/server`, assuming
|
||||
you cloned the repository to `ente`:
|
||||
|
||||
```shell
|
||||
# Change into the ente/server
|
||||
cd ente/server
|
||||
# Generate secrets
|
||||
go run tools/gen-random-keys/main.go
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
4. Run the server
|
||||
|
||||
```shell
|
||||
./main
|
||||
```
|
||||
|
||||
Museum should be accessible at `http://localhost:8080`
|
||||
|
||||
## Step 3: Configure Web Application
|
||||
|
||||
1. Install the dependencies for web application. Enable corepack if prompted.
|
||||
|
||||
```shell
|
||||
# Change into web directory, this is where all the applications
|
||||
# will be managed and built
|
||||
cd web
|
||||
|
||||
# Install dependencies
|
||||
yarn install
|
||||
```
|
||||
|
||||
2. Configure the environment variables in your corresponding shell's
|
||||
configuration file (`.bashrc`, `.zshrc`)
|
||||
```shell
|
||||
# Replace this with actual endpoint for Museum
|
||||
export NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080
|
||||
# Replace this with actual endpoint for Albums
|
||||
export NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002
|
||||
```
|
||||
3. Build the needed applications (Photos, Accounts, Auth, Cast) as per your
|
||||
needs:
|
||||
|
||||
```shell
|
||||
# These commands are executed inside web directory
|
||||
# Build photos. Build output to be served is present at apps/photos/out
|
||||
yarn build
|
||||
|
||||
# Build accounts. Build output to be served is present at apps/accounts/out
|
||||
yarn build:accounts
|
||||
|
||||
# Build auth. Build output to be served is present at apps/auth/out
|
||||
yarn build:auth
|
||||
|
||||
# Build cast. Build output to be served is present at apps/cast/out
|
||||
yarn build:cast
|
||||
```
|
||||
|
||||
4. Copy the output files to `/var/www/ente/apps` for easier management.
|
||||
|
||||
```shell
|
||||
mkdir -p /var/www/ente/apps
|
||||
|
||||
# Photos
|
||||
sudo cp -r apps/photos/out /var/www/ente/apps/photos
|
||||
# Accounts
|
||||
sudo cp -r apps/accounts/out /var/www/ente/apps/accounts
|
||||
# Auth
|
||||
sudo cp -r apps/auth/out /var/www/ente/apps/auth
|
||||
# Cast
|
||||
sudo cp -r apps/cast/out /var/www/ente/apps/cast
|
||||
```
|
||||
|
||||
5. Set up file server using Caddy by editing `Caddyfile`, present at
|
||||
`/etc/caddy/Caddyfile`.
|
||||
|
||||
```groovy
|
||||
# Replace the ports with domain names if you have subdomains configured and need HTTPS
|
||||
:3000 {
|
||||
root * /var/www/ente/apps/out/photos
|
||||
file_server
|
||||
try_files {path} {path}.html /index.html
|
||||
}
|
||||
|
||||
:3001 {
|
||||
root * /var/www/ente/apps/out/accounts
|
||||
file_server
|
||||
try_files {path} {path}.html /index.html
|
||||
}
|
||||
|
||||
:3002 {
|
||||
root * /var/www/ente/apps/out/photos
|
||||
file_server
|
||||
try_files {path} {path}.html /index.html
|
||||
}
|
||||
|
||||
:3003 {
|
||||
root * /var/www/ente/apps/out/auth
|
||||
file_server
|
||||
try_files {path} {path}.html /index.html
|
||||
}
|
||||
|
||||
:3004 {
|
||||
root * /var/www/ente/apps/out/cast
|
||||
file_server
|
||||
try_files {path} {path}.html /index.html
|
||||
}
|
||||
```
|
||||
|
||||
The web application for Ente Photos should be accessible at
|
||||
http://localhost:3000, check out the
|
||||
[default ports](/self-hosting/installation/env-var#ports) for more
|
||||
information.
|
||||
|
||||
::: tip
|
||||
|
||||
Check out [post-installations steps](/self-hosting/installation/post-install/)
|
||||
for further usage.
|
||||
|
||||
:::
|
||||
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 246 KiB |
172
docs/docs/self-hosting/installation/post-install/index.md
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
title: Post-installation steps - Self-hosting
|
||||
description: Steps to be followed post-installation for smooth experience
|
||||
---
|
||||
|
||||
# Post-installation steps
|
||||
|
||||
A list of steps that should be done after installing Ente are described below:
|
||||
|
||||
## Step 1: Creating first user
|
||||
|
||||
The first user to be created will be treated as an admin user by default.
|
||||
|
||||
Once Ente is up and running, the Ente Photos web app will be accessible on
|
||||
`http://localhost:3000`.
|
||||
|
||||
Select **Don't have an account?** to create a new user. Follow the prompts to
|
||||
sign up.
|
||||
|
||||
<div style="display: flex; gap: 10px;">
|
||||
<img alt="Onboarding screen" src="/onboarding.png" style="width: 50%; height: auto;">
|
||||
<img alt="Sign up page" src="/sign-up.png" style="width: 50%; height: auto;">
|
||||
</div>
|
||||
|
||||
Enter the verification code to complete registration.
|
||||
|
||||
This code can be found in the server logs, which should be shown in your
|
||||
terminal where you started the Docker Compose cluster.
|
||||
|
||||
If not, access the server logs inside the folder where Compose file resides.
|
||||
|
||||
```shell
|
||||
sudo docker compose logs
|
||||
```
|
||||
|
||||
If running Museum without Docker, the code should be visible in the terminal
|
||||
(stdout).
|
||||
|
||||

|
||||
|
||||
## Step 2: Whitelist admins
|
||||
|
||||
1. Connect to `ente_db` (the database used for storing data related to Ente).
|
||||
|
||||
```shell
|
||||
# Change the DB name and DB user name if you use different
|
||||
# values.
|
||||
|
||||
# If using Docker docker exec -it <postgres-ente-container-name>
|
||||
psql -U pguser -d ente_db
|
||||
|
||||
# Or when using psql directly
|
||||
psql -U pguser -d ente_db
|
||||
```
|
||||
|
||||
2. Get the user ID of the first user by running the following PSQL command:
|
||||
|
||||
```sql
|
||||
SELECT * from users;
|
||||
```
|
||||
|
||||
3. Edit `internal.admins` or `internal.admin` (if you wish to whitelist only
|
||||
single user) in `museum.yaml` to add the user ID you wish to whitelist.
|
||||
|
||||
- For multiple admins:
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admins:
|
||||
- <user_id>
|
||||
```
|
||||
|
||||
- For single admin:
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admin: <user_id>
|
||||
```
|
||||
|
||||
4. Restart Museum by restarting the cluster
|
||||
|
||||
::: tip Restart your Compose clusters whenever you make changes
|
||||
|
||||
If you have edited the Compose file or configuration file (`museum.yaml`), make
|
||||
sure to recreate the cluster's containers.
|
||||
|
||||
You can do this by the following command:
|
||||
|
||||
```shell
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Step 3: Configure application endpoints
|
||||
|
||||
You may wish to access some of the applications such as Auth, Albums, Cast via
|
||||
your instance's endpoints through the application instead of our production
|
||||
instances.
|
||||
|
||||
You can do so by editing the `apps` section in `museum.yaml` to use the base
|
||||
endpoints of the corresponding web applications.
|
||||
|
||||
```yaml
|
||||
# Replace yourdomain.tld with actual domain
|
||||
apps:
|
||||
public-albums: https://albums.ente.yourdomain.tld
|
||||
cast: https://cast.ente.yourdomain.tld
|
||||
auth: https://auth.ente.yourdomain.tld
|
||||
```
|
||||
|
||||
## Step 4: Make it publicly accessible
|
||||
|
||||
You may wish to access Ente on public Internet. You can do so by configuring a
|
||||
reverse proxy with software such as Caddy, NGINX, Traefik.
|
||||
|
||||
Check out our [documentation](/self-hosting/administration/reverse-proxy) for
|
||||
more information.
|
||||
|
||||
If you do not wish to make it accessible via Internet, we recommend you to use
|
||||
[Tailscale](/self-hosting/guides/tailscale) for convenience. Alternately, you
|
||||
can use your IP address for accessing the application in your local network,
|
||||
though this poses challenges with respect to object storage.
|
||||
|
||||
## Step 5: Download mobile and desktop app
|
||||
|
||||
You can install Ente Photos by following the
|
||||
[installation section](/photos/faq/installing).
|
||||
|
||||
You can also install Ente Auth (if you are planning to use Auth) by following
|
||||
the [installation section](/auth/faq/installing).
|
||||
|
||||
## Step 6: Configure apps to use your server
|
||||
|
||||
You can modify Ente mobile apps and CLI to connect to your server.
|
||||
|
||||
### Mobile
|
||||
|
||||
Tap the onboarding screen 7 times to modify developer settings. Enter your Ente
|
||||
server's endpoint.
|
||||
|
||||
<div style="display: flex; gap: 10px;">
|
||||
<img src="/developer-settings.png" alt="Developer Settings" height="50%" width="50%" />
|
||||
<img src="/developer-settings-endpoint.png" alt="Developer Settings - Server Endpoint" height="50%" width="50%" />
|
||||
</div>
|
||||
|
||||
### Desktop
|
||||
|
||||
Tap 7 times on the onboarding screen to configure the server endpoint to be
|
||||
used.
|
||||
|
||||
<div align="center">
|
||||
|
||||
{width=400px}
|
||||
|
||||
</div>
|
||||
|
||||
## Step 7: Configure Ente CLI
|
||||
|
||||
You can download Ente CLI from
|
||||
[here](https://github.com/ente-io/ente/releases?q=tag%3Acli).
|
||||
|
||||
Check our [documentation](/self-hosting/administration/cli) on how to use Ente
|
||||
CLI for managing self-hosted instances.
|
||||
|
||||
::: info For upgrading
|
||||
|
||||
Check out our [upgrading documentation](/self-hosting/installation/upgrade) for
|
||||
various installation methods.
|
||||
|
||||
:::
|
||||
|
Before Width: | Height: | Size: 231 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
42
docs/docs/self-hosting/installation/quickstart.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Quickstart script (Recommended) - Self-hosting
|
||||
description: Self-hosting Ente with quickstart script
|
||||
---
|
||||
|
||||
# Quickstart script (Recommended)
|
||||
|
||||
We provide a quickstart script which can be used for self-hosting Ente on your
|
||||
machine in less than a minute.
|
||||
|
||||
## Requirements
|
||||
|
||||
Check out the [requirements](/self-hosting/installation/requirements) page to
|
||||
get started.
|
||||
|
||||
## Getting started
|
||||
|
||||
Run this command on your terminal to setup Ente.
|
||||
|
||||
```sh
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
|
||||
```
|
||||
|
||||
The above `curl` command does the following:
|
||||
|
||||
1. Creates a directory `./my-ente` in working directory.
|
||||
2. Starts the containers required to run Ente upon prompting.
|
||||
|
||||
You should be able to access the web application at
|
||||
[http://localhost:3000](http://localhost:3000) or
|
||||
[http://machine-ip:3000](http://<machine-ip>:3000)
|
||||
|
||||
The data accessed by Museum is stored in `./data` folder inside `my-ente`
|
||||
directory. It contains extra configuration files that is to be used (push
|
||||
notification credentials, etc.)
|
||||
|
||||
::: tip
|
||||
|
||||
Check out [post-installation steps](/self-hosting/installation/post-install/)
|
||||
for further usage.
|
||||
|
||||
:::
|
||||