Skip to content

Commit 7248514

Browse files
authored
Merge pull request #8 from ExpressApp/feature/easy-deploy
feat: add easy deploy instruction
2 parents fd2073d + af5c849 commit 7248514

File tree

5 files changed

+257
-177
lines changed

5 files changed

+257
-177
lines changed

Dockerfile

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,18 @@ WORKDIR /app
1111

1212
COPY poetry.lock pyproject.toml ./
1313

14-
ARG CI_JOB_TOKEN=""
15-
ARG GIT_HOST=""
16-
ARG GIT_PASSWORD=${CI_JOB_TOKEN}
17-
ARG GIT_LOGIN="gitlab-ci-token"
18-
19-
# Poetry can't read password to download private repos
20-
RUN echo -e "machine ${GIT_HOST}\nlogin ${GIT_LOGIN}\npassword ${GIT_PASSWORD}" > ~/.netrc && \
21-
apt-get update && \
14+
RUN apt-get update && \
2215
apt-get install -y git sudo && \
2316
pip install poetry==1.1.0 --no-cache-dir && \
2417
poetry config virtualenvs.create false && \
2518
poetry install --no-dev && \
2619
echo "${NON_ROOT_USER} ALL = NOPASSWD: /usr/sbin/update-ca-certificates" > /etc/sudoers.d/express_bot && \
2720
rm -rf /root/.cache/pypoetry && \
28-
rm -rf ~/.netrc && \
2921
apt-get clean autoclean && \
3022
apt-get autoremove --yes && \
3123
rm -rf /var/lib/{apt,dpkg,cache,log}/
3224

3325
COPY . .
34-
ARG CI_COMMIT_SHA=""
35-
ENV GIT_COMMIT_SHA=${CI_COMMIT_SHA}
3626

3727
USER ${NON_ROOT_USER}
3828

README.md

Lines changed: 20 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -8,175 +8,43 @@
88

99
Бот, позволяющий составлять список дел на день, следить за их выполнением.
1010

11+
## Инструкция по развёртыванию ToDo bot
1112

12-
## Переменные окружения
13+
> :note: Если вы планируете развёртывать несколько ботов на сервере, используйте
14+
> продвинутый вариант инструкции:
15+
> [detailed-deploy.md](https://github.com/ExpressApp/todo-bot/blob/feature/easy-deploy/detailed-deploy.md).
1316
14-
* `BOT_CREDENTIALS`: Учётные данные бота. Состоят из блоков
15-
`cts_host@secret_key@bot_id`, разделённых запятыми (один бот может быть
16-
зарегистрирован на нескольких CTS. `cts_host` -- адрес админки, `secret_key` и
17-
`bot_id` можно получить после регистрации бота, кликнув на его имя. Инструкция по
18-
регистрации бота находится в [Руководстве
19-
администратора](https://express.ms/admin_guide.pdf) `->` Эксплуатация корпоративного
20-
сервера `->` Управление контактами `->` Чат-боты.
21-
* `DB_CONNECTION`: DSN для БД PostgreSQL, например:
22-
`postgres://postgres_user:postgres_password@postgres:port/db_name`
23-
* `REDIS_DSN`: DSN для хранилища Redis, например: `redis://redis:6379/0`
24-
* `DEBUG` [`false`]: Включает вывод сообщений уровня `DEBUG` (по-умолчанию выводятся
25-
сообщения с уровня `INFO`).
26-
* `SQL_DEBUG` [`false`]: Включает вывод запросов к БД PostgreSQL.
2717

2818

29-
## Деплой
19+
1. Воспользуйтесь инструкцией [Руководство
20+
администратора](https://express.ms/admin_guide.pdf) `-> Эксплуатация корпоративного
21+
сервера -> Управление контактами -> Чат-боты`, чтобы создать бота в админке
22+
eXpress.
23+
Получите `secret_key` и `bot_id` кликнув на имя созданного бота.
24+
Получите `cts_host` в строке браузера, когда вы в админке.
25+
3026

31-
**Примечание**: Чтобы легко добавлять новых ботов на сервер, хранилища находятся в
32-
отдельной docker-сети и используются несколькими ботами сразу (каждый обращается к своей
33-
БД, но к единственному экземпляру PosgreSQL/Redis). При необходимости хранилища и бота
34-
легко объединить в один docker-compose файл.
35-
36-
37-
### Настройка хранилищ, используемых ботом
38-
39-
1. Создайте директорию для PosgreSQL+Redis.
40-
41-
```shell
42-
mkdir -p /opt/express/bots/storages
43-
```
44-
45-
2. В директории `/opt/express/bots/storages` создайте файл `docker-compose.yml` со
46-
следующим содержимым:
47-
48-
```yaml
49-
version: "3.8"
50-
51-
services:
52-
postgres:
53-
image: postgres:13.2-alpine
54-
env_file: .env
55-
ports:
56-
- "5432:5432"
57-
restart: always
58-
networks:
59-
- express_bots_storages
60-
volumes:
61-
- /opt/express/bots/storages/postgresdata:/var/lib/postgresql/12/main
62-
logging:
63-
driver: "json-file"
64-
options:
65-
max-size: "10m"
66-
max-file: "10"
67-
68-
redis:
69-
image: redis:6.2-alpine
70-
env_file: .env
71-
ports:
72-
- "6379:6379"
73-
restart: always
74-
networks:
75-
- express_bots_storages
76-
volumes:
77-
- /opt/express/bots/storages/redisdata:/var/lib/postgresql/data
78-
logging:
79-
driver: "json-file"
80-
options:
81-
max-size: "10m"
82-
max-file: "10"
83-
84-
networks:
85-
express_bots_storages:
86-
name: express_bots_storages
87-
```
88-
89-
3. Заполните файл `.env` необходимыми данными (для генерации паролей используйте команду
90-
`openssl rand -hex 16`):
27+
2. Скачайте репозиторий на сервер:
9128

9229
```bash
93-
POSTGRES_USER="postgres" # Общий пользователь PostgreSQL, у бота будет свой собственный
94-
POSTGRES_PASSWORD="<GENERATE>"
30+
git clone https://github.com/ExpressApp/todo-bot.git /opt/express/bots/todo-bot
31+
cd /opt/express/bots/todo-bot
9532
```
9633

97-
4. Запустите контейнеры командой `docker-compose up -d`.
98-
5. Убедитесь, что в логах хранилищ нет ошибок.
99-
100-
```bash
101-
docker-compose logs
102-
```
34+
3. Отредактируйте `docker-compose.yml` подставив вместо `cts_host`, `secret_key` и `bot_id` реальные значения.
10335

10436

105-
### Настройка бота
106-
107-
1. Создайте БД и пользователя для бота (для генерации паролей используйте команду
108-
`openssl rand -hex 16`):
109-
110-
```shell
111-
docker exec -it storages_postgres_1 psql --user postgres
112-
```
113-
114-
```sql
115-
CREATE USER todo_bot_user PASSWORD "<GENERATE>";
116-
CREATE DATABASE todo_bot_db;
117-
GRANT ALL PRIVILEGES ON DATABASE todo_bot_db TO todo_bot_user;
118-
```
119-
120-
2. Создайте бота в админке eXpress. Хост CTS (в строке браузера, когда вы в админке) и
121-
"Secret key" пригодятся для заполнения переменной окружения `BOT_CREDENTIALS`.
122-
123-
3. Создайте директорию для бота.
124-
125-
```shell
126-
mkdir -p /opt/express/bots/todo-bot
127-
```
128-
129-
4. В директории `/opt/express/bots/todo-bot` создайте файл
130-
`docker-compose.yml` со следующим содержимым:
131-
132-
```yaml
133-
version: "3.8"
134-
135-
services:
136-
todo-bot:
137-
image: registry.example.com/bots/todo-bot:master
138-
container_name: todo-bot
139-
env_file: .env
140-
ports:
141-
- "8000:8000" # Отредактируйте порт хоста (первый), если он уже занят
142-
restart: always
143-
depends_on:
144-
- postgres
145-
- redis
146-
logging:
147-
driver: "json-file"
148-
options:
149-
max-size: "10m"
150-
max-file: "10"
151-
152-
networks:
153-
default:
154-
external:
155-
name: express_bots_storages
156-
```
157-
158-
5. Заполните `.env` необходимыми данными:
159-
160-
```bash
161-
BOT_CREDENTIALS="example.cts.domain@d87f0dce2280d04b41f08e3adb1ae81c@5ce31515-32ae-435a-b6f4-748d2ced921d"
162-
# etc.
163-
```
164-
165-
Описание переменных и примеры можно посмотреть в [соответствующем
166-
разделе](#переменные-окружения).
167-
168-
6. Запустите бота командой:
37+
4. Запустите контейнеры командой:
16938

17039
```bash
17140
docker-compose up -d
17241
```
17342

174-
7. Найдите бота через поиск корпоративных контактов (иконка человечка слева-сверху в
175-
мессенджере), напишите ему что-нибудь для проверки (обычно у бота есть команда
176-
`/help`).
177-
178-
8. Убедитесь, что в логах бота нет ошибок.
43+
5. Убедитесь, что в логах нет ошибок.
17944

18045
```bash
18146
docker-compose logs
18247
```
48+
49+
6. Найдите бота через поиск корпоративных контактов (иконка человечка слева-сверху в
50+
мессенджере), напишите ему что-нибудь для проверки.

0 commit comments

Comments
 (0)