# Установка и настройка

# Установка BookStack Ubuntu

Самы простой способ

https://www.bookstackapp.com/docs/admin/installation/#ubuntu-2404

## Ubuntu 24.04 Installation Script

A script to install BookStack on a fresh instance of Ubuntu 24.04 is available. This script is ONLY FOR A FRESH OS, it will install Apache, MySQL 8.0 &amp; PHP 8.3 and could OVERWRITE any existing web setup on the machine. It also does not set up mail settings or configure system security so you will have to do those separately. You can use the script as a reference if you’re installing on a non-fresh machine.

- [Link to installation script](https://codeberg.org/bookstack/devops/src/branch/main/scripts/installation-ubuntu-24.04.sh)
- [Video guide](https://foss.video/w/cqy2J21V44KWKj3d3pMut5)

#### Running the Script

<div class="highlight" id="bkmrk-%23-ensure-you-have-re"><div class="chroma"><table class="lntable"><tbody><tr><td class="lntd">```
```

</td><td class="lntd">```bash
# Ensure you have read the above information about what this script does before executing these commands.

# Download the script
wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh

# Make it executable
chmod a+x installation-ubuntu-24.04.sh

# Run the script with admin permissions
sudo ./installation-ubuntu-24.04.sh

```

</td></tr></tbody></table>

</div></div>The script will output a log file for debugging within your current working directory when running the script. Permissions for the BookStack installation files &amp; folders will be set based upon the user used to run the script.

---

<a name="ubuntu-2204"></a>

## Ubuntu 22.04 Installation Script

A script to install BookStack on a fresh instance of Ubuntu 22.04 is available. This script is ONLY FOR A FRESH OS, it will install Apache, MySQL 8.0 &amp; PHP 8.4 and could OVERWRITE any existing web setup on the machine. It also does not set up mail settings or configure system security so you will have to do those separately. You can use the script as a reference if you’re installing on a non-fresh machine.

- [Link to installation script](https://codeberg.org/bookstack/devops/src/branch/main/scripts/installation-ubuntu-22.04.sh)
- [Video guide](https://foss.video/w/emk5bMzhRdk4qzDoq3R6xe)

#### Running the Script

<div class="highlight" id="bkmrk-%23-ensure-you-have-re-1"><div class="chroma"><table class="lntable"><tbody><tr><td class="lntd">```
```

</td><td class="lntd">```bash
# Ensure you have read the above information about what this script does before executing these commands.

# Download the script
wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-22.04.sh

# Make it executable
chmod a+x installation-ubuntu-22.04.sh

# Run the script with admin permissions
sudo ./installation-ubuntu-22.04.sh

```

</td></tr></tbody></table>

</div></div>The script will output a log file for debugging within your current working directory when running the script. Permissions for the BookStack installation files &amp; folders will be set based upon the user used to run the script.

# Установка Unifi controller Ubuntu

\#angelog

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-v1.0-%E2%80%94-08.11.2025-%E2%80%94-"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">- **v1.0** — 08.11.2025 — Первая редакция инструкции
- **v1.1** — 08.11.2025 — Добавлен раздел «Установка на обычную Ubuntu»

---

</div></div></div></div># Инструкция: Установка UniFi Network Controller в LXC-контейнере Proxmox и на обычной Ubuntu

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">---

</div></div></div></div>## 1. Установка в LXC (Proxmox)

### 1.1 Создание контейнера

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-%D0%92-%D0%B2%D0%B5%D0%B1-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B5-pro"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">1. В веб-интерфейсе **Proxmox** → **Create CT**
2. Выберите шаблон **Ubuntu 25.04 Standard** (или ближайший доступный)
3. Укажите параметры: 
    - **Cores**: 1–2
    - **Memory**: 1024 MiB
    - **Disk**: 4 GiB
    - **Network**: DHCP или статический IP
4. Запустите контейнер и войдите в консоль

</div></div></div></div>### 1.2 Установка UniFi Controller

Выполните **одной строкой** или по шагам:

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-bash"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>bash</div><div><div><div>  
</div></div></div><div>  
</div></div></div></div></div></div></div>```
sudo apt update && sudo apt upgrade -y && \
sudo apt install curl gnupg lsb-release -y && \
sudo mkdir -p /etc/apt/keyrings && \
curl -fsSL https://dl.ui.com/unifi/unifi-repo.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/unifi-repo.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/unifi-repo.gpg] https://dl.ui.com/unifi/debian stable ubiquiti" | sudo tee /etc/apt/sources.list.d/unifi.list && \
sudo apt update && \
sudo apt install unifi -y && \
sudo systemctl enable unifi && \
sudo systemctl start unifi && \
sudo systemctl status unifi
```

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--1"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>  
</div><div>  
</div><div>  
</div></div></div></div></div></div></div>### 1.3 Проверка доступа

Откройте в браузере: https://&lt;IP\_контейнера&gt;:8443 (примите самоподписанный сертификат)

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--2"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">---

</div></div></div></div>## 2. Установка на обычную Ubuntu (сервер/десктоп)

### 2.1 Подготовка системы

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-bash-1"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>bash</div><div><div><div>  
</div></div></div><div>  
</div></div></div></div></div></div></div>```
sudo apt update && sudo apt upgrade -y
sudo apt install curl gnupg lsb-release -y
```

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--3"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>  
</div><div>  
</div><div>  
</div></div></div></div></div></div></div>### 2.2 Добавление репозитория UniFi

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-bash-2"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>bash</div><div><div><div>  
</div></div></div><div>  
</div></div></div></div></div></div></div>```
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://dl.ui.com/unifi/unifi-repo.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/unifi-repo.gpg
echo "deb [signed-by=/etc/apt/keyrings/unifi-repo.gpg] https://dl.ui.com/unifi/debian stable ubiquiti" | sudo tee /etc/apt/sources.list.d/unifi.list
```

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--4"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>  
</div><div>  
</div><div>  
</div></div></div></div></div></div></div>### 2.3 Установка и запуск

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-bash-3"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>bash</div><div><div><div>  
</div></div></div><div>  
</div></div></div></div></div></div></div>```
sudo apt update
sudo apt install unifi -y
sudo systemctl enable unifi
sudo systemctl start unifi
sudo systemctl status unifi
```

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--5"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div dir="auto"><div data-testid="code-block"><div>  
</div><div>  
</div><div>  
</div></div></div></div></div></div></div>### 2.4 Доступ

https://&lt;IP\_сервера&gt;:8443

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk--6"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">---

</div></div></div></div>## 3. Полезные команды

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%9F%D0%B5%D1%80"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto"><div><div><div>  
</div></div><div dir="auto"><div>  
</div><table dir="auto"><thead><tr><th data-col-size="sm">Действие</th><th data-col-size="lg">Команда</th></tr></thead><tbody><tr><td data-col-size="sm">Перезапуск сервиса</td><td data-col-size="lg">sudo systemctl restart unifi</td></tr><tr><td data-col-size="sm">Логи</td><td data-col-size="lg">sudo journalctl -u unifi -f</td></tr><tr><td data-col-size="sm">Обновление контроллера</td><td data-col-size="lg">sudo apt upgrade unifi</td></tr><tr><td data-col-size="sm">Удаление</td><td data-col-size="lg">sudo apt purge unifi &amp;&amp; sudo rm -rf /var/lib/unifi</td></tr></tbody></table>

<div>  
</div></div></div>---

</div></div></div></div>## 4. Рекомендации

<div class="bubble hide-name is-out can-have-tail is-read" data-mid="282120" data-peer-id="485420996" data-timestamp="1762263211" id="bkmrk-java%3A-unifi-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83"><div class="bubble-content-wrapper"><div class="bubble-content"><div class="message spoilers-container" dir="auto">- **Java**: UniFi использует встроенную OpenJDK — ничего устанавливать не нужно
- **Порты**: 
    - 8443 — веб-интерфейс
    - 8080, 3478/UDP — для устройств
- **Резервное копирование**: /var/lib/unifi/data/backup/autobackup/
- **Обновления**: периодически sudo apt update &amp;&amp; sudo apt upgrade unifi

  
</div></div></div></div>

# Установка и использование Portainer

[https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer](https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer)

Portainer — это инструмент управления контейнерами, который эффективно взаимодействует как с Docker, так и с Kubernetes.

Он доступен в двух версиях:

- бесплатная и открытая Community Edition;
- платная Business Edition с дополнительными функциями для корпоративных клиентов.

В этой статье мы сосредоточимся на установке Portainer на Ubuntu 22.04 и использовании версии Community Edition. Хотя процесс установки и использования будет показан на примере Ubuntu, большинство шагов аналогичны для других операционных систем, что делает информацию применимой для различных сценариев использования.

Portainer отлично подходит как для начинающих, так и для профессионалов в области контейнеризации. Его интуитивно понятный графический интерфейс значительно упрощает управление, делая технологии контейнеров доступными даже для новичков в этой области. Опытные пользователи также найдут в нем богатый выбор опций для тонкой настройки и персонализации.

В статье мы продемонстрируем установку Portainer на локальной машине, но если вы планируете использовать его в команде, то приложение также можно установить на сервере, обеспечивая централизованное управление и доступность для всех членов команды. Основной фокус статьи будет на установке, обзоре основных функций и настроек, подключении внешнего сервера в качестве окружения, а также на примере развертывания WordPress на внешнем сервере с использованием Portainer.

### Миграция в Timeweb Cloud

<div class="bordered twCard--xWmw bg-primary--85pM core--RY8m migration-to-twc--+k8J" dir="ltr" id="bkmrk-%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B5%D1%81%D0%B5%D0%BC-%D0%B2%D0%B0%D1%88%D1%83-%D0%B8%D0%BD%D1%84%D1%80%D0%B0" itemprop=""><div class="content--GyZF"><div class="textContent--oUL8 textContentWrapperFullHeight--JMdo"><div class="slotData--pZd6"><div><div><div class="body1 text-white subtitle--zBJz">Перенесем вашу инфраструктуру в облако — быстро,  
безопасно и с гарантией результата.  
  
Предоставим грант до 1 000 000 ₽ на облачную  
инфраструктуру и возьмем на себя весь процесс.</div></div></div><div><div bg="icon-secondary" class="twButtonWrapper--n6FA"><button class="font-normal body1 medium twButton--fxM6 blue--SFqG textTheme--qg7S xl--INmn" type="submit"><span class="content--MKT6">Оставить заявку</span></button></div></div></div></div></div></div>## Установка Portainer в Docker

Шаг 1: Установка Docker и Docker Compose

Перед установкой убедитесь, что на вашей системе установлен Docker. Если Docker уже установлен, этот шаг можно пропустить. В противном случае выполните следующие команды для установки:

<div class="copyButton--6B33" id="bkmrk--1"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--2"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
```


После установки проверьте версии утилит, выполнив команды:

<div class="copyButton--6B33" id="bkmrk--4"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--5"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
docker -v
docker compose version
```


Это подтвердит успешную установку и покажет версии установленных программ.

Шаг 2: Создание рабочего каталога

Создайте каталог для приложения в `/opt` и перейдите в него:

<div class="copyButton--6B33" id="bkmrk--7"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--8"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
cd /opt
sudo mkdir twportainer
cd ./twportainer

```


Шаг 3: Создание файла конфигурации

Теперь создайте файл `docker-compose.yml` в каталоге `twportainer`. В этом файле будет описана конфигурация для запуска. Используйте редактор `nano` или любой другой текстовый редактор для создания файла:

<div class="copyButton--6B33" id="bkmrk--10"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--11"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
sudo nano docker-compose.yml
```


Вставьте в файл следующее содержимое:

<div class="copyButton--6B33" id="bkmrk--13"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--14"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
version: "3.3"
services:
  twportainer:
    image: portainer/portainer-ce:latest
    container_name: twportainer
    environment:
      - TZ=Europe/Moscow
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/twportainer/portainer_data:/data
    ports:
      - "8000:8000"
      - "9443:9443"
    restart: always
```


Описание параметров:

- `version: "3.3"`: Указывает версию Docker-compose, которую вы используете. Версия 3.3 подходит для большинства современных приложений.
- `services`: В этой секции описываются запускаемые сервисы.
- `twportainer`: Имя сервиса. Используется в качестве идентификатора.
- `image: portainer/portainer-ce:latest`: Определяет образ, который будет использоваться. Здесь используется последняя версия Community Edition.
- `container_name: twportainer`: Назначает имя контейнера, чтобы было легче его идентифицировать.
- `environment`: Позволяет задать переменные окружения. Например, `- TZ=Europe/Moscow` устанавливает временную зону контейнера.
- `volumes`: 
    - `/var/run/docker.sock:/var/run/docker.sock` позволяет Portainer взаимодействовать с Docker на вашем хосте;
    - `/opt/twportainer/portainer_data:/data` создает постоянное хранилище данных.
- `ports`: 
    - `"8000:8000"` и `"9443:9443"` открывают соответствующие порты для доступа к Portainer. 9443 используется для HTTPS подключения.
- `restart: always`: Гарантирует, что контейнер будет автоматически перезапускаться при необходимости, например, после перезагрузки сервера.

Шаг 4: Запуск

После создания файла конфигурации запустите Portainer командой:

<div class="copyButton--6B33" id="bkmrk--16"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--17"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
docker compose up -d
```


Шаг 5: Доступ к интерфейсу

Portainer теперь запущен и доступен по адресу `https://<ip_или_localhost>:9443`. Откройте этот адрес в браузере для доступа к веб-интерфейсу.

`<img alt="Image1" src="https://content.timeweb.com/assets/32357cb8-3b10-436f-b382-98fb8e3698bc?width=1838&height=989"></img>`

Шаг 6: Создание учётной записи администратора

При первом входе в систему вас попросят зарегистрировать аккаунт администратора. Учтите, что для пароля требуется минимум 12 символов. Завершив процесс регистрации, вы получите доступ к настройкам и функционалу управления контейнерами в интерфейсе.

## Обзор основных пунктов меню и настроек

Для доступа к настройкам перейдите на вкладку «Settings». Здесь будут рассмотрены ключевые настройки, которые наиболее важны для базовой конфигурации. Для более глубокого понимания всех доступных настроек рекомендуем ознакомиться с [официальной документацией](https://docs.portainer.io/?roistat_visit=6135621).

`<img alt="Image3" src="https://content.timeweb.com/assets/555e2a8f-c5fa-4674-afd1-986f6088e1be?width=1831&height=650"></img>`

1. **Application settings**. В этом разделе вы можете настроить такие параметры, как частота создания снапшотов состояния и отправку анонимной статистики использования приложения.
2. **App Templates**. Здесь можно указать URL JSON-файла с шаблонами для быстрого развёртывания контейнеров. Также доступна возможность использовать предустановленные шаблоны, что облегчает процесс запуска новых приложений.

`<img alt="Image12" src="https://content.timeweb.com/assets/ceba8932-752a-4632-8dc3-4b76e6b604cc?width=1673&height=657"></img>`

3. **SSL certificate**. В этом разделе предоставляется возможность загрузить собственные SSL- сертификаты для безопасного соединения. Хотя это не требуется для локальной установки, при развёртывании Portainer на удалённом сервере подключение собственного SSL-сертификата повышает безопасность.

`<img alt="Image6" src="https://content.timeweb.com/assets/1cf55014-66a1-46d0-9c15-25dcd5bf2d27?width=1822&height=477"></img>`

4. **Backup up Portainer**. Этот раздел позволяет создать резервную копию настроек и конфигурации приложения. Такой подход полезен для обеспечения безопасности данных и упрощения процесса миграции на другие системы.

`<img alt="Image7" src="https://content.timeweb.com/assets/00cc3e17-f1b5-4ddf-824e-b84fbf74a31e?width=1835&height=954"></img>`

5. **Authentication**. Здесь можно настроить продолжительность пользовательской сессии и выбрать метод аутентификации. В Community Edition доступны следующие методы: Internal (используется по умолчанию), LDAP и OAuth. Однако, стоит отметить, что настройка OAuth в Community Edition имеет ограничения, и такие популярные сервисы, как Microsoft OAuth, Google OAuth, Github OAuth, не поддерживаются, что требует ручной настройки. При использовании внутренней аутентификации (Internal) вы можете изменить требования к паролю, например, уменьшить минимальное количество символов.

Для изменения собственного пароля перейдите в правый верхний угол экрана, нажмите на имя вашего аккаунта и выберите «My account». Это позволит вам обновить свой пароль и другие личные настройки.

После изучения основных настроек, перейдем к другим важным разделам, доступным в левом меню интерфейса.

**Users**. Этот раздел предназначен для управления пользователями. Он особенно полезен в тех случаях, когда система используется командой для разграничения доступа к ресурсам. Здесь можно создавать отдельных пользователей и управлять ими. В дополнение, существует вкладка «Teams», позволяющая формировать команды из различных пользователей для более гранулярного контроля доступа. Однако, следует отметить, что более продвинутые настройки ролей доступны только в Business Edition.

`<img alt="Image2" src="https://content.timeweb.com/assets/cbed38c5-85cb-43f0-92b3-f821f4a8f0f3?width=1825&height=912"></img>`

**Registries**. В разделе «Registries» пользователи могут настроить доступ к репозиториям образов. Интерфейс управления облегчает интеграцию с популярными хранилищами, такими как DockerHub, AWS ECR, Quay.io, ProGet, Azure и GitLab, позволяя эффективно управлять образами контейнеров непосредственно через графический пользовательский интерфейс.

`<img alt="Image10" src="https://content.timeweb.com/assets/4e478b37-0b13-4118-ab03-66497b7d8eee?width=1838&height=948"></img>`

**Environments**. Ключевой раздел Portainer для подключения к внешним серверам или окружениям и управления ими. Здесь можно управлять различными средами, включая Docker, Docker Swarm, Kubernetes и ACI. В Business Edition также доступен Nomad. Этот раздел позволяет Portainer Server управлять множеством окружений, упрощая масштабирование и управление инфраструктурой.

### Добавление нового окружения

Чтобы продемонстрировать процесс добавления нового окружения, мы подключим сервер на Ubuntu 22.04 с предварительно установленным Docker. Это может быть как новый сервер, так и сервер, на котором уже работают контейнеры.

1. Начните с нажатия кнопки «Add environment» на странице Environments.
2. Выберите «Docker Standalone» и воспользуйтесь мастером настройки, нажав «Start Wizard».

`<img alt="Image13" src="https://content.timeweb.com/assets/d5085ca7-f10d-45bf-90bf-0a10ba575eaf?width=1830&height=884"></img>`

3. В процессе настройки выберите пункт «Agent» и выполните следующую команду на сервере, который вы планируете подключить в качестве окружения:

<div class="copyButton--6B33" id="bkmrk--27"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--28"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
docker run -d \
-p 9001:9001 \
--name portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:2.19.4
```


Эта команда запустит агент Portainer, позволяя Portainer Server подключаться к серверу и управлять контейнерами.

4. После успешной установки и запуска агента на сервере, вернитесь в веб-интерфейс и завершите процесс подключения, указав имя окружения и его адрес в формате `ip_сервера:9001`.

`<img alt="Image9" src="https://content.timeweb.com/assets/92d15cd4-6c02-4614-a289-f9acc60d701c?width=1837&height=955"></img>`

5. Нажмите «Connect» для завершения подключения. После успешного добавления окружения в интерфейсе отобразится всплывающее уведомление «Environment created».

## Обзор пунктов меню для окружения

При переходе на страницу «Home» мы увидим два окружения: «local» (устройство, где запущено приложение) и ранее добавленный сервер. После выбора добавленного ранее сервера, меню слева обновится, добавляя функции управления для окружения.

`<img alt="Image4" src="https://content.timeweb.com/assets/33e3213c-e436-49f0-976b-4e42bd28652f?width=1834&height=951"></img>`

### Обзор функций управления окружением

**Images**. В разделе «Images» отображаются все доступные образы в системе. Здесь можно удалять образы по отдельности или массово, а также скачивать новые образы через опцию «Pull image».

`<img alt="Image16" src="https://content.timeweb.com/assets/86ec2ed8-7b8b-43e5-af89-6add761a9354?width=1847&height=1000"></img>`

**Networks**. На странице «Networks» представлены все доступные сети. С помощью интуитивно понятного мастера настройки, доступного через «Add Network», пользователи могут создавать новые сети, расширяя возможности связи между контейнерами.

`<img alt="Image11" src="https://content.timeweb.com/assets/45021d18-235e-48de-af44-4566c1692e4b?width=1844&height=960"></img>`

**Volumes**. В разделе «Volumes» находится информация о всех томах. Этот раздел позволяет не только просматривать существующие тома, но и удалять их или создавать новые с помощью мастера настройки «Add volume».

**Containers**. Раздел «Containers» предоставляет обширные возможности управления контейнерами. В этом разделе видны все существующие контейнеры, их можно удалять, приостанавливать, активировать или перезапускать. Доступ к дополнительным функциям, включая просмотр информации о контейнере, статистики и доступа к консоли, осуществляется через меню «Quick Actions», расположенное в соответствующем столбце.

`<img alt="Image14" src="https://content.timeweb.com/assets/a32ecf12-6f2c-4b1c-aabb-4996bde9baaf?width=1845&height=958"></img>`

Создание нового контейнера осуществляется через мастер настройки «Add container». В качестве примера можно создать контейнер с Nginx, указав имя, образ «nginx» и настроив сетевые порты (нажмем на «publish a new network port» и укажем в `host` 9090 порт, а в `container` 80).

`<img alt="Image5" src="https://content.timeweb.com/assets/e0070128-adf8-49f9-9564-94d2dc135eaf?width=1848&height=961"></img>`

Далее нажмем на кнопку «Deploy the container» и дождемся завершения развертывания контейнера. По завершению произойдет редирект на страницу «Container list». После развертывания контейнера переход по адресу `http://ip_сервера:9090` покажет работающий Nginx.

### Расширенные возможности: App Templates и Stacks

Раздел «**App Templates**» представляет собой коллекцию предварительно настроенных шаблонов для развертывания распространенных приложений и сервисов. Эти шаблоны предназначены для упрощения процесса создания новых контейнеров, минимизируя необходимость в ручной конфигурации. Пользователи могут выбирать из разнообразия доступных шаблонов, которые варьируются от базовых веб-серверов до сложных многоуровневых приложений.

При использовании шаблона достаточно указать некоторые основные параметры, такие как имя контейнера, сетевые настройки и, в некоторых случаях, специфические настройки, например, пароли или переменные среды. Это делает раздел «App Templates» особенно удобным для быстрого тестирования новых идей и утилит, а также для обучения и экспериментирования с новыми технологиями.

`<img alt="Image8" src="https://content.timeweb.com/assets/3ee17cac-0771-4fd2-a26a-cc4612728656?width=1845&height=1002"></img>`

**Stacks** — это эффективный способ управления группами контейнеров. Определяются они через файлы `docker-compose`, группируя их для выполнения общих задач. Это упрощает управление сложными приложениями и обеспечивает автоматизацию и консистентность в развертывании.

## Практическое использование Stacks для развертывания WordPress

Особенностью Stacks является гибкость в выборе метода определения конфигурации: можно использовать встроенный редактор для прямого написания или редактирования файлов Docker Compose, загрузить уже готовый `docker-compose.yml`-файл или даже подключить git-репозиторий для автоматического обновления и развертывания контейнеров. Теперь давайте применим эту технологию на практике. На примере развертывания WordPress покажем, как использовать Stacks для создания и управления многоконтейнерными приложениями. Этот пример поможет понять, как можно упростить и автоматизировать процессы развертывания ваших приложений с помощью Stacks.

- Во вкладке «Stacks» нажмите на «Add stack», чтобы открыть конфигуратор.
- Используя «Web editor», задайте имя и опишите конфигурацию приложения в YAML-формате. Для WordPress и базы данных MariaDB конфигурация может выглядеть следующим образом:

<div class="copyButton--6B33" id="bkmrk--37"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--38"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
services:
  db:
	image: mariadb:10.6.4-focal
	command: '--default-authentication-plugin=mysql_native_password'
	volumes:
  	- db_data:/var/lib/mysql
	restart: always
	expose:
  	- 3306
  	- 33060
	environment:
  	- MYSQL_ROOT_PASSWORD=twtest
  	- MYSQL_DATABASE=tw_wp
  	- MYSQL_USER=tw
  	- MYSQL_PASSWORD=password
  wordpress:
	image: wordpress:latest
	ports:
  	- 80:80
	restart: always
	environment:
  	- WORDPRESS_DB_HOST=db
  	- WORDPRESS_DB_USER=tw
  	- WORDPRESS_DB_PASSWORD=password
  	- WORDPRESS_DB_NAME=tw_wp
volumes:
  db_data:
```


- Переменные окружения могут быть вынесены в отдельный раздел. В «Environment variables» выберите «Advanced mode» и укажите переменные:

<div class="copyButton--6B33" id="bkmrk--40"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--41"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
MYSQL_ROOT_PASSWORD=twtest
MYSQL_DATABASE=tw_wp
MYSQL_USER=tw
MYSQL_PASSWORD=password
WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=tw
WORDPRESS_DB_PASSWORD=password
WORDPRESS_DB_NAME=tw_wp
```


- Удалите раздел `environment` из основного YAML-файла, чтобы избежать дублирования:

<div class="copyButton--6B33" id="bkmrk--43"><div class="wrapper wrapper__svg-is-inherit" data-v-411017c9=""><svg alt="icons/copy.svg" aria-label="icons/copy.svg" class="icon" data-v-411017c9="" fill="none" height="24px" loading="lazy" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_16516_17600)" data-v-411017c9=""><path d="M7 9.667C7 8.95967 7.28099 8.28131 7.78115 7.78115C8.28131 7.28099 8.95967 7 9.667 7H18.333C18.6832 7 19.03 7.06898 19.3536 7.20301C19.6772 7.33704 19.9712 7.53349 20.2189 7.78115C20.4665 8.0288 20.663 8.32281 20.797 8.64638C20.931 8.96996 21 9.31676 21 9.667V18.333C21 18.6832 20.931 19.03 20.797 19.3536C20.663 19.6772 20.4665 19.9712 20.2189 20.2189C19.9712 20.4665 19.6772 20.663 19.3536 20.797C19.03 20.931 18.6832 21 18.333 21H9.667C9.31676 21 8.96996 20.931 8.64638 20.797C8.32281 20.663 8.0288 20.4665 7.78115 20.2189C7.53349 19.9712 7.33704 19.6772 7.20301 19.3536C7.06898 19.03 7 18.6832 7 18.333V9.667Z" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M4.012 16.737C3.70534 16.5622 3.45027 16.3095 3.27258 16.0045C3.09488 15.6995 3.00085 15.353 3 15V5C3 3.9 3.9 3 5 3H15C15.75 3 16.158 3.385 16.5 4" data-v-411017c9="" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></g><defs data-v-411017c9=""><clippath data-v-411017c9="" id="bkmrk--44"><rect data-v-411017c9="" fill="white" height="24" width="24"></rect></clippath></defs></svg></div></div>  ```undefined
services:
  db:
image: mariadb:10.6.4-focal
	command: '--default-authentication-plugin=mysql_native_password'
	volumes:
  	- db_data:/var/lib/mysql
	restart: always
	expose:
  	- 3306
  	- 33060
  wordpress:
	image: wordpress:latest
	ports:
  	- 80:80
	restart: always
volumes:
  db_data:
```


`<img alt="Image15" src="https://content.timeweb.com/assets/eda139cd-5872-4301-a54e-ce378e9789e1?width=1846&height=1004"></img>`

- Нажмите «Deploy the stack». После некоторого времени ожидания, при успешном развертывании, произойдет перенаправление на страницу «Stacks list», где будет отображаться наш экземпляр Wordpress.
- Проверьте работу WordPress, перейдя по адресу `http://ip_сервера:80`. Вы должны увидеть стартовую страницу WordPress, что подтверждает успешное развертывание.