diff --git a/docker-compose.yml b/docker-compose.yml index d690a19..c3499db 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,6 +22,8 @@ services: env_file: - .env restart: unless-stopped + ports: + - "5432:5432" frontend: build: ./frontend/linktree-frontend diff --git a/scripts/fix-frontend-api-url.sh b/scripts/fix-frontend-api-url.sh new file mode 100755 index 0000000..8d8aa2a --- /dev/null +++ b/scripts/fix-frontend-api-url.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# scripts/fix-frontend-api-url.sh - Исправление API URL для frontend + +echo "🔧 Исправление NEXT_PUBLIC_API_URL для frontend" +echo "==============================================" + +# Проверяем текущие переменные в frontend контейнере +echo "📋 Текущие переменные в frontend контейнере:" +docker exec links-frontend-1 env | grep NEXT_PUBLIC || echo "NEXT_PUBLIC_API_URL не найден!" + +echo "" +echo "🛠️ Остановка контейнеров..." +docker compose down + +echo "" +echo "📝 Создание правильного .env файла..." +cat > .env << 'EOF' +# Django настройки +DJANGO_SECRET_KEY=lskjflSDJHFdSFYU7TYOREIFLUDJKFBNKLJSDHFP9Q234856QT80OUAEIYDWSF9PQ28345701784QRTEOYAGWDFLSBAPWO9I485Y +DJANGO_DEBUG=False +DJANGO_ALLOWED_HOSTS=links.shareon.kr,sharon.kr,localhost,127.0.0.1 + +# База данных PostgreSQL +DATABASE_ENGINE=django.db.backends.postgresql +DATABASE_NAME=links_db +DATABASE_USER=links_user +DATABASE_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{ +DATABASE_HOST=db +DATABASE_PORT=5432 + +# PostgreSQL настройки для контейнера +POSTGRES_DB=links_db +POSTGRES_USER=links_user +POSTGRES_PASSWORD=links_OASDUIFH90324*ftye(guBJ;O234789SDgfu{ + +# Frontend настройки (КРИТИЧЕСКИ ВАЖНО!) +NEXT_PUBLIC_API_URL=http://links.shareon.kr + +# Для продакшена +DJANGO_SECURE_SSL_REDIRECT=False +DJANGO_SECURE_HSTS_SECONDS=31536000 +DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=True +DJANGO_SECURE_HSTS_PRELOAD=True +EOF + +echo "" +echo "🗄️ Удаление старого volume БД (если нужно)..." +docker volume rm links_postgres_data 2>/dev/null || echo "Volume не найден или используется" + +echo "" +echo "🏗️ Полная пересборка контейнеров (особенно frontend!)..." +docker compose -f docker-compose.yml -f docker-compose.prod.yml build --no-cache + +echo "" +echo "🚀 Запуск контейнеров..." +docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d + +echo "" +echo "⏳ Ожидание запуска БД..." +sleep 15 + +echo "" +echo "🗄️ Выполнение миграций..." +docker compose exec web python manage.py migrate + +echo "" +echo "✅ Проверка переменных в новом frontend контейнере:" +docker exec links-frontend-1 env | grep NEXT_PUBLIC + +echo "" +echo "🧪 Тестирование API:" +curl -I http://links.shareon.kr/api/ || echo "API недоступно" + +echo "" +echo "✅ Готово! Проверьте логин на сайте:" +echo " http://links.shareon.kr/auth/login" +echo "" +echo "💡 Если проблема остается, очистите кэш браузера (Ctrl+F5)" \ No newline at end of file diff --git a/scripts/production-server-setup.sh b/scripts/production-server-setup.sh new file mode 100755 index 0000000..5b7cf5d --- /dev/null +++ b/scripts/production-server-setup.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# scripts/production-server-setup.sh - Настройка сервера для продакшена + +set -e + +echo "🚀 Настройка сервера для CatLink (продакшен)" +echo "=============================================" + +# Цвета для вывода +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +echo -e "${BLUE}1. Обновление системы${NC}" +echo "---------------------" +sudo apt update && sudo apt upgrade -y + +echo -e "${BLUE}2. Установка базовых пакетов${NC}" +echo "----------------------------" +sudo apt install -y \ + curl \ + wget \ + git \ + htop \ + iotop \ + unzip \ + software-properties-common \ + apt-transport-https \ + ca-certificates \ + gnupg \ + lsb-release \ + ufw + +echo -e "${BLUE}3. Настройка firewall (UFW)${NC}" +echo "----------------------------" +sudo ufw default deny incoming +sudo ufw default allow outgoing +sudo ufw allow ssh +sudo ufw allow 80 +sudo ufw allow 443 +sudo ufw --force enable +sudo ufw status + +echo -e "${BLUE}4. Установка Docker${NC}" +echo "-------------------" +# Удаление старых версий +sudo apt remove -y docker docker-engine docker.io containerd runc || true + +# Добавление репозитория Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# Установка Docker +sudo apt update +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +# Добавление пользователя в группу docker +sudo usermod -aG docker $USER + +# Запуск Docker +sudo systemctl enable docker +sudo systemctl start docker + +echo -e "${BLUE}5. Установка Nginx${NC}" +echo "------------------" +sudo apt install -y nginx +sudo systemctl enable nginx +sudo systemctl start nginx + +echo -e "${BLUE}6. Установка Certbot${NC}" +echo "-------------------" +sudo apt install -y certbot python3-certbot-nginx + +echo -e "${BLUE}7. Создание директорий для проекта${NC}" +echo "-----------------------------------" +sudo mkdir -p /opt/links +sudo chown $USER:$USER /opt/links + +echo -e "${BLUE}8. Клонирование репозитория${NC}" +echo "-----------------------------" +cd /opt +if [ ! -d "links" ]; then + git clone https://github.com/smartsoltech/links.git + cd links +else + cd links + git pull +fi + +echo -e "${BLUE}9. Настройка swap (если нужно)${NC}" +echo "------------------------------" +if [ $(free | grep Swap | awk '{print $2}') -eq 0 ]; then + echo "Создание swap файла 2GB..." + sudo fallocate -l 2G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab + echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf +fi + +echo -e "${BLUE}10. Настройка логирования${NC}" +echo "----------------------------" +# Настройка logrotate для docker +sudo tee /etc/logrotate.d/docker > /dev/null << 'EOF' +/var/lib/docker/containers/*/*.log { + rotate 7 + daily + compress + size=1M + missingok + delaycompress + copytruncate +} +EOF + +echo -e "${BLUE}11. Оптимизация производительности${NC}" +echo "------------------------------------" +# Настройка sysctl для веб-сервера +sudo tee -a /etc/sysctl.conf > /dev/null << 'EOF' + +# Network optimizations +net.core.somaxconn = 65535 +net.core.netdev_max_backlog = 5000 +net.ipv4.tcp_fin_timeout = 30 +net.ipv4.tcp_keepalive_time = 1200 +net.ipv4.tcp_max_syn_backlog = 8192 +net.ipv4.tcp_max_tw_buckets = 5000 +net.ipv4.tcp_syncookies = 1 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.ip_local_port_range = 1024 65535 + +# File system optimizations +fs.file-max = 65535 +EOF + +sudo sysctl -p + +echo -e "${GREEN}✅ Сервер готов для развертывания CatLink!${NC}" +echo "" +echo -e "${YELLOW}📝 Следующие шаги:${NC}" +echo "1. Выйдите и войдите заново (для применения docker group)" +echo "2. Настройте DNS записи для вашего домена" +echo "3. Запустите: cd /opt/links && make fix-production" +echo "4. Получите SSL сертификат: make ssl-cert" +echo "" +echo -e "${BLUE}🔍 Проверка установки:${NC}" +echo "- Docker: $(docker --version)" +echo "- Docker Compose: $(docker compose version)" +echo "- Nginx: $(nginx -v 2>&1)" +echo "- Certbot: $(certbot --version 2>&1 | head -1)" +echo "" +echo -e "${GREEN}🎉 Сервер готов!${NC}" \ No newline at end of file