# Dokku

## Видео ролики

* <https://youtu.be/FcW1PoQqDS8>
* <https://youtu.be/INCRql1MjEw>

## Установка Dokku

Качаем скипт установки:

```
curl -L https://raw.githubusercontent.com/dokku/dokku/v0.11.2/bootstrap.sh | bash
```

## Установка плагина Postgres

Сайт плагина - <https://github.com/dokku/dokku-postgres>

```
dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
```

Создаем инстанс постгреса последней версии:

```
POSTGRES_CUSTOM_ENV="POSTGRES_USER=odoo" dokku postgres:create odoo_db
```

Обязательно указываем имя для базы, ибо в Odoo вшита проверка на пользователя, и Оду откажется работать с ошибкой:

`Using the database user 'postgres' is a security risk, aborting.`

Также можно установить другую версию Postgres, а также выключить ssl:

```
DISABLE_SSL=1 POSTGRES_IMAGE_VERSION="9-alpine" POSTGRES_CUSTOM_ENV="POSTGRES_USER=odoo" dokku postgres:create odoo_db
```

Получить информацию о базе:

```
root@mars:~# dokku postgres:info odoo_db
=====> Container Information
       Config dir:          /var/lib/dokku/services/postgres/odoo_db/config
       Data dir:            /var/lib/dokku/services/postgres/odoo_db/data
       Dsn:                 postgres://postgres:cb8dc005ece9f88ceeb6e72d37b3fcb4@dokku-postgres-odoo-db:5432/odoo_db
       Exposed ports:       -
       Id:                  87a4b10d2dbb68f49789cb61cf6f245c947383031afa3d7fe0bae5de7511529c
       Internal ip:         172.17.0.2
       Links:               odoo_test
       Service root:        /var/lib/dokku/services/postgres/odoo_db
       Status:              running
       Version:             postgres:9.6.4
```

В переменной Dsn содержится пароль. Так как мы при создании базы указали POSTGRES\_USER, этот пароль одновременно для пользователя postgres и odoo. Также в Dsn содержится адрес хоста базы данных.

### Создание приложения

Создаем приложение:

`dokku apps:create odoo_test`

Далее надо прилинковать сервис постгреса к приложению:

```
dokku postgres:link odoo_db myapp
```

После этого необходимо сконфигурировать переменные окружения:

```
dokku config:set odoo_test ODOO_ARG_NO_DATABASE_LIST= ODOO_ARG_WITHOUT_DEMO=all ODOO_ARG_DATABASE=my_app_name ODOO_ARG_DB_HOST=dokku-postgres-odoo-db ODOO_ARG_DB_PASSWORD=cb8dc005ece9f88ceeb6e72d37b3fcb4 ODOO_ARG_WORKERS=4
```

После этого можно делать деплой приложения, взяв образец отсюда -

### Клонирование приложения

```
dokku apps:clone --skip-deploy init_app mydomain.app.com
```

Флаг --skip-deploy нужен для того, чтобы переопределить конфигурацию нового приложения.

```
 dokku config:set --no-restart odoo_app ODOO_ARG_DATABASE=comlib_md ODOO_ARG_DB_HOST= ODOO_ARG_DB_PASSWORD=4bee98115d1959d73fba415c7da3c79b ODOO_ARG_WORKERS=4 ODOO_ARG_WITHOUT_DEMO=all ODOO_ARG_NO_DATABASE_LIST=
-----> Setting config vars
       ODOO_ARG_DB_PASSWORD:       4bee98115d1959d73fba415c7da3c79b
       ODOO_ARG_WORKERS:           4
       ODOO_ARG_WITHOUT_DEMO:      all
       ODOO_ARG_NO_DATABASE_LIST:
       ODOO_ARG_DATABASE:          comlib_md
root@mars:/tmp#
```

### Изменение CMD

```
dokku config:set app DOKKU_DOCKERFILE_START_CMD="odoo -u all"
```

### Сборка Odoo с python 2

Odoo версии 8 использует odoo.py вместо odoo, поэтому необходимо переопределить ODOO\_CMD:

```
dokku docker-options:add app build '--build-arg ODOO_CMD=odoo.py'
```

### Добавление параметров сборки или запуска

В папке с приложение можно указать Docker параметры в файлах DOCKER\_OPTIONS\_RUN (или DOCKER\_OPTIONS\_BUILD или DOCKER\_OPTIONS\_DEPLOY), например:

```
--link container_name:alias
-v /host/path:/container/path
-v /another/container/path
```

Либо сделать тоже самое через dokku docker-options, например:

```
# Mount a host volume in a Docker container: "-v /host/path:/container/path"
dokku docker-options:add node-js-app deploy "-v /var/log/node-js-app:/app/logs"
dokku docker-options:add node-js-app run "-v /var/log/node-js-app:/app/logs"
```

Разница в стадиях:

* `build` - контейнер, в котором все собирается;
* `deploy`- контейнер, в котором запускается приложение;
* `run`- контейнер, который запускается при вызове `dokku run`.


---

# Agent Instructions: 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://comlib.gitbook.io/odoo/dokku.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.
