feat: add automated credentials management for Postiz

- Create update-credentials.sh script for easy provider configuration
- Support adding/updating YouTube, TikTok, LinkedIn, X, Telegram, Facebook
- Automatically reload backend services after credential changes
- Add comprehensive documentation and quick-start guide
- Eliminate need for manual .env editing for social integrations

Usage:
  /opt/postiz-config/update-credentials.sh list                    # Show current status
  /opt/postiz-config/update-credentials.sh youtube ID SECRET        # Add YouTube
  /opt/postiz-config/update-credentials.sh tiktok ID SECRET         # Add TikTok
  /opt/postiz-config/update-credentials.sh linkedin ID SECRET       # Add LinkedIn
  /opt/postiz-config/update-credentials.sh x ID SECRET              # Add X/Twitter
  /opt/postiz-config/update-credentials.sh telegram BOT_NAME TOKEN  # Add Telegram

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
SamoilenkoVadym 2025-11-29 21:36:52 +00:00
parent 3527198784
commit 8e8f0e6fde
3 changed files with 434 additions and 0 deletions

View file

@ -0,0 +1,207 @@
# Управление Credentials Postiz
Скрипт `update-credentials.sh` позволяет быстро добавлять и обновлять учетные данные социальных сетей без ручного редактирования `.env` файла.
## Использование
### Просмотр текущих credentials
```bash
ssh ubuntu@51.89.231.46
/opt/postiz-config/update-credentials.sh list
```
**Вывод:**
```
Current Provider Credentials:
✓ FACEBOOK: ID=2494242755... Secret=75a5dc7a0d...
⚠ TIKTOK: Not configured
⚠ LINKEDIN: Not configured
⚠ X: Not configured
⚠ YOUTUBE: Not configured
⚠ TELEGRAM: Not configured
```
### Добавить/обновить YouTube
```bash
/opt/postiz-config/update-credentials.sh youtube 'CLIENT_ID' 'CLIENT_SECRET'
```
**Пример:**
```bash
/opt/postiz-config/update-credentials.sh youtube 'AIzaSyDvqNl9w5-J7K3M4z1x2c3v4b5n6m7l8' 'GOCSPX-1a2b3c4d5e6f7g8h9i0j'
```
### Добавить/обновить TikTok
```bash
/opt/postiz-config/update-credentials.sh tiktok 'CLIENT_ID' 'CLIENT_SECRET'
```
### Добавить/обновить LinkedIn
```bash
/opt/postiz-config/update-credentials.sh linkedin 'CLIENT_ID' 'CLIENT_SECRET'
```
### Добавить/обновить X (Twitter)
```bash
/opt/postiz-config/update-credentials.sh x 'API_KEY' 'API_SECRET'
```
### Добавить/обновить Telegram
```bash
/opt/postiz-config/update-credentials.sh telegram 'BOT_NAME' 'BOT_TOKEN'
```
### Обновить Facebook
```bash
/opt/postiz-config/update-credentials.sh facebook 'APP_ID' 'APP_SECRET'
```
## Как работает скрипт
1. **Обновляет .env файл** - добавляет или изменяет значения в `/opt/postiz-config/.env`
2. **Перезагружает сервисы** - автоматически перезапускает backend, workers и frontend через PM2
3. **Показывает результат** - выводит текущее состояние всех credentials
## Примеры
### Добавить YouTube канал
```bash
/opt/postiz-config/update-credentials.sh youtube 'AIzaSyDvqNl9w5-J7K3M' 'GOCSPX-1a2b3c4d5e'
```
Скрипт:
- ✓ Обновит `YOUTUBE_CLIENT_ID` в `.env`
- ✓ Обновит `YOUTUBE_CLIENT_SECRET` в `.env`
- ✓ Перезагрузит backend процессы
- ✓ Выведет обновленный список credentials
### Добавить TikTok
```bash
/opt/postiz-config/update-credentials.sh tiktok 'cv12345abc' 'secret123xyz'
```
### Обновить Facebook (если поменялись ключи)
```bash
/opt/postiz-config/update-credentials.sh facebook '24942427558777493' '75a5dc7a0d45c27d6e580d95806722d5'
```
## Получение Credentials
### YouTube
1. Перейти в [Google Cloud Console](https://console.cloud.google.com/)
2. Создать проект
3. Включить YouTube Data API v3
4. Создать OAuth 2.0 credentials (Тип: Web application)
5. Скопировать Client ID и Client Secret
### TikTok
1. Перейти на [TikTok Developers](https://developers.tiktok.com/)
2. Создать приложение
3. Запросить доступ к TikTok API
4. Скопировать Client Key и Client Secret
### LinkedIn
1. Перейти на [LinkedIn Developers](https://www.linkedin.com/developers/)
2. Создать приложение
3. В настройках найти "Credentials"
4. Скопировать Client ID и Client Secret
### X (Twitter)
1. Перейти в [Twitter Developer Portal](https://developer.twitter.com/)
2. Создать приложение
3. В "Keys and tokens" найти API Key и API Secret Key
4. Скопировать оба значения
### Telegram
1. Найти [@BotFather](https://t.me/BotFather) в Telegram
2. Создать нового бота командой `/newbot`
3. Скопировать Bot Token
4. Придумать Bot Name (может быть любым удобным именем)
## Структура .env
После использования скрипта, `.env` файл будет иметь структуру:
```env
FACEBOOK_APP_ID=24942427558777493
FACEBOOK_APP_SECRET=75a5dc7a0d45c27d6e580d95806722d5
YOUTUBE_CLIENT_ID=AIzaSyDvqNl9w5-J7K3M4z1x2c3v4b5n6m7l8
YOUTUBE_CLIENT_SECRET=GOCSPX-1a2b3c4d5e6f7g8h9i0j
TIKTOK_CLIENT_ID=cv12345abc
TIKTOK_CLIENT_SECRET=secret123xyz
LINKEDIN_CLIENT_ID=...
LINKEDIN_CLIENT_SECRET=...
X_API_KEY=...
X_API_SECRET=...
TELEGRAM_BOT_NAME=...
TELEGRAM_BOT_TOKEN=...
```
## Устранение проблем
### Скрипт не найден
```bash
# Убедитесь, что вы на сервере
ssh ubuntu@51.89.231.46
# Проверьте наличие скрипта
ls -la /opt/postiz-config/update-credentials.sh
# Дайте права на выполнение
chmod +x /opt/postiz-config/update-credentials.sh
```
### Credentials не применились
```bash
# Перезагрузите контейнер вручную
cd /opt/postiz-config
docker-compose restart
# Проверьте логи
docker logs postiz | tail -50
```
### Неправильно ввел credentials
```bash
# Просто запустите скрипт снова с правильными значениями
/opt/postiz-config/update-credentials.sh youtube 'CORRECT_ID' 'CORRECT_SECRET'
```
## Синхронизация с Mac
Скрипт находится в `/opt/postiz-config/` и автоматически синхронизируется через Syncthing:
1. **На Mac:** `/Volumes/SSD/Aimpress_Cloud_Prod/opt/postiz-config/`
2. **На сервере:** `/opt/postiz-config/` (через Syncthing)
При изменении `.env` файла через скрипт на сервере, изменения автоматически синхронизируются обратно на Mac.
## Безопасность
⚠️ **Важно:** Credentials хранятся в `.env` файле, который:
- **Не коммитится в Git** (исключен через `.gitignore`)
- **Синхронизируется Syncthing** между Mac и сервером
- **Должен быть защищен** (не делитесь файлом и его содержимым)
Никогда не коммитьте `.env` файл в Git!
---
**Версия:** 1.0
**Последнее обновление:** 2025-11-29

View file

@ -0,0 +1,79 @@
# Postiz: Быстрое добавление интеграций
## TL;DR - Копируй и вставляй
### Просмотр текущих интеграций
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh list"
```
### Добавить YouTube
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh youtube 'YOUR_CLIENT_ID' 'YOUR_CLIENT_SECRET'"
```
### Добавить TikTok
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh tiktok 'YOUR_CLIENT_ID' 'YOUR_CLIENT_SECRET'"
```
### Добавить LinkedIn
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh linkedin 'YOUR_CLIENT_ID' 'YOUR_CLIENT_SECRET'"
```
### Добавить X (Twitter)
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh x 'YOUR_API_KEY' 'YOUR_API_SECRET'"
```
### Добавить Telegram
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh telegram 'BOT_NAME' 'BOT_TOKEN'"
```
## Как это работает
1. **Скрипт обновляет `.env`** файл
2. **Перезагружает Postiz** сервисы (backend, workers, frontend)
3. **Показывает результат** - статус всех интеграций
## Готовые примеры
```bash
# YouTube
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh youtube 'AIzaSyDvqNl9w5-J7K3M4z1' 'GOCSPX-1a2b3c4d5e6f'"
# TikTok
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh tiktok 'cv1234567890abc' 'secret_xyz123'"
# LinkedIn
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh linkedin 'MY_CLIENT_ID_123' 'MY_CLIENT_SECRET_xyz'"
# X (Twitter)
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh x 'eJ8vBxyz123' '4tKmNop456qWxyz789'"
# Telegram
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh telegram 'MyAwesomeBot' '1234567890:ABCDEFghijklmnop'"
```
## Статус
```bash
ssh ubuntu@51.89.231.46 "/opt/postiz-config/update-credentials.sh list"
```
**Вывод:**
```
✓ FACEBOOK: Configured
⚠ YOUTUBE: Not configured
✓ TIKTOK: Configured
...
```
✓ = Configured (зеленый)
⚠ = Not configured (желтый)
---
**Подробная документация:** смотри `CREDENTIALS-MANAGEMENT.md`

View file

@ -0,0 +1,148 @@
#!/bin/bash
# Postiz Credentials Management Script
# Usage: ./update-credentials.sh youtube CLIENT_ID CLIENT_SECRET
# Or: ./update-credentials.sh list
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="$SCRIPT_DIR/.env"
CONTAINER_NAME="postiz"
# Color output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to update .env
update_env() {
local key=$1
local value=$2
if grep -q "^${key}=" "$ENV_FILE"; then
sed -i.bak "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
echo -e "${GREEN}${NC} Updated ${key}"
else
echo "${key}=${value}" >> "$ENV_FILE"
echo -e "${GREEN}${NC} Added ${key}"
fi
}
# Function to show current credentials
show_credentials() {
echo -e "${BLUE}Current Provider Credentials:${NC}"
echo ""
for provider in FACEBOOK TIKTOK LINKEDIN X YOUTUBE TELEGRAM; do
client_id_var="${provider}_CLIENT_ID"
client_secret_var="${provider}_CLIENT_SECRET"
if [ "$provider" = "FACEBOOK" ]; then
client_id_var="FACEBOOK_APP_ID"
client_secret_var="FACEBOOK_APP_SECRET"
fi
id_val=$(grep "^${client_id_var}=" "$ENV_FILE" 2>/dev/null | cut -d= -f2- || echo "")
secret_val=$(grep "^${client_secret_var}=" "$ENV_FILE" 2>/dev/null | cut -d= -f2- || echo "")
if [ -z "$id_val" ] && [ -z "$secret_val" ]; then
echo -e "${YELLOW}${NC} $provider: Not configured"
else
id_display="${id_val:0:10}..."
secret_display=$(echo "$secret_val" | cut -c1-10)...
echo -e "${GREEN}${NC} $provider: ID=${id_display} Secret=${secret_display}"
fi
done
echo ""
}
# Function to add/update provider
add_provider() {
local provider=$1
local client_id=$2
local client_secret=$3
case ${provider,,} in
facebook)
update_env "FACEBOOK_APP_ID" "$client_id"
update_env "FACEBOOK_APP_SECRET" "$client_secret"
;;
youtube)
update_env "YOUTUBE_CLIENT_ID" "$client_id"
update_env "YOUTUBE_CLIENT_SECRET" "$client_secret"
;;
tiktok)
update_env "TIKTOK_CLIENT_ID" "$client_id"
update_env "TIKTOK_CLIENT_SECRET" "$client_secret"
;;
linkedin)
update_env "LINKEDIN_CLIENT_ID" "$client_id"
update_env "LINKEDIN_CLIENT_SECRET" "$client_secret"
;;
x|twitter)
update_env "X_API_KEY" "$client_id"
update_env "X_API_SECRET" "$client_secret"
;;
telegram)
update_env "TELEGRAM_BOT_NAME" "$client_id"
update_env "TELEGRAM_BOT_TOKEN" "$client_secret"
;;
*)
echo -e "${RED}${NC} Unknown provider: $provider"
echo "Supported providers: facebook, youtube, tiktok, linkedin, x, telegram"
exit 1
;;
esac
}
# Main logic
if [ $# -eq 0 ]; then
show_credentials
exit 0
fi
case ${1,,} in
list)
show_credentials
;;
facebook|youtube|tiktok|linkedin|x|twitter|telegram)
if [ $# -lt 3 ]; then
echo -e "${RED}${NC} Usage: $0 $1 CLIENT_ID CLIENT_SECRET"
echo ""
echo "Example for YouTube:"
echo " $0 youtube 'YOUR_CLIENT_ID' 'YOUR_CLIENT_SECRET'"
exit 1
fi
provider=$1
client_id=$2
client_secret=$3
echo -e "${BLUE}Updating $provider credentials...${NC}"
add_provider "$provider" "$client_id" "$client_secret"
# Reload container
echo -e "${YELLOW}Reloading Postiz container...${NC}"
docker exec "$CONTAINER_NAME" pm2 restart backend workers frontend --wait-ready 2>/dev/null || true
echo -e "${GREEN}${NC} Done! Credentials updated and services restarted"
echo ""
show_credentials
;;
*)
echo -e "${RED}${NC} Unknown command: $1"
echo ""
echo "Usage:"
echo " $0 list # Show current credentials"
echo " $0 youtube ID SECRET # Add/update YouTube"
echo " $0 facebook ID SECRET # Add/update Facebook"
echo " $0 tiktok ID SECRET # Add/update TikTok"
echo " $0 linkedin ID SECRET # Add/update LinkedIn"
echo " $0 x ID SECRET # Add/update X/Twitter"
echo " $0 telegram BOT_NAME BOT_TOKEN # Add/update Telegram"
exit 1
;;
esac