C'est un [Wiki.js] multifonctionnel (https://wiki.js.org/), mais je ne savais pas comment importer par lots des données existantes, j'ai donc essayé de forcer la mise à jour de la base de données. Ce n'est pas une méthode formelle, veuillez donc l'essayer à vos risques et périls.
--Préparation
Veuillez également vous référer à article GIGAZINE.
Le travail est confirmé avec bash de macOS. Veuillez installer docker-compose et Python 3.8.
Il existe différentes méthodes de démarrage dans "Wiki.js --Docs", mais utilisez docker-compose. Commencez par créer docker-compose.yml.
bash
mkdir wikijs
cd wikijs
cat << EOF > docker-compose.yaml
version: "3"
services:
db:
image: postgres:11-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
ports:
- "5432:5432"
logging:
driver: "none"
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
restart: unless-stopped
ports:
- "80:3000"
volumes:
db-data:
EOF
Si vous modifiez le port 5432 du côté local, remplacez «5432: 5432» par «15432: 5432» et modifiez également le 5432 suivant.
Wiki.js commence par docker-compose up -d
. L'arrêt est docker-compose down
.
Wiki.js est disponible sur http: // localhost /
.
Créez un COMPTE ADMINISTRATEUR de manière appropriée. Connectez-vous ensuite avec le compte que vous avez créé.
Immédiatement après la connexion, il n'y a pas de pages. Commencez par créer la première page.
Le chemin de la page d'accueil est / <language> / home
. Au départ, vous ne pouvez utiliser que l'anglais (ʻen`) comme langue.
Ici, nous utiliserons le japonais (ja
) comme langue.
Tout d'abord, après avoir créé la page d'accueil en anglais, installez la langue japonaise, supprimez la page d'accueil en anglais et créez la page d'accueil en japonais.
Appuyez sur "+ CRÉER UNE PAGE D'ACCUEIL
".
Appuyez sur "Markdown", appuyez sur " ✓ OK
", puis appuyez sur" ✓ CREATE
".
La page supérieure (http: // localhost / en / home
) s'ouvre. Puisque vous êtes connecté en tant qu'administrateur, ouvrez l'écran de gestion (http: // localhost / a / dashboard
) avec" ⚙
" en haut à droite.
Sélectionnez " Locale
"sur le côté gauche. Sélectionnez "Japonais" dans "" Télécharger les paramètres régionaux "" et appuyez sur "Télécharger" de la "flèche vers le bas sur le cloud". Revenez ensuite en arrière et réglez " Paramètres régionaux
"sur" Japonais "et appuyez sur" ✓ APPLIQUER
" en haut à droite.
Étant donné que l'espace de noms actif a été changé en japonais, la page supérieure doit être recréée en japonais.
Sélectionnez " Page
"sur le côté gauche. Sélectionnez l'élément dont le chemin est "en / home" et supprimez-le avec " Delete
"de" ʻACTIONS v` ".
Cliquez sur «Fermer» en haut à droite pour revenir au premier écran, veuillez donc créer une page d'accueil japonaise.
Wiki.js vous permet de créer des articles dans un navigateur, mais ici nous allons essayer de créer un article en éditant la base de données directement depuis Python. Tout d'abord, créez un environnement virtuel Python.
bash
python3.8 -m venv venv
source venv/bin/activate
pip install psycopg2-binary SQLAlchemy
Créez une classe à utiliser avec SQLAlchemy à partir de la base de données. Exécutez ce qui suit pour créer db_class.py
.
bash
cat << EOF | python
import re
from sqlalchemy import MetaData, create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("postgresql+psycopg2://wikijs:wikijsrocks@localhost:5432/wiki")
metadata = MetaData()
metadata.reflect(engine)
Base = declarative_base(metadata=metadata)
def _subfunc(m):
s = ".".join(m.group(1).split(".")[-2:])
return rf"ForeignKey('{s}')"
def make_class(cls):
lst = [f"class {str(cls).split('.')[-1][:-2]}(Base):"]
lst.append(f' __tablename__ = "{cls.__tablename__}"\n')
for column in cls.__table__.columns:
s = repr(column)
nam = s.split("'")[1]
s = re.sub(r", table=[^>]+>", "", s)
s = re.sub(r", server_default=[^)]+\)", "", s)
s = re.sub(r"ForeignKey\('([^']+)'\)", _subfunc, s)
lst.append(f" {nam} = {s}")
res = "\n".join(lst) + "\n"
res = res.replace("metadata = Column", "metadata_ = Column")
return res
def make_classes():
lst = [
"""\
# made by make_classes
from typing import Any
from sqlalchemy import Column, ForeignKey, Text
from sqlalchemy.dialects.postgresql import (
BOOLEAN, BYTEA, INTEGER, JSON, TEXT, TIMESTAMP, VARCHAR
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base() # type: Any
"""
]
dc = {"__table_args__": {"autoload": True}}
for tbl in sorted(metadata.tables):
if tbl in {"brute"}:
continue
typ = type(tbl.title(), (Base,), dict(__tablename__=tbl, **dc))
lst.append(make_class(typ))
with open("db_class.py", "w") as fp:
fp.write("\n".join(lst))
make_classes()
EOF
Commencez par créer un fichier.
bash
cat << EOF > main.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from db_class import *
engine = create_engine("postgresql+psycopg2://wikijs:wikijsrocks@localhost:5432/wiki")
Session = sessionmaker(bind=engine)
session = Session()
pgid = max(i.id for i in session.query(Pages).all()) + 1
ptid = max(i.id for i in session.query(Pagetree).all()) + 1
pg = Pages(
id=pgid,
path=f"test{pgid}",
hash="0123456789001234567890abcdefghijklmnopqr",
title=f"Page de test{pgid}",
isPrivate=False,
isPublished=True,
content="",
contentType="markdown",
createdAt="2020-10-04T09:00:00.000Z",
updatedAt="2020-10-04T09:00:00.000Z",
editorKey="markdown",
localeCode="ja",
description="",
authorId=1,
creatorId=1,
render="<div></div>",
toc=[{"title": "", "anchor": "", "children": []}],
extra={"js": "", "css": ""},
publishStartDate="",
publishEndDate="",
)
pt = Pagetree(
id=ptid,
path=pg.path,
localeCode="ja",
pageId=pgid,
title=pg.title,
depth=1,
isPrivate=False,
isFolder=False,
ancestors=[],
)
session.add(pg)
session.add(pt)
session.commit()
session.close()
EOF
Ci-dessus, créez main.py
.
python main.py
crée une page vide appelée Page de test ...
.
Le contenu est décrit dans «Pages.content» et «Pages.render». Il ne sera pas affiché s'il est simplement décrit dans le contenu, mais il sera affiché s'il est modifié et enregistré.
Vous pouvez vider le contenu de la base de données avec pg_dump -h localhost -p 5432 -U wikijs wiki -f data.sql
.
Vous pouvez utiliser psql -h host -p 5432 -U user database -f data.sql
pour renvoyer des données à un PostgreSQL vide.