Wdróż aplikację Wiki.js na Pethost jednym kliknięciem
Wiki dla zespołu albo projektu: strony w Markdownie lub w edytorze wizualnym, wyszukiwanie, uprawnienia i dostawcy logowania
Co się dzieje
- Logujesz się do Pethost albo zakładasz konto, kluczem dostępu, przez GitHub albo Google.
- Nie masz jeszcze maszyny? Wybierasz plan, a my ją dla ciebie przygotowujemy. Link czeka w twojej przeglądarce, aż będzie gotowa.
- Okno „Nowy projekt” otwiera się na tej aplikacji. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: E-mail, Hasło administratora.
- Za minutę czy dwie aplikacja działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
- To projekt jak każdy inny: jego compose.yaml, .env, logi i terminal są w panelu, a twój agent może go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.
Pierwsze kroki
Zaloguj się adresem e-mail i hasłem administratora, które podano: Wiki.js jest nimi skonfigurowane, zanim zacznie odpowiadać, więc nikt inny nie dostanie strony instalacji. Strony tworzy się ze strony głównej; użytkownicy, grupy i dostawcy logowania są w Administration.
Co uruchamia
Szablon to ten compose.yaml i zmienne, które zapisuje do .env projektu. Pethost uruchamia plik dokładnie tak, jak jest napisany.
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: