mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-20 23:46:14 -04:00
修改端口9001为9002
This commit is contained in:
parent
8497f652bc
commit
a5cf527e8d
47 changed files with 109 additions and 109 deletions
|
@ -4,8 +4,8 @@
|
||||||
# Always ensure to load the env variables in every terminal session.
|
# Always ensure to load the env variables in every terminal session.
|
||||||
# Otherwise the env variables will not be available
|
# Otherwise the env variables will not be available
|
||||||
|
|
||||||
DOCKER_COMPOSE_APP_PORT_PUBLISHED=9001
|
DOCKER_COMPOSE_APP_PORT_PUBLISHED=9002
|
||||||
DOCKER_COMPOSE_APP_PORT_TARGET=9001
|
DOCKER_COMPOSE_APP_PORT_TARGET=9002
|
||||||
|
|
||||||
# IMPORTANT: When the env var DEFAULT_PAD_TEXT is unset or empty, then the pad is not established (not the landing page).
|
# IMPORTANT: When the env var DEFAULT_PAD_TEXT is unset or empty, then the pad is not established (not the landing page).
|
||||||
# The env var DEFAULT_PAD_TEXT seems to be mandatory in the latest version of etherpad.
|
# The env var DEFAULT_PAD_TEXT seems to be mandatory in the latest version of etherpad.
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
# Always ensure to load the env variables in every terminal session.
|
# Always ensure to load the env variables in every terminal session.
|
||||||
# Otherwise the env variables will not be available
|
# Otherwise the env variables will not be available
|
||||||
|
|
||||||
DOCKER_COMPOSE_APP_DEV_PORT_PUBLISHED=9001
|
DOCKER_COMPOSE_APP_DEV_PORT_PUBLISHED=9002
|
||||||
DOCKER_COMPOSE_APP_DEV_PORT_TARGET=9001
|
DOCKER_COMPOSE_APP_DEV_PORT_TARGET=9002
|
||||||
|
|
||||||
# IMPORTANT: When the env var DEFAULT_PAD_TEXT is unset or empty, then the pad is not established (not the landing page).
|
# IMPORTANT: When the env var DEFAULT_PAD_TEXT is unset or empty, then the pad is not established (not the landing page).
|
||||||
# The env var DEFAULT_PAD_TEXT seems to be mandatory in the latest version of etherpad.
|
# The env var DEFAULT_PAD_TEXT seems to be mandatory in the latest version of etherpad.
|
||||||
|
|
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
|
@ -63,7 +63,7 @@ jobs:
|
||||||
-
|
-
|
||||||
name: Test
|
name: Test
|
||||||
run: |
|
run: |
|
||||||
docker run --rm -d -p 9001:9001 --name test ${{ env.TEST_TAG }}
|
docker run --rm -d -p 9002:9002 --name test ${{ env.TEST_TAG }}
|
||||||
./bin/installDeps.sh
|
./bin/installDeps.sh
|
||||||
docker logs -f test &
|
docker logs -f test &
|
||||||
while true; do
|
while true; do
|
||||||
|
|
2
.github/workflows/frontend-admin-tests.yml
vendored
2
.github/workflows/frontend-admin-tests.yml
vendored
|
@ -133,7 +133,7 @@ jobs:
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
|
6
.github/workflows/frontend-tests.yml
vendored
6
.github/workflows/frontend-tests.yml
vendored
|
@ -69,7 +69,7 @@ jobs:
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -139,7 +139,7 @@ jobs:
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -216,7 +216,7 @@ jobs:
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
|
2
.github/workflows/rate-limit.yml
vendored
2
.github/workflows/rate-limit.yml
vendored
|
@ -58,7 +58,7 @@ jobs:
|
||||||
-
|
-
|
||||||
name: run docker images
|
name: run docker images
|
||||||
run: |
|
run: |
|
||||||
docker run --name etherpad-docker -p 9000:9001 --rm --network ep_net --ip 172.23.42.2 -e 'TRUST_PROXY=true' epl-debian-slim &
|
docker run --name etherpad-docker -p 9000:9002 --rm --network ep_net --ip 172.23.42.2 -e 'TRUST_PROXY=true' epl-debian-slim &
|
||||||
docker run -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest
|
docker run -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest
|
||||||
docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip
|
docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip
|
||||||
-
|
-
|
||||||
|
|
2
.github/workflows/windows.yml
vendored
2
.github/workflows/windows.yml
vendored
|
@ -70,7 +70,7 @@ jobs:
|
||||||
pnpm i
|
pnpm i
|
||||||
pnpm exec playwright install --with-deps
|
pnpm exec playwright install --with-deps
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
curl --connect-timeout 10 --max-time 20 --retry 5 --retry-delay 10 --retry-max-time 60 --retry-connrefused http://127.0.0.1:9001/p/test
|
curl --connect-timeout 10 --max-time 20 --retry 5 --retry-delay 10 --retry-max-time 60 --retry-connrefused http://127.0.0.1:9002/p/test
|
||||||
pnpm exec playwright install chromium --with-deps
|
pnpm exec playwright install chromium --with-deps
|
||||||
pnpm run test-ui --project=chromium
|
pnpm run test-ui --project=chromium
|
||||||
# On release, create release
|
# On release, create release
|
||||||
|
|
|
@ -72,7 +72,7 @@ jobs:
|
||||||
- "cd src && pnpm install && cd -"
|
- "cd src && pnpm install && cd -"
|
||||||
script:
|
script:
|
||||||
- "docker build -t etherpad:test ."
|
- "docker build -t etherpad:test ."
|
||||||
- "docker run -d -p 9001:9001 etherpad:test && sleep 3"
|
- "docker run -d -p 9002:9002 etherpad:test && sleep 3"
|
||||||
- "cd src && pnpm run test-container"
|
- "cd src && pnpm run test-container"
|
||||||
- name: "Load test Etherpad without Plugins"
|
- name: "Load test Etherpad without Plugins"
|
||||||
install:
|
install:
|
||||||
|
@ -115,7 +115,7 @@ jobs:
|
||||||
- "cd src && pnpm install && cd -"
|
- "cd src && pnpm install && cd -"
|
||||||
script:
|
script:
|
||||||
- "docker build -t etherpad:test ."
|
- "docker build -t etherpad:test ."
|
||||||
- "docker run -d -p 9001:9001 etherpad:test && sleep 3"
|
- "docker run -d -p 9002:9002 etherpad:test && sleep 3"
|
||||||
- "cd src && pnpm run test-container"
|
- "cd src && pnpm run test-container"
|
||||||
- name: "Load test Etherpad with Plugins"
|
- name: "Load test Etherpad with Plugins"
|
||||||
install:
|
install:
|
||||||
|
@ -133,7 +133,7 @@ jobs:
|
||||||
- "docker build -f src/tests/ratelimit/Dockerfile.nginx -t nginx-latest ."
|
- "docker build -f src/tests/ratelimit/Dockerfile.nginx -t nginx-latest ."
|
||||||
- "docker build -f src/tests/ratelimit/Dockerfile.anotherip -t anotherip ."
|
- "docker build -f src/tests/ratelimit/Dockerfile.anotherip -t anotherip ."
|
||||||
- "docker run -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest"
|
- "docker run -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest"
|
||||||
- "docker run --name etherpad-docker -p 9000:9001 --rm --network ep_net --ip 172.23.42.2 -e 'TRUST_PROXY=true' epl-debian-slim &"
|
- "docker run --name etherpad-docker -p 9000:9002 --rm --network ep_net --ip 172.23.42.2 -e 'TRUST_PROXY=true' epl-debian-slim &"
|
||||||
- "docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip"
|
- "docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip"
|
||||||
- "./bin/installDeps.sh"
|
- "./bin/installDeps.sh"
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -852,7 +852,7 @@ grow! :)
|
||||||
# 1.8.3
|
# 1.8.3
|
||||||
* FEATURE: colibris is now the default skin for new installs
|
* FEATURE: colibris is now the default skin for new installs
|
||||||
* FEATURE: improved colibris visuals, and migrated to Flexbox layout
|
* FEATURE: improved colibris visuals, and migrated to Flexbox layout
|
||||||
* FEATURE: skin variants: colibris skin colors can be easily customized. Visit http://127.0.0.1:9001/p/test#skinvariantsbuilder
|
* FEATURE: skin variants: colibris skin colors can be easily customized. Visit http://127.0.0.1:9002/p/test#skinvariantsbuilder
|
||||||
* REQUIREMENTS: minimum required Node version is **10.13.0 LTS**.
|
* REQUIREMENTS: minimum required Node version is **10.13.0 LTS**.
|
||||||
* MINOR: stability fixes for the async migration in 1.8.0 (fixed many UnhandledPromiseRejectionWarning and the few remaining crashes)
|
* MINOR: stability fixes for the async migration in 1.8.0 (fixed many UnhandledPromiseRejectionWarning and the few remaining crashes)
|
||||||
* MINOR: improved stability of import/export functionality
|
* MINOR: improved stability of import/export functionality
|
||||||
|
|
|
@ -156,7 +156,7 @@ COPY --chown=etherpad:etherpad ${SETTINGS} "${EP_DIR}"/settings.json
|
||||||
USER etherpad
|
USER etherpad
|
||||||
|
|
||||||
HEALTHCHECK --interval=5s --timeout=3s \
|
HEALTHCHECK --interval=5s --timeout=3s \
|
||||||
CMD curl --silent http://localhost:9001/health | grep -E "pass|ok|up" > /dev/null || exit 1
|
CMD curl --silent http://localhost:9002/health | grep -E "pass|ok|up" > /dev/null || exit 1
|
||||||
|
|
||||||
EXPOSE 9001
|
EXPOSE 9002
|
||||||
CMD ["pnpm", "run", "prod"]
|
CMD ["pnpm", "run", "prod"]
|
||||||
|
|
|
@ -74,7 +74,7 @@ services:
|
||||||
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}"
|
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9002}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9002}"
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
|
@ -110,7 +110,7 @@ volumes:
|
||||||
4. Run `pnpm i`
|
4. Run `pnpm i`
|
||||||
5. Run `pnpm run build:etherpad`
|
5. Run `pnpm run build:etherpad`
|
||||||
6. Run `pnpm run prod`
|
6. Run `pnpm run prod`
|
||||||
7. Visit `http://localhost:9001` in your browser.
|
7. Visit `http://localhost:9002` in your browser.
|
||||||
|
|
||||||
### Docker container
|
### Docker container
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ site](https://static.etherpad.org).
|
||||||
### Plugin Installation
|
### Plugin Installation
|
||||||
|
|
||||||
You can install plugins from the admin web interface (e.g.,
|
You can install plugins from the admin web interface (e.g.,
|
||||||
http://127.0.0.1:9001/admin/plugins).
|
http://127.0.0.1:9002/admin/plugins).
|
||||||
|
|
||||||
Alternatively, you can install plugins from the command line:
|
Alternatively, you can install plugins from the command line:
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ edit `settings.json` and restart Etherpad each time.
|
||||||
|
|
||||||
### Customize the style with skin variants
|
### Customize the style with skin variants
|
||||||
|
|
||||||
Open http://127.0.0.1:9001/p/test#skinvariantsbuilder in your browser and start
|
Open http://127.0.0.1:9002/p/test#skinvariantsbuilder in your browser and start
|
||||||
playing!
|
playing!
|
||||||
|
|
||||||

|

|
||||||
|
|
|
@ -8,7 +8,7 @@ import {LoadingScreen} from "./utils/LoadingScreen.tsx";
|
||||||
import {Trans, useTranslation} from "react-i18next";
|
import {Trans, useTranslation} from "react-i18next";
|
||||||
import {Cable, Construction, Crown, NotepadText, Wrench, PhoneCall} from "lucide-react";
|
import {Cable, Construction, Crown, NotepadText, Wrench, PhoneCall} from "lucide-react";
|
||||||
|
|
||||||
const WS_URL = import.meta.env.DEV? 'http://localhost:9001' : ''
|
const WS_URL = import.meta.env.DEV? 'http://localhost:9002' : ''
|
||||||
export const App = ()=> {
|
export const App = ()=> {
|
||||||
const setSettings = useStore(state => state.setSettings);
|
const setSettings = useStore(state => state.setSettings);
|
||||||
const {t} = useTranslation()
|
const {t} = useTranslation()
|
||||||
|
|
|
@ -21,16 +21,16 @@ export default defineConfig({
|
||||||
server:{
|
server:{
|
||||||
proxy: {
|
proxy: {
|
||||||
'/socket.io/*': {
|
'/socket.io/*': {
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/api/, '')
|
rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
},
|
},
|
||||||
'/admin-auth/': {
|
'/admin-auth/': {
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
},
|
},
|
||||||
'/stats': {
|
'/stats': {
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
# Start the services!
|
# Start the services!
|
||||||
|
|
||||||
service etherpad start
|
service etherpad start
|
||||||
echo "Give Etherpad about 3 minutes to install dependencies then visit http://localhost:9001 in your web browser"
|
echo "Give Etherpad about 3 minutes to install dependencies then visit http://localhost:9002 in your web browser"
|
||||||
echo "To stop etherpad type 'service etherpad stop', To restart type 'service etherpad restart'".
|
echo "To stop etherpad type 'service etherpad stop', To restart type 'service etherpad restart'".
|
||||||
rm -f /tmp/etherpad.log /tmp/etherpad.err
|
rm -f /tmp/etherpad.log /tmp/etherpad.err
|
||||||
|
|
|
@ -23,6 +23,6 @@ script
|
||||||
exec su -s /bin/sh -c 'exec "$0" "$@"' $EPUSER -- node --import tsx src/node/server.ts \
|
exec su -s /bin/sh -c 'exec "$0" "$@"' $EPUSER -- node --import tsx src/node/server.ts \
|
||||||
>> $EPLOGS/access.log \
|
>> $EPLOGS/access.log \
|
||||||
2>> $EPLOGS/error.log
|
2>> $EPLOGS/error.log
|
||||||
echo "Etherpad is running on http://localhost:9001 - To change settings edit /opt/etherpad/settings.json"
|
echo "Etherpad is running on http://localhost:9002 - To change settings edit /opt/etherpad/settings.json"
|
||||||
|
|
||||||
end script
|
end script
|
||||||
|
|
|
@ -38,8 +38,8 @@ SectionEnd
|
||||||
Section
|
Section
|
||||||
CreateDirectory "$SMPROGRAMS\Etherpad Foundation"
|
CreateDirectory "$SMPROGRAMS\Etherpad Foundation"
|
||||||
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad Server.lnk" "$INSTDIR\start.bat" "brand.ico" "Etherpad Server"
|
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad Server.lnk" "$INSTDIR\start.bat" "brand.ico" "Etherpad Server"
|
||||||
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad.lnk" "http://127.0.0.1:9001" "brand.ico" "Etherpad"
|
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad.lnk" "http://127.0.0.1:9002" "brand.ico" "Etherpad"
|
||||||
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad Admin.lnk" "http://127.0.0.1:9001/admin" "brand.ico" "Etherpad Admin"
|
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Etherpad Admin.lnk" "http://127.0.0.1:9002/admin" "brand.ico" "Etherpad Admin"
|
||||||
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Uninstall Etherpad Server.lnk" "$INSTDIR\uninstall.exe"
|
CreateShortCut "$SMPROGRAMS\Etherpad Foundation\Uninstall Etherpad Server.lnk" "$INSTDIR\uninstall.exe"
|
||||||
WriteUninstaller "$INSTDIR\uninstall.exe"
|
WriteUninstaller "$INSTDIR\uninstall.exe"
|
||||||
Exec '$INSTDIR\start.bat'
|
Exec '$INSTDIR\start.bat'
|
||||||
|
|
|
@ -28,7 +28,7 @@ To run the backend tests, run the following from the Etherpad working directory:
|
||||||
(cd src && pnpm test)
|
(cd src && pnpm test)
|
||||||
```
|
```
|
||||||
|
|
||||||
To run the frontend tests, visit: http://localhost:9001/tests/frontend/
|
To run the frontend tests, visit: http://localhost:9002/tests/frontend/
|
||||||
|
|
||||||
## Copyright and License
|
## Copyright and License
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ jobs:
|
||||||
pnpm run prod &
|
pnpm run prod &
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
|
|
@ -24,7 +24,7 @@ By default, the Etherpad Docker image is built and run in `production` mode: no
|
||||||
A docker compose file is provided in the project. Please first copy `.env.default` to `.env` and adjust the variables to your preference.
|
A docker compose file is provided in the project. Please first copy `.env.default` to `.env` and adjust the variables to your preference.
|
||||||
|
|
||||||
```
|
```
|
||||||
docker compose up -d # will build and start the docker container on port 9001 with development settings.
|
docker compose up -d # will build and start the docker container on port 9002 with development settings.
|
||||||
```
|
```
|
||||||
|
|
||||||
Starting dev server:
|
Starting dev server:
|
||||||
|
@ -108,7 +108,7 @@ To run your instance:
|
||||||
|
|
||||||
[source,bash]
|
[source,bash]
|
||||||
----
|
----
|
||||||
docker run --detach --publish <DESIRED_PORT>:9001 <YOUR_USERNAME>/etherpad
|
docker run --detach --publish <DESIRED_PORT>:9002 <YOUR_USERNAME>/etherpad
|
||||||
----
|
----
|
||||||
|
|
||||||
And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
|
And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
|
||||||
|
@ -140,7 +140,7 @@ The `settings.json.docker` available by default allows to control almost every s
|
||||||
| `0.0.0.0`
|
| `0.0.0.0`
|
||||||
| `PORT`
|
| `PORT`
|
||||||
| port which etherpad should bind at
|
| port which etherpad should bind at
|
||||||
| `9001`
|
| `9002`
|
||||||
| `ADMIN_PASSWORD`
|
| `ADMIN_PASSWORD`
|
||||||
| the password for the `admin` user (leave unspecified if you do not want to create it)
|
| the password for the `admin` user (leave unspecified if you do not want to create it)
|
||||||
|
|
|
|
||||||
|
@ -533,7 +533,7 @@ Use a Postgres database, no admin user enabled:
|
||||||
----
|
----
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name etherpad \
|
--name etherpad \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
-e 'DB_TYPE=postgres' \
|
-e 'DB_TYPE=postgres' \
|
||||||
-e 'DB_HOST=db.local' \
|
-e 'DB_HOST=db.local' \
|
||||||
-e 'DB_PORT=4321' \
|
-e 'DB_PORT=4321' \
|
||||||
|
@ -549,7 +549,7 @@ Run enabling the administrative user `admin`:
|
||||||
----
|
----
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name etherpad \
|
--name etherpad \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
-e 'ADMIN_PASSWORD=supersecret' \
|
-e 'ADMIN_PASSWORD=supersecret' \
|
||||||
etherpad/etherpad
|
etherpad/etherpad
|
||||||
----
|
----
|
||||||
|
@ -560,6 +560,6 @@ Run a test instance running DirtyDB on a persistent volume:
|
||||||
----
|
----
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-v etherpad_data:/opt/etherpad-lite/var \
|
-v etherpad_data:/opt/etherpad-lite/var \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
etherpad/etherpad
|
etherpad/etherpad
|
||||||
----
|
----
|
||||||
|
|
|
@ -69,7 +69,7 @@ docker build --build-arg ETHERPAD_PLUGINS="ep_comments_page ep_author_neat" --ta
|
||||||
|
|
||||||
To run your instance:
|
To run your instance:
|
||||||
```bash
|
```bash
|
||||||
docker run --detach --publish <DESIRED_PORT>:9001 <YOUR_USERNAME>/etherpad
|
docker run --detach --publish <DESIRED_PORT>:9002 <YOUR_USERNAME>/etherpad
|
||||||
```
|
```
|
||||||
|
|
||||||
And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
|
And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
|
||||||
|
@ -86,7 +86,7 @@ The `settings.json.docker` available by default allows to control almost every s
|
||||||
| `FAVICON` | favicon default name, or a fully specified URL to your own favicon | `favicon.ico` |
|
| `FAVICON` | favicon default name, or a fully specified URL to your own favicon | `favicon.ico` |
|
||||||
| `DEFAULT_PAD_TEXT` | The default text of a pad | `Welcome to Etherpad! This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents! Get involved with Etherpad at https://etherpad.org` |
|
| `DEFAULT_PAD_TEXT` | The default text of a pad | `Welcome to Etherpad! This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents! Get involved with Etherpad at https://etherpad.org` |
|
||||||
| `IP` | IP which etherpad should bind at. Change to `::` for IPv6 | `0.0.0.0` |
|
| `IP` | IP which etherpad should bind at. Change to `::` for IPv6 | `0.0.0.0` |
|
||||||
| `PORT` | port which etherpad should bind at | `9001` |
|
| `PORT` | port which etherpad should bind at | `9002` |
|
||||||
| `ADMIN_PASSWORD` | the password for the `admin` user (leave unspecified if you do not want to create it) | |
|
| `ADMIN_PASSWORD` | the password for the `admin` user (leave unspecified if you do not want to create it) | |
|
||||||
| `USER_PASSWORD` | the password for the first user `user` (leave unspecified if you do not want to create it) | |
|
| `USER_PASSWORD` | the password for the first user `user` (leave unspecified if you do not want to create it) | |
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ Use a Postgres database, no admin user enabled:
|
||||||
```shell
|
```shell
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name etherpad \
|
--name etherpad \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
-e 'DB_TYPE=postgres' \
|
-e 'DB_TYPE=postgres' \
|
||||||
-e 'DB_HOST=db.local' \
|
-e 'DB_HOST=db.local' \
|
||||||
-e 'DB_PORT=4321' \
|
-e 'DB_PORT=4321' \
|
||||||
|
@ -259,7 +259,7 @@ Run enabling the administrative user `admin`:
|
||||||
```shell
|
```shell
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name etherpad \
|
--name etherpad \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
-e 'ADMIN_PASSWORD=supersecret' \
|
-e 'ADMIN_PASSWORD=supersecret' \
|
||||||
etherpad/etherpad
|
etherpad/etherpad
|
||||||
```
|
```
|
||||||
|
@ -269,7 +269,7 @@ Run a test instance running DirtyDB on a persistent volume:
|
||||||
```shell
|
```shell
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-v etherpad_data:/opt/etherpad-lite/var \
|
-v etherpad_data:/opt/etherpad-lite/var \
|
||||||
-p 9001:9001 \
|
-p 9002:9002 \
|
||||||
etherpad/etherpad
|
etherpad/etherpad
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ services:
|
||||||
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}"
|
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9002}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9002}"
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
|
|
|
@ -40,7 +40,7 @@ services:
|
||||||
TRUST_PROXY: ${DOCKER_COMPOSE_APP_DEV_ENV_TRUST_PROXY:-true}
|
TRUST_PROXY: ${DOCKER_COMPOSE_APP_DEV_ENV_TRUST_PROXY:-true}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_COMPOSE_APP_DEV_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_DEV_PORT_TARGET:-9001}"
|
- "${DOCKER_COMPOSE_APP_DEV_PORT_PUBLISHED:-9002}:${DOCKER_COMPOSE_APP_DEV_PORT_TARGET:-9002}"
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
|
|
|
@ -26,7 +26,7 @@ services:
|
||||||
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}"
|
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9002}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9002}"
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
|
|
|
@ -50,14 +50,14 @@
|
||||||
* specify "null" as the default value.
|
* specify "null" as the default value.
|
||||||
*
|
*
|
||||||
* EXAMPLE:
|
* EXAMPLE:
|
||||||
* "port": "${PORT:9001}"
|
* "port": "${PORT:9002}"
|
||||||
* "minify": "${MINIFY}"
|
* "minify": "${MINIFY}"
|
||||||
* "skinName": "${SKIN_NAME:colibris}"
|
* "skinName": "${SKIN_NAME:colibris}"
|
||||||
*
|
*
|
||||||
* Would read the configuration values for those items from the environment
|
* Would read the configuration values for those items from the environment
|
||||||
* variables PORT, MINIFY and SKIN_NAME.
|
* variables PORT, MINIFY and SKIN_NAME.
|
||||||
*
|
*
|
||||||
* If PORT and SKIN_NAME variables were not defined, the default values 9001 and
|
* If PORT and SKIN_NAME variables were not defined, the default values 9002 and
|
||||||
* "colibris" would be used.
|
* "colibris" would be used.
|
||||||
* The configuration value "minify", on the other hand, does not have a
|
* The configuration value "minify", on the other hand, does not have a
|
||||||
* designated default value. Thus, if the environment variable MINIFY were
|
* designated default value. Thus, if the environment variable MINIFY were
|
||||||
|
@ -66,18 +66,18 @@
|
||||||
* REMARKS:
|
* REMARKS:
|
||||||
* 1) please note that variable substitution always needs to be quoted.
|
* 1) please note that variable substitution always needs to be quoted.
|
||||||
*
|
*
|
||||||
* "port": 9001, <-- Literal values. When not using
|
* "port": 9002, <-- Literal values. When not using
|
||||||
* "minify": false substitution, only strings must be
|
* "minify": false substitution, only strings must be
|
||||||
* "skinName": "colibris" quoted. Booleans and numbers must not.
|
* "skinName": "colibris" quoted. Booleans and numbers must not.
|
||||||
*
|
*
|
||||||
* "port": "${PORT:9001}" <-- CORRECT: if you want to use a variable
|
* "port": "${PORT:9002}" <-- CORRECT: if you want to use a variable
|
||||||
* "minify": "${MINIFY:true}" substitution, put quotes around its name,
|
* "minify": "${MINIFY:true}" substitution, put quotes around its name,
|
||||||
* "skinName": "${SKIN_NAME}" even if the required value is a number or
|
* "skinName": "${SKIN_NAME}" even if the required value is a number or
|
||||||
* a boolean.
|
* a boolean.
|
||||||
* Etherpad will take care of rewriting it
|
* Etherpad will take care of rewriting it
|
||||||
* to the proper type if necessary.
|
* to the proper type if necessary.
|
||||||
*
|
*
|
||||||
* "port": ${PORT:9001} <-- ERROR: this is not valid json. Quotes
|
* "port": ${PORT:9002} <-- ERROR: this is not valid json. Quotes
|
||||||
* "minify": ${MINIFY} around variable names are missing.
|
* "minify": ${MINIFY} around variable names are missing.
|
||||||
* "skinName": ${SKIN_NAME}
|
* "skinName": ${SKIN_NAME}
|
||||||
*
|
*
|
||||||
|
@ -162,7 +162,7 @@
|
||||||
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
|
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
|
||||||
*/
|
*/
|
||||||
"ip": "${IP:0.0.0.0}",
|
"ip": "${IP:0.0.0.0}",
|
||||||
"port": "${PORT:9001}",
|
"port": "${PORT:9002}",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Option to hide/show the settings.json in admin page.
|
* Option to hide/show the settings.json in admin page.
|
||||||
|
@ -659,21 +659,21 @@
|
||||||
*/
|
*/
|
||||||
"lowerCasePadIds": "${LOWER_CASE_PAD_IDS:false}",
|
"lowerCasePadIds": "${LOWER_CASE_PAD_IDS:false}",
|
||||||
"sso": {
|
"sso": {
|
||||||
"issuer": "${SSO_ISSUER:http://localhost:9001}",
|
"issuer": "${SSO_ISSUER:http://localhost:9002}",
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"client_id": "${ADMIN_CLIENT:admin_client}",
|
"client_id": "${ADMIN_CLIENT:admin_client}",
|
||||||
"client_secret": "${ADMIN_SECRET:admin}",
|
"client_secret": "${ADMIN_SECRET:admin}",
|
||||||
"grant_types": ["authorization_code"],
|
"grant_types": ["authorization_code"],
|
||||||
"response_types": ["code"],
|
"response_types": ["code"],
|
||||||
"redirect_uris": ["${ADMIN_REDIRECT:http://localhost:9001/admin/}"]
|
"redirect_uris": ["${ADMIN_REDIRECT:http://localhost:9002/admin/}"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"client_id": "${USER_CLIENT:user_client}",
|
"client_id": "${USER_CLIENT:user_client}",
|
||||||
"client_secret": "${USER_SECRET:user}",
|
"client_secret": "${USER_SECRET:user}",
|
||||||
"grant_types": ["authorization_code"],
|
"grant_types": ["authorization_code"],
|
||||||
"response_types": ["code"],
|
"response_types": ["code"],
|
||||||
"redirect_uris": ["${USER_REDIRECT:http://localhost:9001/}"]
|
"redirect_uris": ["${USER_REDIRECT:http://localhost:9002/}"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -41,14 +41,14 @@
|
||||||
* specify "null" as the default value.
|
* specify "null" as the default value.
|
||||||
*
|
*
|
||||||
* EXAMPLE:
|
* EXAMPLE:
|
||||||
* "port": "${PORT:9001}"
|
* "port": "${PORT:9002}"
|
||||||
* "minify": "${MINIFY}"
|
* "minify": "${MINIFY}"
|
||||||
* "skinName": "${SKIN_NAME:colibris}"
|
* "skinName": "${SKIN_NAME:colibris}"
|
||||||
*
|
*
|
||||||
* Would read the configuration values for those items from the environment
|
* Would read the configuration values for those items from the environment
|
||||||
* variables PORT, MINIFY and SKIN_NAME.
|
* variables PORT, MINIFY and SKIN_NAME.
|
||||||
*
|
*
|
||||||
* If PORT and SKIN_NAME variables were not defined, the default values 9001 and
|
* If PORT and SKIN_NAME variables were not defined, the default values 9002 and
|
||||||
* "colibris" would be used.
|
* "colibris" would be used.
|
||||||
* The configuration value "minify", on the other hand, does not have a
|
* The configuration value "minify", on the other hand, does not have a
|
||||||
* designated default value. Thus, if the environment variable MINIFY were
|
* designated default value. Thus, if the environment variable MINIFY were
|
||||||
|
@ -57,18 +57,18 @@
|
||||||
* REMARKS:
|
* REMARKS:
|
||||||
* 1) please note that variable substitution always needs to be quoted.
|
* 1) please note that variable substitution always needs to be quoted.
|
||||||
*
|
*
|
||||||
* "port": 9001, <-- Literal values. When not using
|
* "port": 9002, <-- Literal values. When not using
|
||||||
* "minify": false substitution, only strings must be
|
* "minify": false substitution, only strings must be
|
||||||
* "skinName": "colibris" quoted. Booleans and numbers must not.
|
* "skinName": "colibris" quoted. Booleans and numbers must not.
|
||||||
*
|
*
|
||||||
* "port": "${PORT:9001}" <-- CORRECT: if you want to use a variable
|
* "port": "${PORT:9002}" <-- CORRECT: if you want to use a variable
|
||||||
* "minify": "${MINIFY:true}" substitution, put quotes around its name,
|
* "minify": "${MINIFY:true}" substitution, put quotes around its name,
|
||||||
* "skinName": "${SKIN_NAME}" even if the required value is a number or
|
* "skinName": "${SKIN_NAME}" even if the required value is a number or
|
||||||
* a boolean.
|
* a boolean.
|
||||||
* Etherpad will take care of rewriting it
|
* Etherpad will take care of rewriting it
|
||||||
* to the proper type if necessary.
|
* to the proper type if necessary.
|
||||||
*
|
*
|
||||||
* "port": ${PORT:9001} <-- ERROR: this is not valid json. Quotes
|
* "port": ${PORT:9002} <-- ERROR: this is not valid json. Quotes
|
||||||
* "minify": ${MINIFY} around variable names are missing.
|
* "minify": ${MINIFY} around variable names are missing.
|
||||||
* "skinName": ${SKIN_NAME}
|
* "skinName": ${SKIN_NAME}
|
||||||
*
|
*
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
|
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
|
||||||
*/
|
*/
|
||||||
"ip": "0.0.0.0",
|
"ip": "0.0.0.0",
|
||||||
"port": 9001,
|
"port": 9002,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Option to hide/show the settings.json in admin page.
|
* Option to hide/show the settings.json in admin page.
|
||||||
|
@ -667,21 +667,21 @@
|
||||||
"lowerCasePadIds": false,
|
"lowerCasePadIds": false,
|
||||||
|
|
||||||
"sso": {
|
"sso": {
|
||||||
"issuer": "${SSO_ISSUER:http://localhost:9001}",
|
"issuer": "${SSO_ISSUER:http://localhost:9002}",
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"client_id": "${ADMIN_CLIENT:admin_client}",
|
"client_id": "${ADMIN_CLIENT:admin_client}",
|
||||||
"client_secret": "${ADMIN_SECRET:admin}",
|
"client_secret": "${ADMIN_SECRET:admin}",
|
||||||
"grant_types": ["authorization_code"],
|
"grant_types": ["authorization_code"],
|
||||||
"response_types": ["code"],
|
"response_types": ["code"],
|
||||||
"redirect_uris": ["${ADMIN_REDIRECT:http://localhost:9001/admin/}"]
|
"redirect_uris": ["${ADMIN_REDIRECT:http://localhost:9002/admin/}"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"client_id": "${USER_CLIENT:user_client}",
|
"client_id": "${USER_CLIENT:user_client}",
|
||||||
"client_secret": "${USER_SECRET:user}",
|
"client_secret": "${USER_SECRET:user}",
|
||||||
"grant_types": ["authorization_code"],
|
"grant_types": ["authorization_code"],
|
||||||
"response_types": ["code"],
|
"response_types": ["code"],
|
||||||
"redirect_uris": ["${USER_REDIRECT:http://localhost:9001/}"]
|
"redirect_uris": ["${USER_REDIRECT:http://localhost:9002/}"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ exports.ip = '0.0.0.0';
|
||||||
/**
|
/**
|
||||||
* The Port ep-lite should listen to
|
* The Port ep-lite should listen to
|
||||||
*/
|
*/
|
||||||
exports.port = process.env.PORT || 9001;
|
exports.port = process.env.PORT || 9002;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should we suppress Error messages from being in Pad Contents
|
* Should we suppress Error messages from being in Pad Contents
|
||||||
|
@ -371,7 +371,7 @@ exports.users = {};
|
||||||
* This setting is used for configuring sso
|
* This setting is used for configuring sso
|
||||||
*/
|
*/
|
||||||
exports.sso = {
|
exports.sso = {
|
||||||
issuer: "http://localhost:9001"
|
issuer: "http://localhost:9002"
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -575,7 +575,7 @@ const storeSettings = (settingsObj: any) => {
|
||||||
* them to appropriate JS types. Otherwise return stringValue as-is.
|
* them to appropriate JS types. Otherwise return stringValue as-is.
|
||||||
*
|
*
|
||||||
* Please note that this function is used for converting types for default
|
* Please note that this function is used for converting types for default
|
||||||
* values in the settings file (for example: "${PORT:9001}"), and that there is
|
* values in the settings file (for example: "${PORT:9002}"), and that there is
|
||||||
* no coercition for "null" values.
|
* no coercition for "null" values.
|
||||||
*
|
*
|
||||||
* If the user wants a variable to be null by default, he'll have to use the
|
* If the user wants a variable to be null by default, he'll have to use the
|
||||||
|
@ -630,7 +630,7 @@ const coerceValue = (stringValue: string) => {
|
||||||
* | settings.json | ENV_VAR | guration value |
|
* | settings.json | ENV_VAR | guration value |
|
||||||
* |---------------------------|---------------|------------------|
|
* |---------------------------|---------------|------------------|
|
||||||
* | "${ENV_VAR}" | "some_string" | "some_string" |
|
* | "${ENV_VAR}" | "some_string" | "some_string" |
|
||||||
* | "${ENV_VAR}" | "9001" | 9001 |
|
* | "${ENV_VAR}" | "9002" | 9002 |
|
||||||
* | "${ENV_VAR}" | undefined | null |
|
* | "${ENV_VAR}" | undefined | null |
|
||||||
* | "${ENV_VAR:some_default}" | "some_string" | "some_string" |
|
* | "${ENV_VAR:some_default}" | "some_string" | "some_string" |
|
||||||
* | "${ENV_VAR:some_default}" | undefined | "some_default" |
|
* | "${ENV_VAR:some_default}" | undefined | "some_default" |
|
||||||
|
|
|
@ -22,7 +22,7 @@ export default defineConfig({
|
||||||
use: {
|
use: {
|
||||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||||
// baseURL: 'http://127.0.0.1:3000',
|
// baseURL: 'http://127.0.0.1:3000',
|
||||||
baseURL: "localhost:9001",
|
baseURL: "localhost:9002",
|
||||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||||
trace: 'on-first-retry',
|
trace: 'on-first-retry',
|
||||||
video: 'on-first-retry',
|
video: 'on-first-retry',
|
||||||
|
|
|
@ -44,7 +44,7 @@ export const generateJWTToken = () => {
|
||||||
jti: '123',
|
jti: '123',
|
||||||
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
||||||
aud: 'account',
|
aud: 'account',
|
||||||
iss: 'http://localhost:9001',
|
iss: 'http://localhost:9002',
|
||||||
admin: true
|
admin: true
|
||||||
})
|
})
|
||||||
jwt.setProtectedHeader({alg: 'RS256'})
|
jwt.setProtectedHeader({alg: 'RS256'})
|
||||||
|
@ -58,7 +58,7 @@ export const generateJWTTokenUser = () => {
|
||||||
jti: '123',
|
jti: '123',
|
||||||
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
||||||
aud: 'account',
|
aud: 'account',
|
||||||
iss: 'http://localhost:9001',
|
iss: 'http://localhost:9002',
|
||||||
})
|
})
|
||||||
jwt.setProtectedHeader({alg: 'RS256'})
|
jwt.setProtectedHeader({alg: 'RS256'})
|
||||||
return jwt.sign(privateKeyExported!)
|
return jwt.sign(privateKeyExported!)
|
||||||
|
|
|
@ -80,7 +80,7 @@ describe(__filename, function () {
|
||||||
Try to import to files of varying size.
|
Try to import to files of varying size.
|
||||||
|
|
||||||
Example Curl command for testing import URI:
|
Example Curl command for testing import URI:
|
||||||
curl -s -v --form file=@/home/jose/test.txt http://127.0.0.1:9001/p/foo/import
|
curl -s -v --form file=@/home/jose/test.txt http://127.0.0.1:9002/p/foo/import
|
||||||
*/
|
*/
|
||||||
|
|
||||||
describe('Imports and Exports', function () {
|
describe('Imports and Exports', function () {
|
||||||
|
|
|
@ -25,7 +25,7 @@ function loadSettings() {
|
||||||
|
|
||||||
// custom settings for running in a container
|
// custom settings for running in a container
|
||||||
settings.ip = 'localhost';
|
settings.ip = 'localhost';
|
||||||
settings.port = '9001';
|
settings.port = '9002';
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ test.describe('admin settings',()=> {
|
||||||
|
|
||||||
|
|
||||||
test('Are Settings visible, populated, does save work', async ({page}) => {
|
test('Are Settings visible, populated, does save work', async ({page}) => {
|
||||||
await page.goto('http://localhost:9001/admin/settings');
|
await page.goto('http://localhost:9002/admin/settings');
|
||||||
await page.waitForSelector('.settings');
|
await page.waitForSelector('.settings');
|
||||||
const settings = page.locator('.settings');
|
const settings = page.locator('.settings');
|
||||||
await expect(settings).not.toBeEmpty();
|
await expect(settings).not.toBeEmpty();
|
||||||
|
@ -48,7 +48,7 @@ test.describe('admin settings',()=> {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('restart works', async function ({page}) {
|
test('restart works', async function ({page}) {
|
||||||
await page.goto('http://localhost:9001/admin/settings');
|
await page.goto('http://localhost:9002/admin/settings');
|
||||||
await page.waitForSelector('.settings')
|
await page.waitForSelector('.settings')
|
||||||
await restartEtherpad(page)
|
await restartEtherpad(page)
|
||||||
await page.waitForSelector('.settings')
|
await page.waitForSelector('.settings')
|
||||||
|
|
|
@ -3,18 +3,18 @@ import {loginToAdmin} from "../helper/adminhelper";
|
||||||
|
|
||||||
test.beforeEach(async ({ page })=>{
|
test.beforeEach(async ({ page })=>{
|
||||||
await loginToAdmin(page, 'admin', 'changeme1');
|
await loginToAdmin(page, 'admin', 'changeme1');
|
||||||
await page.goto('http://localhost:9001/admin/help')
|
await page.goto('http://localhost:9002/admin/help')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Shows troubleshooting page manager', async ({page}) => {
|
test('Shows troubleshooting page manager', async ({page}) => {
|
||||||
await page.goto('http://localhost:9001/admin/help')
|
await page.goto('http://localhost:9002/admin/help')
|
||||||
await page.waitForSelector('.menu')
|
await page.waitForSelector('.menu')
|
||||||
const menu = page.locator('.menu');
|
const menu = page.locator('.menu');
|
||||||
await expect(menu.locator('li')).toHaveCount(5);
|
await expect(menu.locator('li')).toHaveCount(5);
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Shows a version number', async function ({page}) {
|
test('Shows a version number', async function ({page}) {
|
||||||
await page.goto('http://localhost:9001/admin/help')
|
await page.goto('http://localhost:9002/admin/help')
|
||||||
await page.waitForSelector('.menu')
|
await page.waitForSelector('.menu')
|
||||||
const helper = page.locator('.help-block').locator('div').nth(1)
|
const helper = page.locator('.help-block').locator('div').nth(1)
|
||||||
const version = (await helper.textContent())!.split('.');
|
const version = (await helper.textContent())!.split('.');
|
||||||
|
@ -22,7 +22,7 @@ test('Shows a version number', async function ({page}) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Lists installed parts', async function ({page}) {
|
test('Lists installed parts', async function ({page}) {
|
||||||
await page.goto('http://localhost:9001/admin/help')
|
await page.goto('http://localhost:9002/admin/help')
|
||||||
await page.waitForSelector('.menu')
|
await page.waitForSelector('.menu')
|
||||||
await page.waitForSelector('.innerwrapper ul')
|
await page.waitForSelector('.innerwrapper ul')
|
||||||
const parts = page.locator('.innerwrapper ul').nth(1);
|
const parts = page.locator('.innerwrapper ul').nth(1);
|
||||||
|
@ -30,7 +30,7 @@ test('Lists installed parts', async function ({page}) {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Lists installed hooks', async function ({page}) {
|
test('Lists installed hooks', async function ({page}) {
|
||||||
await page.goto('http://localhost:9001/admin/help')
|
await page.goto('http://localhost:9002/admin/help')
|
||||||
await page.waitForSelector('.menu')
|
await page.waitForSelector('.menu')
|
||||||
await page.waitForSelector('.innerwrapper ul')
|
await page.waitForSelector('.innerwrapper ul')
|
||||||
const helper = page.locator('.innerwrapper ul').nth(2);
|
const helper = page.locator('.innerwrapper ul').nth(2);
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {loginToAdmin} from "../helper/adminhelper";
|
||||||
|
|
||||||
test.beforeEach(async ({ page })=>{
|
test.beforeEach(async ({ page })=>{
|
||||||
await loginToAdmin(page, 'admin', 'changeme1');
|
await loginToAdmin(page, 'admin', 'changeme1');
|
||||||
await page.goto('http://localhost:9001/admin/plugins')
|
await page.goto('http://localhost:9002/admin/plugins')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import {expect, Page} from "@playwright/test";
|
||||||
|
|
||||||
export const loginToAdmin = async (page: Page, username: string, password: string) => {
|
export const loginToAdmin = async (page: Page, username: string, password: string) => {
|
||||||
|
|
||||||
await page.goto('http://localhost:9001/admin/');
|
await page.goto('http://localhost:9002/admin/');
|
||||||
|
|
||||||
await page.waitForSelector('input[name="username"]');
|
await page.waitForSelector('input[name="username"]');
|
||||||
await page.fill('input[name="username"]', username);
|
await page.fill('input[name="username"]', username);
|
||||||
|
|
|
@ -116,13 +116,13 @@ export const appendQueryParams = async (page: Page, queryParameters: MapArrayTyp
|
||||||
export const goToNewPad = async (page: Page) => {
|
export const goToNewPad = async (page: Page) => {
|
||||||
// create a new pad before each test run
|
// create a new pad before each test run
|
||||||
const padId = "FRONTEND_TESTS"+randomUUID();
|
const padId = "FRONTEND_TESTS"+randomUUID();
|
||||||
await page.goto('http://localhost:9001/p/'+padId);
|
await page.goto('http://localhost:9002/p/'+padId);
|
||||||
await page.waitForSelector('iframe[name="ace_outer"]');
|
await page.waitForSelector('iframe[name="ace_outer"]');
|
||||||
return padId;
|
return padId;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const goToPad = async (page: Page, padId: string) => {
|
export const goToPad = async (page: Page, padId: string) => {
|
||||||
await page.goto('http://localhost:9001/p/'+padId);
|
await page.goto('http://localhost:9002/p/'+padId);
|
||||||
await page.waitForSelector('iframe[name="ace_outer"]');
|
await page.waitForSelector('iframe[name="ace_outer"]');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ const { defineConfig } = require('cypress')
|
||||||
|
|
||||||
module.exports = defineConfig({
|
module.exports = defineConfig({
|
||||||
e2e: {
|
e2e: {
|
||||||
baseUrl: "http://127.0.0.1:9001",
|
baseUrl: "http://127.0.0.1:9002",
|
||||||
supportFile: false,
|
supportFile: false,
|
||||||
specPattern: 'tests/frontend/cypress/integration/**/*.js'
|
specPattern: 'tests/frontend/cypress/integration/**/*.js'
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ Cypress.Commands.add('iframe', {prevSubject: 'element'},
|
||||||
|
|
||||||
describe(__filename, () => {
|
describe(__filename, () => {
|
||||||
it('Pad content exists', () => {
|
it('Pad content exists', () => {
|
||||||
cy.visit('http://127.0.0.1:9001/p/test');
|
cy.visit('http://127.0.0.1:9002/p/test');
|
||||||
cy.wait(10000); // wait for Minified JS to be built...
|
cy.wait(10000); // wait for Minified JS to be built...
|
||||||
cy.get('iframe[name="ace_outer"]', {timeout: 10000}).iframe()
|
cy.get('iframe[name="ace_outer"]', {timeout: 10000}).iframe()
|
||||||
.find('.line-number:first')
|
.find('.line-number:first')
|
||||||
|
|
|
@ -17,8 +17,8 @@ describe('timeslider', function () {
|
||||||
await helper.waitForPromise(() => helper.contentWindow().location.hash === '#1');
|
await helper.waitForPromise(() => helper.contentWindow().location.hash === '#1');
|
||||||
|
|
||||||
// expect URI to be similar to
|
// expect URI to be similar to
|
||||||
// http://192.168.1.48:9001/p/2/1/export/html
|
// http://192.168.1.48:9002/p/2/1/export/html
|
||||||
// http://192.168.1.48:9001/p/735773577399/1/export/html
|
// http://192.168.1.48:9002/p/735773577399/1/export/html
|
||||||
const rev1ExportLink = helper.contentWindow().$('#exporthtmla').attr('href');
|
const rev1ExportLink = helper.contentWindow().$('#exporthtmla').attr('href');
|
||||||
expect(rev1ExportLink).to.contain('/1/export/html');
|
expect(rev1ExportLink).to.contain('/1/export/html');
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,10 @@ log "Assuming src/bin/installDeps.sh has already been run"
|
||||||
( cd src && npm run dev --experimental-worker "${@}" &
|
( cd src && npm run dev --experimental-worker "${@}" &
|
||||||
ep_pid=$!)
|
ep_pid=$!)
|
||||||
|
|
||||||
log "Waiting for Etherpad to accept connections (http://localhost:9001)..."
|
log "Waiting for Etherpad to accept connections (http://localhost:9002)..."
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -27,7 +27,7 @@ while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
|
||||||
done
|
done
|
||||||
[ "$connected" = true ] \
|
[ "$connected" = true ] \
|
||||||
|| fatal "Timed out waiting for Etherpad to accept connections"
|
|| fatal "Timed out waiting for Etherpad to accept connections"
|
||||||
log "Successfully connected to Etherpad on http://localhost:9001"
|
log "Successfully connected to Etherpad on http://localhost:9002"
|
||||||
|
|
||||||
# start the remote runner
|
# start the remote runner
|
||||||
try cd "${MY_DIR}"
|
try cd "${MY_DIR}"
|
||||||
|
|
|
@ -54,7 +54,7 @@ const sauceTestWorker = async.queue(async ({name, pfx, browser, version, platfor
|
||||||
const driver = await builder.build();
|
const driver = await builder.build();
|
||||||
const url = `https://saucelabs.com/jobs/${(await driver.getSession()).getId()}`;
|
const url = `https://saucelabs.com/jobs/${(await driver.getSession()).getId()}`;
|
||||||
try {
|
try {
|
||||||
await driver.get('http://localhost:9001/tests/frontend/');
|
await driver.get('http://localhost:9002/tests/frontend/');
|
||||||
log(`Remote sauce test started! ${url}`, pfx);
|
log(`Remote sauce test started! ${url}`, pfx);
|
||||||
// @TODO this should be configured in testSettings, see
|
// @TODO this should be configured in testSettings, see
|
||||||
// https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options#TestConfigurationOptions-Timeouts
|
// https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options#TestConfigurationOptions-Timeouts
|
||||||
|
|
|
@ -14,10 +14,10 @@ log "Assuming bin/installDeps.sh has already been run"
|
||||||
(cd src && npm run dev --experimental-worker "${@}" &
|
(cd src && npm run dev --experimental-worker "${@}" &
|
||||||
ep_pid=$!)
|
ep_pid=$!)
|
||||||
|
|
||||||
log "Waiting for Etherpad to accept connections (http://localhost:9001)..."
|
log "Waiting for Etherpad to accept connections (http://localhost:9002)..."
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -27,7 +27,7 @@ while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
|
||||||
done
|
done
|
||||||
[ "$connected" = true ] \
|
[ "$connected" = true ] \
|
||||||
|| fatal "Timed out waiting for Etherpad to accept connections"
|
|| fatal "Timed out waiting for Etherpad to accept connections"
|
||||||
log "Successfully connected to Etherpad on http://localhost:9001"
|
log "Successfully connected to Etherpad on http://localhost:9002"
|
||||||
|
|
||||||
# start the remote runner
|
# start the remote runner
|
||||||
try cd "${MY_DIR}"
|
try cd "${MY_DIR}"
|
||||||
|
|
|
@ -22,10 +22,10 @@ log "Assuming src/bin/installDeps.sh has already been run"
|
||||||
(cd src && npm run dev "${@}" &
|
(cd src && npm run dev "${@}" &
|
||||||
ep_pid=$!)
|
ep_pid=$!)
|
||||||
|
|
||||||
log "Waiting for Etherpad to accept connections (http://localhost:9001)..."
|
log "Waiting for Etherpad to accept connections (http://localhost:9002)..."
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -35,7 +35,7 @@ while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
|
||||||
done
|
done
|
||||||
[ "$connected" = true ] \
|
[ "$connected" = true ] \
|
||||||
|| fatal "Timed out waiting for Etherpad to accept connections"
|
|| fatal "Timed out waiting for Etherpad to accept connections"
|
||||||
log "Successfully connected to Etherpad on http://localhost:9001"
|
log "Successfully connected to Etherpad on http://localhost:9002"
|
||||||
|
|
||||||
log "Running the backend tests..."
|
log "Running the backend tests..."
|
||||||
try cd src
|
try cd src
|
||||||
|
|
|
@ -27,10 +27,10 @@ log "Assuming src/bin/installDeps.sh has already been run"
|
||||||
(cd src && pnpm run prod &
|
(cd src && pnpm run prod &
|
||||||
ep_pid=$!)
|
ep_pid=$!)
|
||||||
|
|
||||||
log "Waiting for Etherpad to accept connections (http://localhost:9001)..."
|
log "Waiting for Etherpad to accept connections (http://localhost:9002)..."
|
||||||
connected=false
|
connected=false
|
||||||
can_connect() {
|
can_connect() {
|
||||||
curl -sSfo /dev/null http://localhost:9001/ || return 1
|
curl -sSfo /dev/null http://localhost:9002/ || return 1
|
||||||
connected=true
|
connected=true
|
||||||
}
|
}
|
||||||
now() { date +%s; }
|
now() { date +%s; }
|
||||||
|
@ -40,10 +40,10 @@ while [ $(($(now) - $start)) -le 60 ] && ! can_connect; do
|
||||||
done
|
done
|
||||||
[ "$connected" = true ] \
|
[ "$connected" = true ] \
|
||||||
|| fatal "Timed out waiting for Etherpad to accept connections"
|
|| fatal "Timed out waiting for Etherpad to accept connections"
|
||||||
log "Successfully connected to Etherpad on http://localhost:9001"
|
log "Successfully connected to Etherpad on http://localhost:9002"
|
||||||
|
|
||||||
# Build the minified files
|
# Build the minified files
|
||||||
try curl http://localhost:9001/p/minifyme -f -s >/dev/null
|
try curl http://localhost:9002/p/minifyme -f -s >/dev/null
|
||||||
|
|
||||||
# just in case, let's wait for another 10 seconds before going on
|
# just in case, let's wait for another 10 seconds before going on
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
|
@ -4,7 +4,7 @@ http {
|
||||||
access_log /dev/fd/1;
|
access_log /dev/fd/1;
|
||||||
error_log /dev/fd/2;
|
error_log /dev/fd/2;
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://172.23.42.2:9001/;
|
proxy_pass http://172.23.42.2:9002/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_pass_header Server;
|
proxy_pass_header Server;
|
||||||
# be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
|
# be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"title":"Etherpad","favicon":null,"skinName":"colibris","skinVariants":"super-light-toolbar super-light-editor light-background","ip":"0.0.0.0","port":9001,"showSettingsInAdminPage":true,"dbType":"dirty","dbSettings":{"filename":"var/dirty.db"},"defaultPadText":"Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https://etherpad.org\n","padOptions":{"noColors":false,"showControls":true,"showChat":true,"showLineNumbers":true,"useMonospaceFont":false,"userName":null,"userColor":null,"rtl":false,"alwaysShowChat":false,"chatAndUsers":false,"lang":null},"padShortcutEnabled":{"altF9":true,"altC":true,"cmdShift2":true,"delete":true,"return":true,"esc":true,"cmdS":true,"tab":true,"cmdZ":true,"cmdY":true,"cmdI":true,"cmdB":true,"cmdU":true,"cmd5":true,"cmdShiftL":true,"cmdShiftN":true,"cmdShift1":true,"cmdShiftC":true,"cmdH":true,"ctrlHome":true,"pageUp":true,"pageDown":true},"suppressErrorsInPadText":false,"requireSession":false,"editOnly":false,"minify":true,"maxAge":21600,"abiword":null,"soffice":null,"allowUnknownFileEnds":true,"requireAuthentication":false,"requireAuthorization":false,"trustProxy":false,"cookie":{"keyRotationInterval":86400000,"sameSite":"Lax","sessionLifetime":864000000,"sessionRefreshInterval":86400000},"disableIPlogging":false,"automaticReconnectionTimeout":0,"scrollWhenFocusLineIsOutOfViewport":{"percentage":{"editionAboveViewport":0,"editionBelowViewport":0},"duration":0,"scrollWhenCaretIsInTheLastLineOfViewport":false,"percentageToScrollWhenUserPressesArrowUp":0},"users":{"admin":{"password":"changeme1","is_admin":true},"user":{"password":"changeme1","is_admin":false}},"socketTransportProtocols":["websocket","polling"],"socketIo":{"maxHttpBufferSize":1000000},"loadTest":false,"dumpOnUncleanExit":false,"importExportRateLimiting":{"windowMs":90000,"max":10},"importMaxFileSize":52428800,"commitRateLimiting":{"duration":1,"points":10},"exposeVersion":false,"loglevel":"INFO","customLocaleStrings":{},"enableAdminUITests":true,"lowerCasePadIds":false,"sso":{"issuer":"${SSO_ISSUER:http://localhost:9001}","clients":[{"client_id":"${ADMIN_CLIENT:admin_client}","client_secret":"${ADMIN_SECRET:admin}","grant_types":["authorization_code"],"response_types":["code"],"redirect_uris":["${ADMIN_REDIRECT:http://localhost:9001/admin/}","https://oauth.pstmn.io/v1/callback"]},{"client_id":"${USER_CLIENT:user_client}","client_secret":"${USER_SECRET:user}","grant_types":["authorization_code"],"response_types":["code"],"redirect_uris":["${USER_REDIRECT:http://localhost:9001/}"]}]}}
|
{"title":"Etherpad","favicon":null,"skinName":"colibris","skinVariants":"super-light-toolbar super-light-editor light-background","ip":"0.0.0.0","port":9002,"showSettingsInAdminPage":true,"dbType":"dirty","dbSettings":{"filename":"var/dirty.db"},"defaultPadText":"Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https://etherpad.org\n","padOptions":{"noColors":false,"showControls":true,"showChat":true,"showLineNumbers":true,"useMonospaceFont":false,"userName":null,"userColor":null,"rtl":false,"alwaysShowChat":false,"chatAndUsers":false,"lang":null},"padShortcutEnabled":{"altF9":true,"altC":true,"cmdShift2":true,"delete":true,"return":true,"esc":true,"cmdS":true,"tab":true,"cmdZ":true,"cmdY":true,"cmdI":true,"cmdB":true,"cmdU":true,"cmd5":true,"cmdShiftL":true,"cmdShiftN":true,"cmdShift1":true,"cmdShiftC":true,"cmdH":true,"ctrlHome":true,"pageUp":true,"pageDown":true},"suppressErrorsInPadText":false,"requireSession":false,"editOnly":false,"minify":true,"maxAge":21600,"abiword":null,"soffice":null,"allowUnknownFileEnds":true,"requireAuthentication":false,"requireAuthorization":false,"trustProxy":false,"cookie":{"keyRotationInterval":86400000,"sameSite":"Lax","sessionLifetime":864000000,"sessionRefreshInterval":86400000},"disableIPlogging":false,"automaticReconnectionTimeout":0,"scrollWhenFocusLineIsOutOfViewport":{"percentage":{"editionAboveViewport":0,"editionBelowViewport":0},"duration":0,"scrollWhenCaretIsInTheLastLineOfViewport":false,"percentageToScrollWhenUserPressesArrowUp":0},"users":{"admin":{"password":"changeme1","is_admin":true},"user":{"password":"changeme1","is_admin":false}},"socketTransportProtocols":["websocket","polling"],"socketIo":{"maxHttpBufferSize":1000000},"loadTest":false,"dumpOnUncleanExit":false,"importExportRateLimiting":{"windowMs":90000,"max":10},"importMaxFileSize":52428800,"commitRateLimiting":{"duration":1,"points":10},"exposeVersion":false,"loglevel":"INFO","customLocaleStrings":{},"enableAdminUITests":true,"lowerCasePadIds":false,"sso":{"issuer":"${SSO_ISSUER:http://localhost:9002}","clients":[{"client_id":"${ADMIN_CLIENT:admin_client}","client_secret":"${ADMIN_SECRET:admin}","grant_types":["authorization_code"],"response_types":["code"],"redirect_uris":["${ADMIN_REDIRECT:http://localhost:9002/admin/}","https://oauth.pstmn.io/v1/callback"]},{"client_id":"${USER_CLIENT:user_client}","client_secret":"${USER_SECRET:user}","grant_types":["authorization_code"],"response_types":["code"],"redirect_uris":["${USER_REDIRECT:http://localhost:9002/}"]}]}}
|
|
@ -10,6 +10,6 @@ REM Etherpad internals via `require('ep_etherpad-lite/foo')`,
|
||||||
REM `node_modules\ep_etherpad-lite` is used here.
|
REM `node_modules\ep_etherpad-lite` is used here.
|
||||||
cd src
|
cd src
|
||||||
|
|
||||||
start microsoftedge "http://localhost:9001"
|
start microsoftedge "http://localhost:9002"
|
||||||
pnpm run prod
|
pnpm run prod
|
||||||
|
|
||||||
|
|
|
@ -20,24 +20,24 @@ export default defineConfig({
|
||||||
server:{
|
server:{
|
||||||
proxy:{
|
proxy:{
|
||||||
'/static':{
|
'/static':{
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
secure: false,
|
secure: false,
|
||||||
},
|
},
|
||||||
'/views/manifest.json':{
|
'/views/manifest.json':{
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
secure: false,
|
secure: false,
|
||||||
rewrite: (path) => path.replace(/^\/views/, ''),
|
rewrite: (path) => path.replace(/^\/views/, ''),
|
||||||
},
|
},
|
||||||
'/locales.json':{
|
'/locales.json':{
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
secure: false,
|
secure: false,
|
||||||
rewrite: (path) => path.replace(/^\/views/, ''),
|
rewrite: (path) => path.replace(/^\/views/, ''),
|
||||||
},
|
},
|
||||||
'/locales':{
|
'/locales':{
|
||||||
target: 'http://localhost:9001',
|
target: 'http://localhost:9002',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
secure: false,
|
secure: false,
|
||||||
rewrite: (path) => path.replace(/^\/views/, ''),
|
rewrite: (path) => path.replace(/^\/views/, ''),
|
||||||
|
|
2
编译说明.md
2
编译说明.md
|
@ -4,7 +4,7 @@
|
||||||
4. Run `pnpm i`
|
4. Run `pnpm i`
|
||||||
5. Run `pnpm run build:etherpad`
|
5. Run `pnpm run build:etherpad`
|
||||||
6. Run `pnpm run prod`
|
6. Run `pnpm run prod`
|
||||||
7. Visit `http://localhost:9001` in your browser.
|
7. Visit `http://localhost:9002` in your browser.
|
||||||
|
|
||||||
|
|
||||||
后台中文设置,找到文件
|
后台中文设置,找到文件
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue