121 lines
2.5 KiB
Bash
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}' создана успешно!" |