Files
links/.history/setup_20250505081639.sh
2025-05-06 20:44:33 +09:00

121 lines
2.5 KiB
Bash

#!/usr/bin/env bash
set -e
# Переменные
PROJECT_NAME="linktr_clone"
BACKEND_DIR="backend"
FRONTEND_DIR="frontend"
APPS=("users" "links" "customization")
# Создание корневой папки
mkdir -p $PROJECT_NAME && cd $PROJECT_NAME
# Инициализация Git
git init
cat > .gitignore << 'EOF'
__pycache__/
*.pyc
.env
media/
node_modules/
dist/
EOF
# Создание README и .env.example
cat > README.md << 'EOF'
# Клон Linktr.ee на Django
Описание и инструкции по разработке.
EOF
cp /dev/null .env.example
# Создание Makefile
cat << 'EOF' > Makefile
up:
@docker-compose up -d --build
down:
@docker-compose down
migrate:
@docker-compose exec web python manage.py migrate
test:
@docker-compose exec web pytest --maxfail=1 --disable-warnings -q
EOF
# Создание docker-compose.yml и настройка
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
web:
build: ./backend
command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./backend:/app
- media_volume:/app/media
env_file:
- .env.example
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- .env.example
volumes:
postgres_data:
media_volume:
EOF
# Backend: Django-проект
mkdir -p $BACKEND_DIR && cd $BACKEND_DIR
python -m .venv venv
source venv/bin/activate
pip install Django psycopg2-binary djangorestframework pillow django-tailwind whitenoise gunicorn
django-admin startproject config .
# Создание приложений
for app in "${APPS[@]}"; do
python manage.py startapp $app
done
# Создание requirements.txt
pip freeze > requirements.txt
deactivate
cd ..
# Frontend: инициализация NPM-проекта
mkdir -p $FRONTEND_DIR && cd $FRONTEND_DIR
npm init -y
npm install axios react react-dom
mkdir public src src/components src/pages src/services src/styles
cat > public/index.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Linktr Clone</title>
</head>
<body>
<div id="root"></div>
<script src="../src/index.js"></script>
</body>
</html>
EOF
cat > src/index.js << 'EOF'
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(<h1>Linktr Clone</h1>, document.getElementById('root'));
EOF
cd ..
echo "Структура проекта '${PROJECT_NAME}' создана успешно!"