Compare commits

...

244 Commits

Author SHA1 Message Date
Mauricio Siu
5f174a883b Merge pull request #424 from Dokploy/canary
v0.8.0
2024-09-07 00:55:08 -06:00
Mauricio Siu
05d494ad11 chore: bump version 2024-09-07 00:43:55 -06:00
Mauricio Siu
78ed940280 refactor: add slugify value 2024-09-07 00:40:44 -06:00
Mauricio Siu
22b675373a refactor: use gitlab properties from error clone requirements 2024-09-07 00:27:43 -06:00
Mauricio Siu
e6a55920b5 fix: filter logs correctly by dokploy ui 2024-09-06 23:22:12 -06:00
Mauricio Siu
25753b6027 refactor: update total count 2024-09-06 23:04:34 -06:00
Mauricio Siu
7bdb572f91 Merge pull request #423 from Dokploy/refactor/requests
Refactor/requests
2024-09-06 22:48:26 -06:00
Mauricio Siu
922dcc5de8 chore: biome 2024-09-06 22:41:58 -06:00
Mauricio Siu
acdc0ce1b0 refactor: add correct service name filter 2024-09-06 22:39:38 -06:00
Mauricio Siu
e57f8a32ce refactor(requests): simplify logic 2024-09-06 22:38:32 -06:00
Mauricio Siu
d3a54163bf refactor: add option to activate the request distribution 2024-09-06 01:32:14 -06:00
Mauricio Siu
c4dca57614 refactor: filter count by dokploy service 2024-09-05 21:52:48 -06:00
Mauricio Siu
d88633f2c6 Merge pull request #420 from Dokploy/feat/requests
Feat(Monitoring Logs)
2024-09-05 11:31:31 -06:00
Mauricio Siu
c64dd0d6ff refactor: add missing fields 2024-09-05 11:24:51 -06:00
Mauricio Siu
bcbc5da30e chore: add new rule 2024-09-05 11:21:54 -06:00
Mauricio Siu
e588551c33 test: update properties 2024-09-05 11:19:58 -06:00
Mauricio Siu
081cae724b chore: biome lint 2024-09-05 11:17:02 -06:00
Mauricio Siu
ae972ba1dd refactor: remove validation 2024-09-05 01:31:36 -06:00
Mauricio Siu
32bb6a8087 remove 2024-09-05 01:28:25 -06:00
Mauricio Siu
eb27b0305e remove 2024-09-05 01:27:01 -06:00
Mauricio Siu
65dbf80f84 remove 2024-09-05 01:26:19 -06:00
Mauricio Siu
fd17f3f25c remove 2024-09-05 01:25:37 -06:00
Mauricio Siu
3803a16bf5 feat: download json log 2024-09-05 01:16:28 -06:00
Mauricio Siu
bba51fcd11 refactor: remove sort level column 2024-09-05 01:13:41 -06:00
Mauricio Siu
66cd434839 refactor: remove router 2024-09-05 01:06:35 -06:00
Mauricio Siu
4f49a10aef Merge branch 'canary' into feat/requests 2024-09-05 00:17:40 -06:00
Mauricio Siu
b43194df18 fix: remove duplicate prefix 2024-09-04 14:49:40 -06:00
Mauricio Siu
cf6549f2a3 refactor: remove product hunt 2024-09-04 14:39:47 -06:00
Mauricio Siu
2a554f6279 Merge pull request #417 from Dokploy/fix/docker-compose-hosts
Fix/docker compose hosts
2024-09-04 14:20:54 -06:00
Mauricio Siu
86139bb47d Merge pull request #414 from SashaGoncharov19/canary
feat: added restart button for containers
2024-09-04 09:56:45 -06:00
sashagoncharov19
21a646ce66 fix: linting 2024-09-04 10:49:38 +00:00
Mauricio Siu
bc673d6f67 revert: add back prefix to test 2024-09-04 00:08:10 -06:00
Mauricio Siu
fca0abd585 refactor: fix responsive 2024-09-04 00:02:04 -06:00
Mauricio Siu
b6fd92aadd refactor: change prefix to suffix 2024-09-03 23:58:56 -06:00
Mauricio Siu
e67dbb4758 Update README.md 2024-09-03 23:41:05 -06:00
Mauricio Siu
beb84554e1 refactor: remove unnecesary prefix validation 2024-09-03 23:32:34 -06:00
Mauricio Siu
9c89208d83 refactor: retrieve the correct names when adding a prefix 2024-09-03 23:22:24 -06:00
Mauricio Siu
a3be030fac feat: add randomize compose by prefix 2024-09-03 22:56:38 -06:00
sashagoncharov19
7c920dde71 fix:
- Added isLoading prop
- Changed notification to container name
- Eslint fix
2024-09-04 04:56:36 +00:00
sashagoncharov19
b1b01373ca feat: added restart button for containers 2024-09-03 19:25:51 +00:00
Mauricio Siu
39f6fb5af3 feat(test): add test to prevent add hash to dokploy-network 2024-09-03 01:24:06 -06:00
Mauricio Siu
9bac042498 Merge pull request #404 from GaKireiTsuki/canary
docs: add chinese translation
2024-09-02 11:59:55 -06:00
Mauricio Siu
fae091d183 Merge pull request #400 from iksaku/feat/docker-build-stage
feat(docker): Multi-stage Builds
2024-09-02 00:09:20 -06:00
Mauricio Siu
2929e01f09 refactor: add missing prop 2024-09-02 00:01:47 -06:00
Mauricio Siu
8b2fd07a27 refactor: biome lint 2024-09-01 23:59:48 -06:00
Mauricio Siu
a9fa017252 refactor: update migration 2024-09-01 23:53:52 -06:00
Mauricio Siu
e1681f0f03 Merge branch 'canary' into feat/docker-build-stage 2024-09-01 23:52:19 -06:00
Mauricio Siu
5242ad573f refactor: update body 2024-09-01 23:46:38 -06:00
加藤恵
0d6c237223 Merge branch 'Dokploy:canary' into canary 2024-09-02 13:41:12 +08:00
Mauricio Siu
f43776d27d Merge pull request #403 from Dokploy/98-connect-multiple-github-organizations
Feat(Git Providers): support for github, gitlab, bitbucket
2024-09-01 23:36:34 -06:00
Mauricio Siu
c6638b9fc9 refactor: change variable name 2024-09-01 23:30:25 -06:00
Mauricio Siu
2d56522733 refactor: add domain alert to deploy is required after domain action 2024-09-01 23:29:14 -06:00
Mauricio Siu
463fcd17e7 refactor(docs): add information about new providers 2024-09-01 23:20:47 -06:00
GaKireiTsuki
ee98637072 docs: add chinese translation 2024-09-02 13:17:56 +08:00
Mauricio Siu
d9f5d20473 chore(docs): update api.json endpoints 2024-09-01 23:11:17 -06:00
Mauricio Siu
2874c45227 chore: biome lint 2024-09-01 22:41:25 -06:00
Mauricio Siu
8a7ceae03a chore: remove unused deps 2024-09-01 22:39:03 -06:00
Mauricio Siu
f9b1194d16 feat: add empty states to git providers 2024-09-01 22:20:06 -06:00
Mauricio Siu
8275aec7d1 refactor: add single migration file 2024-09-01 22:12:37 -06:00
Mauricio Siu
2593736179 refactor: update gitlab update name 2024-09-01 22:07:40 -06:00
Mauricio Siu
68d2e73e7a feat: add test connection github 2024-09-01 22:00:10 -06:00
Mauricio Siu
99f63597a8 feat: add test connection bitbucket and gitlab 2024-09-01 21:49:59 -06:00
Mauricio Siu
d261fd4efe refactor: cleanup git provider router 2024-09-01 19:47:21 -06:00
Mauricio Siu
32ebd9b3b9 refactor: simplify naming schema 2024-09-01 19:34:25 -06:00
Mauricio Siu
879311c332 fix: add validation to prevent overwrite user 2024-09-01 19:12:26 -06:00
Mauricio Siu
1650e1bb74 feat: add permission to access to git providers 2024-09-01 18:56:13 -06:00
Mauricio Siu
58aaf6e002 refactor: add gitlab and bitbucket webhook support 2024-09-01 17:50:00 -06:00
Mauricio Siu
d57bbff87c feat: add providers to compose 2024-09-01 17:35:44 -06:00
Mauricio Siu
4c99e6000a refactor: remove unused api github routes 2024-09-01 14:57:42 -06:00
Mauricio Siu
2ec364ed68 remove 2024-09-01 14:52:34 -06:00
Mauricio Siu
f05c811bdc fix(webhooks): update github webhook validation 2024-09-01 14:51:03 -06:00
Mauricio Siu
e609714f1e refactor: add bitbucket organizations 2024-09-01 13:36:54 -06:00
Mauricio Siu
6c7b1c6c7c refactor: filter gitlab repositories by groupName 2024-09-01 12:34:05 -06:00
Mauricio Siu
1be580807f refactor: optimize gitlab fetch repositories 2024-09-01 10:00:47 -06:00
Mauricio Siu
766b166bf2 refactor: simplify database colums 2024-09-01 00:48:47 -06:00
Jorge González
de72652297 feat(docker): Multi-stage Builds 2024-09-01 00:42:39 -06:00
Mauricio Siu
73efe0d0ed refactor: simplify names of colums 2024-09-01 00:39:56 -06:00
Mauricio Siu
ed46fd3cef refactor: split logic to utils files 2024-09-01 00:32:25 -06:00
Mauricio Siu
c89e558143 feat: add new git providers 2024-09-01 00:23:45 -06:00
Mauricio Siu
249fe8c7fe feat: add clone by gitlab, github and bitbucket 2024-09-01 00:18:45 -06:00
Mauricio Siu
a8408a11d9 refactor(gitlab): add refresh token validation 2024-08-31 23:41:13 -06:00
Mauricio Siu
6d945371c9 feat(providers): add gitlab bitbucket and github providers 2024-08-31 22:57:41 -06:00
Mauricio Siu
28d8fa9834 refactor(traefik): add watch false swarm provider 2024-08-31 00:31:39 -06:00
Mauricio Siu
d7b9402528 refactor(traefik): add labels and swarm provider 2024-08-31 00:01:47 -06:00
Mauricio Siu
42ce03ea5a Merge pull request #399 from Dokploy/289-upgrade-traefik-to-its-latest-version
feat(traefik): upgrade traefik to v.3.1.2
2024-08-30 21:44:54 -06:00
Mauricio Siu
f5099c15a1 feat(traefik): upgrade traefik to v.3.1.2 2024-08-30 21:37:14 -06:00
Mauricio Siu
0f1f237019 Merge branch 'canary' into feat/requests 2024-08-30 11:16:03 -06:00
Mauricio Siu
b98476c36a chore: update hostinguer image 2024-08-30 11:10:14 -06:00
Mauricio Siu
aeddf2d554 chore: add hostinger sponsor 2024-08-30 11:06:33 -06:00
Mauricio Siu
4b4a31dc57 Merge pull request #398 from beltranaceves/canary
Docs: added working placeholder links for the Setting Up Dokploy section and better Admin Account screenshot
2024-08-30 11:05:11 -06:00
Beltrán Aceves
fa7e6d7c2f Docs: better image for Creating an Admin Account 2024-08-30 16:22:14 +02:00
Beltrán Aceves
82d2e00027 Docs: Improved placeholder links from the Setting Up cards section 2024-08-30 16:21:06 +02:00
Mauricio Siu
536a6ba2ff Merge pull request #397 from Dokploy/canary
v0.7.3
2024-08-30 00:27:59 -06:00
Mauricio Siu
95ab755253 chore(version): bump version 2024-08-30 00:09:43 -06:00
Mauricio Siu
b9d6fdafac Merge pull request #396 from Dokploy/389-is-the-traefik-env-non-persistent
fix(traefik): make env be persistent between restarts
2024-08-30 00:07:42 -06:00
Mauricio Siu
7999a4bdda refactor: lint 2024-08-30 00:00:40 -06:00
Mauricio Siu
50da20907f fix(traefik): make env be persistent between restarts 2024-08-29 23:56:38 -06:00
Mauricio Siu
a773cfffa5 Merge pull request #395 from Dokploy/392-documenso-template-not-working
fix(documenso): add version
2024-08-29 22:51:59 -06:00
Mauricio Siu
648386281f fix(documenso): add version 2024-08-29 22:49:25 -06:00
Mauricio Siu
3674f3a4d6 Merge pull request #393 from orthdron/patch-1
fix: umami version
2024-08-29 22:14:25 -06:00
Mauricio Siu
1fea9dcf29 Merge pull request #380 from freidev/freilyn-canary
feat: add Typebot template with email login configuration.
2024-08-29 22:13:08 -06:00
Mauricio Siu
fb2a4d91e1 Merge pull request #386 from AkashDeep000/canary
refactor(cleanUpUnusedVolumes): Remove all unused volumes, not just anonymous ones
2024-08-29 22:07:51 -06:00
Mauricio Siu
3e1063306f Update templates.ts 2024-08-29 22:06:22 -06:00
Mauricio Siu
4d2354df47 Update index.ts 2024-08-29 22:05:16 -06:00
Mauricio Siu
7104fb0461 Merge pull request #350 from Vladislav-CS/domain-link-fix
fix: wrong domain link
2024-08-29 21:59:03 -06:00
Mauricio Siu
fbbbebbbd0 Merge pull request #335 from Vladislav-CS/feat/zipline-template
feat: add Zipline template
2024-08-29 21:55:35 -06:00
Mauricio Siu
d18e315a28 chore: biome 2024-08-29 21:50:58 -06:00
Mauricio Siu
d47efec45f refactor(templates): add zipline domains 2024-08-29 21:48:57 -06:00
Mauricio Siu
4035c9a08d Merge branch 'canary' into feat/zipline-template 2024-08-29 21:41:11 -06:00
Deepak Kapoor
c5f3c61275 Update docker-compose.yml
There is a bug in the old version that crashes on the web. 

