44 Commits

Author SHA1 Message Date
3wc
98c0268b72 chore: publish 3.0.0+1.10.1 release 2025-02-24 12:34:13 -05:00
3wc
73c8b662d4 Switch to pgautoupgrade to handle major database upgrades 2025-02-24 12:33:07 -05:00
3wc
674cbd0431 Fix CMD_DB_URL setting for postgres 2025-02-24 12:32:54 -05:00
f
4972af78e8 chore: publish 2.0.0+1.10.1 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2025-02-04 12:57:45 +01:00
aa2afc2270 Revert "chore: publish 1.3.0+1.10.1 release"
This reverts commit 6fbaeb7af0.
2025-02-04 12:56:14 +01:00
f
6fbaeb7af0 chore: publish 1.3.0+1.10.1 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2025-02-03 09:45:58 -03:00
f
aa70a53ef1 Merge branch 'sqlite' of ssh://git.coopcloud.tech:2222/fauno/hedgedoc 2025-02-03 09:44:47 -03:00
f
3efbfec419 chore: publish 1.2.2+1.10.1 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2025-02-03 09:42:30 -03:00
f
93e5604fcb fix: GHSA-6w39-x2c6-6mpf
https://github.com/hedgedoc/hedgedoc/security/advisories/GHSA-6w39-x2c6-6mpf
2025-02-03 09:34:32 -03:00
917766023b Update .drone.yml
Some checks failed
continuous-integration/drone/push Build is failing
2025-01-08 10:09:12 -08:00
6feab6a99e Merge pull request 'envvars' (#16) from fauno/hedgedoc:envvars into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #16
2024-10-27 06:22:01 +00:00
f
24c3349074 fix: backup bot configuration
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-26 13:20:05 -03:00
f
6429b2720f fix: chown the database
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-26 13:11:12 -03:00
f
ca5a95bea6 fix: load secret from file into env var
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-26 11:01:18 -03:00
f
45986d1af4 fix: db_password secret not needed
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-26 10:59:54 -03:00
f
35e78f4834 fix: don't overwrite CMD_DB_URL
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-25 17:52:50 -03:00
f
3a98857b5c feat: postgresql support is optional 2024-10-25 17:51:49 -03:00
f
2310cb9378 feat: support sqlite 2024-10-25 17:50:18 -03:00
f
6a036c4c82 fix: set session secret
Some checks failed
continuous-integration/drone/pr Build is failing
2024-10-25 17:47:27 -03:00
f
d19f286c11 fix: require authentication for free urls 2024-10-25 17:46:47 -03:00
635eee710b chore: publish 1.2.1+1.10.0 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-10-25 21:04:02 +02:00
49f06173e9 fix drone runner
All checks were successful
continuous-integration/drone/push Build is passing
2024-10-24 13:31:31 +02:00
9194256835 update backupbot label
Some checks failed
continuous-integration/drone/push Build is failing
2024-10-24 13:22:27 +02:00
081f2139fa chore: publish 1.2.0+1.10.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2024-10-01 13:12:13 +02:00
6f15d5f2c7 chore: publish 1.1.0+1.9.9 release
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-16 17:32:26 +02:00
8bc03406a1 Remove legacy backup configuration
by @wolcen
2024-07-16 17:31:57 +02:00
bc8996f558 Correct README re: configuring users
by @wolcen
2024-07-16 17:31:20 +02:00
fcf5bade21 Add basic health check for db container
by @wolcen
2024-07-16 17:29:45 +02:00
3fc480b82b Remove unnecessary mode assignment for config.json @wolcen 2024-07-16 17:29:45 +02:00
f71534e396 fix indentation for backupbot labels 2024-07-16 17:29:45 +02:00
5e815e63a5 Merge pull request 'fix: use new uploads path' (#12) from fix-uploads-volume into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2024-07-16 14:52:03 +00:00
ec98bab9d5 Merge pull request 'Pass -p also in entrypoint' (#14) from entrypoint-fix into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #14
2024-07-16 14:49:28 +00:00
65ec56ac08 add alakazam integration file alaconnect.yml
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-13 17:41:59 +02:00
1ed15423c3 fix: pass "-p" and use new lines
Some checks failed
continuous-integration/drone/pr Build is failing
Closes #13
2024-04-28 17:57:38 +02:00
0443ffc984 chore: remove tabs 2024-04-28 17:55:55 +02:00
c727320a31 fix: use new uploads path
Some checks failed
continuous-integration/drone/pr Build is failing
2024-04-23 09:21:38 +02:00
e8f1186965 chore: publish 1.0.1+1.9.9 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-04-17 17:14:23 +02:00
66c5160812 fix backupbot label 2024-04-17 17:07:53 +02:00
c656afb176 chore: publish 1.0.0+1.9.9 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-13 07:49:46 -08:00
97f2d94079 chore: publish 0.6.0+1.9.9 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-26 11:14:40 -07:00
4846a09169 add timeout label
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-19 22:50:23 +02:00
210a37cd0c fix permissions for real
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-13 17:10:41 +02:00
3wc
914ef6b026 Spooky permissions fix?
All checks were successful
continuous-integration/drone/push Build is passing
See https://github.com/hedgedoc/container/issues/463
2023-10-02 19:11:13 +01:00
5f205c149f Merge pull request 'update outdated readme + add restore hook' (#10) from mayel-patch-1 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #10
2023-07-29 11:37:09 +00:00
14 changed files with 180 additions and 80 deletions

View File

@ -19,6 +19,7 @@ steps:
LETS_ENCRYPT_ENV: production LETS_ENCRYPT_ENV: production
SECRET_DB_PASSWORD_VERSION: v1 SECRET_DB_PASSWORD_VERSION: v1
ENTRYPOINT_CONF_VERSION: v1 ENTRYPOINT_CONF_VERSION: v1
PG_BACKUP_VERSION: v1
trigger: trigger:
branch: branch:
- main - main
@ -34,7 +35,7 @@ steps:
from_secret: drone_abra-bot_token from_secret: drone_abra-bot_token
fork: true fork: true
repositories: repositories:
- coop-cloud/auto-recipes-catalogue-json - toolshed/auto-recipes-catalogue-json
trigger: trigger:
event: tag event: tag

View File

@ -1,14 +1,22 @@
TYPE=hedgedoc TYPE=hedgedoc
TIMEOUT=300
ENABLE_AUTO_UPDATE=true
ENABLE_BACKUPS=true
DOMAIN=hedgedoc.example.com DOMAIN=hedgedoc.example.com
## Domain aliases ## Domain aliases
#EXTRA_DOMAINS=', `www.hedgedoc.example.com`' #EXTRA_DOMAINS=', `www.hedgedoc.example.com`'
LETS_ENCRYPT_ENV=production LETS_ENCRYPT_ENV=production
SECRET_DB_PASSWORD_VERSION=v1 SECRET_SESSION_SECRET_VERSION=v1
COMPOSE_FILE="compose.yml" COMPOSE_FILE="compose.yml"
# PostgreSQL
#COMPOSE_FILE="$COMPOSE_FILE:compose.postgresql.yml"
#SECRET_DB_PASSWORD_VERSION=v1
# OAuth, see https://docs.hedgedoc.org/guides/auth/keycloak/ # OAuth, see https://docs.hedgedoc.org/guides/auth/keycloak/
#COMPOSE_FILE="$COMPOSE_FILE:compose.oauth.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.oauth.yml"
@ -31,6 +39,7 @@ COMPOSE_FILE="compose.yml"
# CMD_ALLOW_ANONYMOUS_EDITS=false # CMD_ALLOW_ANONYMOUS_EDITS=false
# CMD_ALLOW_EMAIL_REGISTER=true # CMD_ALLOW_EMAIL_REGISTER=true
# CMD_ALLOW_FREEURL=false # CMD_ALLOW_FREEURL=false
# CMD_REQUIRE_FREEURL_AUTHENTICATION=true
# CMD_ALLOW_GRAVATAR=true # CMD_ALLOW_GRAVATAR=true
# CMD_ALLOW_ORIGIN=localhost # CMD_ALLOW_ORIGIN=localhost
# CMD_COOKIE_POLICY=lax # CMD_COOKIE_POLICY=lax

View File

@ -25,8 +25,8 @@
5. `abra app deploy YOURAPPDOMAIN` 5. `abra app deploy YOURAPPDOMAIN`
6. Create initial user: 6. Create initial user:
``` ```
abra app YOURAPPDOMAIN run app bash abra app run YOURAPPDOMAIN app bash
. /docker-entrypoint2.sh -e . /docker-entrypoint.sh -e
bin/manage_users bin/manage_users
[hedegedoc]: https://github.com/hedgedoc/hedgedoc [hedegedoc]: https://github.com/hedgedoc/hedgedoc

15
abra.sh
View File

@ -1,13 +1,2 @@
export ENTRYPOINT_CONF_VERSION=v6 export ENTRYPOINT_CONF_VERSION=v11
export PG_BACKUP_VERSION=v1
abra_backup_app() {
_abra_backup_dir "app:/home/hackmd/app/public/uploads/"
}
abra_backup_db() {
_abra_backup_postgres "db" "codimd" "codimd" "db_password"
}
abra_backup() {
abra_backup_app && abra_backup_db
}

15
alaconnect.yml Normal file
View File

@ -0,0 +1,15 @@
authentik:
env:
CMD_OAUTH2_USER_PROFILE_URL: https://authentik.example.com/application/o/userinfo/
CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR: preferred_username
CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR: name
CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR: email
CMD_OAUTH2_TOKEN_URL: https://authentik.example.com/application/o/token/
CMD_OAUTH2_AUTHORIZATION_URL: https://authentik.example.com/application/o/authorize/
CMD_OAUTH2_CLIENT_ID: hedgedoc
CMD_OAUTH2_PROVIDERNAME: Authentik
uncomment:
- compose.oauth.yml
- SECRET_OAUTH_KEY_VERSION
shared_secrets:
hedgedoc_secret: oauth_key

55
compose.postgresql.yml Normal file
View File

@ -0,0 +1,55 @@
version: "3.8"
services:
app:
environment:
- POSTGRES_ENABLED=1
- CMD_DB_NAME=codimd
- CMD_DB_USER=codimd
- CMD_DB_HOST=db
- CMD_DB_PASSWORD_FILE=/run/secrets/db_password
depends_on:
- db
networks:
- internal
secrets:
- db_password
db:
image: pgautoupgrade/pgautoupgrade:16-alpine
environment:
- POSTGRES_USER=codimd
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
- POSTGRES_DB=codimd
volumes:
- "postgres:/var/lib/postgresql/data"
secrets:
- db_password
networks:
- internal
deploy:
labels:
backupbot.backup: "${ENABLE_BACKUPS:-true}"
backupbot.backup.pre-hook: "/pg_backup.sh backup"
backupbot.backup.volumes.postgres.path: "backup.sql"
backupbot.restore.post-hook: '/pg_backup.sh restore'
healthcheck:
test: "pg_isready"
interval: 30s
timeout: 10s
retries: 5
start_period: 1m
configs:
- source: pg_backup
target: /pg_backup.sh
mode: 0555
volumes:
postgres:
secrets:
db_password:
external: true
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION}
networks:
internal:
configs:
pg_backup:
name: ${STACK_NAME}_pg_backup_${PG_BACKUP_VERSION}
file: pg_backup.sh

View File

@ -1,21 +1,19 @@
version: "3.8" version: "3.8"
services: services:
app: app:
image: quay.io/hedgedoc/hedgedoc:1.9.8 image: quay.io/hedgedoc/hedgedoc:1.10.1
environment: environment:
- CMD_USECDN=false - CMD_USECDN=false
- CMD_URL_ADDPORT=false - CMD_URL_ADDPORT=false
- CMD_DOMAIN=$DOMAIN - CMD_DOMAIN=$DOMAIN
- CMD_PROTOCOL_USESSL=true - CMD_PROTOCOL_USESSL=true
- CMD_HSTS_ENABLE=false - CMD_HSTS_ENABLE=false
- CMD_DB_NAME=codimd - CMD_DB_URL=sqlite:/database/db.sqlite3
- CMD_DB_USER=codimd
- CMD_DB_HOST=db
- CMD_DB_PASSWORD_FILE=/run/secrets/db_password
- CMD_ALLOW_ANONYMOUS - CMD_ALLOW_ANONYMOUS
- CMD_ALLOW_ANONYMOUS_EDITS - CMD_ALLOW_ANONYMOUS_EDITS
- CMD_ALLOW_EMAIL_REGISTER - CMD_ALLOW_EMAIL_REGISTER
- CMD_ALLOW_FREEURL - CMD_ALLOW_FREEURL
- CMD_REQUIRE_FREEURL_AUTHENTICATION
- CMD_ALLOW_GRAVATAR - CMD_ALLOW_GRAVATAR
- CMD_ALLOW_ORIGIN - CMD_ALLOW_ORIGIN
- CMD_COOKIE_POLICY - CMD_COOKIE_POLICY
@ -26,16 +24,15 @@ services:
- CMD_DEFAULT_PERMISSION - CMD_DEFAULT_PERMISSION
- CMD_EMAIL - CMD_EMAIL
- CMD_SESSION_LIFE - CMD_SESSION_LIFE
- CMD_SESSION_SECRET_FILE=/run/secrets/session_secret
- DOCUMENT_MAX_LENGTH - DOCUMENT_MAX_LENGTH
depends_on:
- db
networks: networks:
- proxy - proxy
- internal
volumes: volumes:
- codimd_uploads:/home/hackmd/app/public/uploads - codimd_uploads:/hedgedoc/public/uploads
- codimd_database:/database
secrets: secrets:
- db_password - session_secret
entrypoint: /docker-entrypoint.sh entrypoint: /docker-entrypoint.sh
configs: configs:
- source: entrypoint_conf - source: entrypoint_conf
@ -43,7 +40,6 @@ services:
mode: 0555 mode: 0555
- source: config_json - source: config_json
target: /files/config.json target: /files/config.json
mode: 0555
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@ -57,44 +53,25 @@ services:
- "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect" - "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLForceHost=true" - "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLForceHost=true"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}" - "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}"
- coop-cloud.${STACK_NAME}.version=0.5.1+1.9.8 - "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "coop-cloud.${STACK_NAME}.version=3.0.0+1.10.1"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
healthcheck: healthcheck:
test: "nodejs -e \"http.get('http://localhost:3000', (res) => { console.log('status: ', res.statusCode); if (res.statusCode == 200) { process.exit(0); } else { process.exit(1); } });\"" test: "nodejs -e \"http.get('http://localhost:3000', (res) => { console.log('status: ', res.statusCode); if (res.statusCode == 200) { process.exit(0); } else { process.exit(1); } });\""
interval: 30s interval: 30s
timeout: 10s timeout: 10s
retries: 10 retries: 10
start_period: 1m start_period: 1m
db:
image: postgres:11.20-alpine
environment:
- POSTGRES_USER=codimd
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
- POSTGRES_DB=codimd
volumes: volumes:
- "postgres:/var/lib/postgresql/data"
secrets:
- db_password
networks:
- internal
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.pre-hook: "mkdir -p /tmp/backup/ && PGPASSWORD=$$(cat $${POSTGRES_PASSWORD_FILE}) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /tmp/backup/backup.sql"
backupbot.backup.post-hook: "rm -rf /tmp/backup"
backupbot.backup.path: "/tmp/backup/"
backupbot.restore: "true"
backupbot.restore.post-hook: "sh -c 'psql -U $${POSTGRES_USER} -d $${POSTGRES_DB} < ./backup.sql && rm -f ./backup.sql'"
volumes:
postgres:
codimd_uploads: codimd_uploads:
codimd_database:
secrets: secrets:
db_password: session_secret:
external: true external: true
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} name: ${STACK_NAME}_session_secret_${SECRET_SESSION_SECRET_VERSION}
networks: networks:
proxy: proxy:
external: true external: true
internal:
configs: configs:
config_json: config_json:
name: ${STACK_NAME}_config_${ENTRYPOINT_CONF_VERSION} name: ${STACK_NAME}_config_${ENTRYPOINT_CONF_VERSION}

View File

@ -24,22 +24,31 @@ file_env() {
load_vars() { load_vars() {
file_env "CMD_DB_PASSWORD" file_env "CMD_DB_PASSWORD"
file_env "CMD_OAUTH2_CLIENT_SECRET" file_env "CMD_OAUTH2_CLIENT_SECRET"
file_env "CMD_SESSION_SECRET"
} }
main() { main() {
set -eu set -eu
load_vars load_vars
mkdir -p "/hedgedoc/.npm" && \
chown -R 10000:65534 "/hedgedoc/.npm" && \
chmod "u+rwx" "/hedgedoc/.npm"
chown -R 10000:65534 /database
} }
main main
export CMD_DB_URL=postgres://$CMD_DB_USER:$CMD_DB_PASSWORD@$CMD_DB_HOST:5432/$CMD_DB_NAME if [ -n "$POSTGRES_ENABLED" ]; then
export CMD_DB_URL="postgres://$CMD_DB_USER:$CMD_DB_PASSWORD@$CMD_DB_HOST:5432/$CMD_DB_NAME"
fi
# 3wc: `source /docker-entrypoint2.sh -e` to load CMD_DB_URL for CLI scripts # 3wc: `source /docker-entrypoint.sh -e` to load CMD_DB_URL for CLI scripts
if [ ! "${1-}" == "-e" ]; then if [ ! "${1-}" == "-e" ]; then
# 3wc: upstream ENTRYPOINT # 3wc: upstream ENTRYPOINT
# https://github.com/hedgedoc/container/blob/master/alpine/Dockerfile # https://github.com/hedgedoc/container/blob/master/alpine/Dockerfile
mkdir -p "/hedgedoc/.npm" && chown -R 10000:65534 "/hedgedoc/.npm"
/usr/local/bin/docker-entrypoint.sh npm start /usr/local/bin/docker-entrypoint.sh npm start
fi fi

34
pg_backup.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
set -e
BACKUP_FILE='/var/lib/postgresql/data/backup.sql'
function backup {
export PGPASSWORD=$(cat /run/secrets/db_password)
pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > $BACKUP_FILE
}
function restore {
cd /var/lib/postgresql/data/
restore_config(){
# Restore allowed connections
cat pg_hba.conf.bak > pg_hba.conf
su postgres -c 'pg_ctl reload'
}
# Don't allow any other connections than local
cp pg_hba.conf pg_hba.conf.bak
echo "local all all trust" > pg_hba.conf
su postgres -c 'pg_ctl reload'
trap restore_config EXIT INT TERM
# Recreate Database
psql -U ${POSTGRES_USER} -d postgres -c "DROP DATABASE ${POSTGRES_DB} WITH (FORCE);"
createdb -U ${POSTGRES_USER} ${POSTGRES_DB}
psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} -1 -f $BACKUP_FILE
trap - EXIT INT TERM
restore_config
}
$@

7
release/1.0.0+1.9 Normal file
View File

@ -0,0 +1,7 @@
WARNING WARNING WARNING 🚨
This release includes a major Postgres database upgrade, but does not yet include tools to automatically upgrade from older Postgres releases.
PLEASE DO NOT UPGRADE EXISTING INSTANCES TO THIS VERSION.
This should be fixed soon.

1
release/1.2.0+1.10.0 Normal file
View File

@ -0,0 +1 @@
Fixes security issue: https://github.com/hedgedoc/hedgedoc/security/advisories/GHSA-pjf2-269h-cx7p

1
release/1.2.2+1.10.1 Normal file
View File

@ -0,0 +1 @@
Upgrade to fix GHSA-6w39-x2c6-6mpf

1
release/1.3.0+1.10.1 Normal file
View File

@ -0,0 +1 @@
This release adds SQLite support by default, if you were using PostgreSQL make sure to update the env file!

1
release/3.0.0+1.10.1 Normal file
View File

@ -0,0 +1 @@
This release switches to `pgaautoupgrade` for easier Postgresql upgrades. If you are using Postgres, please take extra care to take a backup before upgrading.