Wprowadzenie
Cześć! – – – Chcesz hostować pakiet local-ai-packaged (https://github.com/coleam00/local-ai-packaged) na publicznym serwerze pod domeną https://agencja-ai.com, aby każdy mógł korzystać z Twojego lokalnego środowiska AI? – – – Świetnie! – – – Ten artykuł to idiotoodporna instrukcja dla polskich użytkowników, którzy chcą skonfigurować serwer AI na Ubuntu z publicznym dostępem, używając Nginx Proxy Manager do zarządzania ruchem HTTPS i certyfikatami SSL. – – – Podam wszystkie komendy do wiersza poleceń, które możesz skopiować i wkleić, oraz szczegółowo opiszę konfigurację pliku .env dla środowiska publicznego. – – – Celem jest stworzenie bezpiecznego, łatwego w użyciu systemu, który zwiększy atrakcyjność Twoich instrukcji dla klientów w Polsce!
Dlaczego hostowanie na publicznym serwerze?
Publiczny dostęp: – – – Hostowanie na https://agencja-ai.com pozwala polskim użytkownikom korzystać z usług takich jak Supabase, n8n, Flowise czy Open WebUI przez przeglądarkę, co jest idealne do prezentacji i sprzedaży.
Bezpieczeństwo: – – – Nginx Proxy Manager zapewnia certyfikaty SSL, a konfiguracja –environment public ogranicza otwarte porty do 80 i 443, zwiększając bezpieczeństwo.
Polski kontekst: – – – Instrukcje są po polsku, z gotowymi komendami, co ułatwia polskim firmom wdrożenie własnych serwerów AI.
Krok po kroku: Instalacja local-ai-packaged na publicznym serwerze
1. Przygotowanie serwera Ubuntu
Zakładam, że masz serwer Ubuntu (np. 22.04 lub 24.04) z publicznym adresem IP i domeną agencja-ai.com skonfigurowaną w DNS (rekordy A wskazujące na IP serwera).
Zaloguj się na serwer przez SSH:
ssh <your-username>@<your-server-ip>Zaktualizuj system i zainstaluj podstawowe narzędzia:
sudo apt update
sudo apt install -y git curl jq openssl python3-pip nano2. Instalacja Dockera
Zainstaluj Docker i Docker Compose:
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start dockerDodaj swojego użytkownika do grupy docker:
sudo usermod -aG docker $USERWyloguj się i zaloguj ponownie:
exit
ssh <your-username>@<your-server-ip>3. Instalacja Nginx Proxy Manager
Nginx Proxy Manager zarządza ruchem HTTPS i certyfikatami SSL. Zainstaluj go w Dockerze:
mkdir ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
nano docker-compose.ymlWklej poniższy kod:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm-password"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'yobasystems/alpine-mariadb:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm-root-password'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm-password'
volumes:
- ./data/mysql:/var/lib/mysqlZapisz (Ctrl+O, Enter, Ctrl+X) i uruchom:
docker compose up -dDostęp do panelu Nginx Proxy Manager:
http://<your-server-ip>:81Zaloguj się (domyślne dane: admin@example.com, hasło: changeme). Zmień hasło przy pierwszym logowaniu.
4. Konfiguracja DNS
Upewnij się, że subdomeny wskazują na IP serwera. Dodaj rekordy A w panelu zarządzania domeną agencja-ai.com:
Subdomena | Typ | Wartość |
|---|---|---|
n8n.agencja-ai.com | A |
|
openwebui.agencja-ai.com | A |
|
flowise.agencja-ai.com | A |
|
supabase.agencja-ai.com | A |
|
langfuse.agencja-ai.com | A |
|
Sprawdź DNS:
dig n8n.agencja-ai.com5. Klonowanie repozytorium local-ai-packaged
Sklonuj repozytorium:
cd ~
git clone -b stable https://github.com/coleam00/local-ai-packaged.git
cd local-ai-packaged6. Konfiguracja pliku .env
Skopiuj przykładowy plik .env:
cp .env.example .env
nano .envWygeneruj bezpieczne klucze i hasła:
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
N8N_USER_MANAGEMENT_JWT_SECRET=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$(openssl rand -hex 32)
JWT_SECRET=$(openssl rand -hex 32)
ANON_KEY=$(openssl rand -hex 32)
SERVICE_ROLE_KEY=$(openssl rand -hex 32)
DASHBOARD_PASSWORD=$(openssl rand -hex 16)
POOLER_TENANT_ID=agencja-ai-$(openssl rand -hex 8)
NEO4J_AUTH=neo4j/$(openssl rand -hex 16)
CLICKHOUSE_PASSWORD=$(openssl rand -hex 32)
MINIO_ROOT_PASSWORD=$(openssl rand -hex 32)
LANGFUSE_SALT=$(openssl rand -hex 32)
NEXTAUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
FLOWISE_PASSWORD=$(openssl rand -hex 16)
LOGFLARE_PUBLIC_ACCESS_TOKEN=$(openssl rand -hex 32)
LOGFLARE_PRIVATE_ACCESS_TOKEN=$(openssl rand -hex 32)
VAULT_ENC_KEY=$(openssl rand -hex 32)Wklej poniższy plik .env, zastępując wartości wygenerowanymi kluczami:
############
# N8N Configuration
############
N8N_ENCRYPTION_KEY=your-generated-n8n-encryption-key
N8N_USER_MANAGEMENT_JWT_SECRET=your-generated-n8n-jwt-secret
############
# Supabase Secrets
############
POSTGRES_PASSWORD=your-generated-postgres-password
JWT_SECRET=your-generated-jwt-secret
ANON_KEY=your-generated-anon-key
SERVICE_ROLE_KEY=your-generated-service-role-key
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=your-generated-dashboard-password
POOLER_TENANT_ID=your-generated-tenant-id
############
# Neo4j Secrets
############
NEO4J_AUTH=neo4j/your-generated-neo4j-password
############
# Langfuse Credentials
############
CLICKHOUSE_PASSWORD=your-generated-clickhouse-password
MINIO_ROOT_PASSWORD=your-generated-minio-password
LANGFUSE_SALT=your-generated-langfuse-salt
NEXTAUTH_SECRET=your-generated-nextauth-secret
ENCRYPTION_KEY=your-generated-encryption-key
############
# Caddy Config
############
N8N_HOSTNAME=n8n.agencja-ai.com
WEBUI_HOSTNAME=openwebui.agencja-ai.com
FLOWISE_HOSTNAME=flowise.agencja-ai.com
SUPABASE_HOSTNAME=supabase.agencja-ai.com
LANGFUSE_HOSTNAME=langfuse.agencja-ai.com
LETSENCRYPT_EMAIL=admin@agencja-ai.com
############
# Flowise Configuration
############
FLOWISE_USERNAME=admin
FLOWISE_PASSWORD=your-generated-flowise-password
############
# Database
############
POSTGRES_HOST=db
POSTGRES_DB=postgres
POSTGRES_PORT=5432
POSTGRES_USER=postgres
############
# Supavisor
############
POOLER_PROXY_PORT_TRANSACTION=6543
POOLER_DEFAULT_POOL_SIZE=20
POOLER_MAX_CLIENT_CONN=100
SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
VAULT_ENC_KEY=your-generated-vault-enc-key
POOLER_DB_POOL_SIZE=5
############
# API Proxy
############
KONG_HTTP_PORT=8000
KONG_HTTPS_PORT=8443
############
# API
############
PGRST_DB_SCHEMAS=public,storage,graphql_public
############
# Auth
############
SITE_URL=https://supabase.agencja-ai.com
ADDITIONAL_REDIRECT_URLS=https://n8n.agencja-ai.com,https://openwebui.agencja-ai.com,https://flowise.agencja-ai.com,https://langfuse.agencja-ai.com
JWT_EXPIRY=3600
DISABLE_SIGNUP=false
API_EXTERNAL_URL=https://supabase.agencja-ai.com
## Mailer Config
MAILER_URLPATHS_CONFIRMATION=/auth/v1/verify
MAILER_URLPATHS_INVITE=/auth/v1/verify
MAILER_URLPATHS_RECOVERY=/auth/v1/verify
MAILER_URLPATHS_EMAIL_CHANGE=/auth/v1/verify
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true
SMTP_ADMIN_EMAIL=admin@agencja-ai.com
SMTP_HOST=email-smtp.<region>.amazonaws.com
SMTP_PORT=587
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-password
SMTP_SENDER_NAME=Agencja AI
ENABLE_ANONYMOUS_USERS=false
ENABLE_PHONE_SIGNUP=true
ENABLE_PHONE_AUTOCONFIRM=true
############
# Studio
############
STUDIO_DEFAULT_ORGANIZATION=Agencja AI
STUDIO_DEFAULT_PROJECT=Main Project
STUDIO_PORT=3000
SUPABASE_PUBLIC_URL=https://supabase.agencja-ai.com
IMGPROXY_ENABLE_WEBP_DETECTION=true
############
# Functions
############
FUNCTIONS_VERIFY_JWT=false
############
# Logs
############
LOGFLARE_PUBLIC_ACCESS_TOKEN=your-generated-logflare-public-key
LOGFLARE_PRIVATE_ACCESS_TOKEN=your-generated-logflare-private-key
DOCKER_SOCKET_LOCATION=/var/run/docker.sockZapisz (Ctrl+O, Enter, Ctrl+X).
Uwagi:
SMTP: Skonfiguruj serwer SMTP (np. AWS SES). Zastąp your-smtp-user i your-smtp-password rzeczywistymi danymi.
Caddy Config: Subdomeny (n8n.agencja-ai.com, itp.) muszą zgadzać się z DNS. LETSENCRYPT_EMAIL to prawdziwy adres e-mail dla certyfikatów SSL.
Ollama i SearXNG: Nie eksponujemy ich publicznie, bo nie są domyślnie zabezpieczone.
7. Konfiguracja Nginx Proxy Manager
Dodaj hosty proxy w panelu Nginx Proxy Manager (http://<your-server-ip>:81):
# Przykład dla n8n
Subdomena: n8n.agencja-ai.com
IP: <your-server-ip>
Port: 5678
SSL: Włącz (użyj Let’s Encrypt)
# Powtórz dla:
# openwebui.agencja-ai.com (port 3000)
# flowise.agencja-ai.com (port 3001)
# supabase.agencja-ai.com (port 8000)
# langfuse.agencja-ai.com (port 3002)8. Konfiguracja firewalla
Otwórz tylko porty 80, 443 i 22 (SSH):
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status9. Uruchomienie usług
Zainstaluj zależności Pythona:
pip3 install dockerUruchom usługi w trybie publicznym:
python3 start_services.py --profile cpu --environment publicSprawdź status usług:
docker compose ps10. Weryfikacja
Sprawdź dostęp do usług:
n8n: https://n8n.agencja-ai.com
Open WebUI: https://openwebui.agencja-ai.com
Flowise: https://flowise.agencja-ai.com
Supabase Studio: https://supabase.agencja-ai.com
Langfuse: https://langfuse.agencja-ai.com
Sprawdź logi w razie problemów:
docker compose logsNajlepsze praktyki
Bezpieczeństwo: – – – Nigdy nie udostępniaj pliku .env. Używaj menedżera haseł.
DNS: – – – Regularnie sprawdzaj rekordy DNS (dig n8n.agencja-ai.com).
Kopia zapasowa: – – – Twórz kopie bazy Supabase:
docker compose exec db pg_dump -U postgres postgres > backup.sqlMonitorowanie: – – – Sprawdzaj logi usług:
docker compose logs supabase
docker compose logs n8nRozwiązywanie problemów
Brak dostępu do subdomen: – – – Sprawdź DNS:
dig n8n.agencja-ai.comBłędy SSL: – – – Upewnij się, że Nginx Proxy Manager ma ważny certyfikat.
Usługi nie działają: – – – Sprawdź status:
docker compose psBłąd Supabase: – – – Usuń folder danych i uruchom ponownie:
rm -rf supabase/docker/volumes/db/data
python3 start_services.py --profile cpu --environment publicPodsumowanie
Skonfigurowałeś local-ai-packaged na publicznym serwerze pod https://agencja-ai.com z Nginx Proxy Manager, zapewniając bezpieczny dostęp przez HTTPS. – – – Twoje instrukcje są teraz gotowe do sprzedaży polskim klientom, którzy chcą własnych serwerów AI. – – – Możesz teraz dodać chatbota RAG lub wzbogacić system o dane użytkowników, jak w poprzednich artykułach. – – – Co dalej? Może demo chatbota na Twojej stronie? 😄