Features

Installationsanleitung

CodiMD bauen

Als erstes Module entfernen, die man nicht nutzt. In der config.json muss man für viele Dienste Anmeldedaten eingeben, um wenn man diese nicht hat, braucht man den Code dazu auch nicht. In der package.json sieht man, welche Module alles geladen werden.

% yarn remove --pure-lockfile aws-sdk azure-storage imgur mattermost minio mysql \
  passport-dropbox-oauth2 passport-facebook passport-github passport-gitlab2 \
  passport-google-oauth20 passport-ldapauth passport-oauth2 passport-saml \
  passport-twitter socket.io-client

Jetzt die Anwendung bauen und danach noch einmal alle Module laden, die für den Einsatz notwendig, und alles zusammen in ein Archiv packen.

% yarn install --pure-lockfile && yarn run build &&
  rm -fr node_modules && yarn install --pure-lockfile --link-duplicates --production

% tar cf /tmp/codimd.tar --owner root --group root app.js package.json \
  config.json.example sequelize-config.json .sequelizerc.example \
  lib/**/*.js locales/*.json \
  --exclude=public/.eslintrc.js public \
  node_modules/**/*.(js|json) \
  node_modules/bufferutil/prebuilds/linux-x64/node-napi.node \
  node_modules/scrypt/build/Release/scrypt.node \
  node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node \
  node_modules/utf-8-validate/prebuilds/linux-x64/node-napi.node \
  node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs \
  node_modules/sequelize-cli/bin/sequelize

Am Ende die package.json auf den ursprünglichen Stand zurücksetzen.

% git checkout -- package.json

CodiMD installieren

# apt install libfontconfig1 --- für PDF-Export
# mkdir /srv/www/n.jo-so.de
# adduser --system --shell /usr/sbin/nologin --home /srv/www/n.jo-so.de \
  --disabled-password --disabled-login codimd
# tar xf codimd.tar -C ~codimd
# mkdir ~codimd/tmp ~codimd/.cache
# chown codimd ~codimd/public/uploads ~codimd/tmp ~codimd/.cache
# sudo -u postgres sh -c 'createuser codimd \
  && createdb -l C.UTF-8 -O codimd -T template0 notes "codimd @ n.jo-so.de"'
# sudo -u codimd node_modules/.bin/sequelize db:migrate

Systemd

Dass der Prozess sich nur in gewissen Grenzen im System bewegen kann, lässt sich mit einem AppArmor-Profil einschränken.

[Unit]
Description=Application service for collaborative markdown notes
Documentation=https://demo.codimd.org/
After=network.target

[Service]
Environment=NODE_ENV=production
# Workaround, because phantomjs crashes with libssl_conf.so not found
# https://stackoverflow.com/questions/53355217/genymotion-throws-libssl-conf-so-cannot-open-shared-object-file-no-such-file-o
Environment=OPENSSL_CONF=/dev/null
ExecStart=/usr/bin/node app.js
SyslogIdentifier=codimd
User=codimd
WorkingDirectory=/srv/www/n.jo-so.de

AppArmorProfile=codimd
PrivateTmp=yes

[Install]
WantedBy=multi-user.target

Datenbank

Der Versuch, die Rechte des Nutzers für die Datenbank einzuschränken, damit zum Beispiel kein DROP TABLE funktioniert. Aber dies ist nicht möglich, da der ORM Administratorzugriff auf die Datenbank verlangt.

https://dba.stackexchange.com/questions/33943/granting-access-to-all-tables-for-a-user#33960

\set ON_ERROR_STOP on

CREATE DATABASE notes ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C'
 template=template0;
COMMENT ON DATABASE notes IS 'codimd @ n.jo-so.de';

\c notes

REVOKE CONNECT ON DATABASE notes FROM PUBLIC;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC;

CREATE ROLE codimd WITH LOGIN;

GRANT CONNECT ON DATABASE notes TO codimd;
ALTER DEFAULT PRIVILEGES FOR USER codimd IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO codimd;

Windows

npm install -g windows-build-tools
npm install
npm run build
node app.js

Impressum

public/docs/impressum.md und e public/views/codimd/header.ejs

CodiMD soll kein Wiki werden

https://github.com/hackmdio/codimd/issues/969