Déployez Wiki.js sur Pethost en un clic
Un wiki pour une équipe ou un projet : pages en Markdown ou avec un éditeur visuel, recherche, permissions et fournisseurs de connexion
Ce qui se passe
- Vous vous connectez à Pethost ou créez un compte, avec une clé d’accès, GitHub ou Google.
- Pas encore de machine ? Vous choisissez une offre, et nous en préparons une pour vous. Le lien attend dans votre navigateur qu’elle soit prête.
- Nouveau projet s’ouvre sur l’application. Vous remplissez ce qu’elle demande et cliquez sur Créer le projet : E-mail, Mot de passe administrateur.
- En une minute ou deux, l’application tourne à sa propre adresse en HTTPS. Ses secrets sont créés pour elle au hasard, et ses données sont dans la sauvegarde nocturne.
- C’est un projet comme les autres : son compose.yaml, son .env, ses logs et un terminal sont dans le panel, et votre agent peut le modifier, revenir à une version précédente ou le restaurer.
Premiers pas
Connectez-vous avec l’e-mail et le mot de passe administrateur indiqués : Wiki.js est configuré avec eux avant de répondre, donc personne d’autre ne voit sa page d’installation. Les pages se créent depuis l’accueil ; utilisateurs, groupes et fournisseurs de connexion sont dans Administration.
Ce qui tourne
Le template, c’est ce compose.yaml et les variables qu’il écrit dans le .env du projet. Pethost exécute le fichier tel qu’il est écrit.
services:
wiki:
image: ghcr.io/requarks/wiki:2.5.315
restart: unless-stopped
environment:
DB_TYPE: postgres
DB_HOST: postgres
DB_PORT: "5432"
DB_USER: wiki
DB_PASS: ${POSTGRES_PASSWORD}
DB_NAME: wiki
SITE_URL: ${URL}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
# Wiki.js opens its setup page to whoever comes first. On the first start it runs once on
# port 3001, which nobody reaches, is set up there with the email and password given, and only
# then starts on 3000.
entrypoint: ["/bin/sh", "-c"]
command:
- |
installed=$$(node -e "
const { Client } = require('pg');
const db = new Client({ host: 'postgres', user: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME });
db.connect().then(() => db.query('select count(*) from settings')).then((r) => console.log(r.rows[0].count > 0 ? 'yes' : 'no'), () => console.log('no')).then(() => process.exit(0));
")
if [ "$$installed" = no ]; then
sed 's/^port: 3000/port: 3001/' config.yml > /tmp/setup.yml
CONFIG_FILE=/tmp/setup.yml node server &
setup=$$!
node -e "
const body = JSON.stringify({ adminEmail: process.env.ADMIN_EMAIL, adminPassword: process.env.ADMIN_PASSWORD, adminPasswordConfirm: process.env.ADMIN_PASSWORD, siteUrl: process.env.SITE_URL, telemetry: false });
(async () => {
for (let i = 0; i < 180; i++) {
try {
const answer = await fetch('http://127.0.0.1:3001/finalize', { method: 'POST', headers: { 'content-type': 'application/json' }, body });
console.log('setup:', await answer.text());
return;
} catch { await new Promise((done) => setTimeout(done, 1000)); }
}
})();
"
sleep 3
kill $$setup
wait $$setup
fi
exec node server
volumes:
- content:/wiki/data/content
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: wiki
POSTGRES_USER: wiki
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U wiki -d wiki"]
interval: 5s
timeout: 5s
retries: 10
start_period: 30s
volumes:
content:
db: