|
1 | | -Adv Keeper — «еле-еле, но работает» |
| 1 | +# ADV Keeper (CLI/TUI) |
2 | 2 |
|
3 | | -Маленький демо-проект: gRPC-сервер + TUI-клиент (Go) для регистрации/логина и загрузки/скачивания файлов. |
4 | | -План был «сделать за неделю», получилось «сделали — и это уже праздник» |
| 3 | +Лёгкий офлайн-клиент для загрузки и скачивания файлов через gRPC с удобным TUI-интерфейсом на Bubble Tea. |
| 4 | +**Ничего ставить не нужно, кроме `make` и вашей ОС.** |
5 | 5 |
|
6 | | -Что умеет |
| 6 | +## Быстрый старт |
7 | 7 |
|
8 | | -Регистрация и логин (пароли в БД, клиент хранит только сессию). |
| 8 | +```bash |
| 9 | +# 1) Запуск сервера |
| 10 | +make server # или make run-server / make run — смотрите цели в Makefile |
| 11 | +``` |
| 12 | +# 2) В другом терминале — запуск TUI-клиента |
| 13 | +make tui # или make run-tui / make client — по Makefile |
| 14 | +Если в вашем Makefile другие имена целей — используйте их. Смысл простой: одна цель стартует сервер, другая — клиент. |
9 | 15 |
|
10 | | -JWT-авторизация на сервере. |
| 16 | +Учётная запись (демо) |
| 17 | +Войти можно тестовым аккаунтом: |
11 | 18 |
|
12 | | -Загрузка/скачивание файлов с прогрессом. |
| 19 | +makefile |
| 20 | +Copy code |
| 21 | +Логин: admin |
| 22 | +Пароль: admin |
| 23 | +Как пользоваться |
| 24 | +Загрузка файла (Upload) |
| 25 | +В главном меню выберите Upload (стрелки ↑/↓, Enter). |
13 | 26 |
|
14 | | -Кроссплатформенный TUI (Linux / macOS / Windows). |
| 27 | +Выберите файл через встроенный файловый диалог. |
15 | 28 |
|
16 | | -Автомиграции БД при старте сервера. |
| 29 | +Во время загрузки увидите: |
17 | 30 |
|
18 | | -systemd-юнит для деплоя (чтобы «само вставало и работало… ну почти»). |
| 31 | +прогресс-бар, проценты, |
19 | 32 |
|
20 | | -Быстрый старт (клиент) |
| 33 | +скорость передачи и ETA, |
21 | 34 |
|
22 | | -Клиенту нужна одна переменная окружения: AK_GRPC_ADDR — адрес gRPC сервера, например 89.207.255.214:8080. |
| 35 | +подсказку ESC — отмена. |
23 | 36 |
|
24 | | -Windows (PowerShell) |
25 | | -$env:AK_GRPC_ADDR = "89.207.255.214:8080" |
26 | | -.\tui_windows_amd64.exe |
| 37 | +По завершении вернёт в список файлов (FileList). |
27 | 38 |
|
| 39 | +Скачивание файла (Download) |
| 40 | +Откройте FileList. |
28 | 41 |
|
29 | | -Сделать навсегда: |
| 42 | +Стрелками выберите нужный файл, Enter → Download. |
30 | 43 |
|
31 | | -[Environment]::SetEnvironmentVariable( |
32 | | - "AK_GRPC_ADDR","89.207.255.214:8080",[EnvironmentVariableTarget]::User |
33 | | -) |
| 44 | +Прогресс отображается так же, как при upload. |
34 | 45 |
|
35 | | -macOS / Linux |
36 | | -export AK_GRPC_ADDR=89.207.255.214:8080 |
37 | | -./tui # или ./tui_darwin_arm64, ./tui_linux_amd64 |
| 46 | +Готовый файл сохраняется рядом с приложением (в текущей папке, где запущен клиент/бинарь). |
38 | 47 |
|
| 48 | +Если не уверены, где окажется файл — посмотрите текущую директорию (pwd на macOS/Linux или cd без аргументов в Windows). |
39 | 49 |
|
40 | | -Опционально: куда сохранять скачанные файлы |
| 50 | +Клавиши |
| 51 | +↑ / ↓ / j / k — навигация по меню/таблицам |
41 | 52 |
|
42 | | -export AK_FILES_DIR="$HOME/Downloads/adv-keeper" |
| 53 | +Enter — выбрать |
43 | 54 |
|
| 55 | +ESC — назад/отмена/снять фокус |
44 | 56 |
|
45 | | -Навигация в TUI: ↑/↓ и Enter. После логина сессия лежит в: |
| 57 | +Ctrl+C — выход |
46 | 58 |
|
47 | | -Linux/macOS: ~/.config/adv-keeper/session.json |
| 59 | +Во время загрузки/скачивания: |
48 | 60 |
|
49 | | -Windows: %AppData%\adv-keeper\session.json |
| 61 | +ESC — отменить операцию |
50 | 62 |
|
51 | | -Сборка клиента |
| 63 | +Что внутри (коротко) |
| 64 | +gRPC сервер и TUI-клиент. |
52 | 65 |
|
53 | | -Требуется Go 1.22+. |
| 66 | +Передача файлов чанками, с расчётом прогресса/скорости/ETA. |
54 | 67 |
|
55 | | -make build # текущая платформа -> ./dist/tui |
56 | | -make linux # linux_amd64 |
57 | | -make mac # darwin_arm64 (Apple Silicon) |
58 | | -make windows # windows_amd64.exe |
| 68 | +Сессия сохраняется и очищается при Logout. |
59 | 69 |
|
60 | | -Сервер (шпаргалка владельцу) |
61 | | -.env |
62 | | -# /etc/adv-keeper.env |
63 | | -AK_GRPC_ADDR=0.0.0.0:8080 |
64 | | -DB_DSN=postgres://admin:admin@127.0.0.1:5432/adv?sslmode=disable |
65 | | -JWT_SECRET=super-secret-not-for-git |
66 | | -FILES_DIR=/opt/adv-keeper/data |
67 | | -MIGRATIONS_PATH=file:///opt/adv-keeper/migrations |
| 70 | +Демо-видео |
| 71 | +В качестве примера можно взять видео с Дуэйном Джонсоном (The Rock): |
| 72 | +https://www.youtube.com/watch?v=skeQ9C7JuG4 |
68 | 73 |
|
69 | | -systemd unit |
70 | | -# /etc/systemd/system/adv-keeper.service |
71 | | -[Unit] |
72 | | -Description=Adv Keeper Server |
73 | | -After=network.target |
74 | | -Requires=postgresql.service |
| 74 | +Траблшутинг |
| 75 | +“Висит загрузка” — убедитесь, что сервер запущен до старта клиента. |
75 | 76 |
|
76 | | -[Service] |
77 | | -User=ak |
78 | | -Group=ak |
79 | | -EnvironmentFile=/etc/adv-keeper.env |
80 | | -WorkingDirectory=/opt/adv-keeper |
81 | | -ExecStart=/opt/adv-keeper/current |
82 | | -Restart=always |
83 | | -RestartSec=2 |
84 | | -LimitNOFILE=65535 |
| 77 | +“Не логинится” — проверьте демо-логин/пароль admin/admin. |
85 | 78 |
|
86 | | -[Install] |
87 | | -WantedBy=multi-user.target |
88 | | - |
89 | | - |
90 | | -Развёртывание (у нас через GitHub Actions) кладёт бинарь в /opt/adv-keeper/releases/<server-TS>, двигает current и рестартит сервис. |
91 | | -Миграции берутся из MIGRATIONS_PATH. |
92 | | - |
93 | | -Проверки: |
94 | | - |
95 | | -sudo systemctl status adv-keeper --no-pager |
96 | | -journalctl -u adv-keeper -n 100 --no-pager |
97 | | -ss -ltnp 'sport = :8080' # слушает ли порт |
98 | | - |
99 | | - |
100 | | -Открыть порт наружу (UFW): |
101 | | - |
102 | | -sudo ufw allow 8080/tcp |
103 | | -sudo ufw status |
104 | | - |
105 | | -FAQ |
106 | | - |
107 | | -connection refused |
108 | | -На сервере AK_GRPC_ADDR=0.0.0.0:8080, порт открыт, сервис запущен. |
109 | | - |
110 | | -Дисклеймер безопасности |
111 | | - |
112 | | -Это демо. Порт 8080 может быть открыт, JWT секрет — в переменных окружения, логика — нарочно упрощена. |
113 | | -Не храните чувствительные данные, только тестовые!!! |
114 | | - |
115 | | -Статус |
116 | | - |
117 | | -«Работает у меня на облаке» |
118 | | - |
119 | | -⚠️ «Улучшить можно всё» |
120 | | - |
121 | | -🥳 «Но оно живёт, и это главное» |
122 | | - |
123 | | -Если что-то не взлетело — заводите issue. Если взлетело — тоже заводите, нам нужна моральная поддержка. 🙌 |
| 79 | +“Не вижу скачанного файла” — проверьте текущую директорию клиента; файл сохраняется рядом с бинарём. |
0 commit comments