I would propose the version to be set as postgresql-latest, but I understand why a certain version is set in apps.
2024-08-29 20:03:02 -04:00
AkashDeep000
9436477f41 refactor(cleanUpUnusedVolumes): Remove all unused volumes, not just anonymous ones 2024-08-28 05:19:53 +05:30
Mauricio Siu
43d48520be Merge pull request #384 from Dokploy/Siumauricio-patch-1
Update README.md
2024-08-27 13:46:30 -06:00
Mauricio Siu
1d1a3cede1 Update README.md 2024-08-27 13:46:09 -06:00
Mauricio Siu
213fa08210 Merge pull request #382 from Dokploy/canary
v0.7.2
2024-08-26 15:52:49 -06:00
Mauricio Siu
1eed1a356d chore(version): bump version 2024-08-26 15:41:28 -06:00
Mauricio Siu
a8f21ad717 Merge pull request #381 from Dokploy/security/apply-validation-when-creating-admin
refactor(auth): add validation to prevent create another admin when a…
2024-08-26 15:32:29 -06:00
Mauricio Siu
c1420bd6d8 chore: apply biome 2024-08-26 15:22:51 -06:00
Mauricio Siu
74ea9debd5 refactor(auth): add validation to prevent create another admin when a admin is present 2024-08-26 15:19:30 -06:00
Freilyn Bernabe
da8955dabb chore: clean up code and update Docker images to stable versions 2024-08-26 14:44:43 -04:00
Freilyn Bernabe
5dbf18605f feat: add Typebot template with email login configuration. 2024-08-26 11:28:23 -04:00
Mauricio Siu
ba01c5056e refactor: skip validation 2024-08-26 08:55:09 -06:00
Mauricio Siu
5ea7a31c6d refactor: add license 2024-08-25 20:16:52 -06:00
Mauricio Siu
e0a9eb0366 feat: add api to handle license api keys 2024-08-25 20:10:20 -06:00
Mauricio Siu
14e8e14b7d refactor: remove sockets 2024-08-25 18:03:43 -06:00
Mauricio Siu
179de344c2 refactor: add websockets requests logs 2024-08-25 17:43:00 -06:00
Mauricio Siu
1250949c05 feat: finish request filter by status code 2024-08-25 16:34:01 -06:00
Mauricio Siu
e12105f5b9 refactor: add sheet 2024-08-24 23:38:13 -06:00
Mauricio Siu
b8cc0cd11b refactor(template): add domain to supabase template 2024-08-24 22:41:32 -06:00
Mauricio Siu
be39dfee9e Merge branch 'canary' into feat/requests 2024-08-24 22:36:30 -06:00
Mauricio Siu
67ae2b19df feat: add log rotation manager 2024-08-24 22:35:38 -06:00
Mauricio Siu
1df9f1f4df Merge pull request #361 from songtianlun/canary
feat: add supbase template
2024-08-24 20:55:02 -06:00
songtianlun
f06ac587c9 Merge branch 'upsteam_canary' into canary 2024-08-25 01:40:35 +08:00
songtianlun
c084cf84a0 fix: supabase generate annon and service jwt by servicekey 2024-08-24 00:43:00 +08:00
songtianlun
5e5cbdeef9 fix: supabase generate annon and service jwt by servicekey 2024-08-24 00:41:14 +08:00
Mauricio Siu
24929d8a4d Merge pull request #371 from freidev/canary
feat(template): add Aptabase template with ClickHouse and PostgreSQLCanary
2024-08-22 15:05:34 -06:00
Freilyn Bernabe
1e6e85ed5b style: run code formatting on two files 2024-08-22 16:08:48 -04:00
Freilyn Bernabe
137edf1250 feat: remove container_name prop 2024-08-22 15:12:03 -04:00
Freilyn Bernabe
b8741f1702 feat(template): aptabase set port 8080 2024-08-22 08:41:12 -04:00
Freilyn Bernabe
ac28aff022 Apply suggestions from code review
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
2024-08-22 08:38:51 -04:00
Mauricio Siu
7b9abef687 refactor: add localhos traefik domains 2024-08-22 00:02:02 -06:00
songtianlun
217be3c6e9 Merge remote-tracking branch 'origin/canary' into canary 2024-08-22 13:23:38 +08:00
songtianlun
27a0dc3770 fix: supabase ts format 2024-08-22 13:18:06 +08:00
Freilynbp03
53b24534a8 feat(template): add Aptabase template with ClickHouse and PostgreSQL 2024-08-21 21:45:14 -04:00
Freilyn Bernabe
5a3d0f8288 feat: add aptabase template 2024-08-21 16:31:02 -04:00
Mauricio Siu
ff3e3513ef chore: add cloudblast io sponsor 2024-08-21 12:26:44 -06:00
songtianlun
7a1fba38b3 fix: supabase logflareApiKey to 32 passwd 2024-08-22 02:06:42 +08:00
songtianlun
2b65a3c119 fix: supabase MAILER_URLPATHS_CONFIRMATION env path 2024-08-22 01:51:32 +08:00
songtianlun
6d841497cc fix: remove SECRET_KEY_BASE global env 2024-08-22 01:47:33 +08:00
songtianlun
d37dc7c372 fix: supabase log vector.yml 2024-08-22 01:20:24 +08:00
songtianlun
f3e0cf861f fix: supbase hello function demo 2024-08-22 01:17:05 +08:00
songtianlun
e2578e5794 fix: supbase add init/data.sql 2024-08-22 01:13:38 +08:00
TianLun Song
16deec381c fix: ci replace circle config 2024-08-20 20:51:20 +08:00
songtianlun
91dc35a138 fix: supbase index.ts format 2024-08-20 20:39:08 +08:00
songtianlun
acfa032e61 fix: supabase dashboard passwd 2024-08-20 20:39:08 +08:00
songtianlun
83ee4b2c59 fix: ci set branch name 2024-08-20 20:39:08 +08:00
Mauricio Siu
ac1637eaf8 feat: add requests 2024-08-20 00:15:08 -06:00
Mauricio Siu
d5c6a601d8 Merge pull request #367 from Dokploy/canary
v0.7.1
2024-08-19 16:03:39 -06:00
Mauricio Siu
afbe42a577 Update package.json 2024-08-19 14:12:14 -06:00
Mauricio Siu
866f700abf Merge pull request #365 from Dokploy/31-are-there-any-plans-to-support-wildcard-dns-records
31 are there any plans to support wildcard dns records
2024-08-19 00:08:55 -06:00
Mauricio Siu
f2b6b33b1f chore: lint 2024-08-18 23:24:20 -06:00
Mauricio Siu
813ffabb8c refactor: check if the traefik dashboard is enabled 2024-08-18 23:19:21 -06:00
Mauricio Siu
b5da9291b4 feat: add enviroment variables editor to traefik 2024-08-18 23:18:54 -06:00
songtianlun
b0d604d12b fix: supabase postgres passwd 2024-08-19 11:33:26 +08:00
Mauricio Siu
e9f40e1644 Merge pull request #364 from Dokploy/354-support-soketi
feat: add soketi template
2024-08-18 20:53:55 -06:00
Mauricio Siu
61d520c239 feat: add data templates 2024-08-18 20:46:18 -06:00
Mauricio Siu
124a884d2e feat: add soketi template 2024-08-18 20:43:30 -06:00
Mauricio Siu
b5e4b9af60 Merge pull request #363 from Dokploy/fix/domains-schema-templates
refactor(templates): use domains tab instead of envs
2024-08-18 19:58:23 -06:00
Mauricio Siu
840c24e3ca eslint 2024-08-18 19:51:59 -06:00
Mauricio Siu
d300eb73fb chore: add license 2024-08-18 19:49:36 -06:00
Mauricio Siu
fb4e06116c chore: add example domains schema templates 2024-08-18 19:49:17 -06:00
Mauricio Siu
2d3b903edc refactor(templates): use domains tab instead of envs 2024-08-18 19:47:19 -06:00
Mauricio Siu
75c13df22f Merge pull request #362 from ErickLuis00/canary
fix: wrong Docker version in Add Node commands
2024-08-18 18:17:49 -06:00
Erick Luis
68b81cb48d pnpm run check 2024-08-18 22:40:05 +00:00
Erick Luis
9d6f2df25a fix: wrong Docker version in Add Node commands 2024-08-18 22:18:45 +00:00
Mauricio Siu
452793c8e5 Merge pull request #359 from Dokploy/canary
v0.7.0
2024-08-18 10:26:52 -06:00
songtianlun
724de2c1b9 fix: ci revert name 2024-08-18 22:07:35 +08:00
songtianlun
86946b6b15 fix: ci revert name 2024-08-18 22:07:02 +08:00
songtianlun
957bb3d3e6 fix: supabase domain is set 2024-08-18 20:41:27 +08:00
Mauricio Siu
38a75b07fb chore(version): bump version 2024-08-17 23:53:36 -06:00
Mauricio Siu
378b93f996 Merge pull request #358 from Dokploy/154-all-pop-ups-when-the-confirmation-behavior-occurs-successfully-the-pop-ups-are-not-closed
refactor: add dialog close on submit success
2024-08-17 23:43:10 -06:00
Mauricio Siu
eb62d124bd refactor: add dialog close on submit success 2024-08-17 23:34:58 -06:00
songtianlun
7558029271 fix: supabase domain in one path 2024-08-18 13:34:37 +08:00
songtianlun
757c28dad1 fix: supabase logo 2024-08-18 13:26:02 +08:00
songtianlun
8d3dc38816 fix: supabase logo 2024-08-18 13:17:05 +08:00
songtianlun
9c8061a447 fix: supabase replace ports to expost 2024-08-18 13:05:44 +08:00
songtianlun
3a8b2867b6 fix: supabase add network 2024-08-18 13:02:25 +08:00
songtianlun
389956d1a2 fix: supabase docker volume content 2024-08-18 12:33:26 +08:00
Mauricio Siu
bf6ed15ba7 Merge pull request #348 from jumkey/patch-1
fix: buildpacks/pack support arm64
2024-08-17 22:30:24 -06:00
Mauricio Siu
31a66ce798 Update Dockerfile 2024-08-17 22:24:39 -06:00
Mauricio Siu
38c1d86e2f refactor(domains): add services to each router 2024-08-17 21:33:23 -06:00
Mauricio Siu
d08e232f50 Merge pull request #356 from Dokploy/216-domains-for-services-created-via-template
216 domains for services created via template
2024-08-17 17:09:34 -06:00
Mauricio Siu
3d49383c42 remove 2024-08-17 17:03:20 -06:00
Mauricio Siu
27706eaae4 fix: lint 2024-08-17 17:00:49 -06:00
Mauricio Siu
c74b5a2677 Merge branch 'canary' into 216-domains-for-services-created-via-template 2024-08-17 16:58:32 -06:00
Mauricio Siu
0374165a7f refactor: remove unused code 2024-08-17 16:57:27 -06:00
Mauricio Siu
b7dad5e1d9 refactor: remove hostname validation 2024-08-17 16:11:03 -06:00
Mauricio Siu
65527bc39a feat: add tests for labels and networks 2024-08-17 16:10:36 -06:00
songtianlun
a84bdd1c8e fix: supabase docker volume path 2024-08-18 01:55:41 +08:00
songtianlun
eb219221be Merge remote-tracking branch 'my/canary' into canary 2024-08-18 01:40:34 +08:00
songtianlun
7b176bd877 feat: add supabase templates 2024-08-18 01:38:25 +08:00
TianLun Song
6970923253 fix docker name 2024-08-18 01:20:24 +08:00
TianLun Song
a3e23d54d8 fix docker push prefix 2024-08-18 01:09:09 +08:00
TianLun Song
8f11207d72 fix push docker prefix 2024-08-18 01:04:22 +08:00
songtianlun
6bd98350d9 feat: add supabase templates 2024-08-18 00:58:09 +08:00
Mauricio Siu
096ef8cd93 Merge pull request #357 from Dokploy/353-domain-binding-form-does-not-accept-russian-domains-and-punycode-domains
refactor: remove hostname regex
2024-08-17 00:41:53 -06:00
Mauricio Siu
d6eafcbb9b refactor: remove hostname regex 2024-08-17 00:34:29 -06:00
Mauricio Siu
c0261384ca refactor: update invalidation cache 2024-08-17 00:29:05 -06:00
Mauricio Siu
ca733addc2 refactor: add dokploy network auutomatically 2024-08-17 00:28:32 -06:00
Mauricio Siu
7497671033 refactor: add dokploy network automatically 2024-08-17 00:28:17 -06:00
Mauricio Siu
385fbf4af5 Merge pull request #355 from Dokploy/canary
v0.6.3
2024-08-16 22:26:35 -06:00
Mauricio Siu
44e75ee7e1 refactor: update deps 2024-08-16 22:10:23 -06:00
Mauricio Siu
6b4d6eac1d chore: bump version 2024-08-16 22:07:02 -06:00
Mauricio Siu
9379d4a31d refactor(domains): update labels 2024-08-15 01:25:36 -06:00
Mauricio Siu
dde799f510 refactor: delete modals 2024-08-15 01:03:58 -06:00
Mauricio Siu
ecb919e109 refactor(domains): make traefik domains generate in a single click 2024-08-15 01:02:11 -06:00
Mauricio Siu
29ca894a97 Merge branch 'canary' into 216-domains-for-services-created-via-template 2024-08-15 00:00:41 -06:00
Mauricio Siu
84ba74a673 refactor: remove migrations 2024-08-15 00:00:34 -06:00
Mauricio Siu
32b0d51e79 refactor: remove migration 2024-08-14 23:59:51 -06:00
Vladislav Popovič
1288660fd6 Update show-domains.tsx 2024-08-14 22:25:51 +03:00
Vladislav Popovič
5c1e24f4f3 Update apps/dokploy/templates/zipline/docker-compose.yml
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
2024-08-14 14:17:45 +03:00
Jumkey Chen
3e12e1b1b3 fix: buildpacks/pack support arm64 2024-08-14 19:16:59 +08:00
Mauricio Siu
175e84f50e refactor: update container id 2024-08-13 23:29:51 -06:00
Mauricio Siu
efb646c43d Merge pull request #346 from Dokploy/282-add-option-to-revert-dokploy-version-opt-in-based-auto-updates
282 add option to revert dokploy version opt in based auto updates
2024-08-13 23:12:57 -06:00
Mauricio Siu
fa950dae39 fix(settings): prevent to download the latest image on reload 2024-08-13 23:04:21 -06:00
Mauricio Siu
712ad25e7a feat(permission): add permission to access to ssh key section 2024-08-13 22:19:04 -06:00
Mauricio Siu
35a41e774e Merge pull request #343 from Tuluobo/bugfix/delete_service_with_container
fix(ui): close dialog after templete selected & add config editor line wrapping
2024-08-13 22:02:33 -06:00
Mauricio Siu
c2ac193fbe Merge pull request #344 from Dokploy/340-dokploy-postgres-and-redis-are-exposed
fix(services): set published port 0 to prevent swarm assign random po…
2024-08-13 21:56:12 -06:00
Mauricio Siu
ce3c89a715 Merge pull request #342 from Dokploy/326-dokploy-doesnt-persist-registry-tokens
fix(docker): add root docker to prevent registry delete in each resta…
2024-08-13 21:52:07 -06:00
Mauricio Siu
96f7206a1d fix(services): set published port 0 to prevent swarm assign random ports #340 2024-08-13 21:49:21 -06:00
Mauricio Siu
b7ace886f3 fix(docker): add root docker to prevent registry delete in each restart/update dokploy server #326 2024-08-13 20:40:34 -06:00
Mauricio Siu
5dc330eaa3 Merge pull request #341 from Dokploy/337-incorrect-github-apps-install-link-when-app-name-contain-special-characters
fix(github): use github url to install the application #337
2024-08-13 20:04:46 -06:00
Mauricio Siu
b7f5bee2f8 fix(github): use github url to install the application #337 2024-08-13 19:57:10 -06:00
Tuluobo
19ee5f073b feat: add line wrapping for traefik config editor 2024-08-13 20:51:50 +08:00
Tuluobo
1fd4a6ae80 refactor: close dialog after selected template 2024-08-13 19:38:09 +08:00
Mauricio Siu
3c8a412014 Merge pull request #339 from Vladislav-CS/patch-1
fix: responsive design in the project settings page
2024-08-10 16:00:06 -06:00
Vladislav Popovič
eee617719b Update show-deployments.tsx 2024-08-10 22:19:15 +03:00
Mauricio Siu
fc611946a6 Merge pull request #334 from Vladislav-CS/fix-typos
fix: typos
2024-08-08 10:59:22 -06:00
Vladislav-CS
bd84793780 feat: create environment variable where possible 2024-08-08 19:10:53 +03:00
Vladislav-CS
9922c0ed66 Initial commit 2024-08-08 18:58:00 +03:00
Vladislav Popovič
af13c84968 Update add-template.tsx 2024-08-08 18:21:35 +03:00
Vladislav Popovič
ddb78ef8dd Update show-ssh-keys.tsx 2024-08-08 18:17:12 +03:00
Mauricio Siu
27256c609a refactor: add validations in domains 2024-07-30 23:31:05 -06:00
Mauricio Siu
c4d59177bf refactor: update domain 2024-07-30 23:20:54 -06:00
Mauricio Siu
3c8ca2b012 feat(domains): add domains to each docker compose service #216 2024-07-30 23:16:52 -06:00
362 changed files with 47187 additions and 3591 deletions

BIN
.github/sponsors/hostinger.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View File

@@ -166,20 +166,26 @@ import {
generateRandomDomain,
type Template,
type Schema,
type DomainSchema,
} from "../utils";
export function generate(schema: Schema): Template {
// do your stuff here, like create a new domain, generate random passwords, mounts.
const mainServiceHash = generateHash(schema.projectName);
const randomDomain = generateRandomDomain(schema);
const mainDomain = generateRandomDomain(schema);
const secretBase = generateBase64(64);
const toptKeyBase = generateBase64(32);
const domains: DomainSchema[] = [
{
host: mainDomain,
port: 8000,
serviceName: "plausible",
},
];
const envs = [
// If you want to show a domain in the UI, please add the prefix _HOST at the end of the variable name.
`PLAUSIBLE_HOST=${randomDomain}`,
"PLAUSIBLE_PORT=8000",
`BASE_URL=http://${randomDomain}`,
`BASE_URL=http://${mainDomain}`,
`SECRET_KEY_BASE=${secretBase}`,
`TOTP_VAULT_KEY=${toptKeyBase}`,
`HASH=${mainServiceHash}`,
@@ -195,6 +201,7 @@ export function generate(schema: Schema): Template {
return {
envs,
mounts,
domains,
};
}
```

View File

@@ -52,7 +52,7 @@ RUN curl -sSL https://nixpacks.com/install.sh -o install.sh \
&& pnpm install -g tsx
# Install buildpacks
RUN curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.35.0/pack-v0.35.0-linux.tgz" | tar -C /usr/local/bin/ --no-same-owner -xzv pack
COPY --from=buildpacksio/pack:0.35.0 /usr/local/bin/pack /usr/local/bin/pack
EXPOSE 3000
CMD [ "pnpm", "start" ]

26
LICENSE.MD Normal file
View File

@@ -0,0 +1,26 @@
# License
## Core License (Apache License 2.0)
Copyright 2024 Mauricio Siu.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
## Additional Terms for Specific Features
The following additional terms apply to the multi-node support and Docker Compose file support features of Dokploy. In the event of a conflict, these provisions shall take precedence over those in the Apache License:
- **Self-Hosted Version Free**: All features of Dokploy, including multi-node support and Docker Compose file support, will always be free to use in the self-hosted version.
- **Restriction on Resale**: The multi-node support and Docker Compose file support features cannot be sold or offered as a service by any party other than the copyright holder without prior written consent.
- **Modification Distribution**: Any modifications to the multi-node support and Docker Compose file support features must be distributed freely and cannot be sold or offered as a service.
For further inquiries or permissions, please contact us directly.

View File

@@ -9,7 +9,7 @@
<div align="center">
<div>Join us on Discord for help, feedback, and discussions!</div>
</br>
<a href="https://discord.gg/ZXwG32bw">
<a href="https://discord.gg/2tBnJ3jDJc">
<img src="https://discordapp.com/api/guilds/1234073262418563112/widget.png?style=banner2" alt="Discord Shield"/>
</a>
</div>
@@ -56,6 +56,10 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com).
<!-- Add Hero Sponsors here -->
### Hero Sponsors 🎖
<a href="https://www.hostinger.com/vps-hosting?ref=dokploy" target="_blank" ><img src=".github/sponsors/hostinger.jpg" alt="Hostinger" width="200"/></a>
### Premium Supporters 🥇
<div style="display: flex; gap: 30px; flex-wrap: wrap;">
@@ -70,6 +74,7 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com).
<div style="display: flex; gap: 30px; flex-wrap: wrap;">
<a href="https://lightspeed.run/?ref=dokploy"><img src="https://github.com/lightspeedrun.png" width="60px" alt="Lightspeed.run"/></a>
<a href="https://cloudblast.io/?ref=dokploy "><img src="https://cloudblast.io/img/logo-icon.193cf13e.svg" width="250px" alt="Lightspeed.run"/></a>
</div>
### Community Backers 🤝

2
apps/api/.env.example Normal file
View File

@@ -0,0 +1,2 @@
LEMON_SQUEEZY_API_KEY=""
LEMON_SQUEEZY_STORE_ID=""

28
apps/api/.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
# dev
.yarn/
!.yarn/releases
.vscode/*
!.vscode/launch.json
!.vscode/*.code-snippets
.idea/workspace.xml
.idea/usage.statistics.xml
.idea/shelf
# deps
node_modules/
# env
.env
.env.production
# logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# misc
.DS_Store

8
apps/api/README.md Normal file
View File

@@ -0,0 +1,8 @@
```
npm install
npm run dev
```
```
open http://localhost:3000
```

15
apps/api/package.json Normal file
View File

@@ -0,0 +1,15 @@
{
"name": "my-app",
"scripts": {
"dev": "tsx watch src/index.ts"
},
"dependencies": {
"@hono/node-server": "^1.12.1",
"hono": "^4.5.8",
"dotenv": "^16.3.1"
},
"devDependencies": {
"@types/node": "^20.11.17",
"tsx": "^4.7.1"
}
}

66
apps/api/src/index.ts Normal file
View File

@@ -0,0 +1,66 @@
import { serve } from "@hono/node-server";
import { config } from "dotenv";
import { Hono } from "hono";
import { cors } from "hono/cors";
import { validateLemonSqueezyLicense } from "./utils";
config();
const app = new Hono();
app.use(
"/*",
cors({
origin: ["http://localhost:3000", "http://localhost:3001"], // Ajusta esto a los orígenes de tu aplicación Next.js
allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allowHeaders: ["Content-Type", "Authorization"],
exposeHeaders: ["Content-Length", "X-Kuma-Revision"],
maxAge: 600,
credentials: true,
}),
);
export const LEMON_SQUEEZY_API_KEY = process.env.LEMON_SQUEEZY_API_KEY;
export const LEMON_SQUEEZY_STORE_ID = process.env.LEMON_SQUEEZY_STORE_ID;
app.get("/v1/health", (c) => {
return c.text("Hello Hono!");
});
app.post("/v1/validate-license", async (c) => {
const { licenseKey } = await c.req.json();
if (!licenseKey) {
return c.json({ error: "License key is required" }, 400);
}
try {
const licenseValidation = await validateLemonSqueezyLicense(licenseKey);
if (licenseValidation.valid) {
return c.json({
valid: true,
message: "License is valid",
metadata: licenseValidation.meta,
});
}
return c.json(
{
valid: false,
message: licenseValidation.error || "Invalid license",
},
400,
);
} catch (error) {
console.error("Error during license validation:", error);
return c.json({ error: "Internal server error" }, 500);
}
});
const port = 4000;
console.log(`Server is running on port ${port}`);
serve({
fetch: app.fetch,
port,
});

16
apps/api/src/types.ts Normal file
View File

@@ -0,0 +1,16 @@
export interface LemonSqueezyLicenseResponse {
valid: boolean;
error?: string;
meta?: {
store_id: string;
order_id: number;
order_item_id: number;
product_id: number;
product_name: string;
variant_id: number;
variant_name: string;
customer_id: number;
customer_name: string;
customer_email: string;
};
}

28
apps/api/src/utils.ts Normal file
View File

@@ -0,0 +1,28 @@
import { LEMON_SQUEEZY_API_KEY, LEMON_SQUEEZY_STORE_ID } from ".";
import type { LemonSqueezyLicenseResponse } from "./types";
export const validateLemonSqueezyLicense = async (
licenseKey: string,
): Promise<LemonSqueezyLicenseResponse> => {
try {
const response = await fetch(
"https://api.lemonsqueezy.com/v1/licenses/validate",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": LEMON_SQUEEZY_API_KEY as string,
},
body: JSON.stringify({
license_key: licenseKey,
store_id: LEMON_SQUEEZY_STORE_ID as string,
}),
},
);
return response.json();
} catch (error) {
console.error("Error validating license:", error);
return { valid: false, error: "Error validating license" };
}
};

12
apps/api/tsconfig.json Normal file
View File

@@ -0,0 +1,12 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"skipLibCheck": true,
"types": ["node"],
"jsx": "react-jsx",
"jsxImportSource": "hono/jsx"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -72,14 +72,14 @@ export default function Layout({
name: "English",
},
cn: {
name: "Chinese",
toc: "目",
search: "搜尋文檔",
lastUpdate: "最更新",
searchNoResult: "沒有結果",
previousPage: "上一",
nextPage: "下一",
chooseLanguage: "選擇語言",
name: "中文",
toc: "目",
search: "搜索文档",
lastUpdate: "最更新",
searchNoResult: "没有结果",
previousPage: "上一",
nextPage: "下一",
chooseLanguage: "选择语言",
},
}}
>
@@ -88,7 +88,7 @@ export default function Layout({
i18n
tree={pageTree[params.lang]}
nav={{
title: params.lang === "cn" ? "目" : "Dokploy",
title: params.lang === "cn" ? "目" : "Dokploy",
url: `/${params.lang}`,
transparentMode: "none",
}}

View File

@@ -0,0 +1,99 @@
---
title: Dokploy API
description: 如何与 Dokploy API 进行交互,面向管理员和用户
---
在某些情况下,您可能需要直接与 Dokploy API 进行交互。以下是管理员和用户如何做到这一点的指南。
## 对于管理员
1. 通过访问 `your-vps-ip:3000/swagger` 进入 Swagger UI。
2. 使用 Swagger 界面与 API 进行交互。
3. 默认情况下Swagger UI 的访问受到限制,只有经过身份验证的管理员才能访问 API。
## 对于用户
1. 默认情况下,用户无法直接访问 API。
2. 管理员可以授予用户以下访问权限:
- 生成访问令牌
- 访问 Swagger UI
3. 如果您需要访问权限,请联系您的管理员。
注意API 提供了高级功能。确保您理解所执行的操作,以避免对系统造成意外更改。
## 用法
默认情况下OpenApi 基础 URL 为 `http://localhost:3000/api`,您需要将其替换为 Dokploy 实例的 IP 或域名。
### 身份验证
API 使用 JWT 令牌进行身份验证。您可以通过访问 `/settings/profile` 页面并进入 API/CLI 部分生成令牌。
以下是一个经过身份验证的请求示例:
```bash
curl -X 'GET' \
'https://dokploy.com/api/project.all' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR-TOKEN'
```
然后您将收到类似以下内容的响应:
```json
[
{
"projectId": "klZKsyw5g-QT_jrWJ5T-w",
"name": "随机",
"description": "",
"createdAt": "2024-06-19T15:05:58.785Z",
"adminId": "_WrKZbs7iJAA3p4N2Yfyu",
"applications": [],
"mariadb": [],
"mongo": [],
"mysql": [
{
"mysqlId": "N3cudwO46TiDXzBm4SaQ1",
"name": "mysql",
"appName": "random-mysql-924715",
"description": "",
"databaseName": "mysql",
"databaseUser": "mysql",
"databasePassword": "h13BzO6y3KYSHaQg",
"databaseRootPassword": "mM1b7JeoPA7jArxj",
"dockerImage": "mysql:8",
"command": null,
"env": null,
"memoryReservation": null,
"memoryLimit": null,
"cpuReservation": null,
"cpuLimit": null,
"externalPort": null,
"applicationStatus": "完成",
"createdAt": "2024-06-24T01:55:40.378Z",
"projectId": "klZKsyw5g-QT_jrWJ5T-w"
}
],
"postgres": [],
"redis": [
{
"redisId": "TtFK5S4QFaIjaNGOb8Ku-",
"name": "redis",
"appName": "random-redis-7eec62",
"description": "",
"databasePassword": "Yvb8gqClfomjcue8",
"dockerImage": "redis:7",
"command": null,
"env": null,
"memoryReservation": null,
"memoryLimit": null,
"cpuReservation": null,
"cpuLimit": null,
"externalPort": 6379,
"createdAt": "2024-06-26T06:43:20.570Z",
"applicationStatus": "完成",
"projectId": "klZKsyw5g-QT_jrWJ5T-w"
}
],
"compose": []
}
]
```

View File

@@ -0,0 +1,33 @@
{
"title": "CLI",
"root": true,
"pages": [
"---入门---",
"index",
"---API---",
"reference-api/reference-admin",
"reference-api/reference-application",
"reference-api/reference-auth",
"reference-api/reference-backup",
"reference-api/reference-certificates",
"reference-api/reference-cluster",
"reference-api/reference-compose",
"reference-api/reference-deployment",
"reference-api/reference-destination",
"reference-api/reference-docker",
"reference-api/reference-domain",
"reference-api/reference-mariadb",
"reference-api/reference-mongo",
"reference-api/reference-mounts",
"reference-api/reference-mysql",
"reference-api/reference-port",
"reference-api/reference-postgres",
"reference-api/reference-project",
"reference-api/reference-redirects",
"reference-api/reference-redis",
"reference-api/reference-registry",
"reference-api/reference-security",
"reference-api/reference-settings",
"reference-api/reference-user"
]
}

View File

@@ -28,6 +28,11 @@
"reference-api/reference-registry",
"reference-api/reference-security",
"reference-api/reference-settings",
"reference-api/reference-sshKey",
"reference-api/reference-gitProvider",
"reference-api/reference-bitbucket",
"reference-api/reference-github",
"reference-api/reference-gitlab",
"reference-api/reference-user"
]
}

View File

@@ -116,7 +116,7 @@ In: `header`
<Property name={"email"} type={"string"} required={true} deprecated={undefined}>
<span>Format: `"email"`</span>
<span>Format: `"email"`</span>
</Property>
@@ -218,7 +218,7 @@ In: `header`
<Property name={"authId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -320,7 +320,7 @@ In: `header`
<Property name={"token"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -419,7 +419,7 @@ In: `header`
<Property name={"userId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -439,11 +439,11 @@ In: `header`
</Property>
<Property name={"accesedProjects"} type={"array of string"} required={true} deprecated={undefined}>
<Property name={"accesedProjects"} type={"array<string>"} required={true} deprecated={undefined}>
</Property>
<Property name={"accesedServices"} type={"array of string"} required={true} deprecated={undefined}>
<Property name={"accesedServices"} type={"array<string>"} required={true} deprecated={undefined}>
</Property>
@@ -459,6 +459,14 @@ In: `header`
</Property>
<Property name={"canAccessToSSHKeys"} type={"boolean"} required={true} deprecated={undefined}>
</Property>
<Property name={"canAccessToGitProviders"} type={"boolean"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -488,7 +496,9 @@ curl -X POST "http://localhost:3000/api/admin.assignPermissions" \
],
"canAccessToTraefikFiles": true,
"canAccessToDocker": true,
"canAccessToAPI": true
"canAccessToAPI": true,
"canAccessToSSHKeys": true,
"canAccessToGitProviders": true
}'
```
@@ -552,382 +562,4 @@ export interface Response {
</API>
<API>
<APIInfo method={"POST"} route={"/admin.cleanGithubApp"}>
## admin-cleanGithubApp
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/admin.cleanGithubApp"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/admin.cleanGithubApp", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/admin.getRepositories"}>
## admin-getRepositories
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/admin.getRepositories"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/admin.getRepositories", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/admin.getBranches"}>
## admin-getBranches
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"repo"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"owner"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/admin.getBranches?repo=string&owner=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/admin.getBranches?repo=string&owner=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/admin.haveGithubConfigured"}>
## admin-haveGithubConfigured
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/admin.haveGithubConfigured"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/admin.haveGithubConfigured", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -750,6 +750,10 @@ In: `header`
</Property>
<Property name={"buildArgs"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -767,7 +771,8 @@ In: `header`
curl -X POST "http://localhost:3000/api/application.saveEnvironment" \
-d '{
"applicationId": "string",
"env": "string"
"env": "string",
"buildArgs": "string"
}'
```
@@ -853,7 +858,7 @@ In: `header`
<Property name={"buildType"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"dockerfile" | "heroku_buildpacks" | "paketo_buildpacks" | "nixpacks"`</span>
<span>Value in: `"dockerfile" | "heroku_buildpacks" | "paketo_buildpacks" | "nixpacks" | "static"`</span>
</Property>
@@ -861,6 +866,14 @@ In: `header`
</Property>
<Property name={"dockerContextPath"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"publishDirectory"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -879,7 +892,9 @@ curl -X POST "http://localhost:3000/api/application.saveBuildType" \
-d '{
"applicationId": "string",
"buildType": "dockerfile",
"dockerfile": "string"
"dockerfile": "string",
"dockerContextPath": "string",
"publishDirectory": "string"
}'
```
@@ -979,6 +994,10 @@ In: `header`
</Property>
<Property name={"githubId"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -999,7 +1018,8 @@ curl -X POST "http://localhost:3000/api/application.saveGithubProvider" \
"repository": "string",
"branch": "string",
"owner": "string",
"buildPath": "string"
"buildPath": "string",
"githubId": "string"
}'
```
@@ -1065,6 +1085,266 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/application.saveGitlabProvider"}>
## application-saveGitlabProvider
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabBranch"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabBuildPath"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabOwner"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabRepository"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabId"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabProjectId"} type={"number | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"gitlabPathNamespace"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/application.saveGitlabProvider" \
-d '{
"applicationId": "string",
"gitlabBranch": "string",
"gitlabBuildPath": "string",
"gitlabOwner": "string",
"gitlabRepository": "string",
"gitlabId": "string",
"gitlabProjectId": 0,
"gitlabPathNamespace": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/application.saveGitlabProvider", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/application.saveBitbucketProvider"}>
## application-saveBitbucketProvider
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"bitbucketBranch"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"bitbucketBuildPath"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"bitbucketOwner"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"bitbucketRepository"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"bitbucketId"} type={"string | null"} required={true} deprecated={undefined}>
</Property>
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/application.saveBitbucketProvider" \
-d '{
"bitbucketBranch": "string",
"bitbucketBuildPath": "string",
"bitbucketOwner": "string",
"bitbucketRepository": "string",
"bitbucketId": "string",
"applicationId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/application.saveBitbucketProvider", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/application.saveDockerProvider"}>
## application-saveDockerProvider
@@ -1210,6 +1490,10 @@ In: `header`
</Property>
<Property name={"customGitSSHKeyId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -1229,7 +1513,8 @@ curl -X POST "http://localhost:3000/api/application.saveGitProdiver" \
"customGitBranch": "string",
"applicationId": "string",
"customGitBuildPath": "string",
"customGitUrl": "string"
"customGitUrl": "string",
"customGitSSHKeyId": "string"
}'
```
@@ -1295,206 +1580,6 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/application.generateSSHKey"}>
## application-generateSSHKey
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/application.generateSSHKey" \
-d '{
"applicationId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/application.generateSSHKey", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/application.removeSSHKey"}>
## application-removeSSHKey
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/application.removeSSHKey" \
-d '{
"applicationId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/application.removeSSHKey", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/application.markRunning"}>
## application-markRunning
@@ -1611,13 +1696,13 @@ In: `header`
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1633,6 +1718,10 @@ In: `header`
</Property>
<Property name={"buildArgs"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"memoryReservation"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
@@ -1671,7 +1760,7 @@ In: `header`
<Property name={"sourceType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"github" | "docker" | "git"`</span>
<span>Value in: `"github" | "docker" | "git"`</span>
</Property>
@@ -1695,6 +1784,46 @@ In: `header`
</Property>
<Property name={"gitlabProjectId"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabRepository"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabOwner"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabBranch"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabBuildPath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabPathNamespace"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketRepository"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketOwner"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketBranch"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketBuildPath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"username"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
@@ -1719,7 +1848,7 @@ In: `header`
</Property>
<Property name={"customGitSSHKey"} type={"string | null"} required={false} deprecated={undefined}>
<Property name={"customGitSSHKeyId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
@@ -1727,11 +1856,19 @@ In: `header`
</Property>
<Property name={"dockerContextPath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"dropBuildPath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"healthCheckSwarm"} type={"object | null"} required={false} deprecated={undefined}>
<ObjectCollapsible name={"healthCheckSwarm"}>
<Property name={"Test"} type={"array of string"} required={false} deprecated={undefined}>
<Property name={"Test"} type={"array<string>"} required={false} deprecated={undefined}>
</Property>
@@ -1783,13 +1920,13 @@ In: `header`
<ObjectCollapsible name={"placementSwarm"}>
<Property name={"Constraints"} type={"array of string"} required={false} deprecated={undefined}>
<Property name={"Constraints"} type={"array<string>"} required={false} deprecated={undefined}>
</Property>
<Property name={"Preferences"} type={"array of object"} required={false} deprecated={undefined}>
<Property name={"Preferences"} type={"array<object>"} required={false} deprecated={undefined}>
<ObjectCollapsible name={"Preferences"}>
<ObjectCollapsible name={"Object 1"}>
<Property name={"Spread"} type={"object"} required={true} deprecated={undefined}>
@@ -1811,9 +1948,9 @@ In: `header`
</Property>
<Property name={"Platforms"} type={"array of object"} required={false} deprecated={undefined}>
<Property name={"Platforms"} type={"array<object>"} required={false} deprecated={undefined}>
<ObjectCollapsible name={"Platforms"}>
<ObjectCollapsible name={"Object 1"}>
<Property name={"Architecture"} type={"string"} required={true} deprecated={undefined}>
@@ -1959,15 +2096,15 @@ In: `header`
</Property>
<Property name={"networkSwarm"} type={"array of object | null"} required={false} deprecated={undefined}>
<Property name={"networkSwarm"} type={"array<object> | null"} required={false} deprecated={undefined}>
<ObjectCollapsible name={"networkSwarm"}>
<ObjectCollapsible name={"Object 1"}>
<Property name={"Target"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"Aliases"} type={"array of string"} required={false} deprecated={undefined}>
<Property name={"Aliases"} type={"array<string>"} required={false} deprecated={undefined}>
</Property>
@@ -1989,13 +2126,17 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
<Property name={"buildType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"dockerfile" | "heroku_buildpacks" | "paketo_buildpacks" | "nixpacks"`</span>
<span>Value in: `"dockerfile" | "heroku_buildpacks" | "paketo_buildpacks" | "nixpacks" | "static"`</span>
</Property>
<Property name={"publishDirectory"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
@@ -2011,6 +2152,18 @@ In: `header`
</Property>
<Property name={"githubId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -2032,6 +2185,7 @@ curl -X POST "http://localhost:3000/api/application.update" \
"appName": "string",
"description": "string",
"env": "string",
"buildArgs": "string",
"memoryReservation": 0,
"memoryLimit": 0,
"cpuReservation": 0,
@@ -2047,14 +2201,26 @@ curl -X POST "http://localhost:3000/api/application.update" \
"branch": "string",
"buildPath": "string",
"autoDeploy": true,
"gitlabProjectId": 0,
"gitlabRepository": "string",
"gitlabOwner": "string",
"gitlabBranch": "string",
"gitlabBuildPath": "string",
"gitlabPathNamespace": "string",
"bitbucketRepository": "string",
"bitbucketOwner": "string",
"bitbucketBranch": "string",
"bitbucketBuildPath": "string",
"username": "string",
"password": "string",
"dockerImage": "string",
"customGitUrl": "string",
"customGitBranch": "string",
"customGitBuildPath": "string",
"customGitSSHKey": "string",
"customGitSSHKeyId": "string",
"dockerfile": "string",
"dockerContextPath": "string",
"dropBuildPath": "string",
"healthCheckSwarm": {
"Test": [
"string"
@@ -2132,9 +2298,13 @@ curl -X POST "http://localhost:3000/api/application.update" \
"replicas": 0,
"applicationStatus": "idle",
"buildType": "dockerfile",
"publishDirectory": "string",
"createdAt": "string",
"registryId": "string",
"projectId": "string"
"projectId": "string",
"githubId": "string",
"gitlabId": "string",
"bitbucketId": "string"
}'
```

View File

@@ -25,13 +25,13 @@ In: `header`
<Property name={"email"} type={"string"} required={true} deprecated={undefined}>
<span>Format: `"email"`</span>
<span>Format: `"email"`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `8`</span>
<span>Minimum length: `8`</span>
</Property>
@@ -134,7 +134,7 @@ In: `header`
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `8`</span>
<span>Minimum length: `8`</span>
</Property>
@@ -144,7 +144,7 @@ In: `header`
<Property name={"token"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -248,13 +248,13 @@ In: `header`
<Property name={"email"} type={"string"} required={true} deprecated={undefined}>
<span>Format: `"email"`</span>
<span>Format: `"email"`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `8`</span>
<span>Minimum length: `8`</span>
</Property>
@@ -551,7 +551,7 @@ In: `header`
<Property name={"rol"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"admin" | "user"`</span>
<span>Value in: `"admin" | "user"`</span>
</Property>
@@ -869,7 +869,7 @@ In: `header`
<Property name={"id"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -883,7 +883,7 @@ In: `header`
<Property name={"rol"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"admin" | "user"`</span>
<span>Value in: `"admin" | "user"`</span>
</Property>
@@ -1104,13 +1104,13 @@ In: `header`
<Property name={"pin"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `6`</span>
<span>Minimum length: `6`</span>
</Property>
<Property name={"secret"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1213,7 +1213,7 @@ In: `header`
<Property name={"pin"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `6`</span>
<span>Minimum length: `6`</span>
</Property>

View File

@@ -33,7 +33,7 @@ In: `header`
<Property name={"prefix"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -43,7 +43,7 @@ In: `header`
<Property name={"database"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -65,7 +65,7 @@ In: `header`
<Property name={"databaseType"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"postgres" | "mariadb" | "mysql" | "mongo"`</span>
<span>Value in: `"postgres" | "mariadb" | "mysql" | "mongo"`</span>
</Property>
@@ -281,7 +281,7 @@ In: `header`
<Property name={"prefix"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -295,7 +295,7 @@ In: `header`
<Property name={"database"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -0,0 +1,779 @@
---
title: bitbucket
full: true
---
import { Root, API, APIInfo, APIExample, Responses, Response, ResponseTypes, ExampleResponse, TypeScriptResponse, Property, ObjectCollapsible, Requests, Request } from "fumadocs-ui/components/api";
<Root>
<API>
<APIInfo method={"POST"} route={"/bitbucket.create"}>
## bitbucket-create
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"bitbucketId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketUsername"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"appPassword"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketWorkspaceName"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitProviderId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"authId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/bitbucket.create" \
-d '{
"bitbucketId": "string",
"bitbucketUsername": "string",
"appPassword": "string",
"bitbucketWorkspaceName": "string",
"gitProviderId": "string",
"authId": "string",
"name": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.create", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/bitbucket.one"}>
## bitbucket-one
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"bitbucketId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/bitbucket.one?bitbucketId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.one?bitbucketId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/bitbucket.bitbucketProviders"}>
## bitbucket-bitbucketProviders
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/bitbucket.bitbucketProviders"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.bitbucketProviders", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/bitbucket.getBitbucketRepositories"}>
## bitbucket-getBitbucketRepositories
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"bitbucketId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/bitbucket.getBitbucketRepositories?bitbucketId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.getBitbucketRepositories?bitbucketId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/bitbucket.getBitbucketBranches"}>
## bitbucket-getBitbucketBranches
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"owner"} type={"string"} required={true} deprecated={false}>
</Property>
<Property name={"repo"} type={"string"} required={true} deprecated={false}>
</Property>
<Property name={"bitbucketId"} type={"string"} required={false} deprecated={false}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/bitbucket.getBitbucketBranches?owner=string&repo=string&bitbucketId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.getBitbucketBranches?owner=string&repo=string&bitbucketId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/bitbucket.testConnection"}>
## bitbucket-testConnection
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"bitbucketId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"bitbucketUsername"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"workspaceName"} type={"string"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/bitbucket.testConnection" \
-d '{
"bitbucketId": "string",
"bitbucketUsername": "string",
"workspaceName": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.testConnection", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/bitbucket.update"}>
## bitbucket-update
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"bitbucketId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"bitbucketUsername"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"appPassword"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketWorkspaceName"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitProviderId"} type={"string"} required={true} deprecated={undefined}>
</Property>
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/bitbucket.update" \
-d '{
"bitbucketId": "string",
"bitbucketUsername": "string",
"appPassword": "string",
"bitbucketWorkspaceName": "string",
"gitProviderId": "string",
"name": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/bitbucket.update", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -29,19 +29,19 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"certificateData"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"privateKey"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -156,7 +156,7 @@ In: `header`
<Property name={"certificateId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -255,7 +255,7 @@ In: `header`
<Property name={"certificateId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -39,7 +39,7 @@ In: `header`
<Property name={"composeType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"docker-compose" | "stack"`</span>
<span>Value in: `"docker-compose" | "stack"`</span>
</Property>
@@ -149,7 +149,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -252,7 +252,7 @@ In: `header`
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -278,13 +278,13 @@ In: `header`
<Property name={"sourceType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"git" | "github" | "raw"`</span>
<span>Value in: `"git" | "github" | "gitlab" | "bitbucket" | "raw"`</span>
</Property>
<Property name={"composeType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"docker-compose" | "stack"`</span>
<span>Value in: `"docker-compose" | "stack"`</span>
</Property>
@@ -304,6 +304,38 @@ In: `header`
</Property>
<Property name={"gitlabProjectId"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabRepository"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabOwner"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabBranch"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabPathNamespace"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketRepository"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketOwner"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketBranch"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"customGitUrl"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
@@ -312,7 +344,7 @@ In: `header`
</Property>
<Property name={"customGitSSHKey"} type={"string | null"} required={false} deprecated={undefined}>
<Property name={"customGitSSHKeyId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
@@ -322,13 +354,13 @@ In: `header`
<Property name={"composePath"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"composeStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -340,6 +372,18 @@ In: `header`
</Property>
<Property name={"githubId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitlabId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"bitbucketId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
@@ -369,14 +413,25 @@ curl -X POST "http://localhost:3000/api/compose.update" \
"owner": "string",
"branch": "string",
"autoDeploy": true,
"gitlabProjectId": 0,
"gitlabRepository": "string",
"gitlabOwner": "string",
"gitlabBranch": "string",
"gitlabPathNamespace": "string",
"bitbucketRepository": "string",
"bitbucketOwner": "string",
"bitbucketBranch": "string",
"customGitUrl": "string",
"customGitBranch": "string",
"customGitSSHKey": "string",
"customGitSSHKeyId": "string",
"command": "string",
"composePath": "string",
"composeStatus": "idle",
"projectId": "string",
"createdAt": "string"
"createdAt": "string",
"githubId": "string",
"gitlabId": "string",
"bitbucketId": "string"
}'
```
@@ -458,7 +513,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -560,7 +615,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -646,9 +701,9 @@ export interface Response {
<API>
<APIInfo method={"GET"} route={"/compose.allServices"}>
<APIInfo method={"GET"} route={"/compose.loadServices"}>
## compose-allServices
## compose-loadServices
### Authorization
@@ -662,7 +717,13 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"type"} type={"Any properties in not unknown, string"} required={false} deprecated={false}>
<span>Default: `"cache"`</span>
</Property>
@@ -680,7 +741,7 @@ In: `header`
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/compose.allServices?composeId=string"
curl -X GET "http://localhost:3000/api/compose.loadServices?composeId=string&type=cache"
```
</Request>
@@ -688,7 +749,7 @@ curl -X GET "http://localhost:3000/api/compose.allServices?composeId=string"
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.allServices?composeId=string", {
fetch("http://localhost:3000/api/compose.loadServices?composeId=string&type=cache", {
method: "GET"
});
```
@@ -745,6 +806,108 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/compose.fetchSourceType"}>
## compose-fetchSourceType
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/compose.fetchSourceType" \
-d '{
"composeId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.fetchSourceType", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/compose.randomizeCompose"}>
## compose-randomizeCompose
@@ -761,7 +924,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -852,6 +1015,105 @@ export interface Response {
<API>
<APIInfo method={"GET"} route={"/compose.getConvertedCompose"}>
## compose-getConvertedCompose
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/compose.getConvertedCompose?composeId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.getConvertedCompose?composeId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/compose.deploy"}>
## compose-deploy
@@ -868,7 +1130,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -970,7 +1232,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1072,7 +1334,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1174,7 +1436,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1257,108 +1519,6 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/compose.generateSSHKey"}>
## compose-generateSSHKey
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/compose.generateSSHKey" \
-d '{
"composeId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.generateSSHKey", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/compose.refreshToken"}>
## compose-refreshToken
@@ -1375,7 +1535,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1461,108 +1621,6 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/compose.removeSSHKey"}>
## compose-removeSSHKey
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"composeId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/compose.removeSSHKey" \
-d '{
"composeId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.removeSSHKey", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/compose.deployTemplate"}>
## compose-deployTemplate
@@ -1583,7 +1641,7 @@ In: `header`
<Property name={"id"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1759,4 +1817,95 @@ export interface Response {
</API>
<API>
<APIInfo method={"GET"} route={"/compose.getTags"}>
## compose-getTags
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/compose.getTags"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/compose.getTags", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"applicationId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -124,7 +124,7 @@ In: `header`
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -152,7 +152,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -567,7 +567,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -116,7 +116,7 @@ In: `header`
<Property name={"containerId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -213,9 +213,13 @@ In: `header`
### Query Parameters
<Property name={"appType"} type={"Any properties in string, string"} required={false} deprecated={false}>
</Property>
<Property name={"appName"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -233,7 +237,7 @@ In: `header`
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/docker.getContainersByAppNameMatch?appName=string"
curl -X GET "http://localhost:3000/api/docker.getContainersByAppNameMatch?appType=stack&appName=string"
```
</Request>
@@ -241,7 +245,7 @@ curl -X GET "http://localhost:3000/api/docker.getContainersByAppNameMatch?appNam
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/docker.getContainersByAppNameMatch?appName=string", {
fetch("http://localhost:3000/api/docker.getContainersByAppNameMatch?appType=stack&appName=string", {
method: "GET"
});
```
@@ -314,7 +318,7 @@ In: `header`
<Property name={"appName"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -25,31 +25,49 @@ In: `header`
<Property name={"host"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"path"} type={"string | null"} required={true} deprecated={undefined}>
<Property name={"path"} type={"string | null"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"port"} type={"number | null"} required={true} deprecated={undefined}>
<Property name={"port"} type={"number | null"} required={false} deprecated={undefined}>
<span>Minimum: `1`</span>
<span>Maximum: `65535`</span>
</Property>
<Property name={"https"} type={"boolean"} required={true} deprecated={undefined}>
<Property name={"https"} type={"boolean"} required={false} deprecated={undefined}>
</Property>
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
<Property name={"applicationId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"certificateType"} type={"string"} required={true} deprecated={undefined}>
<Property name={"certificateType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"letsencrypt" | "none"`</span>
<span>Value in: `"letsencrypt" | "none"`</span>
</Property>
<Property name={"composeId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"serviceName"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"domainType"} type={"string | null"} required={false} deprecated={undefined}>
<span>Value in: `"compose" | "application"`</span>
</Property>
@@ -71,10 +89,13 @@ curl -X POST "http://localhost:3000/api/domain.create" \
-d '{
"host": "string",
"path": "string",
"port": 0,
"port": 1,
"https": true,
"applicationId": "string",
"certificateType": "letsencrypt"
"certificateType": "letsencrypt",
"composeId": "string",
"serviceName": "string",
"domainType": "compose"
}'
```
@@ -237,9 +258,9 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/domain.generateDomain"}>
<APIInfo method={"GET"} route={"/domain.byComposeId"}>
## domain-generateDomain
## domain-byComposeId
### Authorization
@@ -249,9 +270,11 @@ In: `header`
</Property>
### Request Body
### Query Parameters
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
<Property name={"composeId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
@@ -269,10 +292,7 @@ In: `header`
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/domain.generateDomain" \
-d '{
"applicationId": "string"
}'
curl -X GET "http://localhost:3000/api/domain.byComposeId?composeId=string"
```
</Request>
@@ -280,8 +300,8 @@ curl -X POST "http://localhost:3000/api/domain.generateDomain" \
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/domain.generateDomain", {
method: "POST"
fetch("http://localhost:3000/api/domain.byComposeId?composeId=string", {
method: "GET"
});
```
@@ -337,9 +357,9 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/domain.generateWildcard"}>
<APIInfo method={"POST"} route={"/domain.generateDomain"}>
## domain-generateWildcard
## domain-generateDomain
### Authorization
@@ -351,7 +371,9 @@ In: `header`
### Request Body
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
@@ -369,9 +391,9 @@ In: `header`
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/domain.generateWildcard" \
curl -X POST "http://localhost:3000/api/domain.generateDomain" \
-d '{
"applicationId": "string"
"appName": "string"
}'
```
@@ -380,7 +402,7 @@ curl -X POST "http://localhost:3000/api/domain.generateWildcard" \
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/domain.generateWildcard", {
fetch("http://localhost:3000/api/domain.generateDomain", {
method: "POST"
});
```
@@ -451,35 +473,47 @@ In: `header`
### Request Body
<Property name={"domainId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"host"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"path"} type={"string | null"} required={true} deprecated={undefined}>
<Property name={"path"} type={"string | null"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"port"} type={"number | null"} required={true} deprecated={undefined}>
<Property name={"port"} type={"number | null"} required={false} deprecated={undefined}>
<span>Minimum: `1`</span>
<span>Maximum: `65535`</span>
</Property>
<Property name={"https"} type={"boolean"} required={true} deprecated={undefined}>
<Property name={"https"} type={"boolean"} required={false} deprecated={undefined}>
</Property>
<Property name={"certificateType"} type={"string"} required={true} deprecated={undefined}>
<Property name={"certificateType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"letsencrypt" | "none"`</span>
<span>Value in: `"letsencrypt" | "none"`</span>
</Property>
<Property name={"serviceName"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"domainType"} type={"string | null"} required={false} deprecated={undefined}>
<span>Value in: `"compose" | "application"`</span>
</Property>
<Property name={"domainId"} type={"string"} required={true} deprecated={undefined}>
</Property>
@@ -499,12 +533,14 @@ In: `header`
```bash
curl -X POST "http://localhost:3000/api/domain.update" \
-d '{
"domainId": "string",
"host": "string",
"path": "string",
"port": 0,
"port": 1,
"https": true,
"certificateType": "letsencrypt"
"certificateType": "letsencrypt",
"serviceName": "string",
"domainType": "compose",
"domainId": "string"
}'
```
@@ -586,8 +622,6 @@ In: `header`
<Property name={"domainId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
@@ -685,8 +719,6 @@ In: `header`
<Property name={"domainId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |

View File

@@ -0,0 +1,203 @@
---
title: gitProvider
full: true
---
import { Root, API, APIInfo, APIExample, Responses, Response, ResponseTypes, ExampleResponse, TypeScriptResponse, Property, ObjectCollapsible, Requests, Request } from "fumadocs-ui/components/api";
<Root>
<API>
<APIInfo method={"GET"} route={"/gitProvider.getAll"}>
## gitProvider-getAll
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/gitProvider.getAll"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitProvider.getAll", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/gitProvider.remove"}>
## gitProvider-remove
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"gitProviderId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/gitProvider.remove" \
-d '{
"gitProviderId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitProvider.remove", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -0,0 +1,661 @@
---
title: github
full: true
---
import { Root, API, APIInfo, APIExample, Responses, Response, ResponseTypes, ExampleResponse, TypeScriptResponse, Property, ObjectCollapsible, Requests, Request } from "fumadocs-ui/components/api";
<Root>
<API>
<APIInfo method={"GET"} route={"/github.one"}>
## github-one
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"githubId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/github.one?githubId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.one?githubId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/github.getGithubRepositories"}>
## github-getGithubRepositories
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"githubId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/github.getGithubRepositories?githubId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.getGithubRepositories?githubId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/github.getGithubBranches"}>
## github-getGithubBranches
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"repo"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"owner"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"githubId"} type={"string"} required={false} deprecated={false}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/github.getGithubBranches?repo=string&owner=string&githubId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.getGithubBranches?repo=string&owner=string&githubId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/github.githubProviders"}>
## github-githubProviders
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/github.githubProviders"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.githubProviders", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/github.testConnection"}>
## github-testConnection
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"githubId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/github.testConnection" \
-d '{
"githubId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.testConnection", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/github.update"}>
## github-update
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"githubId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"githubAppName"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubAppId"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubClientId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubClientSecret"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubInstallationId"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubPrivateKey"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"githubWebhookSecret"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitProviderId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/github.update" \
-d '{
"githubId": "string",
"githubAppName": "string",
"githubAppId": 0,
"githubClientId": "string",
"githubClientSecret": "string",
"githubInstallationId": "string",
"githubPrivateKey": "string",
"githubWebhookSecret": "string",
"gitProviderId": "string",
"name": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/github.update", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -0,0 +1,816 @@
---
title: gitlab
full: true
---
import { Root, API, APIInfo, APIExample, Responses, Response, ResponseTypes, ExampleResponse, TypeScriptResponse, Property, ObjectCollapsible, Requests, Request } from "fumadocs-ui/components/api";
<Root>
<API>
<APIInfo method={"POST"} route={"/gitlab.create"}>
## gitlab-create
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"gitlabId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"applicationId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"redirectUri"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"secret"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"accessToken"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"refreshToken"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"groupName"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"expiresAt"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitProviderId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"authId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/gitlab.create" \
-d '{
"gitlabId": "string",
"applicationId": "string",
"redirectUri": "string",
"secret": "string",
"accessToken": "string",
"refreshToken": "string",
"groupName": "string",
"expiresAt": 0,
"gitProviderId": "string",
"authId": "string",
"name": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.create", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/gitlab.one"}>
## gitlab-one
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"gitlabId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/gitlab.one?gitlabId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.one?gitlabId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/gitlab.gitlabProviders"}>
## gitlab-gitlabProviders
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/gitlab.gitlabProviders"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.gitlabProviders", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/gitlab.getGitlabRepositories"}>
## gitlab-getGitlabRepositories
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"gitlabId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/gitlab.getGitlabRepositories?gitlabId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.getGitlabRepositories?gitlabId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/gitlab.getGitlabBranches"}>
## gitlab-getGitlabBranches
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"id"} type={"number"} required={false} deprecated={false}>
</Property>
<Property name={"owner"} type={"string"} required={true} deprecated={false}>
</Property>
<Property name={"repo"} type={"string"} required={true} deprecated={false}>
</Property>
<Property name={"gitlabId"} type={"string"} required={false} deprecated={false}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/gitlab.getGitlabBranches?id=0&owner=string&repo=string&gitlabId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.getGitlabBranches?id=0&owner=string&repo=string&gitlabId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/gitlab.testConnection"}>
## gitlab-testConnection
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"gitlabId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"groupName"} type={"string"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/gitlab.testConnection" \
-d '{
"gitlabId": "string",
"groupName": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.testConnection", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/gitlab.update"}>
## gitlab-update
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"gitlabId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"applicationId"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"redirectUri"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"secret"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"accessToken"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"refreshToken"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"groupName"} type={"string"} required={false} deprecated={undefined}>
</Property>
<Property name={"expiresAt"} type={"number | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"gitProviderId"} type={"string"} required={true} deprecated={undefined}>
</Property>
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/gitlab.update" \
-d '{
"gitlabId": "string",
"applicationId": "string",
"redirectUri": "string",
"secret": "string",
"accessToken": "string",
"refreshToken": "string",
"groupName": "string",
"expiresAt": 0,
"gitProviderId": "string",
"name": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/gitlab.update", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -25,19 +25,19 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mariadb:6"`</span>
<span>Default: `"mariadb:6"`</span>
</Property>
@@ -55,13 +55,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -681,7 +681,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -993,7 +993,7 @@ In: `header`
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1096,19 +1096,19 @@ In: `header`
<Property name={"mariadbId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1118,13 +1118,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1138,7 +1138,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mariadb:6"`</span>
<span>Default: `"mariadb:6"`</span>
</Property>
@@ -1172,7 +1172,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>

View File

@@ -25,19 +25,19 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mongo:15"`</span>
<span>Default: `"mongo:15"`</span>
</Property>
@@ -51,7 +51,7 @@ In: `header`
<Property name={"databaseUser"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -669,7 +669,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -776,7 +776,7 @@ In: `header`
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1084,19 +1084,19 @@ In: `header`
<Property name={"mongoId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1106,7 +1106,7 @@ In: `header`
<Property name={"databaseUser"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1116,7 +1116,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mongo:15"`</span>
<span>Default: `"mongo:15"`</span>
</Property>
@@ -1150,7 +1150,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"type"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"bind" | "volume" | "file"`</span>
<span>Value in: `"bind" | "volume" | "file"`</span>
</Property>
@@ -43,21 +43,25 @@ In: `header`
<Property name={"mountPath"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"serviceType"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"application"`</span>
<span>Default: `"application"`</span>
<span>Value in: `"application" | "postgres" | "mysql" | "mariadb" | "mongo" | "redis" | "compose"`</span>
<span>Value in: `"application" | "postgres" | "mysql" | "mariadb" | "mongo" | "redis" | "compose"`</span>
</Property>
<Property name={"filePath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"serviceId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -83,6 +87,7 @@ curl -X POST "http://localhost:3000/api/mounts.create" \
"content": "string",
"mountPath": "string",
"serviceType": "application",
"filePath": "string",
"serviceId": "string"
}'
```
@@ -362,13 +367,13 @@ In: `header`
<Property name={"mountId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"type"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"bind" | "volume" | "file"`</span>
<span>Value in: `"bind" | "volume" | "file"`</span>
</Property>
@@ -380,21 +385,25 @@ In: `header`
</Property>
<Property name={"filePath"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"content"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"serviceType"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"application"`</span>
<span>Default: `"application"`</span>
<span>Value in: `"application" | "postgres" | "mysql" | "mariadb" | "mongo" | "redis" | "compose"`</span>
<span>Value in: `"application" | "postgres" | "mysql" | "mariadb" | "mongo" | "redis" | "compose"`</span>
</Property>
<Property name={"mountPath"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -446,6 +455,7 @@ curl -X POST "http://localhost:3000/api/mounts.update" \
"type": "bind",
"hostPath": "string",
"volumeName": "string",
"filePath": "string",
"content": "string",
"serviceType": "application",
"mountPath": "string",

View File

@@ -25,19 +25,19 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mysql:8"`</span>
<span>Default: `"mysql:8"`</span>
</Property>
@@ -51,13 +51,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -681,7 +681,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -788,7 +788,7 @@ In: `header`
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1096,19 +1096,19 @@ In: `header`
<Property name={"mysqlId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1118,13 +1118,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1138,7 +1138,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"mysql:8"`</span>
<span>Default: `"mysql:8"`</span>
</Property>
@@ -1172,7 +1172,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>

File diff suppressed because it is too large Load Diff

View File

@@ -33,15 +33,15 @@ In: `header`
<Property name={"protocol"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"tcp"`</span>
<span>Default: `"tcp"`</span>
<span>Value in: `"tcp" | "udp"`</span>
<span>Value in: `"tcp" | "udp"`</span>
</Property>
<Property name={"applicationId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -146,7 +146,7 @@ In: `header`
<Property name={"portId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -245,7 +245,7 @@ In: `header`
<Property name={"portId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -347,7 +347,7 @@ In: `header`
<Property name={"portId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -361,9 +361,9 @@ In: `header`
<Property name={"protocol"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"tcp"`</span>
<span>Default: `"tcp"`</span>
<span>Value in: `"tcp" | "udp"`</span>
<span>Value in: `"tcp" | "udp"`</span>
</Property>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -35,13 +35,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -51,7 +51,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"postgres:15"`</span>
<span>Default: `"postgres:15"`</span>
</Property>
@@ -674,7 +674,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -1087,13 +1087,13 @@ In: `header`
<Property name={"postgresId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1103,13 +1103,13 @@ In: `header`
<Property name={"databaseName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"databaseUser"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1123,7 +1123,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"postgres:15"`</span>
<span>Default: `"postgres:15"`</span>
</Property>
@@ -1157,7 +1157,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>

View File

@@ -25,7 +25,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -132,7 +132,7 @@ In: `header`
<Property name={"projectId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -322,7 +322,7 @@ In: `header`
<Property name={"projectId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -424,7 +424,7 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -434,7 +434,7 @@ In: `header`
<Property name={"projectId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -25,13 +25,13 @@ In: `header`
<Property name={"regex"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"replacement"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -144,7 +144,7 @@ In: `header`
<Property name={"redirectId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -243,7 +243,7 @@ In: `header`
<Property name={"redirectId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -345,19 +345,19 @@ In: `header`
<Property name={"redirectId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"regex"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"replacement"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -25,13 +25,13 @@ In: `header`
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -41,7 +41,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"redis:8"`</span>
<span>Default: `"redis:8"`</span>
</Property>
@@ -357,7 +357,7 @@ In: `header`
<Property name={"appName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -769,7 +769,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>
@@ -1077,19 +1077,19 @@ In: `header`
<Property name={"redisId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"appName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1103,7 +1103,7 @@ In: `header`
<Property name={"dockerImage"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"redis:8"`</span>
<span>Default: `"redis:8"`</span>
</Property>
@@ -1141,7 +1141,7 @@ In: `header`
<Property name={"applicationStatus"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
<span>Value in: `"idle" | "running" | "done" | "error"`</span>
</Property>

View File

@@ -25,19 +25,19 @@ In: `header`
<Property name={"registryName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"username"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -47,7 +47,7 @@ In: `header`
<Property name={"registryType"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"selfHosted" | "cloud"`</span>
<span>Value in: `"selfHosted" | "cloud"`</span>
</Property>
@@ -158,7 +158,7 @@ In: `header`
<Property name={"registryId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -260,13 +260,13 @@ In: `header`
<Property name={"registryId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"registryName"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -276,19 +276,19 @@ In: `header`
<Property name={"username"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"registryUrl"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -298,13 +298,13 @@ In: `header`
<Property name={"registryType"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"selfHosted" | "cloud"`</span>
<span>Value in: `"selfHosted" | "cloud"`</span>
</Property>
<Property name={"adminId"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -505,7 +505,7 @@ In: `header`
<Property name={"registryId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -604,19 +604,19 @@ In: `header`
<Property name={"registryName"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"username"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -626,7 +626,7 @@ In: `header`
<Property name={"registryType"} type={"string"} required={true} deprecated={undefined}>
<span>Value in: `"selfHosted" | "cloud"`</span>
<span>Value in: `"selfHosted" | "cloud"`</span>
</Property>
@@ -737,19 +737,19 @@ In: `header`
<Property name={"registryUrl"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"username"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -29,13 +29,13 @@ In: `header`
<Property name={"username"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -139,7 +139,7 @@ In: `header`
<Property name={"securityId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -238,7 +238,7 @@ In: `header`
<Property name={"securityId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -340,19 +340,19 @@ In: `header`
<Property name={"securityId"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"username"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"password"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -191,6 +191,106 @@ export interface Response {
<API>
<APIInfo method={"POST"} route={"/settings.toggleDashboard"}>
## settings-toggleDashboard
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"enableDashboard"} type={"boolean"} required={false} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/settings.toggleDashboard" \
-d '{
"enableDashboard": true
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/settings.toggleDashboard", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/settings.cleanUnusedImages"}>
## settings-cleanUnusedImages
@@ -952,9 +1052,9 @@ In: `header`
<Property name={"certificateType"} type={"string"} required={false} deprecated={undefined}>
<span>Default: `"none"`</span>
<span>Default: `"none"`</span>
<span>Value in: `"letsencrypt" | "none"`</span>
<span>Value in: `"letsencrypt" | "none"`</span>
</Property>
@@ -1340,7 +1440,7 @@ In: `header`
<Property name={"traefikConfig"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1533,7 +1633,7 @@ In: `header`
<Property name={"traefikConfig"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -1726,7 +1826,7 @@ In: `header`
<Property name={"traefikConfig"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -2192,13 +2292,13 @@ In: `header`
<Property name={"path"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
<Property name={"traefikConfig"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -2301,7 +2401,7 @@ In: `header`
<Property name={"path"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -2384,6 +2484,97 @@ export interface Response {
<API>
<APIInfo method={"GET"} route={"/settings.getIp"}>
## settings-getIp
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/settings.getIp"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/settings.getIp", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/settings.getOpenApiDocument"}>
## settings-getOpenApiDocument
@@ -2473,4 +2664,286 @@ export interface Response {
</API>
<API>
<APIInfo method={"GET"} route={"/settings.readTraefikEnv"}>
## settings-readTraefikEnv
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/settings.readTraefikEnv"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/settings.readTraefikEnv", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/settings.writeTraefikEnv"}>
## settings-writeTraefikEnv
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"env"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/settings.writeTraefikEnv" \
-d '{
"env": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/settings.writeTraefikEnv", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/settings.haveTraefikDashboardPortEnabled"}>
## settings-haveTraefikDashboardPortEnabled
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/settings.haveTraefikDashboardPortEnabled"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/settings.haveTraefikDashboardPortEnabled", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -0,0 +1,634 @@
---
title: sshKey
full: true
---
import { Root, API, APIInfo, APIExample, Responses, Response, ResponseTypes, ExampleResponse, TypeScriptResponse, Property, ObjectCollapsible, Requests, Request } from "fumadocs-ui/components/api";
<Root>
<API>
<APIInfo method={"POST"} route={"/sshKey.create"}>
## sshKey-create
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"name"} type={"string"} required={true} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"description"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"publicKey"} type={"string"} required={true} deprecated={undefined}>
</Property>
<Property name={"privateKey"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/sshKey.create" \
-d '{
"name": "string",
"description": "string",
"publicKey": "string",
"privateKey": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.create", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/sshKey.remove"}>
## sshKey-remove
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"sshKeyId"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/sshKey.remove" \
-d '{
"sshKeyId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.remove", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/sshKey.one"}>
## sshKey-one
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Query Parameters
<Property name={"sshKeyId"} type={"string"} required={true} deprecated={false}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/sshKey.one?sshKeyId=string"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.one?sshKeyId=string", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"GET"} route={"/sshKey.all"}>
## sshKey-all
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X GET "http://localhost:3000/api/sshKey.all"
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.all", {
method: "GET"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/sshKey.generate"}>
## sshKey-generate
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"type"} type={"string"} required={false} deprecated={undefined}>
<span>Value in: `"rsa" | "ed25519"`</span>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/sshKey.generate" \
-d '{
"type": "rsa"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.generate", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
<API>
<APIInfo method={"POST"} route={"/sshKey.update"}>
## sshKey-update
### Authorization
<Property name={"Authorization"} type={"Bearer <token>"} required={true}>
In: `header`
</Property>
### Request Body
<Property name={"name"} type={"string"} required={false} deprecated={undefined}>
<span>Minimum length: `1`</span>
</Property>
<Property name={"description"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"lastUsedAt"} type={"string | null"} required={false} deprecated={undefined}>
</Property>
<Property name={"sshKeyId"} type={"string"} required={true} deprecated={undefined}>
</Property>
| Status code | Description |
| ----------- | ----------- |
| `200` | Successful response |
| `default` | Error response |
</APIInfo>
<APIExample>
<Requests items={["cURL","JavaScript"]}>
<Request value={"cURL"}>
```bash
curl -X POST "http://localhost:3000/api/sshKey.update" \
-d '{
"name": "string",
"description": "string",
"lastUsedAt": "string",
"sshKeyId": "string"
}'
```
</Request>
<Request value={"JavaScript"}>
```js
fetch("http://localhost:3000/api/sshKey.update", {
method: "POST"
});
```
</Request>
</Requests>
<Responses items={["default"]}>
<Response value={"default"}>
<ResponseTypes>
<ExampleResponse>
```json
{
"message": "string",
"code": "string",
"issues": [
{
"message": "string"
}
]
}
```
</ExampleResponse>
<TypeScriptResponse>
```ts
export interface Response {
message: string;
code: string;
issues?: {
message: string;
}[];
}
```
</TypeScriptResponse>
</ResponseTypes>
</Response>
</Responses>
</APIExample>
</API>
</Root>

View File

@@ -116,7 +116,7 @@ In: `header`
<Property name={"authId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>
@@ -215,7 +215,7 @@ In: `header`
<Property name={"userId"} type={"string"} required={true} deprecated={false}>
<span>Minimum length: `1`</span>
<span>Minimum length: `1`</span>
</Property>

View File

@@ -0,0 +1,18 @@
---
title: 应用程序
description: 使用 Dokploy CLI 管理应用程序的指南
---
Dokploy CLI 可用于创建、部署和管理应用程序。
## 要求
需要先使用 Dokploy CLI 进行身份验证。
## 命令
1. `dokploy app create` - 创建一个新应用程序。
2. `dokploy app delete` - 删除一个应用程序。
3. `dokploy app deploy` - 部署一个应用程序。
4. `dokploy app stop` - 停止一个正在运行的应用程序。

View File

@@ -0,0 +1,25 @@
---
title: 身份验证
description: 使用 Dokploy CLI 进行身份验证的指南
---
Dokploy CLI 使用基于令牌的身份验证系统。要进行身份验证,您需要创建一个访问令牌并安全存储它。
## 创建访问令牌
要创建访问令牌,首先您需要具备相应的权限,如果您是管理员,则不需要权限。
默认情况下,访问令牌不会过期。
您可以前往 `dashboard/settings/profile` 并点击 `生成` 按钮。
<ImageZoom src="/assets/cli/token.png" width={800} height={630} alt='home og image' className="rounded-lg" />
## 存储访问令牌
当您创建访问令牌时Dokploy 将自动生成一个包含访问令牌和服务器 URL 的 config.json 文件。
## 命令
1. `dokploy authenticate` - 使用 Dokploy CLI 进行身份验证。
2. `dokploy verify` - 验证访问令牌是否有效。

View File

@@ -0,0 +1,43 @@
---
title: 数据库
description: 使用 Dokploy CLI 管理数据库的指南
---
Dokploy CLI 可用于创建、部署和管理数据库。
## 需求
需要先进行 Dokploy CLI 的身份验证。
## 命令
### MariaDB
1. `dokploy database mariadb create` - 创建一个新的 MariaDB 数据库。
2. `dokploy database mariadb delete` - 删除一个 MariaDB 数据库。
3. `dokploy database mariadb deploy` - 部署一个 MariaDB 数据库。
4. `dokploy database mariadb stop` - 停止运行中的 MariaDB 数据库。
### PostgreSQL
1. `dokploy database postgresql create` - 创建一个新的 PostgreSQL 数据库。
2. `dokploy database postgresql delete` - 删除一个 PostgreSQL 数据库。
3. `dokploy database postgresql deploy` - 部署一个 PostgreSQL 数据库。
4. `dokploy database postgresql stop` - 停止运行中的 PostgreSQL 数据库。
### MySQL
1. `dokploy database mysql create` - 创建一个新的 MySQL 数据库。
2. `dokploy database mysql delete` - 删除一个 MySQL 数据库。
3. `dokploy database mysql deploy` - 部署一个 MySQL 数据库。
4. `dokploy database mysql stop` - 停止运行中的 MySQL 数据库。
### MongoDB
1. `dokploy database mongodb create` - 创建一个新的 MongoDB 数据库。
2. `dokploy database mongodb delete` - 删除一个 MongoDB 数据库。
3. `dokploy database mongodb deploy` - 部署一个 MongoDB 数据库。
4. `dokploy database mongodb stop` - 停止运行中的 MongoDB 数据库。
### Redis
1. `dokploy database redis create` - 创建一个新的 Redis 数据库。
2. `dokploy database redis delete` - 删除一个 Redis 数据库。
3. `dokploy database redis deploy` - 部署一个 Redis 数据库。
4. `dokploy database redis stop` - 停止运行中的 Redis 数据库。

View File

@@ -0,0 +1,16 @@
---
title: 项目
description: 使用 Dokploy CLI 管理项目的指南
---
Dokploy CLI 可用于创建、部署和管理项目。
## 需求
需要先进行 Dokploy CLI 的身份验证。
## 命令
1. `dokploy project create` - 创建一个新项目。
2. `dokploy project info` - 获取有关项目的信息。
3. `dokploy project list` - 列出所有项目。

View File

@@ -0,0 +1,23 @@
---
title: 介绍
description: 使用 Dokploy 命令行界面的指南
---
Dokploy CLI 是一个用于远程管理您的 Dokploy 服务器的命令行工具。它简化了应用程序和数据库的创建、部署和管理。
## 安装
```bash
npm install -g @dokploy/cli
```
## 用法
```bash
dokploy COMMAND
```
要获取特定命令的帮助:
```bash
dokploy COMMAND --help
```

View File

@@ -0,0 +1,13 @@
{
"title": "CLI",
"root": true,
"pages": [
"---开始使用---",
"index",
"---命令---",
"commands/authentication",
"commands/project",
"commands/application",
"commands/databases"
]
}

View File

@@ -0,0 +1,166 @@
---
title: 高级功能
description: 了解如何使用应用程序中的高级功能。
---
本节旨在为需要在 Dokploy 中管理复杂配置和编排设置的高级用户提供支持。在这里,您可以执行自定义命令、管理集群副本、选择 Docker 注册表以及配置 Docker Swarm 设置。
### 运行命令
- **目的**:允许用户在容器内直接执行自定义 Shell 命令。
- **用法**:在提供的字段中输入需要运行的命令,然后单击“保存”以在容器环境中执行。这一工具特别适合调试或特定管理任务。
### 集群设置
- **目的**:管理应用程序在多个服务器或节点上的扩展和分布。
- **副本数**:设置应运行的应用程序实例数量。
- **注册表选择**:选择将从中提取容器映像的 Docker 注册表。这对于确保在部署过程中使用正确的映像至关重要。
#### 重要提示
修改集群设置后,请始终点击“重新部署”以应用更改。
### Swarm 设置
Swarm 设置允许详细配置容器在 Docker Swarm 中的编排方式。
#### 健康检查
- **目的**:确保容器平稳运行,并在失败时重新启动它们。
- **配置**:指定测试命令、间隔、超时、启动时间和重试次数等参数。
#### 重启策略
定义容器在退出或失败时的处理方式,配置如下:
- **条件**:指定应在何种条件下发生重启。
- **延迟**:设置重启之间的时间延迟。
- **最大尝试次数**:限制重启尝试的次数。
- **窗口**:定义用于评估重启策略的时间窗口。
#### 更新配置
管理 Swarm 中服务的部署和更新过程,配置如下:
- **并行性**:同时更新的容器数量。
- **延迟**:更新之间的时间。
- **失败操作**:更新失败时采取的操作。
- **监控**:更新后监控容器的持续时间。
- **最大失败比例**:在更新被视为失败之前,允许失败的容器比例。
- **顺序**:在更新过程中停止和启动容器的顺序。
#### 放置
根据特定规则和偏好控制容器在 Swarm 中的位置,配置如下:
- **约束条件**:容器放置在节点上必须满足的条件。
- **偏好设置**:在节点之间均匀分配容器的放置偏好。
### 回滚配置
管理更新失败时服务的回滚过程,配置如下:
- **并行性**:同时回滚的容器数量。
- **延迟**:回滚之间的时间。
- **失败操作**:回滚失败时采取的操作。
- **监控**:回滚后监控容器的持续时间。
- **最大失败比例**:在回滚被视为失败之前,允许失败的容器比例。
- **顺序**:在回滚过程中停止和重新启动容器的顺序。
### 模式
定义服务在 Swarm 中的复制方式,配置如下:
- **复制模式**:服务根据指定的设置在节点上复制。
- **副本数**:每个服务的副本数量。
- **全局模式**:每个节点运行服务的单个实例。
- **复制作业**:以复制的方式运行作业。
- **最大并发**:同时运行的作业最大数量。
- **总完成次数**:作业需要完成的总次数。
### 网络
配置服务的网络设置,配置如下:
- **目标**:指定网络名称。
- **别名**:为网络提供别名。
- **驱动程序选项**:网络驱动程序选项,如 MTU 大小和主机绑定。
### 标签
为容器分配元数据以帮助识别和组织,配置如下:
- **标签**:分配给服务的键值对。例如:
1. `com.example.app.name`: "my-app"
2. `com.example.app.version`: "1.0.0"
### 注意
修改 Swarm 设置需要谨慎考虑,因为不正确的配置可能会干扰整个容器编排。始终确保您理解所做更改的影响。
## 资源
管理分配给您的应用程序或数据库的内存和 CPU 资源。
- **内存保留**:保证应用程序的最小内存量。
- **内存限制**:应用程序可以使用的最大内存量。
- **CPU 限制**:应用程序可以使用的最大 CPU 单位数量。
- **CPU 保留**:为应用程序保留的最小 CPU 单位数量。
### 卷/挂载
配置应用程序的持久存储,以确保数据在容器重启和部署之间保持完整。
**绑定挂载**:将主机文件或目录映射到容器文件或目录。通常用于特定配置或数据库。
1. **主机路径**:主机上的路径。
2. **挂载路径**:容器中的路径。
**卷挂载**:使用 Docker 管理的卷,比绑定挂载更易于备份和迁移。
1. **卷名称**Docker 管理的卷名称。
2. **挂载路径**:容器中挂载卷的路径。
**文件挂载**:专门用于单个文件,适用于配置文件。
1. **内容**:要存储在文件中的内容。
2. **挂载路径**:容器中放置文件的路径。
文件挂载是 Dokploy 的一个功能,它在项目内部的 `files` 文件夹中创建一个文件,因此每次部署项目时都会重新创建。
<ImageZoom src="/assets/file-mount-configuration.webp" width={800} height={630} className="rounded-lg"/>
<ImageZoom src="/assets/file-mount.png" width={800} height={630} className="rounded-lg"/>
### 重定向
根据指定的规则将请求重定向到应用程序的另一个 URL提高导航效率和 SEO。
- **正则表达式**:输入一个正则表达式以匹配需要重定向的 URL。
- **替换**:指定流量应重定向到的目标 URL。
- **永久性**:启用此选项以应用永久性 (HTTP 301) 重定向,指示浏览器和搜索引擎页面已永久移动。
#### 示例
要将所有流量从 "http://localhost" 重定向到 "http://mydomain",请将正则表达式设置为 `http://localhost/(.*)`,并将替换设置为 `http://mydomain/$1`。
### 安全
为您的应用程序添加基本身份验证以限制访问。
- **用户名**:输入用户名。
- **密码**:输入密码。
#### 重要提示
添加基本身份验证将在允许访问应用程序之前提示用户输入用户名和密码。在需要额外安全层的环境中使用此功能。
### 端口
通过配置网络端口将应用程序暴露于互联网,允许外部访问。
- **发布端口**:将路由流量到您的应用程序的主机上的端口号。
- **目标端口**:容器内应用程序使用的端口号。
- **协议**:根据应用程序的要求选择 TCP 或 UDP。
#### 重要提示
确保发布端口不会与主机上的其他服务冲突,以避免端口绑定错误。此外,此端口主要用于从外部访问应用程序,例如 `your-ip:port`,而不是通过域访问应用程序。
### Traefik
提供了一种动态且强大的方法来管理 HTTP 流量到您的服务,包括负载均衡和 SSL 终止。
- **规则**:使用 Traefik 强大的基于规则的配置系统定义复杂的路由、负载均衡和安全配置。

View File

@@ -0,0 +1,85 @@
---
title: 自动部署
description: "了解如何将您的应用程序自动部署到 Dokploy。"
---
将应用程序自动部署到 Dokploy 可以通过两种主要方法实现:使用 Webhooks 或 Dokploy API。每种方法都支持各种平台并提供简化的部署流程。
## GitHub
对于 GitHub我们提供无需任何配置的自动部署。这将在您推送到代码库时自动部署您的应用程序。
## Webhook URL
Webhooks 允许您在源代码库中进行更改时自动部署应用程序。
- GitHub
- GitLab
- Bitbucket
- Gitea
- DockerHub
### 配置步骤
1. **启用自动部署**:在 Dokploy 的应用程序设置的一般选项卡中切换“自动部署”按钮。
2. **获取 Webhook URL**:从部署日志中找到 Webhook URL。
<ImageZoom
src="/assets/webhook-url.png"
alt="Webhook URL"
width={1000}
height={500}
/>
3. **配置您的代码库**
- 转到您选择的平台上的代码库设置。
- 添加由 Dokploy 提供的 webhook URL。
- 确保设置与触发 webhook 所需的配置匹配。
<ImageZoom
src="/assets/webhook-github.png"
alt="Webhook URL"
width={1000}
height={500}
/>
#### 重要提示
- **分支匹配**:使用基于 Git 的提供商GitHub、GitLab 等)时,请确保 Dokploy 中配置的分支与您打算推送的分支匹配。不匹配将导致“分支不匹配”错误。
- **Docker 标签**:对于使用 DockerHub 的部署,请确保推送的标签与 Dokploy 中指定的标签匹配。
- 所有提供商的步骤都是相同的。
### API 方法
通过 Dokploy API 从任何地方以编程方式部署您的应用程序。
### 使用 API 部署的步骤
步骤:
1. **生成令牌**:在 Dokploy 的个人资料设置中创建一个 API 令牌。
2. **获取应用程序 ID**
```http
curl -X 'GET' \
'https://your-domain/api/project.all' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <token>'
```
此命令列出所有项目和服务。确定您希望部署的应用程序的 applicationId。
3. **触发部署**
```http
curl -X 'POST' \
'https://your-domain/api/application.deploy' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
-d '{
"applicationId": "string"
}'
```
此 API 方法允许灵活的、可编程的部署选项,适用于自动化系统或不便于直接代码库集成的情况。通过这种方式,您可以从任何地方部署您的应用程序,您可以使用 webhook URL 或 API。

View File

@@ -0,0 +1,46 @@
---
title: 域名
description: '域名'
---
本节概述了如何为 Dokploy 中的应用程序配置域名,确保您的应用程序可以通过自定义 URL 进行访问。
### 添加域名
将自定义域名与您的应用程序关联,使其能够通过互联网访问。
- **主机**:您希望链接到应用程序的域名(例如,`api.dokploy.com`)。
- **路径**:应用程序在域名内应可访问的具体路径。
- **容器端口**:域名应路由到容器上的端口。
- **证书**:选择是否通过 SSL/TLS 证书来保护域名。Dokploy 支持通过 Let's Encrypt 自动提供 SSL 证书。
- **HTTPS**:启用此选项以为您的域名启用 HTTPS提供安全的加密连接。
#### 添加域名的步骤
1. 点击“添加域名”。
2. 填写域名详细信息,包括主机、路径和端口。
3. 选择启用 HTTPS 并选择证书选项。
4. 点击“创建”以应用设置。
### 生成域名
快速为开发或测试目的设置域名,无需注册域名。
- **生成 TraefikMe 域名**:创建由 TraefikMe 提供的免费域名。这非常适合在购买正式域名之前进行测试或临时访问。
#### 生成域名的步骤
1. 点击“生成域名”。
2. 选择“生成 TraefikMe 域名”以快速设置。
3. 将自动为您的应用程序分配一个域名。
### 管理域名
- **查看和修改**:现有域名会列出,您可以编辑设置或删除它们。
- **详细信息**:每个域名条目显示已配置的主机、路径、端口以及 HTTPS 是否启用。
### 注意事项
正确的域名配置对于应用程序的可访问性和安全性至关重要。始终验证域名设置,并确保 DNS 配置正确指向正确的 IP 地址。启用 HTTPS 以增强安全性和信任,特别是在生产环境中。
### 关于容器端口的重要说明
域名设置中指定的“容器端口”专门用于通过 Traefik 将流量路由到正确的应用程序容器,并不会直接将端口暴露给互联网。这与“高级 -> 端口”部分中的端口设置根本不同,后者用于直接暴露应用程序端口。域名设置中的容器端口确保 Traefik 可以根据域名配置内部将流量引导到容器内的指定端口。

View File

@@ -0,0 +1,42 @@
---
title: 提供者
description: '了解如何在您的应用程序中使用提供者。'
---
Dokploy 提供了几种部署方法,简化了无论您使用 GitHub、任何 Git 提供者、Docker 还是自动化部署的过程。
- GitHub
- Git任何 Git 提供者)
- Docker
## GitHub
通过 GitHub 部署非常简单:
1. 在 `/dashboard/settings/server` 中配置您的 GitHub 仓库。
2. 在创建应用程序时Dokploy 会自动检索可用的仓库和分支。
## Git
对于来自任何 Git 仓库的部署,无论是公共还是私有,您可以使用 SSH 或 HTTPS
1. 输入仓库的 URL。
2. 指定您希望部署的分支。
### 私有仓库
对于私有仓库,使用 SSH 进行身份验证。我们提供一个锁图标来生成 SSH 密钥。
<ImageZoom src="/assets/dokploy-ssh-key.png" width={800} height={630} className="rounded-lg"/>
然后,您可以复制 SSH 密钥并将其粘贴到您的帐户设置中。
<ImageZoom src="/assets/private-repository.png" width={800} height={630} className="rounded-lg"/>
这使您能够从私有仓库中拉取代码,这种方法在几乎所有提供者中都是一致的。
## Docker
对于 Docker 部署:
- 提供一个 Docker 镜像。对于私有仓库,输入用户名和密码。

View File

@@ -6,14 +6,30 @@ description: Learn how to use providers in your application.
Dokploy offers several deployment methods, streamlining the process whether you're utilizing GitHub, any Git provider, Docker, or automated deployments.
- GitHub
- Gitlab
- Bitbucket
- Git (Any Git Provider)
- Docker
## GitHub
Deploying via GitHub is straightforward:
Deploying via GitHub:
1. Configure your GitHub repository in the `/dashboard/settings/server`.
1. Configure your GitHub repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Gitlab
Deploying via Gitlab:
1. Configure your Gitlab repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Bitbucket
Deploying via Bitbucket:
1. Configure your Bitbucket repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Git
@@ -27,11 +43,21 @@ For deployments from any Git repository, whether public or private, you can use
For private repositories, authenticate using SSH. We provide a lock icon to generate an SSH key.
<ImageZoom src="/assets/dokploy-ssh-key.png" width={800} height={630} className="rounded-lg"/>
<ImageZoom
src="/assets/dokploy-ssh-key.png"
width={800}
height={630}
className="rounded-lg"
/>
You can then copy the SSH key and paste it into the settings of your account.
<ImageZoom src="/assets/private-repository.png" width={800} height={630} className="rounded-lg"/>
<ImageZoom
src="/assets/private-repository.png"
width={800}
height={630}
className="rounded-lg"
/>
This enables you to pull repositories from your private repository, a method consistent across nearly all providers.

View File

@@ -1,96 +1,88 @@
---
title: Cluster (Advanced)
description: "Learn how to set up and manage a cluster in Dokploy with docker swarm."
title: 集群(高级)
description: "了解如何在 Dokploy 中使用 Docker Swarm 设置和管理集群。"
sidebar:
order: 1
---
对于大多数情况,除非您需要扩展应用程序,否则您可能不需要使用集群。集群是由多个节点组成的,它们协同工作以提供一个统一的服务。在 Dokploy 中,集群管理着一组服务器,共同协作以提供这一统一服务。
For most suitables cases you may not need to use a cluster, unless you need to scale your application.
A cluster is a group of nodes that work together to provide a single, unified service. In Dokploy, clusters manage a group of servers collaborating to deliver this unified service.
我们在后台使用 Traefik 来为应用程序进行流量负载均衡。
We use traefik under the hood to load balance the traffic to the application.
建议在使用集群之前先阅读 [Traefik 文档](https://doc.traefik.io/traefik/routing/providers/swarm/),以更好地理解它的工作原理。
要开始向您的集群添加节点,您需要一个注册表。节点需要注册表来拉取镜像。
We recommend to read the [Traefik Docs](https://doc.traefik.io/traefik/routing/providers/swarm/) before using a cluster, to have a better understanding of how it works.
## 要求
To start adding nodes to your cluster, you need a registry. The nodes require the registry to pull images .
- 已安装 Dokploy 的服务器。
- 用于存储镜像的注册表。
- 用于添加为节点的额外服务器VPS
## Requirements
## 注册表选项
- A server with Dokploy installed.
- A registry to store your images.
- Additional servers (VPS) to add as nodes.
我们提供两种方法将注册表添加到您的集群中:
## Registry Options
- **自定义注册表(免费)**:在您的服务器上设置私有注册表。
- **外部注册表(付费)**:使用外部注册表,如 Docker Hub、DigitalOcean、AWS ECR 等。
We provide two methods to add a registry to your cluster:
您可以看到可以添加两种类型的注册表:
- **Custom Registry (Free)**: Set up a private registry on your server.
- **External Registry (Paid)**: Use external registries like Docker Hub, DigitalOcean, AWS ECR, etc.
<ImageZoom src="/assets/images/cluster/registry.png" width={800} height={630} alt='home og image' className="rounded-lg" />
## 向集群添加节点
You can see you can add two types of registries:
一旦有了注册表,您可以通过以下步骤向集群添加节点:
<ImageZoom src="/assets/images/cluster/registry.png" width={800} height={630} alt='home og image' className="rounded-lg" />
1. 点击 `Add Node` 按钮。
2. 您将看到两个标签:`Worker` 和 `Manager`。
3. 选择您要添加的节点类型。
4. 按照提供的两步进行操作:
- 安装 Docker 引擎。
- 安装 Dokploy 代理。这两个节点类型的步骤是相同的。
5. 在新服务器上运行提供的命令。
6. 运行命令后,进入 `server/settings/cluster`。您将在表格中看到 Worker 和 Manager 节点的条目。
<ImageZoom src="/assets/images/cluster/nodes.png" width={800} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/cluster/cluster.png" width={800} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/cluster/application.png" width={800} height={630} alt='home og image' className="rounded-lg" />
## Adding Nodes to a Cluster
## 部署应用程序
Once you have a registry, you can add nodes to your cluster by following these steps:
一旦您将节点连接到集群,您可以按以下步骤部署应用程序:
1. Click the `Add Node` button.
2. You will see two tabs: `Worker` and `Manager`.
3. Select the type of node you want to add.
4. Follow the two steps provided:
- Install the Docker engine.
- Install the Dokploy agent. These steps are the same for both node types.
5. Run the provided commands on the new server.
6. After running the commands, go to `server/settings/cluster`. You will see entries for both the worker and manager nodes in the table.
1. 在项目中创建一个应用程序。
2. Fork 仓库 [Dokploy/swarm-test](https://github.com/Dokploy/swarm-test)。
3. 将其保存为 GitHub 提供商。
4. 进入应用程序的高级选项卡。
5. 在“集群设置”部分:
- 更改副本数量(默认是 1
- 选择节点拉取镜像的注册表。
6. 现在,您可以将应用程序部署到集群(通过点击 `Deploy` 按钮)。
<ImageZoom src="/assets/images/cluster/nodes.png" width={800} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/cluster/cluster.png" width={800} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/cluster/application.png" width={800} height={630} alt='home og image' className="rounded-lg" />
事实上这是实现多节点部署的一个简单方法。Traefik 将处理负载均衡,并将流量路由到应用程序最可用的节点。
要进一步增强此设置,您可以使用 AWS、DigitalOcean 或 Google Cloud 等服务的负载均衡器。这些负载均衡器在路由请求之前会进行健康检查,以确保只有健康的节点接收流量。如果节点未通过健康检查,负载均衡器将自动将请求路由到另一个节点。此设置提供了更稳健和可扩展的部署。
## Deploying an Application
要向集群添加管理节点,请按照添加 Worker 节点的相同步骤进行操作。然而,如果运行 Dokploy 的管理节点发生故障,所有其他节点将变得不可访问。这是因为我们目前为集群设置了单一入口点。为确保高可用性,您应该有多个管理节点。
Once you have linked nodes to the cluster, you can deploy an application as follows:
要实现这一点,您需要将所有持久性和 Traefik 信息复制到新的管理节点。这将为集群创建多个入口点。您可以使用 rsync、aws data sync 或其他工具在节点之间同步所有必要信息。
1. Create an application in a project.
2. Fork the repository [Dokploy/swarm-test](https://github.com/Dokploy/swarm-test).
3. Save it as a GitHub provider.
4. Go to the advanced tab of the application.
5. In the "Cluster Settings" section:
- Change the number of replicas (default is 1).
- Select the registry for the nodes to pull images from.
6. Now you can deploy the application to the cluster (By clicking the `Deploy` button).
## 自定义应用程序
您可以在“Swarm 设置”部分自定义应用程序。在这里,您几乎可以修改与 Swarm 应用模式相关的所有设置。
In fact, this is a straightforward way to achieve multi-node deployments. Traefik will handle load balancing and route traffic to the node where the application is most available.
界面中提供了每个设置的占位符和预期格式。所有字段必须为 JSON 值。
To further enhance this setup, you can use load balancers from services like AWS, DigitalOcean, or Google Cloud. These load balancers perform health checks before routing requests to ensure that only healthy nodes receive traffic. If a node fails the health check, the load balancer will automatically route the request to another node. This setup provides a more robust and scalable deployment.
#### 可自定义设置:
To add manager nodes to the cluster, follow the same steps as adding a worker node. However, if the manager node (where Dokploy is running) fails, all other nodes will become inaccessible. This is because we currently have a single entry point for the cluster. To ensure high availability, you should have multiple manager nodes.
- 健康检查
- 重启策略
- 放置策略
- 更新配置
- 回滚配置
- 模式
- 网络
- 标签
To achieve this, you need to replicate all persistent and Traefik information to the new manager nodes. This will create multiple entry points for the cluster. You can use tools like rsync, aws data sync, or any other tool to synchronize all the necessary information between the nodes.
## Customizing the Application
You can customize the application in the "Swarm Settings" section. Here, you can modify almost every setting related to the swarm application mode.
In the interface, placeholders and expected formats for each setting are provided. All fields must be JSON values.
#### Customizable Settings:
- Healthcheck
- Restart Policy
- Placement
- Update Config
- Rollback Config
- Mode
- Network
- Labels
<ImageZoom src="/assets/images/cluster/swarm-settings.png" width={800} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/cluster/swarm-settings.png" width={800} height={630} alt='home og image' className="rounded-lg" />

View File

@@ -0,0 +1,32 @@
---
title: 连接
description: "了解如何使用 Dokploy 连接到您的数据库。"
---
本节解释如何为 Dokploy 中的应用程序配置数据库访问,包括内部网络中的连接和可以通过互联网访问的外部连接。
### 内部凭证
用于从同一网络连接到数据库,而无需将数据库暴露于互联网。
- **用户**:数据库访问的用户名。
- **密码**:数据库访问的安全密码。
- **数据库名称**:要连接的数据库名称。
- **内部主机**:网络内数据库的主机名或内部标识符。
- **内部端口(容器)**:在容器内连接到数据库所使用的端口。
- **内部连接 URL**:用于内部连接数据库的完整连接字符串。
### 外部凭证
使数据库可以通过互联网访问,便于远程管理或外部应用程序。
- **外部端口(互联网)**:分配一个当前未被其他服务使用的端口,以便将数据库外部暴露。
#### 配置外部访问的步骤
1. 确保外部端口可用,并且与其他服务不冲突。
2. 输入要用于暴露数据库的外部端口。
3. 系统将自动生成外部连接 URL可用于通过互联网访问数据库的任何数据库管理工具如 phpMyAdmin、MySQL Workbench、PgAdmin 等。
### 重要提示
出于安全原因,应对在同一网络或环境中运行的应用程序使用内部凭证,以防止未经授权的访问。外部凭证应仅在必要时使用,并采取适当的安全措施,如 VPN 或 IP 白名单。

View File

@@ -0,0 +1,192 @@
---
title: 域名
description: 为您的 Docker Compose 应用程序配置域名。
---
在使用 Docker Compose 时,为服务添加域名是一个简单的过程。本指南将引导您完成为应用程序配置域名的必要步骤。
关键步骤:
1. 将服务添加到 `dokploy-network`。
2. 使用 Traefik 标签配置路由。
## 示例场景
让我们考虑一个包含三个组件的应用程序:前端、后端和数据库。我们将从一个基本的 Docker Compose 文件开始,然后通过域名配置对其进行增强。
```yaml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- ./frontend:/app
ports:
- "3000:3000"
depends_on:
- backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- ./backend:/app
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
```
## 步骤 1添加网络
首先,我们将 `dokploy-network` 添加到我们的服务中:
```yaml
version: '3.8'
services:
frontend:
# ...(之前的配置)
networks:
- dokploy-network
backend:
# ...(之前的配置)
networks:
- dokploy-network
database:
# ...(之前的配置)
networks:
- dokploy-network
volumes:
db-data:
networks:
dokploy-network:
external: true
```
## 步骤 2配置 Traefik 标签
现在,让我们添加 Traefik 标签以将域名路由到我们的服务。我们将专注于前端和后端服务:
{/* 必须添加这些标签:
1. `traefik.enable=true`
此标签告诉 Traefik 此服务应由 Traefik 路由。
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')`
此标签告诉 Traefik 使用的域名是 `your-domain.dokploy.com`
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web`
此标签告诉 Traefik 该服务应通过 `http` 协议访问。
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000`
此标签告诉 Traefik 使用的端口是 `3000`
注意:对于 loadbalancer.server.port确保分配您服务所使用的端口。请注意您无需像这样暴露端口
注意:在 loadbalancer.server.port 确保分配您服务使用的端口,并且需要注意的是,您无需以这种方式暴露端口:
`'3000:3000'` 这是不正确的,您只需分配服务正在使用的端口,在这种情况下为 `3000`。
确保创建指向您的域名的 `A` 记录,这可以通过您的 DNS 提供商完成。*/}
```yaml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- ./frontend:/app
expose:
- 3000
depends_on:
- backend
networks:
- dokploy-network
labels:
- traefik.enable=true
- traefik.http.routers.frontend-app.rule=Host(`frontend.dokploy.com`)
- traefik.http.routers.frontend-app.entrypoints=web
- traefik.http.services.frontend-app.loadbalancer.server.port=3000
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- ./backend:/app
expose:
- 5000
environment:
- DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
depends_on:
- database
networks:
- dokploy-network
labels:
- traefik.enable=true
- traefik.http.routers.backend-app.rule=Host(`backend.dokploy.com`)
- traefik.http.routers.backend-app.entrypoints=web
- traefik.http.services.backend-app.loadbalancer.server.port=5000
database:
# ...(与之前相同)
volumes:
db-data:
networks:
dokploy-network:
external: true
```
## 理解 Traefik 标签
1. `traefik.enable=true` 启用服务的 Traefik 路由。
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')` 指定服务的域名。
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web` 将服务设置为可通过 HTTP 访问。
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000` 指定服务内部使用的端口。
**注意**:将 `<UNIQUE-RULE>` 替换为每个服务的唯一标识符例如frontend-app、backend-app 等)。
## 重要考虑事项
1. **端口暴露**:使用 `expose` 而不是 `ports` 来暴露主机机器的端口。这确保端口不会暴露给主机机器。
2. **DNS 配置**:确保您在 DNS 提供商设置中创建指向您域名的 `A` 记录。
3. **HTTPS**:对于 HTTPS您可以使用 Let's Encrypt 或其他 SSL/TLS 证书。
## 部署
有了这些配置,您现在可以使用 Docker Compose 部署您的应用程序。此设置应足以通过 Traefik 使用自定义域路由启动和运行您的服务。
## SSL 证书和进一步配置
如果您有关于何时使用 Let's Encrypt 或其他 SSL 证书选项的问题,您可以在以下资源中找到更详细的信息:
1. [证书](/docs/core/domain/certificates)
2. [Docker Compose 域名](/docs/core/domain/docker-compose-setup)
3. [Docker Compose 示例](/docs/core/docker-compose/example)
如果您有任何进一步的问题或需要帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc),我们很乐意为您提供帮助。

View File

@@ -10,12 +10,20 @@ Key Steps:
1. Add the service to the `dokploy-network`.
2. Use Traefik labels to configure routing.
import { Callout } from "fumadocs-ui/components/callout";
<Callout title="Attention" type="info">
Since v0.7.0 Dokploy support domains natively. This means that you can
configure your domain directly in the Dokploy UI, without doing the rest of
the steps.
</Callout>
Example Scenario
Let's consider an application with three components: a frontend, a backend, and a database. We'll start with a basic Docker Compose file and then enhance it with domain configuration.
```yaml
version: '3.8'
version: "3.8"
services:
frontend:
@@ -60,7 +68,7 @@ volumes:
First, we'll add the dokploy-network to our services:
```yaml
version: '3.8'
version: "3.8"
services:
frontend:
@@ -90,28 +98,8 @@ Step 2: Configuring Traefik Labels
Now, let's add Traefik labels to route domains to our services. We'll focus on the frontend and backend services:
{/* It is necessary to add these labels:
1. `traefik.enable=true`
This label tells Traefik that this service should be routed by Traefik.
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')`
This label tells Traefik that the domain to be used is `your-domain.dokploy.com`
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web`
This label tells Traefik that the service should be accessible via the `http` protocol.
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000`
This label tells Traefik that the port to be used is `3000`
Note: For loadbalancer.server.port, ensure you assign the port that your service is using. It's important to note that you do not need to expose the port like this:
Nota: en el loadbalancer.server.port asegurate de asignar el puerto que tu servicio esta utilizando, y alcaramos no es necesario que expongas el puerto de esta manera
'3000:3000' esto es incorrecto, unicamente debes de asignar el puerto que tu servicio esta utilizando, en este caso `3000`
asegurate de crear los registros `A` que apunten a tu dominio, esto hazlo desde tu DNS provider. */}
```yaml
version: '3.8'
version: "3.8"
services:
frontend:
@@ -165,21 +153,18 @@ networks:
Understanding Traefik Labels
1. `traefik.enable=true` Enables Traefik routing for the service.
1. `traefik.enable=true` Enables Traefik routing for the service.
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')` Specifies the domain for the service
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web` Sets the service to be accessible via HTTP.
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web` Sets the service to be accessible via HTTP.
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000` Specifies the port your service is using internally.
**Note**: Replace `<UNIQUE-RULE>` with a unique identifier for each service (e.g., frontend-app, backend-app, etc.).
**Note**: Replace `<UNIQUE-RULE>` with a unique identifier for each service (e.g., frontend-app, backend-app, etc.).
## Important Considerations
1. **Port Exposure**: Use `expose` instead of `ports` to expose ports to the host machine. This ensures that the ports are not exposed to the host machine.
2. **DNS Configuration**: Ensure you create `A` records pointing to your domain in your DNS Provider Settings.
3. **HTTPS**: For HTTPS, you can use Let's Encrypt or other SSL/TLS certificates.
3. **HTTPS**: For HTTPS, you can use Let's Encrypt or other SSL/TLS certificates.
## Deployment

View File

@@ -0,0 +1,107 @@
---
title: "示例"
description: "学习如何在 Dokploy 中使用 Docker Compose"
---
## 教程
在本教程中,我们将使用 Docker Compose 创建一个简单的应用程序,并将流量路由到可访问的域名。
### 步骤
1. 创建一个新项目。
2. 创建一个新服务 `Compose`,并选择 Compose 类型为 `Docker Compose`。
3. Fork 这个仓库:[Repo](https://github.com/Dokploy/docker-compose-test)。
4. 选择提供商类型GitHub 或 Git。
5. 选择仓库:`Dokploy/docker-compose-test`。
6. 选择分支:`main`。
7. 将 Compose 路径设置为 `./docker-compose.yml` 并保存。
![Docker compose configuration](/assets/images/compose/setup.png)
### 更新你的 `docker-compose.yml`
在现有的 `docker-compose.yml` 文件中添加以下内容:
1. 为每个服务添加网络 `dokploy-network`。
2. 添加 Traefik 标签,使服务能够通过域名访问。
示例:
让我们修改以下的 Compose 文件,使其能够在 Dokploy 中运行:
```yaml
version: "3"
services:
next-app:
build:
context: ./next-app
dockerfile: prod.Dockerfile
args:
ENV_VARIABLE: ${ENV_VARIABLE}
NEXT_PUBLIC_ENV_VARIABLE: ${NEXT_PUBLIC_ENV_VARIABLE}
restart: always
ports:
- 3000:3000
networks:
- my_network
networks:
my_network:
external: true
```
更新版本,添加了 dokploy-network 和 Traefik 标签:
import { Callout } from 'fumadocs-ui/components/callout';
<Callout type="warn">
不要为每个服务设置 container_name 属性,否则会导致日志、指标和其他功能出现问题。
</Callout>
{/* :::danger
不要为每个服务设置 container_name 属性,否则会导致日志、指标和其他功能出现问题。
::: */}
```yaml
version: "3"
services:
next-app:
build:
context: ./next-app
dockerfile: prod.Dockerfile
args:
ENV_VARIABLE: ${ENV_VARIABLE}
NEXT_PUBLIC_ENV_VARIABLE: ${NEXT_PUBLIC_ENV_VARIABLE}
restart: always
ports:
- 3000
networks:
- dokploy-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.<unique-name>.rule=Host(`your-domain.com`)"
- "traefik.http.routers.<unique-name>.entrypoints=websecure"
- "traefik.http.routers.<unique-name>.tls.certResolver=letsencrypt"
- "traefik.http.services.<unique-name>.loadbalancer.server.port=3000"
networks:
dokploy-network:
external: true
```
确保将 A 记录指向您希望用于服务的域名。
<ImageZoom src="/assets/images/compose/domain.png" width={800} height={630} alt='home og image' className="rounded-lg" />
通过点击 "deploy" 部署应用程序,等待部署完成。然后给 Traefik 大约 10 秒的时间来生成证书。之后,您就可以通过设置的域名访问应用程序。
<ImageZoom src="/assets/images/compose/application.png" width={800} height={630} alt='home og image' className="rounded-lg" />
**提示**:
1. 为每个路由器设置唯一名称:`traefik.http.routers.<unique-name>`
2. 为每个服务设置唯一名称:`traefik.http.services.<unique-name>`
3. 确保网络已连接到 `dokploy-network`
4. 将入口点设置为 websecure并将证书解析器设置为 letsencrypt以生成证书。

View File

@@ -0,0 +1,76 @@
---
title: "概述"
description: "了解如何使用 Docker Compose 和 Dokploy"
---
import { Callout } from "fumadocs-ui/components/callout";
Dokploy 集成了 Docker Compose 和 Docker Stack以提供灵活的部署解决方案。无论您是在本地开发还是进行大规模部署Dokploy 都能通过这些强大的 Docker 工具简化应用管理。
### 配置方法
Dokploy 提供两种创建 Docker Compose 配置的方法:
- **Docker Compose**:适用于标准 Docker Compose 配置。
- **Stack**:旨在使用 Docker Swarm 进行应用编排。请注意,在此模式下,一些 Docker Compose 功能(例如 `build`)不可用。
### 一般
配置代码来源、应用构建方式,并管理部署、更新、删除应用及停止应用等操作。
### 环境
Dokploy 内置的代码编辑器允许您为 Docker Compose 文件指定环境变量。默认情况下Dokploy 会在指定的 Docker Compose 文件路径中创建 `.env` 文件。
### 监控
在 Dokploy 中可以单独监控每个服务。如果您的应用包含多个服务,可以单独监控每个服务,以确保最佳性能。
### 日志
通过 Dokploy 日志查看器访问每个服务的详细日志,这可以帮助排除故障并确保服务的稳定性。
### 部署
您可以查看应用的最近 10 次部署。当您实时部署应用时,将创建一个新的部署记录,并逐渐显示应用的构建过程。
我们还提供一个按钮,可以取消排队中的部署。请注意,正在进行的部署无法取消。
我们提供了一个 webhook以便您可以通过推送到 GitHub、Gitea、GitLab、Bitbucket 仓库来触发自己的部署。
### 高级
本节为经验丰富的用户提供高级配置选项。包括在容器内自定义命令和卷的工具。
- **命令**Dokploy 定义了一个命令来运行 Docker Compose 文件,确保通过 UI 完全控制。不过,您可以向命令添加标志或选项。
- **卷**:为了确保数据在部署之间持久化,配置应用的存储卷。
<ImageZoom
src="/assets/images/compose/overview.png"
width={800}
height={630}
quality={100}
priority
alt="首页 og 图片"
className="rounded-lg"
/>
<Callout title="卷">
Docker 卷是一种持久化 Docker 容器生成和使用的数据的方式。它们对于在容器重启之间维护数据或在不同容器之间共享数据尤其有用。
要将卷绑定到主机,可以在您的 docker-compose.yml 文件中使用以下语法,但这种方式在新部署时会清理卷:
```yaml
volumes:
- "/folder:/path/in/container" ❌
```
建议使用 ../files 文件夹,以确保您的数据在部署之间保持持久。例如:
```yaml
volumes:
- "../files/my-database:/var/lib/mysql" ✅
- "../files/my-configs:/etc/my-app/config" ✅
```
</Callout>

View File

@@ -0,0 +1,40 @@
---
title: "提供商"
description: "了解如何在 Dokploy 中使用 Docker Compose。"
---
Dokploy 提供几种部署方法,使得无论您是使用 GitHub、任何 Git 提供商、原始方法还是自动部署,流程都更加简化。
- GitHub
- Git任何 Git 提供商)
- 原始方法
## GitHub
通过 GitHub 部署非常简单:
1. 在 `/dashboard/settings/server` 中配置您的 GitHub 存储库。
2. 在创建应用程序时Dokploy 会自动检索可用的存储库和分支。
## Git
对于来自任何 Git 存储库的部署,无论是公共的还是私有的,您可以使用 SSH 或 HTTPS
1. 输入存储库 URL。
2. 指定您希望部署的分支。
### 私有存储库
对于私有存储库,请使用 SSH 进行身份验证。我们提供一个锁定图标以生成 SSH 密钥。
<ImageZoom src="/assets/dokploy-ssh-compose.png" width={800} height={630} className="rounded-lg"/>
然后,您可以复制 SSH 密钥并将其粘贴到您账户的设置中。
<ImageZoom src="/assets/private-repository.png" width={800} height={630} className="rounded-lg"/>
这使您能够从私有存储库中拉取代码,这种方法几乎适用于所有提供商。
## 原始方法
您可以直接在代码编辑器中指定 Docker Compose 文件并触发部署。

View File

@@ -6,14 +6,30 @@ description: "Learn how to use Docker Compose with Dokploy"
Dokploy offers several deployment methods, streamlining the process whether you're utilizing GitHub, any Git provider, Raw, or automated deployments.
- GitHub
- Gitlab
- Bitbucket
- Git (Any Git Provider)
- Raw
## GitHub
Deploying via GitHub is straightforward:
Deploying via GitHub:
1. Configure your GitHub repository in the `/dashboard/settings/server`.
1. Configure your GitHub repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Gitlab
Deploying via Gitlab:
1. Configure your Gitlab repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Bitbucket
Deploying via Bitbucket:
1. Configure your Bitbucket repository in the `/dashboard/settings/git-providers`.
2. When creating an application, Dokploy automatically retrieves the available repositories and branches.
## Git
@@ -27,15 +43,24 @@ For deployments from any Git repository, whether public or private, you can use
For private repositories, authenticate using SSH. We provide a lock icon to generate an SSH key.
<ImageZoom src="/assets/dokploy-ssh-compose.png" width={800} height={630} className="rounded-lg"/>
<ImageZoom
src="/assets/dokploy-ssh-compose.png"
width={800}
height={630}
className="rounded-lg"
/>
You can then copy the SSH key and paste it into the settings of your account.
<ImageZoom src="/assets/private-repository.png" width={800} height={630} className="rounded-lg"/>
<ImageZoom
src="/assets/private-repository.png"
width={800}
height={630}
className="rounded-lg"
/>
This enables you to pull repositories from your private repository, a method consistent across nearly all providers.
## Raw
You specify a docker compose file directly in the code editor and trigger a deployment.
You specify a docker compose file directly in the code editor and trigger a deployment.

View File

@@ -0,0 +1,59 @@
---
title: "证书"
description: "了解如何为 Dokploy 面板设置证书"
---
import { Callout } from 'fumadocs-ui/components/callout';
在为 Dokploy 使用域名时,我们提供三种证书选项:
- 不使用 (`None`)
- 使用免费的 SSL 证书(来自 [Let's Encrypt](https://letsencrypt.org/)
- 使用自定义 SSL 证书
## 不使用None
选择 `None` 意味着我们不会分配 `tlsResolver`,因此你的 DNS 提供商可以从他们的服务器实现 SSL 证书。
<Callout title="Cloudflare">当你在 Cloudflare 上注册域名时Cloudflare 会自动分配 SSL 证书,因此你需要在 Dokploy 中选择 `None` 并禁用 HTTPS。</Callout>
## Let's Encrypt
使用来自 [Let's Encrypt](https://letsencrypt.org/) 的免费 SSL 证书是最简单的选项,但它有一些限制:
1. **速率限制**:在特定时间范围内,每个域名和账户可发放的证书数量有限制。
2. **有效期短**:证书仅有效 90 天,但 Traefik 会自动为你续期。
3. **通配符证书**:虽然支持,但获取通配符证书需要 DNS-01 验证,可能会更复杂。
4. **仅域名验证**Let's Encrypt 仅提供域名验证DV证书这意味着它们只验证域名所有权而不验证背后的组织。
5. **无担保**:证书没有任何担保或责任覆盖,可能不适用于所有用例。
### 其他提供商
对于由 Cloudflare 以外的提供商管理的域名,流程非常简单:
1. 在 Dokploy 中选择 `Let's Encrypt` 并启用 `HTTPS`。
2. 确保 DNS 记录已正确设置为指向你的服务器。
3. 其余工作由 Traefik 处理,证书应在大约 20 秒内生成。
### Cloudflare 设置
如果你的域名由 Cloudflare 管理:
1. 确保你的域名在 Cloudflare 中设置为 `Full (Strict)` 模式。
2. 在 Dokploy 中选择 `Let's Encrypt` 并启用 `HTTPS`。
Cloudflare 配置步骤:
1. 登录 Cloudflare 并导航至 `Websites` -> `Your Domain` -> `SSL/TLS` -> `Overview`。
2. 你会看到四种模式Off、Flexible、Full、Full (Strict))。
3. 要使用 Let's Encrypt选择 `Full (Strict)`。
<Callout>
**注意**:在应用程序中创建域名时,确保使用 `Let's Encrypt` 证书并启用 `HTTPS`。证书的生成通常需要大约 20 秒。如果证书未生成,请重启 Traefik 并重试。
</Callout>
## 自定义 SSL
我们提供了创建证书并让 Traefik 引用它的方法,但这并不意味着它会自动生效。你需要调整 Traefik 配置以使用它。
你可以在[这里](https://docs.traefik.io/https/acme/#custom-ssl-certificates)阅读更多关于如何创建自定义证书的内容。

View File

@@ -0,0 +1,73 @@
---
title: "Docker Compose 设置"
description: "了解如何为 Docker Compose 应用程序设置域名"
---
import { Step, Steps } from 'fumadocs-ui/components/steps';
本指南详细说明了如何为你的 Docker Compose 应用程序设置域名。
## 创建 DNS 记录
1. 添加一个 `A` 记录到你的 DNS 设置中:
- **名称:** 输入你希望指向的路径(例如,`app` 对应 `app.yourdomain.com`)。
- **值:** 输入你的服务器 IP 地址,例如 `1.2.3.4`。
## Docker Compose 域名设置
要使 Docker Compose 服务或容器通过域名访问,需要在现有的 Docker Compose 文件中添加两部分内容。
<Steps>
<Step>
添加 `dokploy-network` 网络到每个服务。
```yaml
services:
app:
image: nextjs-app
networks:
- dokploy-network
ports:
- "3000"
networks:
dokploy-network:
external: true
```
</Step>
<Step>
添加 Traefik 标签,使服务可以通过域名访问。
1. 如果你使用的是默认的 Cloudflare 配置,添加以下标签:
- `traefik.http.routers.<unique-name>.entrypoints=web`
2. 如果你使用的是 Let's Encrypt 或 Cloudflare 的 Full Strict 模式,添加以下标签:
- `traefik.http.routers.<unique-name>.entrypoints=websecure`
- `traefik.http.routers.<unique-name>.tls.certResolver=letsencrypt`
```yaml
services:
app:
image: nextjs-app
networks:
- dokploy-network
ports:
- "3000"
labels:
- "traefik.enable=true"
- "traefik.http.routers.<unique-name>.entrypoints=websecure"
- "traefik.http.routers.<unique-name>.tls.certResolver=letsencrypt"
- "traefik.http.routers.<unique-name>.rule=Host(`app.yourdomain.com`)"
- "traefik.http.services.<unique-name>.loadbalancer.server.port=3000"
networks:
dokploy-network:
external: true
```
</Step>
</Steps>
### 基本 `docker-compose.yml` 文件示例
有关基本 `docker-compose.yml` 文件的示例,请参阅 [Docker Compose Quickstart](/docs/core/docker-compose/example#tutorial) 文档。

View File

@@ -0,0 +1,22 @@
---
title: "要求"
description: "查看为 Dokploy 面板配置域名的要求"
---
本指南将帮助你了解将域名分配给 Dokploy 面板或在其他应用程序(无论是 Docker Compose 还是其他)中使用的要求。
## 要求
在开始之前,请确保你已从以下提供商之一或你选择的其他提供商购买了域名:
- [Cloudflare](https://www.cloudflare.com/)
- [Namecheap](https://www.namecheap.com/domains/)
- [Name.com](https://www.name.com/)
- [GoDaddy](https://www.godaddy.com/)
- [Domain.com](https://www.domain.com/)
## 转移设置(可选)
我们建议将你的域名转移到 Cloudflare以获得免费 SSL 证书并灵活使用工具:
- [将域名转移到 Cloudflare](https://developers.cloudflare.com/registrar/get-started/transfer-domain-to-cloudflare/)

View File

@@ -0,0 +1,29 @@
---
title: Astro SSR
description: 部署一个简单的 Astro SSR 应用程序。
---
此示例将部署一个简单的 Astro SSR 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/astro-ssr`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,27 @@
---
title: Astro
description: 部署一个简单的 Astro 应用程序。
---
此示例将部署一个简单的 Astro 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/astro`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,29 @@
---
title: Lit
description: 部署一个简单的 Lit 应用程序。
---
此示例将部署一个简单的 Lit 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/lit`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,22 @@
---
title: Nest.js
description: 部署一个简单的 Nest.js 应用程序。
---
此示例将部署一个简单的 Nest.js 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/nestjs`
2. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
3. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,22 @@
---
title: Next.js
description: 部署一个简单的 Next.js 应用程序。
---
此示例将部署一个简单的 Next.js 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/nextjs`
2. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
3. **生成域名**
1. 点击生成域名按钮。
2. 将为您生成一个新域名。
3. 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Preact
description: 部署一个简单的 Preact 应用程序。
---
此示例将部署一个简单的 Preact 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/preact`
2. **添加环境变量**
- 导航到“环境”选项卡,并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Qwik
description: 部署一个简单的 Qwik 应用程序。
---
此示例将部署一个简单的 Qwik 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/qwik`
2. **添加环境变量**
- 导航到“环境”选项卡,并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,22 @@
---
title: Remix
description: 部署一个简单的 Remix 应用程序。
---
此示例将部署一个简单的 Remix 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/remix`
2. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
3. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Solid.js
description: 部署一个简单的 Solid.js 应用程序。
---
此示例将部署一个简单的 Solid.js 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/solidjs`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run serve"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Svelte
description: 部署一个简单的 Svelte 应用程序。
---
此示例将部署一个简单的 Svelte 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/svelte`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Vite React
description: 部署一个简单的 Vite React 应用程序。
---
此示例将部署一个简单的 Vite React 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/vite`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -0,0 +1,28 @@
---
title: Vue.js
description: 部署一个简单的 Vue.js 应用程序。
---
此示例将部署一个简单的 Vue.js 应用程序。
1. **在您的应用程序中使用 Git 提供商**
- 仓库:`https://github.com/Dokploy/examples.git`
- 分支:`main`
- 构建路径:`/vuejs`
2. **添加环境变量**
- 导航到“环境”选项卡并添加以下变量:
```cmd
NIXPACKS_START_CMD="pnpm run preview"
```
3. **点击部署**
- 通过点击部署按钮来部署您的应用程序。
4. **生成域名**
- 点击生成域名按钮。
- 将为您生成一个新域名。
- 您可以使用此域名访问您的应用程序。
如果您需要进一步的帮助,请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)。

View File

@@ -69,4 +69,4 @@ Open your web browser and navigate to `http://your-ip-from-your-vps:3000`. You w
1. **Create an Admin Account:** Fill in the necessary details to set up your administrator account. This account will be the admin account for Dokploy.
<ImageZoom src="/assets/images/setup.png" width={1300} height={630} alt='home og image' className="rounded-lg" />
<ImageZoom src="/assets/images/setup.png" width={1300} height={650} alt='home og image' className="rounded-lg" />

View File

@@ -32,22 +32,22 @@ Please go to get started.
<Cards>
<Card
href="/get-started/installation"
href="/docs/core/get-started/installation"
title="Installation"
description="Learn how to install Dokploy."
/>
<Card
href="/application/overview"
href="/docs/core/application/overview"
title="Applications"
description="Learn how to deploy applications."
/>
<Card
href="/databases/overview"
href="/docs/core/databases/overview"
title="Databases"
description="Learn how to deploy databases."
/>
<Card
href="/traefik/overview"
href="/docs/core/traefik/overview"
title="Traefik"
description="Learn how to deploy Traefik."
/>

View File

@@ -2,33 +2,63 @@
"title": "Core",
"root": true,
"pages": [
"---快速入门---",
"---入门---",
"get-started/introduction",
"get-started/installation",
"get-started/reset-password",
"get-started/uninstall",
"get-started/architecture",
"get-started/features",
"get-started/installation",
"get-started/manual-installation",
"get-started/reset-password",
"get-started/uninstall",
"---域名---",
"domain/requirements",
"domain/certificates",
"domain/web-domain-setup",
"domain/application-setup",
"domain/docker-compose-setup",
"---服务器---",
"server/overview",
"server/server-configuration",
"---应用---",
"server/profile",
"server/appearance",
"server/s3-destination",
"server/certificates",
"server/users",
"server/cluster",
"---应用程序---",
"application/overview",
"application/providers",
"application/build-type",
"application/domains",
"application/auto-deploy",
"application/advanced",
"---数据库---",
"databases/overview",
"databases/backups",
"---容器编排---",
"databases/connection",
"---Docker Compose---",
"docker-compose/overview",
"docker-compose/example",
"docker-compose/providers",
"docker-compose/auto-deploy",
"docker-compose/domains",
"docker-compose/example",
"docker-compose/templates",
"---模板---",
"templates/overview",
"--- traefik---",
"---示例---",
"examples/nextjs",
"examples/vuejs",
"examples/vite-react",
"examples/nestjs",
"examples/svelte",
"examples/remix",
"examples/qwik",
"examples/preact",
"examples/solidjs",
"examples/astro",
"examples/astro-ssr",
"examples/go-fiber",
"examples/lit",
"---Traefik---",
"traefik/overview",
"---Docker---",
"docker/overview",
@@ -38,7 +68,9 @@
"cluster/overview",
"---部署---",
"deployments/oracle-cloud",
"---其它---",
"extra/comparison"
"---附加内容---",
"extra/comparison",
"---故障排除---",
"troubleshooting/overview"
]
}

View File

@@ -0,0 +1,12 @@
---
title: 外观
description: '调整服务器界面的视觉外观。'
---
外观部分允许您自定义服务器界面的视觉外观。
## 主题
1. **明亮**: 选择明亮主题。
2. **黑暗**: 选择黑暗主题。
3. **系统**: 选择系统主题。

View File

@@ -0,0 +1,24 @@
---
title: 证书
description: '管理 SSL/TLS 证书。'
---
import { Callout } from 'fumadocs-ui/components/callout';
证书部分允许您高效管理 SSL/TLS 证书。
## 操作
- **创建**: 创建一个新的证书。
- **删除**: 删除现有的证书。
### 创建证书
要创建一个新的证书,请填写以下详细信息的表单:
- **名称**: 输入证书的名称(可以是您选择的任何名称)。
- **证书数据**: 提供证书的详细信息。
- **私钥**: 输入私钥。
<Callout>
此操作将在服务器上创建证书。有关更详细的配置和管理,请使用 `Traefik` 选项卡。
</Callout>

View File

@@ -0,0 +1,86 @@
---
title: 集群(高级)
description: '管理服务器集群设置。'
---
在 Dokploy 中部署应用程序时,所有应用程序都在同一个节点上运行。如果您希望在不同的服务器上运行应用程序,可以使用集群功能。
使用集群的理念是允许每台服务器托管不同的应用程序,并通过 Traefik 和负载均衡器将流量从 Dokploy 服务器重定向到您选择的服务器。
## 服务器扩展方法
扩展服务器的主要方式有两种:
1. **垂直扩展**: 这涉及向同一 Dokploy 服务器添加更多资源,例如更多的 CPU 和 RAM。
2. **水平扩展**: 这种方法涉及添加多台服务器。
### 垂直扩展
我们建议使用垂直扩展来提高应用程序的处理能力,因为这更快,并且需要更少的额外配置。
要进行垂直扩展,您需要向 Dokploy 服务器添加更多资源,即更多的 CPU 和 RAM。这可以通过您的 VPS 提供商完成。
理想情况下,首先检查您能够处理的垂直扩展限制。如果您发现不足,可以考虑水平扩展。
### 水平扩展
水平扩展通常需要更多的额外配置并涉及添加更多服务器VPS
如果您选择第二个选项,我们将继续配置不同的服务器。
## 集群设置的要求
1. 运行中的 Dokploy 服务器(管理器)。
2. 至少有一台与 Dokploy 服务器架构相同的额外服务器。
3. 拥有一个 Docker 注册表。
## 配置 Docker 注册表
首先,我们需要配置一个 Docker 注册表,因为在部署应用程序时,您需要一个注册表来在其他服务器上部署和下载应用程序镜像。
我们提供两种配置注册表的方法:
1. **外部注册表**: 使用您想要的任何注册表。
2. **自托管注册表**: 我们为您创建和配置自托管注册表。
### 外部注册表
您可以使用任何注册表,如 Docker Hub、DigitalOcean Spaces、ECR 或您选择的注册表。确保输入正确的凭据并在添加注册表之前测试连接。
### 自托管注册表
我们将询问您以下三件事:
1. 用户名。
2. 密码。
3. 域名。确保此域名指向 Dokploy VPS。
设置完成后,集群部分将解锁。
## 理解 Docker Swarm
我们建议您阅读以下信息,以更好地理解 Docker Swarm 的工作原理及其调度: [Docker Swarm 文档](https://docs.docker.com/engine/swarm/) 以及其架构: [Swarm 模式的工作原理](https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/)。
## 管理您的集群
现在您可以执行两项操作:
1. 添加工作节点。
2. 添加管理节点。
管理节点有两个功能:
1. 管理集群状态。
2. 调度服务。
工作节点的唯一目的是运行容器,按照管理节点创建或设定的规则进行操作。
## 添加节点
您可以点击“添加节点”按钮,系统将显示您需要遵循的说明,以将您的服务器作为节点添加并加入 Dokploy 管理节点。
<ImageZoom src="/assets/add-node.png" width={800} height={630} className="rounded-lg"/>
按照说明操作后,工作节点或管理节点将出现在表格中。
<ImageZoom src="/assets/nodes.png" width={800} height={630} className="rounded-lg"/>

View File

@@ -0,0 +1,24 @@
---
title: 个人资料
description: '自定义您的个人资料设置,包括电子邮件、密码和头像。'
---
个人资料页面允许你自定义账户设置。
## 账户设置
1. **更改邮箱**:更新你的邮箱地址。
2. **更改密码**:更新你的密码。
3. **更改头像**:更新你的个人资料图片。
## 双因素认证 (2FA)
通过使用 Google Authenticator 应用程序启用双因素认证来增强账户安全性。
## API/CLI 访问
你可以生成新的 API 密钥以访问 API/CLI。
1. **生成 API 密钥**:创建一个新的 API 密钥。
2. **复制 API 密钥**:复制生成的 API 密钥以供使用。
3. **查看 API 文档**:访问 Swagger API 文档,获取详细的 API 使用信息。

View File

@@ -0,0 +1,29 @@
---
title: S3 目标
description: '配置 S3 桶作为备份存储。这包括设置访问密钥、秘密密钥、桶名称、区域和端点。'
---
import { Callout } from 'fumadocs-ui/components/callout';
S3 目标部分对于备份数据库至关重要。
## 操作:
1. **创建**: 创建一个新的 S3 目标。
2. **删除**: 删除一个 S3 目标。
3. **编辑**: 编辑一个 S3 目标。
4. **测试**: 测试一个 S3 目标。
### 创建
要创建一个新的 S3 桶,您需要填写表单。
- **名称**: 这可以是您想要的任何名称,它将是桶的名称。
- **访问密钥**: 这是您用来访问桶的访问密钥。
- **秘密密钥**: 这是您用来访问桶的秘密密钥。
- **桶**: 这是您将用来访问桶的桶名称。
- **区域**: 这是您将用来访问桶的区域。
- **端点**: 这是您将用来访问桶的端点。
<Callout>
有一个按钮 `测试`,用于测试与您的桶的连接,如果正确,它会显示成功消息。
</Callout>

View File

@@ -0,0 +1,25 @@
---
title: 用户
description: '管理 Dokploy 中的用户角色和权限。每个实例仅限一个管理员角色。'
---
import { Callout } from 'fumadocs-ui/components/callout';
在 Dokploy 中管理用户角色和权限。请注意,每个实例仅允许一个管理员角色。
## 权限
Dokploy 提供多种权限,以有效管理您的用户:
- **创建项目**: 允许用户创建新项目。
- **创建服务**: 允许用户创建新应用或数据库。
- **访问 Traefik 文件选项卡**: 允许用户访问 Traefik 文件选项卡。
- **删除项目**: 允许用户删除项目。
- **删除服务**: 允许用户删除服务。
- **访问 Docker 选项卡**: 允许用户访问 Docker 选项卡。
- **访问 API/CLI**: 允许用户访问 API/CLI包括 Swagger 路由。
您还可以向特定用户授予访问特定项目或服务的权限。
### 项目权限
根据您的项目和服务,您可以向特定用户分配权限,以便他们访问特定项目或服务。

View File

@@ -0,0 +1,6 @@
---
title: 概述
description: 解决使用 Dokploy 时出现的最常见问题。
---
正在进行中

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -1,4 +1,4 @@
import { addPrefixToAllProperties } from "@/server/utils/docker/compose";
import { addSuffixToAllProperties } from "@/server/utils/docker/compose";
import type { ComposeSpecification } from "@/server/utils/docker/types";
import { load } from "js-yaml";
import { expect, test } from "vitest";
@@ -119,11 +119,11 @@ secrets:
file: ./db_password.txt
`) as ComposeSpecification;
test("Add prefix to all properties in compose file 1", () => {
test("Add suffix to all properties in compose file 1", () => {
const composeData = load(composeFile1) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllProperties(composeData, prefix);
const updatedComposeData = addSuffixToAllProperties(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFile1);
});
@@ -242,11 +242,11 @@ secrets:
file: ./db_password.txt
`) as ComposeSpecification;
test("Add prefix to all properties in compose file 2", () => {
test("Add suffix to all properties in compose file 2", () => {
const composeData = load(composeFile2) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllProperties(composeData, prefix);
const updatedComposeData = addSuffixToAllProperties(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFile2);
});
@@ -365,11 +365,11 @@ secrets:
file: ./service_secret.txt
`) as ComposeSpecification;
test("Add prefix to all properties in compose file 3", () => {
test("Add suffix to all properties in compose file 3", () => {
const composeData = load(composeFile3) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllProperties(composeData, prefix);
const updatedComposeData = addSuffixToAllProperties(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFile3);
});
@@ -466,11 +466,11 @@ volumes:
driver: local
`) as ComposeSpecification;
test("Add prefix to all properties in Plausible compose file", () => {
test("Add suffix to all properties in Plausible compose file", () => {
const composeData = load(composeFile) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllProperties(composeData, prefix);
const updatedComposeData = addSuffixToAllProperties(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFile);
});

View File

@@ -1,5 +1,5 @@
import { generateRandomHash } from "@/server/utils/docker/compose";
import { addPrefixToConfigsRoot } from "@/server/utils/docker/compose/configs";
import { addSuffixToConfigsRoot } from "@/server/utils/docker/compose/configs";
import type { ComposeSpecification } from "@/server/utils/docker/types";
import { load } from "js-yaml";
import { expect, test } from "vitest";
@@ -23,19 +23,19 @@ configs:
file: ./web-config.yml
`;
test("Add prefix to configs in root property", () => {
test("Add suffix to configs in root property", () => {
const composeData = load(composeFile) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.configs) {
return;
}
const configs = addPrefixToConfigsRoot(composeData.configs, prefix);
const configs = addSuffixToConfigsRoot(composeData.configs, suffix);
expect(configs).toBeDefined();
for (const configKey of Object.keys(configs)) {
expect(configKey).toContain(`-${prefix}`);
expect(configKey).toContain(`-${suffix}`);
expect(configs[configKey]).toBeDefined();
}
});
@@ -59,23 +59,23 @@ configs:
file: ./another-config.yml
`;
test("Add prefix to multiple configs in root property", () => {
test("Add suffix to multiple configs in root property", () => {
const composeData = load(composeFileMultipleConfigs) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.configs) {
return;
}
const configs = addPrefixToConfigsRoot(composeData.configs, prefix);
const configs = addSuffixToConfigsRoot(composeData.configs, suffix);
expect(configs).toBeDefined();
for (const configKey of Object.keys(configs)) {
expect(configKey).toContain(`-${prefix}`);
expect(configKey).toContain(`-${suffix}`);
expect(configs[configKey]).toBeDefined();
}
expect(configs).toHaveProperty(`web-config-${prefix}`);
expect(configs).toHaveProperty(`another-config-${prefix}`);
expect(configs).toHaveProperty(`web-config-${suffix}`);
expect(configs).toHaveProperty(`another-config-${suffix}`);
});
const composeFileDifferentProperties = `
@@ -92,25 +92,25 @@ configs:
external: true
`;
test("Add prefix to configs with different properties in root property", () => {
test("Add suffix to configs with different properties in root property", () => {
const composeData = load(
composeFileDifferentProperties,
) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.configs) {
return;
}
const configs = addPrefixToConfigsRoot(composeData.configs, prefix);
const configs = addSuffixToConfigsRoot(composeData.configs, suffix);
expect(configs).toBeDefined();
for (const configKey of Object.keys(configs)) {
expect(configKey).toContain(`-${prefix}`);
expect(configKey).toContain(`-${suffix}`);
expect(configs[configKey]).toBeDefined();
}
expect(configs).toHaveProperty(`web-config-${prefix}`);
expect(configs).toHaveProperty(`special-config-${prefix}`);
expect(configs).toHaveProperty(`web-config-${suffix}`);
expect(configs).toHaveProperty(`special-config-${suffix}`);
});
const composeFileConfigRoot = `
@@ -162,15 +162,15 @@ configs:
file: ./db-config.yml
`) as ComposeSpecification;
test("Add prefix to configs in root property", () => {
test("Add suffix to configs in root property", () => {
const composeData = load(composeFileConfigRoot) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
if (!composeData?.configs) {
return;
}
const configs = addPrefixToConfigsRoot(composeData.configs, prefix);
const configs = addSuffixToConfigsRoot(composeData.configs, suffix);
const updatedComposeData = { ...composeData, configs };
// Verificar que el resultado coincide con el archivo esperado

View File

@@ -1,5 +1,5 @@
import { generateRandomHash } from "@/server/utils/docker/compose";
import { addPrefixToConfigsInServices } from "@/server/utils/docker/compose/configs";
import { addSuffixToConfigsInServices } from "@/server/utils/docker/compose/configs";
import type { ComposeSpecification } from "@/server/utils/docker/types";
import { load } from "js-yaml";
import { expect, test } from "vitest";
@@ -19,19 +19,19 @@ configs:
file: ./web-config.yml
`;
test("Add prefix to configs in services", () => {
test("Add suffix to configs in services", () => {
const composeData = load(composeFile) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.services) {
return;
}
const services = addPrefixToConfigsInServices(composeData.services, prefix);
const services = addSuffixToConfigsInServices(composeData.services, suffix);
const actualComposeData = { ...composeData, services };
expect(actualComposeData.services?.web?.configs).toContainEqual({
source: `web-config-${prefix}`,
source: `web-config-${suffix}`,
target: "/etc/nginx/nginx.conf",
});
});
@@ -51,17 +51,17 @@ configs:
file: ./web-config.yml
`;
test("Add prefix to configs in services with single config", () => {
test("Add suffix to configs in services with single config", () => {
const composeData = load(
composeFileSingleServiceConfig,
) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.services) {
return;
}
const services = addPrefixToConfigsInServices(composeData.services, prefix);
const services = addSuffixToConfigsInServices(composeData.services, suffix);
expect(services).toBeDefined();
for (const serviceKey of Object.keys(services)) {
@@ -69,7 +69,7 @@ test("Add prefix to configs in services with single config", () => {
if (serviceConfigs) {
for (const config of serviceConfigs) {
if (typeof config === "object") {
expect(config.source).toContain(`-${prefix}`);
expect(config.source).toContain(`-${suffix}`);
}
}
}
@@ -105,17 +105,17 @@ configs:
file: ./common-config.yml
`;
test("Add prefix to configs in services with multiple configs", () => {
test("Add suffix to configs in services with multiple configs", () => {
const composeData = load(
composeFileMultipleServicesConfigs,
) as ComposeSpecification;
const prefix = generateRandomHash();
const suffix = generateRandomHash();
if (!composeData?.services) {
return;
}
const services = addPrefixToConfigsInServices(composeData.services, prefix);
const services = addSuffixToConfigsInServices(composeData.services, suffix);
expect(services).toBeDefined();
for (const serviceKey of Object.keys(services)) {
@@ -123,7 +123,7 @@ test("Add prefix to configs in services with multiple configs", () => {
if (serviceConfigs) {
for (const config of serviceConfigs) {
if (typeof config === "object") {
expect(config.source).toContain(`-${prefix}`);
expect(config.source).toContain(`-${suffix}`);
}
}
}
@@ -179,17 +179,17 @@ services:
`) as ComposeSpecification;
test("Add prefix to configs in services", () => {
test("Add suffix to configs in services", () => {
const composeData = load(composeFileConfigServices) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
if (!composeData?.services) {
return;
}
const updatedComposeData = addPrefixToConfigsInServices(
const updatedComposeData = addSuffixToConfigsInServices(
composeData.services,
prefix,
suffix,
);
const actualComposeData = { ...composeData, services: updatedComposeData };

View File

@@ -1,7 +1,7 @@
import { generateRandomHash } from "@/server/utils/docker/compose";
import {
addPrefixToAllConfigs,
addPrefixToConfigsRoot,
addSuffixToAllConfigs,
addSuffixToConfigsRoot,
} from "@/server/utils/docker/compose/configs";
import type { ComposeSpecification } from "@/server/utils/docker/types";
import { load } from "js-yaml";
@@ -80,12 +80,12 @@ configs:
file: ./db-config.yml
`) as ComposeSpecification;
test("Add prefix to all configs in root and services", () => {
test("Add suffix to all configs in root and services", () => {
const composeData = load(composeFileCombinedConfigs) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllConfigs(composeData, prefix);
const updatedComposeData = addSuffixToAllConfigs(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFileCombinedConfigs);
});
@@ -162,14 +162,14 @@ configs:
file: ./db-config.yml
`) as ComposeSpecification;
test("Add prefix to configs with environment and external", () => {
test("Add suffix to configs with environment and external", () => {
const composeData = load(
composeFileWithEnvAndExternal,
) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllConfigs(composeData, prefix);
const updatedComposeData = addSuffixToAllConfigs(composeData, suffix);
expect(updatedComposeData).toEqual(expectedComposeFileWithEnvAndExternal);
});
@@ -234,14 +234,14 @@ configs:
file: ./db-config.yml
`) as ComposeSpecification;
test("Add prefix to configs with template driver and labels", () => {
test("Add suffix to configs with template driver and labels", () => {
const composeData = load(
composeFileWithTemplateDriverAndLabels,
) as ComposeSpecification;
const prefix = "testhash";
const suffix = "testhash";
const updatedComposeData = addPrefixToAllConfigs(composeData, prefix);
const updatedComposeData = addSuffixToAllConfigs(composeData, suffix);
expect(updatedComposeData).toEqual(
expectedComposeFileWithTemplateDriverAndLabels,

View File

@@ -0,0 +1,89 @@
import type { Domain } from "@/server/api/services/domain";
import { createDomainLabels } from "@/server/utils/docker/domain";
import { describe, expect, it } from "vitest";
describe("createDomainLabels", () => {
const appName = "test-app";
const baseDomain: Domain = {
host: "example.com",
port: 8080,
https: false,
uniqueConfigKey: 1,
certificateType: "none",
applicationId: "",
composeId: "",
domainType: "compose",
serviceName: "test-app",
domainId: "",
path: "/",
createdAt: "",
};
it("should create basic labels for web entrypoint", async () => {
const labels = await createDomainLabels(appName, baseDomain, "web");
expect(labels).toEqual([
"traefik.http.routers.test-app-1-web.rule=Host(`example.com`)",
"traefik.http.routers.test-app-1-web.entrypoints=web",
"traefik.http.services.test-app-1-web.loadbalancer.server.port=8080",
"traefik.http.routers.test-app-1-web.service=test-app-1-web",
]);
});
it("should create labels for websecure entrypoint", async () => {
const labels = await createDomainLabels(appName, baseDomain, "websecure");
expect(labels).toEqual([
"traefik.http.routers.test-app-1-websecure.rule=Host(`example.com`)",
"traefik.http.routers.test-app-1-websecure.entrypoints=websecure",
"traefik.http.services.test-app-1-websecure.loadbalancer.server.port=8080",
"traefik.http.routers.test-app-1-websecure.service=test-app-1-websecure",
]);
});
it("should add redirect middleware for https on web entrypoint", async () => {
const httpsBaseDomain = { ...baseDomain, https: true };
const labels = await createDomainLabels(appName, httpsBaseDomain, "web");
expect(labels).toContain(
"traefik.http.routers.test-app-1-web.middlewares=redirect-to-https@file",
);
});
it("should add Let's Encrypt configuration for websecure with letsencrypt certificate", async () => {
const letsencryptDomain = {
...baseDomain,
https: true,
certificateType: "letsencrypt" as const,
};
const labels = await createDomainLabels(
appName,
letsencryptDomain,
"websecure",
);
expect(labels).toContain(
"traefik.http.routers.test-app-1-websecure.tls.certresolver=letsencrypt",
);
});
it("should not add Let's Encrypt configuration for non-letsencrypt certificate", async () => {
const nonLetsencryptDomain = {
...baseDomain,
https: true,
certificateType: "none" as const,
};
const labels = await createDomainLabels(
appName,
nonLetsencryptDomain,
"websecure",
);
expect(labels).not.toContain(
"traefik.http.routers.test-app-1-websecure.tls.certresolver=letsencrypt",
);
});
it("should handle different ports correctly", async () => {
const customPortDomain = { ...baseDomain, port: 3000 };
const labels = await createDomainLabels(appName, customPortDomain, "web");
expect(labels).toContain(
"traefik.http.services.test-app-1-web.loadbalancer.server.port=3000",
);
});
});

Some files were not shown because too many files have changed in this diff Show More