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:
parent
3527198784
commit
8e8f0e6fde
3 changed files with 434 additions and 0 deletions
207
opt/postiz-config/CREDENTIALS-MANAGEMENT.md
Normal file
207
opt/postiz-config/CREDENTIALS-MANAGEMENT.md
Normal 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
|
||||
79
opt/postiz-config/QUICK-START.md
Normal file
79
opt/postiz-config/QUICK-START.md
Normal 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`
|
||||
148
opt/postiz-config/update-credentials.sh
Executable file
148
opt/postiz-config/update-credentials.sh
Executable 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
|
||||
Loading…
Add table
Reference in a new issue