Portfolio/
│
├── .github/
│ └── workflows/
│ └── docker-deploy.yml # CI/CD: деплой Docker-контейнера
│
├── client/
│ ├── public/ # Статические файлы, доступные напрямую
│ │ └── vite.svg # Иконка vite
│ ├── src/ # Исходный код приложения
│ │ ├── assets/ # Статические ресурсы (изображения, шрифты)
│ │ │ ├── projects/
│ │ │ │ ├── project1.jpg # Изображение для портфолио (проект 1)
│ │ │ │ ├── project2.jpg # Изображение для портфолио (проект 2)
│ │ │ │ └── project3.jpg # Изображение для портфолио (проект 3)
│ │ │ └── resume-bg.jpg # Фоновое изображение (для стилизации)
│ │ ├── components/ # Переиспользуемые компоненты
│ │ │ └── ...
│ │ ├── pages/ # Страницы приложения
│ │ │ └── ...
│ │ ├── styles/ # Глобальные стили
│ │ │ └── index.css # Основные стили, темы, переменные
│ │ ├── utils/ # Утилиты и вспомогательные функции
│ │ │ ├── api.js # Функции для запросов к backend
│ │ │ └── pdfGenerator.js # Логика генерации PDF
│ │ ├── App.jsx # Главный компонент приложения
│ │ ├── i18n.js # Конфигурация i18next для мультиязычности
│ │ └── main.jsx # Точка входа для React
│ ├── .dockerignore # Исключения для сборки контейнера
│ ├── .env.sample # Пример файла с переменными окружения
│ ├── .prettierrc # Настройки Prettier для форматирования
│ ├── docker-compose.yml # Docker Compose конфигурация
│ ├── Dockerfile # Docker конфигурация
│ ├── eslint.config.json # Настройки ESLint для линтинга кода
│ ├── index.html # Точка входа, рендер React-приложения
│ ├── nginx.conf # Конфиг Nginx для продакшн-сервера
│ ├── package-lock.json
│ ├── package.json # Зависимости и скрипты проекта
│ ├── tailwind.config.js # Конфигурация Tailwind CSS
│ └── vite.config.js # Конфигурация Vite
│
│ ├── server/
│ │ ├── app/
│ │ │ ├── translations/
│ │ │ │ ├── cnr/ # Montenegrin
│ │ │ │ │ └── translation.json
│ │ │ │ ├── en/ # English
│ │ │ │ │ └── translation.json
│ │ │ │ ├── hr/ # Croatian
│ │ │ │ │ └── translation.json
│ │ │ │ ├── ru/ # Russian
│ │ │ │ │ └── translation.json
│ │ │ │ ├── sl/ # Slovenian
│ │ │ │ │ └── translation.json
│ │ │ │ ├── sr/ # Serbian
│ │ │ │ │ └── translation.json
│ │ │ │ └── uk/ # Ukrainian
│ │ │ │ └── translation.json
│ │ │ ├── __init.py__
│ │ │ └── main.py
│ │ ├── .dockerignore # Исключения для сборки контейнера
│ │ ├── .env.sample # Пример файла с переменными окружения
│ │ ├── docker-compose.yml # Docker Compose конфигурация
│ │ ├── Dockerfile # Docker конфигурация
│ │ └── requirements.txt # Python зависимости
│
├── .env.example # Пример файла переменных окружения для сервера
├── .gitignore # Git-игнорируемые файлы
├── docker-compose-server.yml # Пример Docker Compose конфигурации для сервера
└── README.md # Документация проектаСкопируйте .env.sample, переименуйте в .env и добавьте свои данные.
Заходим в папку server
cd serverСоздание
python -m venv venvpip install -r requirements.txtЗаходим в папку client, если вы в Portfolio
cd clientили если вы в папке server, то
cd ../clientnpm installЗаходим в папку server, если вы в Portfolio
cd serverили если вы в папке client, то
cd ../serverАктивация виртуального окружения
venv\Scripts\activate # Windowssource venv/bin/activate # Linux/macOSuvicorn app.main:app --reloadAPI будет доступно по адресу:
📍 http://localhost:8000
npm run devПриложение будет доступно по адресу:
📍 http://localhost:5173/
Доступны два способа:
-
Проверьте
.envиdocker-compose.ymlкаждого образа из папок/serverи/client -
Выполните сборку каждого образа из папок
/serverи/clientи пуш:
docker compose builddocker compose up -ddocker push <your-dockerhub>-
В файле
.github/workflows/docker-deploy.ymlуже всё готово -
Перейдите в:
GitHub → Settings → Secrets and variables → Actions -
Добавьте переменные окружения (как
VITE_API_URL,DOCKERHUB_USERNAMEи т.д.) -
При пуше в
mainветку произойдёт автоматическая сборка и публикация образа в DockerHub
На прод-сервере можете использовать docker-compose-server.yml. Скопируйте .env.example, переименуйте в .env и добавьте свои данные.
В папке client/src/assets/projects/ картинки должны называться строго по шаблону: project<ID>.jpg.
Пример из /server/app/translations/en/translation.json:
"portfolio": {
"projects": [
{
"id": "1", // будет использовать project1.jpg
...
},
{
"id": "2", // будет использовать project2.jpg
...
}
]
}
-
Создайте папку
server/app/translations/<код_языка> -
Скопируйте туда
translation.jsonизen -
Отредактируйте значения, сохранив структуру.
📌 Просмотр установленных зависимостей
pip list💾 Сохранение зависимостей
pip freeze > requirements.txt🗑 Удаление всех зависимостей
pip uninstall -y -r requirements.txt🧹 Удаление виртуального окружения venv
Get-ChildItem -Path . -Recurse -Directory -Filter "venv" | Remove-Item -Recurse -Force #windows🧹 Удаление кеша pycache
Get-ChildItem -Recurse -Directory -Include "__pycache__", ".mypy_cache", ".pytest_cache" | Remove-Item -Recurse -Force #windows
Get-ChildItem -Recurse -Include *.pyc | Remove-Item -Force #windowsnpm installnpm run buildnpm run lintnpm cache clean --forceGet-ChildItem -Path . -Recurse -Directory -Filter "node_modules" | Remove-Item -Recurse -Force #windows💡 Если у вас есть вопросы или предложения по улучшению проекта, создайте issue! 🚀