Движок для сайтов с функциональностью форума, статей, блогов.
Версия: 1.0.0-beta.11
Демо: demo.sunengine.site
- Asp.Net Core 2.2
- Linq2db - доступ к базе данных
- FluentMigrator - миграции
- VueJs - SPA клиентская часть
- Quasar Framework - компоненты vue
- База данных - любая совместимая с Linq2db и FluentMigrator
- Статьи
- Форум
- Блоги
- Одностраничное приложение c красивым интерфейсом
- Mobile ready
- Красивый код, который я постоянно улучшаю и совершенствую.
- Если что-то ещё в плане кода не настолько красиво как могло бы быть, принимается обратная связь.
- Быстрый доступ к данным на основе linq2db.
- Приложение грузит только то что нужно, без запроса всех данных при каждом запросе. SPA.
- Эффективное кэширование
Можно настроить для любой группы пользователей для любого раздела сайта (категории) права на доступ на конкретные операции (добавлять материалы, добавлять комментарии, редактировать и тд.)
- Дмитрий Полянин
- Telegram: @okeanij
- Группа проекта в Telegram: https://t.me/SunEngine
- .Net Core 2.2 SDK
- NodeJs
- Npm
- Quasar cli
npm install -g @quasar/cli
- Клонировать репозиторий SunEngine с GitHub.
- По умолчанию стоит база SQLite (файл:
SunEngine/SunEngine.db
) - Скомпилировать solution.
- Зайти в директорию куда скомпилировался код
/SunEngine/SunEngine/bin/Debug/netcoreapp2.2/
- Заполнить базу
dotnet SunEngine.dll migrate init seed
- Запускаем сервер
dotnet SunEngine.dll server
- Компилируем и запускаем клиентскую часть.
- Зайти в консоль в директорию
SunEngine/Client
npm install
- инсталлируем все npm модулиquasar dev
- запускаем клиент в dev режиме- Откроется браузер с сайтом
- Зайти в консоль в директорию
- Если что-то не работает написать сюда в Issue, или Telegram группу.
Commands:
server host server api with kestrel
config:<path> path to config directory, if none "Config" is default
migrate make initial database table structure and migrations in existing database
init initialize users, roles and categories tables from config directory
version print SunEngine version
help show this help
Seed test data commands:
seed:<CatName>:<X>:<Y> seed category and all subcategories with materials and comments
CatName - category name, 'Root' if skipped
X - materials count, default if skipped
Y - comments count, default if skipped
append-cat-name add category name to material titles on 'seed'
Examples:
dotnet SunEngine.dll server
dotnet SunEngine.dll server config:local.Config.MySite
dotnet SunEngine.dll migrate init seed append-cat-name
dotnet SunEngine.dll seed:Forum:10:10
Директории с конфигами должны содержать в названии токен 'Config'
.
Примеры: local.Config
, local.Config.MySite
, Config.MySite
.
Все файлы и дирректории с префиксом local.
настроены в .gitignore
и не идут в коммиты.
- База данных: любая совместимая с Linq2db (список) и FluentMigrator (список)
- Протестировано с MySql, Postgres, SqLite
- Если база MySql, Postgres или SqLite
- Если база другая дополнительно:
- Подключить необходимые NuGet пакеты для работы FluentMigrator и Linq2db с этими базами.
- В проекте
SunEngine.Migrations
в файлеDbProvider.cs
->AddDb
прописать базу.
- Собрать проект через
build.sh
. - Появится директория
/SunEngine/SunEngine/Build
- Записать на сервер
- Для удобства записи на сервер можно использовать скрипт
publishExample.sh
, этот скрипт необходимо отредактировать и настроить под свой сервер - Обратите внимание, что при запуске
build.sh
из выходной директории убираются все файлы конфигурации, что бы они не затёрли уже существующие на сервере. - Записать и настроить файлы конфигурации на сервер (делается один раз при первой записи проекта на сервер, далее менять уже на сервере при изменении настроек)
- Папка
Config
из корневой директории проекта, аналогично/SunEngine/SunEngine/Config
- Файл
/wwwroot/config.js
аналогично/Client/config.js
- Папка
Серверная и клиентская части запускаются на разных endpoint-ах, например клиентская часть mysite.site
, серверная часть mysite.site/api
.
server {
listen 80;
server_name mysite.site;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
location / { # Endpoint для клиентской части
root /site/mysite/wwwroot;
try_files $uri $uri/ /index.html; # если файл не найден - возвращаем index.html
}
location /api/ { # Endpoint для серверной части. Работает как reverse proxy отправляя запросы в Kestrel работающий отдельным процессом.
proxy_pass http://localhost:5020/;
client_max_body_size 11M; # максимальный размер тела запроса, котрый допускает Nginx ~= максимальный размер для upload файла
}
}
Теперь необходимо запустить отдельным процессом kestrel сервис по локальному адресу http://localhost:5020
Как это делается читаем статью.