> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/dokumentirovanie/wiki.js/razvertyvanie-v-kubernetes-gpt-5-mini-v2.md).

# Развертывание в Kubernetes (GPT-5-Mini) v2

## Развертывание Wiki.js в Kubernetes через ArgoCD — файлы как скрипты и полная инструкция

В этом документе все YAML-файлы и команды вставлены как скрипты/код-блоки, готовые к копированию. Замените пароли и значения по необходимости перед коммитом.

***

### Использованные значения (подставлены в файлах)

* Домен: wikijs.utmsoft.ru
* Внешний прокси: 77.51.201.4 -> проксирует на <http://192.168.1.100:31080>
* Ingress-nginx в кластере: адрес 192.168.1.100:31080
* Postgres-сервер: 192.168.4.9:5432
* Postgres-пользователь: wikijs\_user
* Postgres-база: wikijs
* Сгенерённый пароль: r8N$3vK9qYz!pT6uH2aB
* Kubernetes namespace: wikijs
* Kubernetes Secret: wikijs-db-secret
* StorageClass: smb-csi-utm-server4
* Git-репозиторий ArgoCD: <https://github.com/utenkov-maxim/argocd>
* Путь в репозитории: env-prod/apps/wikijs
* Helm-чарт: requarks (репо чарта: <https://charts.js.wiki>)
* ArgoCD Application targetRevision: main

***

### Структура репозитория

env-prod/apps/wikijs/

* app.yaml
* values.yaml
* manifests/
  * namespace.yaml
  * secret-db.yaml

***

### Готовые файлы (в виде скриптов/блоков кода)

#### 1) env-prod/apps/wikijs/app.yaml

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: wikijs
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/utenkov-maxim/argocd
    path: env-prod/apps/wikijs
    targetRevision: "main"
    helm:
      repoURL: https://charts.js.wiki
      chart: requarks
      valueFiles:
        - values.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: wikijs
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

***

#### 2) env-prod/apps/wikijs/values.yaml

```yaml
replicaCount: 1

image:
  repository: requarks/wiki
  tag: latest
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 3000

persistence:
  enabled: true
  size: 10Gi
  storageClass: smb-csi-utm-server4
  accessMode: ReadWriteOnce

ingress:
  enabled: true
  ingressClassName: nginx
  hosts:
    - host: wikijs.utmsoft.ru
      paths:
        - path: /
          pathType: Prefix
  tls: []

externalDatabase:
  type: postgres
  host: 192.168.4.9
  port: 5432
  user: wikijs_user
  password: "r8N$3vK9qYz!pT6uH2aB"
  database: wikijs
  ssl: false

extraEnv: |
  DB_TYPE=postgres

resources: {}

# При необходимости добавьте nodeSelector/affinity/tolerations ниже
```

***

#### 3) env-prod/apps/wikijs/manifests/namespace.yaml

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: wikijs
```

***

#### 4) env-prod/apps/wikijs/manifests/secret-db.yaml

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: wikijs-db-secret
  namespace: wikijs
type: Opaque
stringData:
  database: wikijs
  username: wikijs_user
  password: "r8N$3vK9qYz!pT6uH2aB"
  host: 192.168.4.9
  port: "5432"
```

> Важно: этот secret хранится в открытом виде — используйте SealedSecrets/ExternalSecrets/Vault для безопасного хранения.

***

### Полная пошаговая инструкция (обновлённая)

#### Шаг 0 — проверка предварительных условий

1. У вас есть доступ и права на пуш в репозиторий: <https://github.com/utenkov-maxim/argocd>
2. ArgoCD подключён и может синхронизировать Application ресурсы в кластере.
3. Postgres доступен с узлов кластера: 192.168.4.9:5432.
4. Внешний nginx (77.51.201.4) проксирует домен wikijs.utmsoft.ru на <http://192.168.1.100:31080> с сохранением Host.

#### Шаг 1 — создание пользователя и базы данных в Postgres

Выполните на машине, где есть доступ к Postgres (замените пароль, если нужно):

```bash
psql -h 192.168.4.9 -U postgres -c "CREATE USER wikijs_user WITH PASSWORD 'r8N$3vK9qYz!pT6uH2aB';"
psql -h 192.168.4.9 -U postgres -c "CREATE DATABASE wikijs OWNER wikijs_user;"
psql -h 192.168.4.9 -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE wikijs TO wikijs_user;"
```

Проверка подключения с pod в кластере:

```bash
kubectl run -i --tty --rm pgcheck --image=bitnami/postgresql --restart=Never -- bash
# внутри контейнера:
psql -h 192.168.4.9 -U wikijs_user -d wikijs
```

Если подключение успешно — продолжайте.

***

#### Шаг 2 — добавление файлов в репозиторий

Создайте директорию и файлы локально, вставьте содержимое из раздела "Готовые файлы".

```bash
git clone https://github.com/utenkov-maxim/argocd.git
cd argocd
mkdir -p env-prod/apps/wikijs/manifests
# создайте файлы app.yaml, values.yaml, manifests/namespace.yaml, manifests/secret-db.yaml
git add env-prod/apps/wikijs
git commit -m "deploy(wikijs): add ArgoCD Application, helm values and manifests"
git push origin main
```

***

#### Шаг 3 — синхронизация через ArgoCD

Если ArgoCD автоматически обнаруживает приложения в репозитории, оно создаст Application. Иначе можно применить app.yaml вручную:

```bash
kubectl apply -f env-prod/apps/wikijs/app.yaml -n argocd
```

Проверить состояние приложения:

```bash
kubectl -n argocd get application wikijs -o yaml
kubectl -n argocd describe application wikijs
kubectl -n wikijs get all
kubectl -n wikijs get ingress
```

***

#### Шаг 4 — тестирование

1. Убедитесь, что внешний nginx на 77.51.201.4 проксирует запросы на <http://192.168.1.100:31080> и передаёт заголовок Host: wikijs.utmsoft.ru.
2. Откройте в браузере <https://wikijs.utmsoft.ru> — вы должны увидеть Wiki.js.

***

### Отладка — команды и советы

```bash
# Просмотр pod'ов и логов
kubectl -n wikijs get pods
kubectl -n wikijs describe pod <pod-name>
kubectl -n wikijs logs deploy/<deployment-name>

# Проверка доступности Postgres из pod
kubectl run -i --tty --rm pgcheck --image=bitnami/postgresql --restart=Never -- bash
# внутри контейнера:
psql -h 192.168.4.9 -U wikijs_user -d wikijs

# Проверка ingress
kubectl -n wikijs describe ingress
```

Частые симптомы:

* 404: Host в ingress не совпадает с Host, который проксирует внешний nginx.
* 502: Pod/Service не отвечают на порт 3000.
* DB connection error: firewall/pg\_hba.conf блокируют доступ.

***

### Конфиг внешнего nginx (77.51.201.4) — пример

```nginx
server {
    listen 443 ssl;
    server_name wikijs.utmsoft.ru;

    ssl_certificate /etc/ssl/certs/wikijs.crt;
    ssl_certificate_key /etc/ssl/private/wikijs.key;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://192.168.1.100:31080;
    }
}

server {
    listen 80;
    server_name wikijs.utmsoft.ru;
    return 301 https://$host$request_uri;
}
```

***

### Рекомендации по безопасности

* Удалите manifests/secret-db.yaml из публичной истории Git.
* Используйте SealedSecrets / SOPS / ExternalSecrets / HashiCorp Vault.
* Ограничьте доступ к Postgres по IP и настройте firewall/pg\_hba.conf.

***

### Что я могу сделать дальше

1. Заменить сгенерированный пароль на ваш (пришлите его).
2. Подготовить SealedSecret-манифест и инструкции по использованию sealed-secrets в вашем кластере.
3. Сформировать PR с этими файлами (если вы дадите права или пришлёте fork/branch).
4. Подготовить команды для удаления secret-db.yaml из истории (BFG/git filter-repo) и инструкцию по безопасному удалению из публичной ветки.

Пожалуйста, подтвердите, какие действия выполнить далее.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/dokumentirovanie/wiki.js/razvertyvanie-v-kubernetes-gpt-5-mini-v2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
