diff options
Diffstat (limited to 'support')
-rw-r--r-- | support/doc/api/openapi.yaml | 391 | ||||
-rw-r--r-- | support/doc/api/quickstart.md | 2 | ||||
-rw-r--r-- | support/doc/dependencies.md | 8 | ||||
-rw-r--r-- | support/doc/development/client/code.md | 67 | ||||
-rw-r--r-- | support/doc/development/client/components-tree.png | bin | 22104 -> 0 bytes | |||
-rw-r--r-- | support/doc/development/client/components-tree.svg | 2 | ||||
-rw-r--r-- | support/doc/development/client/components-tree.xml | 1 | ||||
-rw-r--r-- | support/doc/development/server/code.md | 58 | ||||
-rw-r--r-- | support/doc/development/server/peertube-architecture-server.xml | 1 | ||||
-rw-r--r-- | support/doc/development/server/upload-video.png | bin | 34643 -> 0 bytes | |||
-rw-r--r-- | support/doc/production.md | 3 | ||||
-rw-r--r-- | support/doc/tools.md | 15 | ||||
-rw-r--r-- | support/docker/production/.env | 3 | ||||
-rw-r--r-- | support/docker/production/config/custom-environment-variables.yaml | 3 | ||||
-rw-r--r-- | support/docker/production/docker-compose.yml | 7 |
15 files changed, 352 insertions, 209 deletions
diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 0ab0c71c4..0dc50e403 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml | |||
@@ -38,7 +38,7 @@ info: | |||
38 | } | 38 | } |
39 | ``` | 39 | ``` |
40 | externalDocs: | 40 | externalDocs: |
41 | url: https://docs.joinpeertube.org/api.html | 41 | url: https://docs.joinpeertube.org/#/api-rest-reference.html |
42 | tags: | 42 | tags: |
43 | - name: Accounts | 43 | - name: Accounts |
44 | description: > | 44 | description: > |
@@ -99,6 +99,7 @@ x-tagGroups: | |||
99 | - name: Videos | 99 | - name: Videos |
100 | tags: | 100 | tags: |
101 | - Video | 101 | - Video |
102 | - Video Caption | ||
102 | - Video Channel | 103 | - Video Channel |
103 | - Video Comment | 104 | - Video Comment |
104 | - Video Following | 105 | - Video Following |
@@ -152,7 +153,7 @@ paths: | |||
152 | content: | 153 | content: |
153 | application/json: | 154 | application/json: |
154 | schema: | 155 | schema: |
155 | $ref: '#/components/schemas/Video' | 156 | $ref: '#/components/schemas/VideoListResponse' |
156 | x-code-samples: | 157 | x-code-samples: |
157 | - lang: JavaScript | 158 | - lang: JavaScript |
158 | source: | | 159 | source: | |
@@ -575,9 +576,7 @@ paths: | |||
575 | content: | 576 | content: |
576 | application/json: | 577 | application/json: |
577 | schema: | 578 | schema: |
578 | type: array | 579 | $ref: '#/components/schemas/VideoListResponse' |
579 | items: | ||
580 | $ref: '#/components/schemas/Video' | ||
581 | /users/me/subscriptions: | 580 | /users/me/subscriptions: |
582 | get: | 581 | get: |
583 | summary: Get subscriptions of the current user | 582 | summary: Get subscriptions of the current user |
@@ -638,9 +637,7 @@ paths: | |||
638 | content: | 637 | content: |
639 | application/json: | 638 | application/json: |
640 | schema: | 639 | schema: |
641 | type: array | 640 | $ref: '#/components/schemas/VideoListResponse' |
642 | items: | ||
643 | $ref: '#/components/schemas/Video' | ||
644 | '/users/me/subscriptions/{uri}': | 641 | '/users/me/subscriptions/{uri}': |
645 | get: | 642 | get: |
646 | summary: Get subscription of the current user for a given uri | 643 | summary: Get subscription of the current user for a given uri |
@@ -730,9 +727,7 @@ paths: | |||
730 | content: | 727 | content: |
731 | application/json: | 728 | application/json: |
732 | schema: | 729 | schema: |
733 | type: array | 730 | $ref: '#/components/schemas/VideoListResponse' |
734 | items: | ||
735 | $ref: '#/components/schemas/Video' | ||
736 | /videos/categories: | 731 | /videos/categories: |
737 | get: | 732 | get: |
738 | summary: Get list of video licences known by the server | 733 | summary: Get list of video licences known by the server |
@@ -849,21 +844,8 @@ paths: | |||
849 | commentsEnabled: | 844 | commentsEnabled: |
850 | description: Enable or disable comments for this video | 845 | description: Enable or disable comments for this video |
851 | type: string | 846 | type: string |
852 | scheduleUpdate: &ref_0 | 847 | scheduleUpdate: |
853 | type: object | 848 | $ref: '#/components/schemas/VideoScheduledUpdate' |
854 | properties: | ||
855 | privacy: | ||
856 | type: string | ||
857 | enum: | ||
858 | - Public | ||
859 | - Unlisted | ||
860 | description: Video privacy target | ||
861 | updateAt: | ||
862 | type: string | ||
863 | format: date | ||
864 | description: When to update the video | ||
865 | required: | ||
866 | - updateAt | ||
867 | get: | 849 | get: |
868 | summary: Get a video by its id | 850 | summary: Get a video by its id |
869 | tags: | 851 | tags: |
@@ -876,7 +858,7 @@ paths: | |||
876 | content: | 858 | content: |
877 | application/json: | 859 | application/json: |
878 | schema: | 860 | schema: |
879 | $ref: '#/components/schemas/Video' | 861 | $ref: '#/components/schemas/VideoDetails' |
880 | delete: | 862 | delete: |
881 | summary: Delete a video by its id | 863 | summary: Delete a video by its id |
882 | security: | 864 | security: |
@@ -1025,7 +1007,7 @@ paths: | |||
1025 | description: Video preview file | 1007 | description: Video preview file |
1026 | type: string | 1008 | type: string |
1027 | privacy: | 1009 | privacy: |
1028 | $ref: '#/components/schemas/VideoPrivacy' | 1010 | $ref: '#/components/schemas/VideoPrivacySet' |
1029 | category: | 1011 | category: |
1030 | description: Video category | 1012 | description: Video category |
1031 | type: string | 1013 | type: string |
@@ -1058,7 +1040,8 @@ paths: | |||
1058 | commentsEnabled: | 1040 | commentsEnabled: |
1059 | description: Enable or disable comments for this video | 1041 | description: Enable or disable comments for this video |
1060 | type: string | 1042 | type: string |
1061 | scheduleUpdate: *ref_0 | 1043 | scheduleUpdate: |
1044 | $ref: '#/components/schemas/VideoScheduledUpdate' | ||
1062 | required: | 1045 | required: |
1063 | - videofile | 1046 | - videofile |
1064 | - channelId | 1047 | - channelId |
@@ -1129,7 +1112,7 @@ paths: | |||
1129 | description: Video preview file | 1112 | description: Video preview file |
1130 | type: string | 1113 | type: string |
1131 | privacy: | 1114 | privacy: |
1132 | $ref: '#/components/schemas/VideoPrivacy' | 1115 | $ref: '#/components/schemas/VideoPrivacySet' |
1133 | category: | 1116 | category: |
1134 | description: Video category | 1117 | description: Video category |
1135 | type: string | 1118 | type: string |
@@ -1162,7 +1145,8 @@ paths: | |||
1162 | commentsEnabled: | 1145 | commentsEnabled: |
1163 | description: Enable or disable comments for this video | 1146 | description: Enable or disable comments for this video |
1164 | type: string | 1147 | type: string |
1165 | scheduleUpdate: *ref_0 | 1148 | scheduleUpdate: |
1149 | $ref: '#/components/schemas/VideoScheduledUpdate' | ||
1166 | required: | 1150 | required: |
1167 | - channelId | 1151 | - channelId |
1168 | - name | 1152 | - name |
@@ -1247,6 +1231,58 @@ paths: | |||
1247 | type: array | 1231 | type: array |
1248 | items: | 1232 | items: |
1249 | $ref: '#/components/schemas/VideoBlacklist' | 1233 | $ref: '#/components/schemas/VideoBlacklist' |
1234 | /videos/{id}/captions: | ||
1235 | get: | ||
1236 | summary: Get list of video's captions | ||
1237 | tags: | ||
1238 | - Video Caption | ||
1239 | parameters: | ||
1240 | - $ref: '#/components/parameters/id2' | ||
1241 | responses: | ||
1242 | '200': | ||
1243 | description: successful operation | ||
1244 | content: | ||
1245 | application/json: | ||
1246 | schema: | ||
1247 | type: object | ||
1248 | properties: | ||
1249 | total: | ||
1250 | type: integer | ||
1251 | data: | ||
1252 | type: array | ||
1253 | items: | ||
1254 | $ref: '#/components/schemas/VideoCaption' | ||
1255 | /videos/{id}/captions/{captionLanguage}: | ||
1256 | put: | ||
1257 | summary: Add or replace a video caption | ||
1258 | tags: | ||
1259 | - Video Caption | ||
1260 | parameters: | ||
1261 | - $ref: '#/components/parameters/id2' | ||
1262 | - $ref: '#/components/parameters/captionLanguage' | ||
1263 | requestBody: | ||
1264 | content: | ||
1265 | multipart/form-data: | ||
1266 | schema: | ||
1267 | type: object | ||
1268 | properties: | ||
1269 | captionfile: | ||
1270 | description: The file to upload. | ||
1271 | type: string | ||
1272 | format: binary | ||
1273 | responses: | ||
1274 | '204': | ||
1275 | $ref: '#/paths/~1users~1me/put/responses/204' | ||
1276 | delete: | ||
1277 | summary: Delete a video caption | ||
1278 | tags: | ||
1279 | - Video Caption | ||
1280 | parameters: | ||
1281 | - $ref: '#/components/parameters/id2' | ||
1282 | - $ref: '#/components/parameters/captionLanguage' | ||
1283 | responses: | ||
1284 | '204': | ||
1285 | $ref: '#/paths/~1users~1me/put/responses/204' | ||
1250 | /video-channels: | 1286 | /video-channels: |
1251 | get: | 1287 | get: |
1252 | summary: Get list of video channels | 1288 | summary: Get list of video channels |
@@ -1275,7 +1311,10 @@ paths: | |||
1275 | '204': | 1311 | '204': |
1276 | $ref: '#/paths/~1users~1me/put/responses/204' | 1312 | $ref: '#/paths/~1users~1me/put/responses/204' |
1277 | requestBody: | 1313 | requestBody: |
1278 | $ref: '#/components/requestBodies/VideoChannelInput' | 1314 | content: |
1315 | application/json: | ||
1316 | schema: | ||
1317 | $ref: '#/components/schemas/VideoChannelCreate' | ||
1279 | '/video-channels/{channelHandle}': | 1318 | '/video-channels/{channelHandle}': |
1280 | get: | 1319 | get: |
1281 | summary: Get a video channel by its id | 1320 | summary: Get a video channel by its id |
@@ -1302,7 +1341,10 @@ paths: | |||
1302 | '204': | 1341 | '204': |
1303 | $ref: '#/paths/~1users~1me/put/responses/204' | 1342 | $ref: '#/paths/~1users~1me/put/responses/204' |
1304 | requestBody: | 1343 | requestBody: |
1305 | $ref: '#/components/requestBodies/VideoChannelInput' | 1344 | content: |
1345 | application/json: | ||
1346 | schema: | ||
1347 | $ref: '#/components/schemas/VideoChannelUpdate' | ||
1306 | delete: | 1348 | delete: |
1307 | summary: Delete a video channel by its id | 1349 | summary: Delete a video channel by its id |
1308 | security: | 1350 | security: |
@@ -1318,6 +1360,7 @@ paths: | |||
1318 | get: | 1360 | get: |
1319 | summary: Get videos of a video channel by its id | 1361 | summary: Get videos of a video channel by its id |
1320 | tags: | 1362 | tags: |
1363 | - Video | ||
1321 | - Video Channel | 1364 | - Video Channel |
1322 | parameters: | 1365 | parameters: |
1323 | - $ref: '#/components/parameters/channelHandle' | 1366 | - $ref: '#/components/parameters/channelHandle' |
@@ -1327,7 +1370,7 @@ paths: | |||
1327 | content: | 1370 | content: |
1328 | application/json: | 1371 | application/json: |
1329 | schema: | 1372 | schema: |
1330 | $ref: '#/components/schemas/Video' | 1373 | $ref: '#/components/schemas/VideoListResponse' |
1331 | '/accounts/{name}/video-channels': | 1374 | '/accounts/{name}/video-channels': |
1332 | get: | 1375 | get: |
1333 | summary: Get video channels of an account by its name | 1376 | summary: Get video channels of an account by its name |
@@ -1443,7 +1486,7 @@ paths: | |||
1443 | schema: | 1486 | schema: |
1444 | $ref: '#/components/schemas/CommentThreadPostResponse' | 1487 | $ref: '#/components/schemas/CommentThreadPostResponse' |
1445 | delete: | 1488 | delete: |
1446 | summary: 'Delete a comment in a comment therad by its id, of a video by its id' | 1489 | summary: 'Delete a comment in a comment thread by its id, of a video by its id' |
1447 | security: | 1490 | security: |
1448 | - OAuth2: [] | 1491 | - OAuth2: [] |
1449 | tags: | 1492 | tags: |
@@ -1487,9 +1530,7 @@ paths: | |||
1487 | content: | 1530 | content: |
1488 | application/json: | 1531 | application/json: |
1489 | schema: | 1532 | schema: |
1490 | type: array | 1533 | $ref: '#/components/schemas/VideoListResponse' |
1491 | items: | ||
1492 | $ref: '#/components/schemas/Video' | ||
1493 | servers: | 1534 | servers: |
1494 | - url: 'https://peertube.cpy.re/api/v1' | 1535 | - url: 'https://peertube.cpy.re/api/v1' |
1495 | description: Live Test Server (live data - stable version) | 1536 | description: Live Test Server (live data - stable version) |
@@ -1611,6 +1652,13 @@ components: | |||
1611 | description: The video id or uuid | 1652 | description: The video id or uuid |
1612 | schema: | 1653 | schema: |
1613 | type: string | 1654 | type: string |
1655 | captionLanguage: | ||
1656 | name: captionLanguage | ||
1657 | in: path | ||
1658 | required: true | ||
1659 | description: The caption language | ||
1660 | schema: | ||
1661 | type: string | ||
1614 | channelHandle: | 1662 | channelHandle: |
1615 | name: channelHandle | 1663 | name: channelHandle |
1616 | in: path | 1664 | in: path |
@@ -1722,12 +1770,6 @@ components: | |||
1722 | type: array | 1770 | type: array |
1723 | items: | 1771 | items: |
1724 | type: string | 1772 | type: string |
1725 | requestBodies: | ||
1726 | VideoChannelInput: | ||
1727 | content: | ||
1728 | application/json: | ||
1729 | schema: | ||
1730 | $ref: '#/components/schemas/VideoChannelInput' | ||
1731 | securitySchemes: | 1773 | securitySchemes: |
1732 | OAuth2: | 1774 | OAuth2: |
1733 | description: > | 1775 | description: > |
@@ -1739,7 +1781,7 @@ components: | |||
1739 | 1781 | ||
1740 | - Have an account with sufficient authorization levels | 1782 | - Have an account with sufficient authorization levels |
1741 | 1783 | ||
1742 | - [Generate](https://docs.joinpeertube.org/lang/en/devdocs/rest.html) a | 1784 | - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a |
1743 | Bearer Token | 1785 | Bearer Token |
1744 | 1786 | ||
1745 | - Make Authenticated Requests | 1787 | - Make Authenticated Requests |
@@ -1764,12 +1806,129 @@ components: | |||
1764 | type: string | 1806 | type: string |
1765 | label: | 1807 | label: |
1766 | type: string | 1808 | type: string |
1767 | VideoPrivacy: | 1809 | VideoPrivacySet: |
1768 | type: string | 1810 | type: integer |
1769 | enum: | 1811 | enum: |
1770 | - Public | 1812 | - 1 |
1771 | - Unlisted | 1813 | - 2 |
1772 | - Private | 1814 | - 3 |
1815 | description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)' | ||
1816 | VideoPrivacyConstant: | ||
1817 | properties: | ||
1818 | id: | ||
1819 | type: integer | ||
1820 | enum: | ||
1821 | - 1 | ||
1822 | - 2 | ||
1823 | - 3 | ||
1824 | label: | ||
1825 | type: string | ||
1826 | VideoStateConstant: | ||
1827 | properties: | ||
1828 | id: | ||
1829 | type: integer | ||
1830 | enum: | ||
1831 | - 1 | ||
1832 | - 2 | ||
1833 | - 3 | ||
1834 | description: 'The video state (Published = 1, to transcode = 2, to import = 3)' | ||
1835 | label: | ||
1836 | type: string | ||
1837 | VideoResolutionConstant: | ||
1838 | properties: | ||
1839 | id: | ||
1840 | type: integer | ||
1841 | description: 'Video resolution (240, 360, 720 ...)' | ||
1842 | label: | ||
1843 | type: string | ||
1844 | VideoScheduledUpdate: | ||
1845 | properties: | ||
1846 | privacy: | ||
1847 | $ref: '#/components/schemas/VideoPrivacySet' | ||
1848 | description: Video privacy target | ||
1849 | updateAt: | ||
1850 | type: string | ||
1851 | format: date | ||
1852 | description: When to update the video | ||
1853 | required: | ||
1854 | - updateAt | ||
1855 | VideoAccountSummary: | ||
1856 | properties: | ||
1857 | id: | ||
1858 | type: number | ||
1859 | name: | ||
1860 | type: string | ||
1861 | displayName: | ||
1862 | type: string | ||
1863 | url: | ||
1864 | type: string | ||
1865 | host: | ||
1866 | type: string | ||
1867 | avatar: | ||
1868 | nullable: true | ||
1869 | $ref: '#/components/schemas/Avatar' | ||
1870 | VideoChannelSummary: | ||
1871 | properties: | ||
1872 | id: | ||
1873 | type: number | ||
1874 | name: | ||
1875 | type: string | ||
1876 | displayName: | ||
1877 | type: string | ||
1878 | url: | ||
1879 | type: string | ||
1880 | host: | ||
1881 | type: string | ||
1882 | avatar: | ||
1883 | nullable: true | ||
1884 | $ref: '#/components/schemas/Avatar' | ||
1885 | PlaylistElement: | ||
1886 | properties: | ||
1887 | position: | ||
1888 | type: number | ||
1889 | startTimestamp: | ||
1890 | type: number | ||
1891 | stopTimestamp: | ||
1892 | type: number | ||
1893 | VideoFile: | ||
1894 | properties: | ||
1895 | magnetUri: | ||
1896 | type: string | ||
1897 | resolution: | ||
1898 | $ref: '#/components/schemas/VideoResolutionConstant' | ||
1899 | size: | ||
1900 | type: number | ||
1901 | description: 'Video file size in bytes' | ||
1902 | torrentUrl: | ||
1903 | type: string | ||
1904 | torrentDownaloadUrl: | ||
1905 | type: string | ||
1906 | fileUrl: | ||
1907 | type: string | ||
1908 | fileDownloadUrl: | ||
1909 | type: string | ||
1910 | fps: | ||
1911 | type: number | ||
1912 | VideoStreamingPlaylists: | ||
1913 | properties: | ||
1914 | id: | ||
1915 | type: number | ||
1916 | type: | ||
1917 | type: number | ||
1918 | enum: | ||
1919 | - 1 | ||
1920 | description: 'Playlist type (HLS = 1)' | ||
1921 | playlistUrl: | ||
1922 | type: string | ||
1923 | segmentsSha256Url: | ||
1924 | type: string | ||
1925 | redundancies: | ||
1926 | type: array | ||
1927 | items: | ||
1928 | type: object | ||
1929 | properties: | ||
1930 | baseUrl: | ||
1931 | type: string | ||
1773 | Video: | 1932 | Video: |
1774 | properties: | 1933 | properties: |
1775 | id: | 1934 | id: |
@@ -1782,6 +1941,8 @@ components: | |||
1782 | type: string | 1941 | type: string |
1783 | updatedAt: | 1942 | updatedAt: |
1784 | type: string | 1943 | type: string |
1944 | originallyPublishedAt: | ||
1945 | type: string | ||
1785 | category: | 1946 | category: |
1786 | $ref: '#/components/schemas/VideoConstantNumber' | 1947 | $ref: '#/components/schemas/VideoConstantNumber' |
1787 | licence: | 1948 | licence: |
@@ -1789,7 +1950,7 @@ components: | |||
1789 | language: | 1950 | language: |
1790 | $ref: '#/components/schemas/VideoConstantString' | 1951 | $ref: '#/components/schemas/VideoConstantString' |
1791 | privacy: | 1952 | privacy: |
1792 | $ref: '#/components/schemas/VideoPrivacy' | 1953 | $ref: '#/components/schemas/VideoPrivacyConstant' |
1793 | description: | 1954 | description: |
1794 | type: string | 1955 | type: string |
1795 | duration: | 1956 | duration: |
@@ -1812,19 +1973,66 @@ components: | |||
1812 | type: number | 1973 | type: number |
1813 | nsfw: | 1974 | nsfw: |
1814 | type: boolean | 1975 | type: boolean |
1976 | waitTranscoding: | ||
1977 | type: boolean | ||
1978 | nullable: true | ||
1979 | state: | ||
1980 | $ref: '#/components/schemas/VideoStateConstant' | ||
1981 | scheduledUpdate: | ||
1982 | nullable: true | ||
1983 | $ref: '#/components/schemas/VideoScheduledUpdate' | ||
1984 | blacklisted: | ||
1985 | nullable: true | ||
1986 | type: boolean | ||
1987 | blacklistedReason: | ||
1988 | nullable: true | ||
1989 | type: string | ||
1815 | account: | 1990 | account: |
1991 | $ref: '#/components/schemas/VideoAccountSummary' | ||
1992 | channel: | ||
1993 | $ref: '#/components/schemas/VideoChannelSummary' | ||
1994 | userHistory: | ||
1995 | nullable: true | ||
1816 | type: object | 1996 | type: object |
1817 | properties: | 1997 | properties: |
1818 | name: | 1998 | currentTime: |
1819 | type: string | 1999 | type: number |
1820 | displayName: | 2000 | playlistElement: |
1821 | type: string | 2001 | nullable: true |
1822 | url: | 2002 | $ref: '#/components/schemas/PlaylistElement' |
2003 | VideoDetails: | ||
2004 | allOf: | ||
2005 | - $ref: '#/components/schemas/Video' | ||
2006 | - type: object | ||
2007 | properties: | ||
2008 | descriptionPath: | ||
1823 | type: string | 2009 | type: string |
1824 | host: | 2010 | support: |
1825 | type: string | 2011 | type: string |
1826 | avatar: | 2012 | channel: |
1827 | $ref: '#/components/schemas/Avatar' | 2013 | $ref: '#/components/schemas/VideoChannel' |
2014 | account: | ||
2015 | $ref: '#/components/schemas/Account' | ||
2016 | tags: | ||
2017 | type: array | ||
2018 | items: | ||
2019 | type: string | ||
2020 | files: | ||
2021 | type: array | ||
2022 | items: | ||
2023 | $ref: '#/components/schemas/VideoFile' | ||
2024 | commentsEnabled: | ||
2025 | type: boolean | ||
2026 | downloadEnabled: | ||
2027 | type: boolean | ||
2028 | trackerUrls: | ||
2029 | type: array | ||
2030 | items: | ||
2031 | type: string | ||
2032 | streamingPlaylists: | ||
2033 | type: array | ||
2034 | items: | ||
2035 | $ref: '#/components/schemas/VideoStreamingPlaylists' | ||
1828 | VideoAbuse: | 2036 | VideoAbuse: |
1829 | properties: | 2037 | properties: |
1830 | id: | 2038 | id: |
@@ -1917,6 +2125,12 @@ components: | |||
1917 | type: array | 2125 | type: array |
1918 | items: | 2126 | items: |
1919 | $ref: '#/components/schemas/VideoCommentThreadTree' | 2127 | $ref: '#/components/schemas/VideoCommentThreadTree' |
2128 | VideoCaption: | ||
2129 | properties: | ||
2130 | language: | ||
2131 | $ref: '#/components/schemas/VideoConstantString' | ||
2132 | captionPath: | ||
2133 | type: string | ||
1920 | Avatar: | 2134 | Avatar: |
1921 | properties: | 2135 | properties: |
1922 | path: | 2136 | path: |
@@ -1966,6 +2180,13 @@ components: | |||
1966 | autoPlayVideo: | 2180 | autoPlayVideo: |
1967 | type: boolean | 2181 | type: boolean |
1968 | role: | 2182 | role: |
2183 | type: integer | ||
2184 | enum: | ||
2185 | - 0 | ||
2186 | - 1 | ||
2187 | - 2 | ||
2188 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' | ||
2189 | roleLabel: | ||
1969 | type: string | 2190 | type: string |
1970 | enum: | 2191 | enum: |
1971 | - User | 2192 | - User |
@@ -2096,6 +2317,14 @@ components: | |||
2096 | properties: | 2317 | properties: |
2097 | comment: | 2318 | comment: |
2098 | $ref: '#/components/schemas/VideoComment' | 2319 | $ref: '#/components/schemas/VideoComment' |
2320 | VideoListResponse: | ||
2321 | properties: | ||
2322 | total: | ||
2323 | type: number | ||
2324 | data: | ||
2325 | type: array | ||
2326 | items: | ||
2327 | $ref: '#/components/schemas/Video' | ||
2099 | AddUser: | 2328 | AddUser: |
2100 | properties: | 2329 | properties: |
2101 | username: | 2330 | username: |
@@ -2115,12 +2344,11 @@ components: | |||
2115 | description: 'The user daily video quota ' | 2344 | description: 'The user daily video quota ' |
2116 | role: | 2345 | role: |
2117 | type: integer | 2346 | type: integer |
2118 | format: int32 | ||
2119 | enum: | 2347 | enum: |
2120 | - 0 | 2348 | - 0 |
2121 | - 1 | 2349 | - 1 |
2122 | - 2 | 2350 | - 2 |
2123 | description: 'The user role ' | 2351 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' |
2124 | required: | 2352 | required: |
2125 | - username | 2353 | - username |
2126 | - password | 2354 | - password |
@@ -2143,8 +2371,12 @@ components: | |||
2143 | type: string | 2371 | type: string |
2144 | description: 'The updated daily video quota of the user ' | 2372 | description: 'The updated daily video quota of the user ' |
2145 | role: | 2373 | role: |
2146 | type: string | 2374 | type: integer |
2147 | description: 'The updated role of the user ' | 2375 | enum: |
2376 | - 0 | ||
2377 | - 1 | ||
2378 | - 2 | ||
2379 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' | ||
2148 | required: | 2380 | required: |
2149 | - id | 2381 | - id |
2150 | 2382 | ||
@@ -2202,14 +2434,45 @@ components: | |||
2202 | email: | 2434 | email: |
2203 | type: string | 2435 | type: string |
2204 | description: 'The email of the user ' | 2436 | description: 'The email of the user ' |
2437 | displayName: | ||
2438 | type: string | ||
2439 | description: 'The user display name' | ||
2440 | channel: | ||
2441 | type: object | ||
2442 | properties: | ||
2443 | name: | ||
2444 | type: string | ||
2445 | description: 'The default channel name' | ||
2446 | displayName: | ||
2447 | type: string | ||
2448 | description: 'The default channel display name' | ||
2449 | |||
2205 | required: | 2450 | required: |
2206 | - username | 2451 | - username |
2207 | - password | 2452 | - password |
2208 | 2453 | ||
2209 | VideoChannelInput: | 2454 | VideoChannelCreate: |
2210 | properties: | 2455 | properties: |
2211 | name: | 2456 | name: |
2212 | type: string | 2457 | type: string |
2458 | displayName: | ||
2459 | type: string | ||
2460 | description: | ||
2461 | type: string | ||
2462 | support: | ||
2463 | type: string | ||
2464 | required: | ||
2465 | - name | ||
2466 | - displayName | ||
2467 | VideoChannelUpdate: | ||
2468 | properties: | ||
2469 | displayName: | ||
2470 | type: string | ||
2213 | description: | 2471 | description: |
2214 | type: string | 2472 | type: string |
2473 | support: | ||
2474 | type: string | ||
2475 | bulkVideosSupportUpdate: | ||
2476 | type: boolean | ||
2477 | description: 'Update all videos support field of this channel' | ||
2215 | 2478 | ||
diff --git a/support/doc/api/quickstart.md b/support/doc/api/quickstart.md index 00874a1c9..2222be741 100644 --- a/support/doc/api/quickstart.md +++ b/support/doc/api/quickstart.md | |||
@@ -47,7 +47,7 @@ $ curl -H 'Authorization: Bearer 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0' https | |||
47 | ``` | 47 | ``` |
48 | 48 | ||
49 | 49 | ||
50 | ### List videos | 50 | ## List videos |
51 | 51 | ||
52 | ```bash | 52 | ```bash |
53 | $ curl https://peertube.example.com/api/v1/videos | 53 | $ curl https://peertube.example.com/api/v1/videos |
diff --git a/support/doc/dependencies.md b/support/doc/dependencies.md index 77cec3ba3..1b27abaa7 100644 --- a/support/doc/dependencies.md +++ b/support/doc/dependencies.md | |||
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | 3. Install certbot (choose instructions for nginx and your distribution) : | 27 | 3. Install certbot (choose instructions for nginx and your distribution) : |
28 | [https://certbot.eff.org/all-instructions](https://certbot.eff.org/all-instructions) | 28 | [https://certbot.eff.org/all-instructions](https://certbot.eff.org/all-instructions) |
29 | 4. Install NodeJS 8.x (current LTS): | 29 | 4. Install NodeJS 8.x: |
30 | [https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions) | 30 | [https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions) |
31 | 5. Install yarn, and be sure to have [a recent version](https://github.com/yarnpkg/yarn/releases/latest): | 31 | 5. Install yarn, and be sure to have [a recent version](https://github.com/yarnpkg/yarn/releases/latest): |
32 | [https://yarnpkg.com/en/docs/install#linux-tab](https://yarnpkg.com/en/docs/install#linux-tab) | 32 | [https://yarnpkg.com/en/docs/install#linux-tab](https://yarnpkg.com/en/docs/install#linux-tab) |
@@ -56,7 +56,7 @@ $ sudo systemctl start redis postgresql | |||
56 | 1. Run: | 56 | 1. Run: |
57 | 57 | ||
58 | ``` | 58 | ``` |
59 | $ sudo pacman -S nodejs yarn ffmpeg postgresql openssl redis git wget unzip python2 base-devel npm nginx | 59 | $ sudo pacman -S nodejs-lts-dubnium yarn ffmpeg postgresql openssl redis git wget unzip python2 base-devel npm nginx |
60 | ``` | 60 | ``` |
61 | 61 | ||
62 | Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis: | 62 | Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis: |
@@ -66,7 +66,7 @@ $ sudo systemctl start redis postgresql | |||
66 | 66 | ||
67 | ## CentOS 7 | 67 | ## CentOS 7 |
68 | 68 | ||
69 | 1. Install NodeJS 8.x (current LTS): | 69 | 1. Install NodeJS 8.x: |
70 | [https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora) | 70 | [https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora) |
71 | 2. Install yarn: | 71 | 2. Install yarn: |
72 | [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install) | 72 | [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install) |
@@ -114,7 +114,7 @@ su my-peertube-user | |||
114 | ``` | 114 | ``` |
115 | 2. (Optional) Install certbot (choose instructions for nginx and your distribution) : | 115 | 2. (Optional) Install certbot (choose instructions for nginx and your distribution) : |
116 | [https://certbot.eff.org/all-instructions](https://certbot.eff.org/all-instructions) | 116 | [https://certbot.eff.org/all-instructions](https://certbot.eff.org/all-instructions) |
117 | 3. Install NodeJS 8.x (current LTS): | 117 | 3. Install NodeJS 8.x: |
118 | [https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora) | 118 | [https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora) |
119 | 4. Install yarn: | 119 | 4. Install yarn: |
120 | [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install) | 120 | [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install) |
diff --git a/support/doc/development/client/code.md b/support/doc/development/client/code.md deleted file mode 100644 index 235116e78..000000000 --- a/support/doc/development/client/code.md +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | # Client code documentation | ||
2 | |||
3 | The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular](https://angular.io/). | ||
4 | |||
5 | |||
6 | ## Technologies | ||
7 | |||
8 | * [TypeScript](https://www.typescriptlang.org/) -> Language | ||
9 | * [Angular](https://angular.io) -> JavaScript framework | ||
10 | * [SASS](http://sass-lang.com/) -> CSS framework | ||
11 | * [Webpack](https://webpack.js.org/) -> Source builder (compile TypeScript, SASS files, bundle them...) | ||
12 | * [Bootstrap](http://getbootstrap.com/) -> CSS framework | ||
13 | * [WebTorrent](https://webtorrent.io/) -> JavaScript library to make P2P in the browser | ||
14 | * [VideoJS](http://videojs.com/) -> JavaScript player framework | ||
15 | |||
16 | |||
17 | ## Files | ||
18 | |||
19 | The client files are in the `client` directory. The Webpack 2 configurations files are in `client/config` and the source files in `client/src`. | ||
20 | The client modules description are in the [client/package.json](/client/package.json). There are many modules that are used to compile the web application in development or production mode. | ||
21 | Here is the description of the useful `client` files directory: | ||
22 | |||
23 | tslint.json -> TypeScript linter rules | ||
24 | tsconfig.json -> TypeScript configuration for the compilation | ||
25 | .bootstraprc -> Bootstrap configuration file (which module we need) | ||
26 | config -> Webpack configuration files | ||
27 | src | ||
28 | |__ app -> TypeScript files for Angular application | ||
29 | |__ assets -> static files (images...) | ||
30 | |__ sass -> SASS files that are global for the application | ||
31 | |__ standalone -> files outside the Angular application (embed HTML page...) | ||
32 | |__ index.html -> root HTML file for our Angular application | ||
33 | |__ main.ts -> Main TypeScript file that boostraps our Angular application | ||
34 | |__ polyfills.ts -> Polyfills imports (ES 2015...) | ||
35 | |||
36 | Details of the Angular application file structure. It tries to follow [the official Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). | ||
37 | |||
38 | app | ||
39 | |__ +admin -> Admin components (followers, users...) | ||
40 | |__ account -> Account components (password change...) | ||
41 | |__ core -> Core components/services | ||
42 | |__ header -> Header components (logo, search...) | ||
43 | |__ login -> Login component | ||
44 | |__ menu -> Menu component (on the left) | ||
45 | |__ shared -> Shared components/services (search component, REST services...) | ||
46 | |__ signup -> Signup form | ||
47 | |__ videos -> Video components (list, watch, upload...) | ||
48 | |__ app.component.{html,scss,ts} -> Main application component | ||
49 | |__ app-routing.module.ts -> Main Angular routes | ||
50 | |__ app.module.ts -> Angular root module that imports all submodules we need | ||
51 | |||
52 | ## Conventions | ||
53 | |||
54 | Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). | ||
55 | |||
56 | ## Concepts | ||
57 | |||
58 | In a Angular application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionally a SASS file. | ||
59 | If you are not familiar with Angular I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html). | ||
60 | |||
61 | ## Components tree | ||
62 | |||
63 | ![Components tree](/support/doc/development/client/components-tree.svg) | ||
64 | |||
65 | ## Newcomers | ||
66 | |||
67 | The main client component is `app.component.ts`. You can begin to look at this file. Then you could navigate in the different submodules to see how components are built. | ||
diff --git a/support/doc/development/client/components-tree.png b/support/doc/development/client/components-tree.png deleted file mode 100644 index 09582d742..000000000 --- a/support/doc/development/client/components-tree.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/support/doc/development/client/components-tree.svg b/support/doc/development/client/components-tree.svg deleted file mode 100644 index fd6951d93..000000000 --- a/support/doc/development/client/components-tree.svg +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||
2 | <svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" width="1141px" height="311px" version="1.1" content="<mxfile userAgent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" version="8.9.9" editor="www.draw.io" type="device"><diagram name="Page-1" id="8be7db5e-9885-9541-e5e4-cf9e4eb3a109">7Zpbb5swFMc/TaTtZQLMLY9d1nYP2zSp2u3RwQ54dTAypkn36WeDSSCmVdcR3FTpQwXHN/z7G59zHGZgsd5ec1hknxnCdOY5aDsDH2aeFzuB/K8M943Bd93GkHKCGlPHcEP+YG10tLUiCJe9ioIxKkjRNyYsz3EiejbIOdv0q60Y7Y9awBQbhpsEUtP6gyCRaasbzvcFHzFJMz107EVNwRImtylnVa7Hm3lgVf81xWvY9qUnWmYQsU3HBC5nYMEZE83VervAVKFtsTXtrh4o3T03x7l4SgNPT6gU9+3cMZIo9C3jImMpyyG93Fvf1/PDqgdH3mViTeWlKy/xloifyvwu0He/2pJc8PtOkbr9pTsoBeTiQqkmDTnLcWu7IpTqOjhHbY2EwrIkSWPUVdQQv7EQ93opwUowado//ifGCl1vxXKhq7nq3kSmKZas4omG4ulFCHmKdS1NTuHqNNOYrzFbYzlHWYFjCgW5668sqBdouqu3F0leaJ2GNQPOWbNnahZb08w9a/ZMzSJrmnlnzZ6pGbCmWTymZk/F9rC2gxyeRTSaiKAfvFKCPpiKYGiF4CO7yBR0/f+kq5t+ZUQO7Dk6k5jPdbCjEwm3DX7aLppn0K0ONNo9xtNkG3XreEyOl/RSTLWt6LHvIK10pxdFUWdw60K6Na1eDz6lMt1TkDcZEfimgPU8NjLh7KM+dFor6fcWjDJe9wOwiwIc1X6Ts1vcKZmHEYDhY27uDnOBt4+6MF0K/P5CbRO8TSd9bG1ZN3N0RmA76obz8Ko7hWAEmGs8tBWMtKHrOYD8Z80Ca5qN6wVe27vk29IFGP7jO0GYlTMvhGvlEPJlWewmdgQ3giCOV8mQGwmTGC9XI7mR+CDeaaOSKfyIbzC+REQFY2+qgjKIZPuqQFDgt5I6lQO/R+ROXqainnxjWvJDi2zWq3csgQIcI39IoNhbgnAkPx8c+vkofBcYEsUDCgUjKBQYCn0i5fFCp2mQ+laRhgbSH1Ak2YkzNcLRSZlGBtOLJJE+8tRXauBa3J1j891nKclPHOnu1wwbSHdBzznYa3/O6gZ77Wq3EIV70whz6pnTkGiuLdHARMcQr1A0YC3fnZuuGq2P6VUmSaNsZlHtrtlBesUoVd+knDZU9zCkBAbU+VBAGY3A1DWY1um/6nZZlfjk0Xr22AIzqfxWYn7qSA8DyyGkg/nPGEgHEqAlq15A+mPwG6D8INLQt3k4ZZ4ADpxCfVUf9nnOF6aOra7q7/Be6CnUfykRRTaVMM8JB5T4rB53l/a/Qg3mjk0NzB2mdYiLDOY5pkfcvyfB6zoTngzI2/03t823A/vvmsHlXw==</diagram></mxfile>"><defs/><g transform="translate(0.5,0.5)"><path d="M 390 80 L 390 104 L 130 104 L 130 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 126.88 L 126.5 119.88 L 130 121.63 L 133.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 280 104 L 280 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 280 126.88 L 276.5 119.88 L 280 121.63 L 283.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 560 104 L 560 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 560 126.88 L 556.5 119.88 L 560 121.63 L 563.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 430 104 L 430 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 126.88 L 426.5 119.88 L 430 121.63 L 433.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 690 104 L 690 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 690 126.88 L 686.5 119.88 L 690 121.63 L 693.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 820 104 L 820 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 820 126.88 L 816.5 119.88 L 820 121.63 L 823.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 950 104 L 950 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 950 126.88 L 946.5 119.88 L 950 121.63 L 953.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 1080 104 L 1080 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1080 126.88 L 1076.5 119.88 L 1080 121.63 L 1083.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="390" cy="40" rx="60" ry="40" fill="#e1d5e7" stroke="#9673a6" pointer-events="none"/><g transform="translate(345.5,34.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="88" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 89px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">App component</div></div></foreignObject><text x="44" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">App component</text></switch></g><path d="M 430 208 L 430 232 L 370 232 L 370 250.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 370 255.38 L 366.5 248.38 L 370 250.13 L 373.5 248.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 208 L 430 232 L 470 232 L 470 250.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 470 255.88 L 466.5 248.88 L 470 250.63 L 473.5 248.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 208 L 430 232 L 570 232 L 570 250.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 570 255.38 L 566.5 248.38 L 570 250.13 L 573.5 248.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="430" cy="168" rx="60" ry="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(408.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="43" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 44px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">VideosĀ </div></div></foreignObject><text x="22" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">VideosĀ </text></switch></g><ellipse cx="570" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(524.5,262.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="91" height="38" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Edit (upload/update)<div><br /></div></div></div></foreignObject><text x="46" y="25" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Edit (upload/update)<div><br></div></text></switch></g><ellipse cx="470" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(459.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="21" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 22px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">List</div></div></foreignObject><text x="11" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">List</text></switch></g><ellipse cx="370" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(352.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="34" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 35px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Watch</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Watch</text></switch></g><ellipse cx="560" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(537.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="45" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 46px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Account</div></div></foreignObject><text x="23" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Account</text></switch></g><ellipse cx="280" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(263.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="32" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 33px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Login</div></div></foreignObject><text x="16" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Login</text></switch></g><path d="M 130 208 L 130 231 L 45 231 L 45 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 45 251.88 L 41.5 244.88 L 45 246.63 L 48.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 208 L 130 231 L 155 231 L 155 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 155 251.88 L 151.5 244.88 L 155 246.63 L 158.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 208 L 130 231 L 260 231 L 260 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 260 251.88 L 256.5 244.88 L 260 246.63 L 263.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="130" cy="168" rx="60" ry="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(111.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="36" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 37px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Admin</div></div></foreignObject><text x="18" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Admin</text></switch></g><ellipse cx="45" cy="282" rx="45" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(22.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="44" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 45px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Follows</div></div></foreignObject><text x="22" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Follows</text></switch></g><ellipse cx="155" cy="282" rx="45" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(116.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="77" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 78px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Video abuses</div></div></foreignObject><text x="39" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Video abuses</text></switch></g><ellipse cx="260" cy="282" rx="40" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(243.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="33" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 34px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Users</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Users</text></switch></g><ellipse cx="690" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(673.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="33" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 34px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">About</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">About</text></switch></g><ellipse cx="820" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(773.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="92" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 93px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Page Not Found</div></div></div></foreignObject><text x="46" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica"><div>Page Not Found</div></text></switch></g><ellipse cx="950" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(916.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 67px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>My Account</div></div></div></foreignObject><text x="33" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica"><div>My Account</div></text></switch></g><ellipse cx="1080" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(1034.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Video Channels</div></div></foreignObject><text x="45" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Video Channels</text></switch></g></g></svg> \ No newline at end of file | ||
diff --git a/support/doc/development/client/components-tree.xml b/support/doc/development/client/components-tree.xml deleted file mode 100644 index 5a37c48bc..000000000 --- a/support/doc/development/client/components-tree.xml +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | <mxfile userAgent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" version="8.9.9" editor="www.draw.io" type="device"><diagram name="Page-1" id="8be7db5e-9885-9541-e5e4-cf9e4eb3a109">7Zpbb5swFMc/TaTtZQLMLY9d1nYP2zSp2u3RwQ54dTAypkn36WeDSSCmVdcR3FTpQwXHN/z7G59zHGZgsd5ec1hknxnCdOY5aDsDH2aeFzuB/K8M943Bd93GkHKCGlPHcEP+YG10tLUiCJe9ioIxKkjRNyYsz3EiejbIOdv0q60Y7Y9awBQbhpsEUtP6gyCRaasbzvcFHzFJMz107EVNwRImtylnVa7Hm3lgVf81xWvY9qUnWmYQsU3HBC5nYMEZE83VervAVKFtsTXtrh4o3T03x7l4SgNPT6gU9+3cMZIo9C3jImMpyyG93Fvf1/PDqgdH3mViTeWlKy/xloifyvwu0He/2pJc8PtOkbr9pTsoBeTiQqkmDTnLcWu7IpTqOjhHbY2EwrIkSWPUVdQQv7EQ93opwUowado//ifGCl1vxXKhq7nq3kSmKZas4omG4ulFCHmKdS1NTuHqNNOYrzFbYzlHWYFjCgW5668sqBdouqu3F0leaJ2GNQPOWbNnahZb08w9a/ZMzSJrmnlnzZ6pGbCmWTymZk/F9rC2gxyeRTSaiKAfvFKCPpiKYGiF4CO7yBR0/f+kq5t+ZUQO7Dk6k5jPdbCjEwm3DX7aLppn0K0ONNo9xtNkG3XreEyOl/RSTLWt6LHvIK10pxdFUWdw60K6Na1eDz6lMt1TkDcZEfimgPU8NjLh7KM+dFor6fcWjDJe9wOwiwIc1X6Ts1vcKZmHEYDhY27uDnOBt4+6MF0K/P5CbRO8TSd9bG1ZN3N0RmA76obz8Ko7hWAEmGs8tBWMtKHrOYD8Z80Ca5qN6wVe27vk29IFGP7jO0GYlTMvhGvlEPJlWewmdgQ3giCOV8mQGwmTGC9XI7mR+CDeaaOSKfyIbzC+REQFY2+qgjKIZPuqQFDgt5I6lQO/R+ROXqainnxjWvJDi2zWq3csgQIcI39IoNhbgnAkPx8c+vkofBcYEsUDCgUjKBQYCn0i5fFCp2mQ+laRhgbSH1Ak2YkzNcLRSZlGBtOLJJE+8tRXauBa3J1j891nKclPHOnu1wwbSHdBzznYa3/O6gZ77Wq3EIV70whz6pnTkGiuLdHARMcQr1A0YC3fnZuuGq2P6VUmSaNsZlHtrtlBesUoVd+knDZU9zCkBAbU+VBAGY3A1DWY1um/6nZZlfjk0Xr22AIzqfxWYn7qSA8DyyGkg/nPGEgHEqAlq15A+mPwG6D8INLQt3k4ZZ4ADpxCfVUf9nnOF6aOra7q7/Be6CnUfykRRTaVMM8JB5T4rB53l/a/Qg3mjk0NzB2mdYiLDOY5pkfcvyfB6zoTngzI2/03t823A/vvmsHlXw==</diagram></mxfile> \ No newline at end of file | ||
diff --git a/support/doc/development/server/code.md b/support/doc/development/server/code.md deleted file mode 100644 index 3894c2542..000000000 --- a/support/doc/development/server/code.md +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | # Server code documentation | ||
2 | |||
3 | The server is a web server developed with [TypeScript](https://www.typescriptlang.org/)/[Express](http://expressjs.com). | ||
4 | |||
5 | |||
6 | ## Technologies | ||
7 | |||
8 | * [TypeScript](https://www.typescriptlang.org/) -> Language | ||
9 | * [PostgreSQL](https://www.postgresql.org/) -> Database | ||
10 | * [Redis](https://redis.io/) -> Job queue/cache | ||
11 | * [Express](http://expressjs.com) -> Web server framework | ||
12 | * [Sequelize](http://docs.sequelizejs.com/en/v3/) -> SQL ORM | ||
13 | * [WebTorrent](https://webtorrent.io/) -> BitTorrent tracker and torrent creation | ||
14 | * [Mocha](https://mochajs.org/) -> Test framework | ||
15 | |||
16 | |||
17 | ## Files | ||
18 | |||
19 | The server main file is [server.ts](/server.ts). | ||
20 | The server modules description are in the [package.json](/package.json) at the project root. | ||
21 | All other server files are in the [server](/server) directory: | ||
22 | |||
23 | server.ts -> app initialization, main routes configuration (static routes...) | ||
24 | config -> server YAML configurations (for tests, production...) | ||
25 | scripts -> Scripts files for npm run | ||
26 | server | ||
27 | |__ controllers -> API routes/controllers files | ||
28 | |__ helpers -> functions used by different part of the project (logger, utils...) | ||
29 | |__ initializers -> functions used at the server startup (installer, database, constants...) | ||
30 | |__ lib -> library function (WebTorrent, OAuth2, ActivityPub...) | ||
31 | |__ middlewares -> middlewares for controllers (requests validators, requests pagination...) | ||
32 | |__ models -> Sequelize models for each SQL tables (videos, users, accounts...) | ||
33 | |__ tests -> API tests and real world simulations (to test the decentralized feature...) | ||
34 | |||
35 | |||
36 | ## Conventions | ||
37 | |||
38 | Uses [JavaScript Standard Style](http://standardjs.com/). | ||
39 | |||
40 | ## Architecture | ||
41 | |||
42 | The server is composed by: | ||
43 | |||
44 | * a REST API (relying on the Express framework) documented on http://docs.joinpeertube.org/api.html | ||
45 | * a WebTorrent Tracker (slightly custom version of [webtorrent/bittorrent-tracker](https://github.com/webtorrent/bittorrent-tracker#server)) | ||
46 | |||
47 | A video is seeded by the server with the [WebSeed](http://www.bittorrent.org/beps/bep_0019.html) protocol (HTTP). | ||
48 | |||
49 | ![Architecture scheme](/support/doc/development/server/upload-video.png) | ||
50 | |||
51 | When a user uploads a video, the REST API creates the torrent file and then adds it to its database. | ||
52 | |||
53 | If a user wants to watch the video, the tracker will indicate all other users that are watching the video + the HTTP url for the WebSeed. | ||
54 | |||
55 | ## Newcomers | ||
56 | |||
57 | The server entrypoint is [server.ts](/server.ts). Looking at this file is a good start. | ||
58 | Then you can try to understand the [controllers](/server/controllers): they are the entrypoints of each API request. | ||
diff --git a/support/doc/development/server/peertube-architecture-server.xml b/support/doc/development/server/peertube-architecture-server.xml deleted file mode 100644 index 3299307a1..000000000 --- a/support/doc/development/server/peertube-architecture-server.xml +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" version="7.9.7" editor="www.draw.io" type="device"><diagram id="033390a3-e8de-cf4f-5be1-41b3d99c78ae" name="Page-1">3VpRc5s4EP41nmkekgGEwH6M3aS9md5Mpnbby6MA2dBgxIHs2P31J4EECGGbxLhNzu1MYLXC0re7364Wj8BsvfuUoTT8mwQ4HllGsBuBjyPLMm3LGvH/RrAvJeOxWQpWWRQIpVowj35hITSEdBMFOFcUKSExjVJV6JMkwT5VZCjLyLOqtiSx+q0pWmFNMPdRrEt/RAENxS4sp5Z/xtEqlN9sOpNyxEP+0yojm0R838gCy+JTDq+RfJbYaB6igDw3ROBuBGYZIbS8Wu9mOObYStjKefcHRqt1ZzihfSaAcsIWxRssV1ysi+4lFsVuMNc3R2D6HEYUz1Pk89FnZn0mC+k6FsPLKI5nJCZZMVfuHUxzmpEn3Bgxig8b0VcsNrHFGcW7hkjs4BMma0yzPVMRo7YAUzgbELfPteVcqRI2rGZPhBAJb1lVT64RYxcCtG4AbQ3AbznOmMQcFsixj32/C0hvDG04EJCmpSLpmjqUlU4TSmcAJOEhJAd2yd+CJJzAP4ckGGuI4YDxm7glGQ3JiiQovqul0xpTQ8UP7yL6DxffQHH3KJQYPNm+HLKgvH8U03KKMnrLuZgJEpJgKbuP+MLFAwKp4ccozyO/FAoV/pifmNK9SBBoQwkT1ev/QkgqrUwSKtRM85gNc7LJfIGKIG22qhWWWsJuHLCjhs5wjGi0VRPGWUwinawOgFmGEWV5kC0xxEUOzIr9sIwWMaNZTsxWPQ2iLbtc8cvbIKi1tyyHkmIWz8SIIg/l1SS2msY8zV+Ym1PVDTKcR7+QVyhw26UkSmixXTgdwY9MguJolXBTsiWywAVTHi4RS6q3YmAdBUHhazHycDytUmVXwjhtT+nlWlBWZYFYrZJau4LVuDEhtJR4vRa83tvK4uEPHJWGClkuc+ZabTeo1tDLMyaaY3y9my+Y5PbhL81yL2PDAOJxYHex4djygOMMw4aTsZqg3Q4ydOCFyNC5PBmaKhm6ChkabTKsqa7Jh+Yb4EOZpJqEODgfFlPZNtG+oSDYRA+kncyfjuJCjtuqa1v6zhge02cX5QpeG5J2V+Gs03H+lBfHD17GpBhn/O7DD+x9Xcyuupl4GtFFxfJpRnwSv0tydoYi52vGzsBUCcR6Q+QsY6bhCczAlQ01n1hkDFpe1/bKwy9jc2wyPne72HziuAANxOaOc5rOJ5dic0ODaBA2tw7SeXXzWNH+eyhtTdk2aVC5/SaoHMDW0cgelpqBXkffY+qHVV3sx1FJryhNY0aBNCLJu+RYyTwDFMAGtNQEe+2Y55GsXJB0xL28b7HAICQM9B7BILTgHq7y/j+08MdOvGbHiVfGJgOOhY446eYdefRDYTCLfYnxMy//0nCz9hIUxfnNzc2B+urMDMti0+ruHgWO58CBMixo9eE6D0zuhbpHpt7SlFB6NYqlgPugAqfz74bIgeu88M5bpmDZ6a4elE+Z42yrVELl49SvYGLvBW0K1S4iCptGFKL+XN3lIIRpL+MijEOmh5OB7A5PdrJNo8PscIjKytXM/rChdTdpk8YEcbqsG0v8JDPHOLjqCE9lrl/0sfhUqtbFJ2LzMhz+Lnga6jwN+tZvjZMTdCdqWpcvQi5b40G3dWBzjtR42uzW+xz7EhWDqb9u4PUYM3GHM38hK56LLpFPIP/XlU+c4jMMr1iGWnJXJNIgFjDpIBZzkITiaFB/K8iEP7emk3bsd0XgS19LaG8legWfrcfepGfoNQCFR4j63KJaDZC2kcq9iDnHmmTqY9qVebl/7TGvCDaJ6KV7sH0puZcXgA4G7ukFQ5HrOSci+Hsgfw/JFHQE9Ntoa7fz5Mm2NrxwW9vSqLrunTDv4ERmGaLs4xXg58Xi4UrztPfQPJH5f5AG9dh1Fbtcn9k8GbY5oh/ovosK/vQpuyrYZzJTc9VLHa6xc+Bw7U68oX4tBEGPw3XXKesVtRC7rX/LVZqu/sEcuPsP</diagram></mxfile> \ No newline at end of file | ||
diff --git a/support/doc/development/server/upload-video.png b/support/doc/development/server/upload-video.png deleted file mode 100644 index 7edc06792..000000000 --- a/support/doc/development/server/upload-video.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/support/doc/production.md b/support/doc/production.md index 2eba6e6a3..4f20cf140 100644 --- a/support/doc/production.md +++ b/support/doc/production.md | |||
@@ -204,6 +204,9 @@ logs. You can set another password with: | |||
204 | $ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root | 204 | $ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root |
205 | ``` | 205 | ``` |
206 | 206 | ||
207 | Alternatively you can set the environment variable `PT_INITIAL_ROOT_PASSWORD`, | ||
208 | to your own administrator password, although it must be 6 characters or more. | ||
209 | |||
207 | ### What now? | 210 | ### What now? |
208 | 211 | ||
209 | Now your instance is up you can: | 212 | Now your instance is up you can: |
diff --git a/support/doc/tools.md b/support/doc/tools.md index 086cd5cff..ba6e2b12d 100644 --- a/support/doc/tools.md +++ b/support/doc/tools.md | |||
@@ -35,7 +35,8 @@ You need to follow all the following steps even if you are on a PeerTube server | |||
35 | 35 | ||
36 | ### Dependencies | 36 | ### Dependencies |
37 | 37 | ||
38 | Install the [PeerTube dependencies](dependencies.md). | 38 | Install the [PeerTube dependencies](dependencies.md) except PostgreSQL and Redis. |
39 | PeerTube only supports NodeJS 8.x or 10.x. | ||
39 | 40 | ||
40 | ### Installation | 41 | ### Installation |
41 | 42 | ||
@@ -44,18 +45,14 @@ Clone the PeerTube repo to get the latest version (even if you are on your PeerT | |||
44 | ``` | 45 | ``` |
45 | $ git clone https://github.com/Chocobozzz/PeerTube.git | 46 | $ git clone https://github.com/Chocobozzz/PeerTube.git |
46 | $ CLONE="$(pwd)/PeerTube" | 47 | $ CLONE="$(pwd)/PeerTube" |
47 | ``` | ||
48 | |||
49 | Run ``yarn install --pure-lockfile`` | ||
50 | ``` | ||
51 | $ cd ${CLONE} | 48 | $ cd ${CLONE} |
52 | $ yarn install --pure-lockfile | ||
53 | ``` | 49 | ``` |
54 | 50 | ||
55 | Build server tools: | 51 | Install dependencies and build CLI tools: |
52 | |||
56 | ``` | 53 | ``` |
57 | $ cd ${CLONE} | 54 | $ NOCLIENT=1 yarn install --pure-lockfile |
58 | $ npm run build:server | 55 | $ npm run setup:cli |
59 | ``` | 56 | ``` |
60 | 57 | ||
61 | ### CLI wrapper | 58 | ### CLI wrapper |
diff --git a/support/docker/production/.env b/support/docker/production/.env index 7b9092642..c8393d0ce 100644 --- a/support/docker/production/.env +++ b/support/docker/production/.env | |||
@@ -5,8 +5,7 @@ PEERTUBE_WEBSERVER_PORT=443 | |||
5 | PEERTUBE_WEBSERVER_HTTPS=true | 5 | PEERTUBE_WEBSERVER_HTTPS=true |
6 | # If you need more than one IP as trust_proxy | 6 | # If you need more than one IP as trust_proxy |
7 | # pass them as a comma separated array: | 7 | # pass them as a comma separated array: |
8 | PEERTUBE_TRUST_PROXY=["127.0.0.1"] | 8 | PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.18.0.0/16"] |
9 | #PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "192.168.1.0/24"] | ||
10 | #PEERTUBE_SMTP_USERNAME= | 9 | #PEERTUBE_SMTP_USERNAME= |
11 | #PEERTUBE_SMTP_PASSWORD= | 10 | #PEERTUBE_SMTP_PASSWORD= |
12 | PEERTUBE_SMTP_HOSTNAME=postfix | 11 | PEERTUBE_SMTP_HOSTNAME=postfix |
diff --git a/support/docker/production/config/custom-environment-variables.yaml b/support/docker/production/config/custom-environment-variables.yaml index bd4ac1215..d5b878830 100644 --- a/support/docker/production/config/custom-environment-variables.yaml +++ b/support/docker/production/config/custom-environment-variables.yaml | |||
@@ -106,6 +106,9 @@ transcoding: | |||
106 | 1080: | 106 | 1080: |
107 | __name: "PEERTUBE_TRANSCODING_1080P" | 107 | __name: "PEERTUBE_TRANSCODING_1080P" |
108 | __format: "json" | 108 | __format: "json" |
109 | 2160: | ||
110 | __name: "PEERTUBE_TRANSCODING_2160P" | ||
111 | __format: "json" | ||
109 | 112 | ||
110 | instance: | 113 | instance: |
111 | name: "PEERTUBE_INSTANCE_NAME" | 114 | name: "PEERTUBE_INSTANCE_NAME" |
diff --git a/support/docker/production/docker-compose.yml b/support/docker/production/docker-compose.yml index df21a14d4..263fb6e95 100644 --- a/support/docker/production/docker-compose.yml +++ b/support/docker/production/docker-compose.yml | |||
@@ -72,3 +72,10 @@ services: | |||
72 | labels: | 72 | labels: |
73 | traefik.enable: "false" | 73 | traefik.enable: "false" |
74 | restart: "always" | 74 | restart: "always" |
75 | |||
76 | networks: | ||
77 | default: | ||
78 | ipam: | ||
79 | driver: default | ||
80 | config: | ||
81 | - subnet: 172.18.0.0/16 | ||