Коллекция скриптов для автоматической установки различного программного обеспечения на удалённые серверы Ubuntu 24.04.
Если необходимое вам программное обеспечение отсутствует в списке доступных скриптов, вы можете создать issue с просьбой добавить скрипт для его установки.
Этот проект предоставляет набор bash-скриптов для быстрого развёртывания популярного программного обеспечения на серверах Ubuntu. Все скрипты:
- Адаптированы под Ubuntu 24.04
- Поддерживают идемпотентность (можно запускать повторно)
- Автоматически создают необходимых пользователей
- Настраивают nginx с SSL-сертификатами (Let's Encrypt)
- Выводят результаты установки с цветовой подсветкой
| Скрипт | Описание | Устанавливаемые компоненты |
|---|---|---|
install-scripts-api-flask.sh |
API для установки ПО на удалённый сервер Ubuntu | Git, Python 3, pip, venv, Nginx, Certbot, Flask, Gunicorn, systemd-сервис |
various-useful-api-django.sh |
Набор полезных API с использованием Django | Git, Python 3, pip, venv, MySQL, Nginx, Certbot, Django, Gunicorn, FFmpeg, systemd-сервис |
openchatroulette.sh |
Видео чат-рулетка с WebRTC | Git, Node.js, npm, Nginx, Certbot, Angular, база данных GeoLite2-Country, systemd-сервис |
pocketbase.sh |
Бэкенд на Go с встроенной базой данных SQLite, аутентификацией и админ-панелью | Nginx, Certbot, PocketBase, systemd-сервис |
mysql-phpmyadmin.sh |
Сервер базы данных MySQL с веб-интерфейсом phpMyAdmin | Nginx, PHP-FPM с расширениями, MySQL Server, phpMyAdmin, Certbot, базовая аутентификация |
postgresql-mathesar.sh |
Сервер базы данных PostgreSQL с веб-интерфейсом Mathesar | Nginx, Certbot, PostgreSQL 16, Mathesar, systemd-сервис, базовая аутентификация |
filebrowser.sh |
Веб-файловый менеджер с современным интерфейсом | Nginx, Certbot, FileBrowser Quantum, systemd-сервис |
wireguard-wireguard-ui.sh |
VPN-сервер WireGuard с веб-интерфейсом для управления | WireGuard, WireGuard-UI, Nginx, Certbot, настройка IP-форвардинга, systemd-сервисы |
xray-3x-ui.sh |
Xray прокси-сервер с веб-панелью 3x-ui (VLESS, VMess, Trojan) | Xray, панель 3x-ui, Nginx, Certbot, systemd-сервисы |
wordpress.sh |
CMS WordPress с MySQL, Nginx и SSL-сертификатом | WordPress, MySQL Server, Nginx, PHP-FPM с расширениями, Certbot, WP-CLI |
n8n.sh |
Платформа автоматизации рабочих процессов n8n | Docker, Docker Compose, PostgreSQL 16, n8n, Nginx, Certbot |
rocketchat.sh |
Платформа для обмена сообщениями Rocket.Chat | Docker, Docker Compose, MongoDB 6.0 с replica set, Rocket.Chat, Nginx, Certbot |
jitsi-meet.sh |
Платформа для видеоконференций Jitsi Meet | Prosody XMPP, Jitsi Videobridge, Jicofo, Nginx, Certbot |
netdata.sh |
Система мониторинга серверов в реальном времени | Netdata, Nginx, Certbot, базовая аутентификация |
uptime-kuma.sh |
Инструмент мониторинга статусов сервисов | Git, Node.js 20.x, npm, Nginx, Certbot, systemd-сервис |
linux-dash.sh |
Панель мониторинга системы Linux | Git, Python 3, linux-dash, Nginx, Certbot, базовая аутентификация, systemd-сервис |
gpt4free.sh |
Бесплатный интерфейс GPT4Free для работы с различными LLM | Git, Python 3, pip, venv, Nginx, Certbot, GPT4Free с веб-интерфейсом и API, базовая аутентификация, systemd-сервис |
teable.sh |
Платформа электронных таблиц с функциями базы данных Teable | Docker, Docker Compose, PostgreSQL 15, Redis 7, Teable, Nginx, Certbot |
hive-mind.sh |
AI-оркестратор Hive Mind с Telegram-ботом | Docker, Docker Compose, Hive Mind, Telegram Bot, Nginx, Certbot |
libretranslate.sh |
Бесплатный API машинного перевода LibreTranslate | Git, Python 3, pip, venv, Nginx, Certbot, выбранные языковые модели (по умолчанию: en,de,ru), API ключ, systemd-сервис |
odoo.sh |
Система управления бизнесом Odoo (ERP и CRM) | Git, Python 3, pip, venv, PostgreSQL 16, Nginx, Certbot, Odoo 18.0, Node.js, rtlcss, wkhtmltopdf, systemd-сервис |
curl -fsSL -o- https://raw.githubusercontent.com/andchir/install_scripts/refs/heads/main/scripts/<script_name>.sh | bash -s -- <domain_name>Пример:
curl -fsSL -o- https://raw.githubusercontent.com/andchir/install_scripts/refs/heads/main/scripts/pocketbase.sh | bash -s -- example.comДля некоторого ПО доступны Ansible playbook'и, которые позволяют автоматизировать установку с использованием Ansible.
Установка Ansible:
cd ansible
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtДоступные playbook'и:
ansible/playbooks/n8n.yml- установка n8n с PostgreSQL
Пример использования:
# Настройте inventory файл
cp ansible/inventory.ini.example ansible/inventory.ini
# Отредактируйте inventory.ini, указав ваш сервер
# Запустите playbook
ansible-playbook -i ansible/inventory.ini ansible/playbooks/n8n.yml -e "domain_name=n8n.example.com"Подробная документация по использованию Ansible playbook'ов находится в файле ansible/README.md.
Проект включает Flask API для управления скриптами и удалённой установки ПО.
cd api
pip install flask paramiko
python app.py --port 5000 --host 0.0.0.0Можно задать переменные окружения в файле .env в директории api/. Пример файла: api/.env.example.
| Переменная | Описание | По умолчанию |
|---|---|---|
API_KEY |
API ключ для аутентификации (если не задан, аутентификация отключена) | - |
SCRIPTS_DIR |
Директория со скриптами | ../scripts |
DATA_DIR |
Директория с файлами данных | .. |
SCRIPTS_BASE_URL |
Базовый URL для скачивания скриптов | https://raw.githubusercontent.com/andchir/install_scripts/refs/heads/main/scripts |
PROTECTION_ENABLED |
Включить защиту от злонамеренного использования | true |
RATE_LIMIT_MAX_REQUESTS |
Максимальное количество запросов за временное окно | 10 |
RATE_LIMIT_TIME_WINDOW |
Временное окно в секундах | 60 |
RATE_LIMITER_DB_PATH |
Путь к файлу базы данных SQLite | rate_limiter.db |
Если переменная окружения API_KEY задана, эндпоинт /api/install требует API ключ для доступа.
API ключ можно передать:
- В заголовке
X-API-Key - В параметре запроса
api_key
Генерация безопасного ключа:
python -c "import secrets; print(secrets.token_urlsafe(32))"API включает встроенную защиту от злонамеренного использования (например, для предотвращения подбора паролей на удалённых серверах с использованием API).
Возможности:
- Отслеживание всех IP-адресов, вызывающих эндпоинт
/api/install - Автоматическая блокировка IP при превышении лимита запросов (по умолчанию: более 10 запросов в минуту)
- Локальная база данных SQLite для хранения истории запросов и заблокированных IP
- API для управления заблокированными адресами
Включение/отключение: Защита включена по умолчанию. Для отключения задайте переменную окружения:
PROTECTION_ENABLED=falseПри превышении лимита запросов:
{
"success": false,
"error": "Access denied: Rate limit exceeded: 11 requests in 60 seconds",
"ip": "192.168.1.100",
"requests_count": 11
}Информация об API и список доступных эндпоинтов.
Ответ:
{
"name": "Install Scripts API",
"version": "1.1.0",
"endpoints": {
"/": "API information (this page)",
"/health": "Health check endpoint",
"/api/scripts_list": "List all available installation scripts (supports ?lang=ru|en)",
"/api/script/<script_name>": "Get information about a single script by script_name (supports ?lang=ru|en)",
"/api/install": "Execute an installation script on a remote server via SSH (POST: script_name, server_ip, server_root_password, additional)",
"/api/protection/status": "Get protection/rate limiting status and configuration",
"/api/protection/blocked": "List all currently blocked IP addresses",
"/api/protection/block": "Manually block an IP address (POST: ip, reason, permanent, duration_hours)",
"/api/protection/unblock": "Unblock an IP address (POST: ip)",
"/api/protection/stats": "Get request statistics (supports ?ip=x.x.x.x&limit=N)"
}
}Проверка состояния API.
Ответ:
{
"status": "healthy",
"message": "API is running"
}Получение списка всех доступных скриптов.
Параметры запроса:
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
lang |
string | Язык данных (ru или en) |
ru |
Пример запроса:
curl http://localhost:5000/api/scripts_list?lang=ruОтвет:
{
"success": true,
"count": 4,
"scripts": [
{
"name": "andchir/install_scripts",
"script_name": "install-scripts-api-flask",
"description": "API для установки ПО на удалённый сервер Ubuntu",
"info": "Необходимый параметр: доменное имя"
}
]
}Получение информации о конкретном скрипте.
Параметры URL:
| Параметр | Тип | Описание |
|---|---|---|
script_name |
string | Имя скрипта (без расширения .sh) |
Параметры запроса:
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
lang |
string | Язык данных (ru или en) |
ru |
Пример запроса:
curl http://localhost:5000/api/script/pocketbase?lang=ruОтвет:
{
"success": true,
"result": {
"name": "pocketbase/pocketbase",
"script_name": "pocketbase",
"description": "Бэкенд на Go с встроенной базой данных SQLite, аутентификацией, хранилищем файлов и админ-панелью",
"info": "Необходимый параметр: доменное имя"
}
}Запуск установки ПО на удалённом сервере через SSH.
Требует API ключ для аутентификации, если переменная API_KEY задана.
Заголовки:
Content-Type: application/json
X-API-Key: your_api_key (если API_KEY задан)
Тело запроса:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
script_name |
string | Да | Имя скрипта для выполнения |
server_ip |
string | Да | IP-адрес удалённого сервера |
server_root_password |
string | Да | Пароль root для SSH |
additional |
string | Нет | Дополнительные параметры для скрипта (например, доменное имя) |
Пример запроса (с API ключом):
curl -X POST http://localhost:5000/api/install \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{
"script_name": "pocketbase",
"server_ip": "192.168.1.100",
"server_root_password": "your_password",
"additional": "example.com"
}'Успешный ответ:
{
"success": true,
"output": "...",
"error": null
}Ответ с ошибкой:
{
"success": false,
"output": "...",
"error": "SSH authentication failed. Please check the password."
}Получение статуса системы защиты.
Ответ:
{
"success": true,
"protection": {
"enabled": true,
"max_requests": 10,
"time_window_seconds": 60,
"blocked_ips_count": 2
}
}Получение списка заблокированных IP-адресов.
Ответ:
{
"success": true,
"count": 1,
"blocked_ips": [
{
"ip_address": "192.168.1.100",
"reason": "Rate limit exceeded: 11 requests in 60 seconds",
"blocked_at": "2024-01-15 12:30:45",
"blocked_until": "2024-01-15 13:30:45",
"is_permanent": 0
}
]
}Ручная блокировка IP-адреса.
Тело запроса:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
ip |
string | Да | IP-адрес для блокировки |
reason |
string | Нет | Причина блокировки |
permanent |
boolean | Нет | Постоянная блокировка (по умолчанию: false) |
duration_hours |
number | Нет | Длительность блокировки в часах (по умолчанию: 1) |
Пример запроса:
curl -X POST http://localhost:5000/api/protection/block \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{
"ip": "192.168.1.100",
"reason": "Suspicious activity",
"permanent": false,
"duration_hours": 24
}'Ответ:
{
"success": true,
"message": "IP 192.168.1.100 has been blocked"
}Разблокировка IP-адреса.
Тело запроса:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
ip |
string | Да | IP-адрес для разблокировки |
Пример запроса:
curl -X POST http://localhost:5000/api/protection/unblock \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{"ip": "192.168.1.100"}'Ответ:
{
"success": true,
"message": "IP 192.168.1.100 has been unblocked"
}Получение статистики запросов.
Параметры запроса:
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
ip |
string | Фильтр по IP-адресу | - |
limit |
number | Максимальное количество записей | 100 |
Пример запроса:
curl "http://localhost:5000/api/protection/stats?ip=192.168.1.100&limit=10" \
-H "X-API-Key: your_api_key"Ответ:
{
"success": true,
"count": 5,
"stats": [
{
"ip_address": "192.168.1.100",
"endpoint": "/api/install",
"timestamp": 1705323045.123,
"created_at": "2024-01-15 12:30:45"
}
]
}| Код | Описание |
|---|---|
| 200 | Успешный запрос |
| 400 | Неверный запрос (отсутствуют обязательные поля) |
| 401 | Требуется аутентификация (отсутствует или неверный API ключ) |
| 403 | Доступ запрещён |
| 404 | Ресурс не найден |
| 429 | Превышен лимит запросов (IP заблокирован) |
| 500 | Внутренняя ошибка сервера |
| 503 | Сервис недоступен (не установлена библиотека paramiko) |
Подробные требования к скриптам описаны в файле requirements_for_scripts_ru.md.
MIT
