Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ofpinewood/pineblog
A light-weight blogging engine written in ASP.NET Core MVC Razor Pages, using Entity Framework Core or MongoDb.
https://github.com/ofpinewood/pineblog
aspnetcore blog blogging-engine entity-framework mongodb mvc-razor-pages
Last synced: about 2 months ago
JSON representation
A light-weight blogging engine written in ASP.NET Core MVC Razor Pages, using Entity Framework Core or MongoDb.
- Host: GitHub
- URL: https://github.com/ofpinewood/pineblog
- Owner: ofpinewood
- License: mit
- Created: 2019-07-10T08:00:21.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-07-05T09:33:03.000Z (6 months ago)
- Last Synced: 2024-10-07T19:37:21.882Z (3 months ago)
- Topics: aspnetcore, blog, blogging-engine, entity-framework, mongodb, mvc-razor-pages
- Language: C#
- Homepage:
- Size: 8.83 MB
- Stars: 64
- Watchers: 9
- Forks: 11
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# PineBlog
[![Build Status](https://dev.azure.com/ofpinewood/GitHub/_apis/build/status/ofpinewood.pineblog?branchName=main)](https://dev.azure.com/ofpinewood/GitHub/_build/latest?definitionId=14&branchName=main)
[![NuGet Badge](https://img.shields.io/nuget/v/Opw.PineBlog.svg)](https://www.nuget.org/packages/Opw.PineBlog/)
[![License: MIT](https://img.shields.io/github/license/ofpinewood/pineblog.svg)](https://github.com/ofpinewood/pineblog/blob/main/LICENSE)PineBlog is a light-weight blogging engine written in ASP.NET Core MVC Razor Pages, using Entity Framework Core or MongoDb. It is highly extendable, customizable and easy to integrate in an existing web application.
![PineBlog screenshot](docs/screenshot.png)
### Features
- Markdown post editor ([SimpleMDE](https://simplemde.com/))
- File management
- Light-weight using Razor Pages
- SEO optimized
- Open Graph protocol
- RSS and ATOM feeds
- Basic search
- Clean Architecture (youtube: [Clean Architecture with ASP.NET Core](https://youtu.be/_lwCVE_XgqI))
- Entity Framework Core, SQL database
- or MongoDb ([MongoDB.Driver](https://www.nuget.org/packages/mongodb.driver))
- Azure Blob Storage, for file storage
- ..only a blogging engine, nothing else..> More about the features: [features](https://github.com/ofpinewood/pineblog/tree/main/docs/features.md)
### What is not included
Because PineBlog is very light-weight it is not a complete web application, it needs to be integrated in an existing web application or you need to create a basic web application for it. There are a few things PineBlog depends on, but that it does not provide.- Authentication and authorization
> **Note:** The admin pages require that authentication/authorization has been setup in your website, the admin area has a `AuthorizeFilter` with the default policy set to all pages in that area folder.
## Where can I get it?
You can install the [Opw.PineBlog](https://www.nuget.org/packages/Opw.PineBlog/) metapackage from the console.``` cmd
> dotnet add package Opw.PineBlog
```The Opw.PineBlog metapackage includes the following packages.
- **Opw.PineBlog.EntityFrameworkCore package**
The PineBlog data provider that uses Entity Framework Core.
[![NuGet Badge](https://img.shields.io/nuget/v/Opw.PineBlog.EntityFrameworkCore.svg)](https://www.nuget.org/packages/Opw.PineBlog.EntityFrameworkCore/)- **Opw.PineBlog.RazorPages package**
The PineBlog UI using ASP.NET Core MVC Razor Pages.
[![NuGet Badge](https://img.shields.io/nuget/v/Opw.PineBlog.RazorPages.svg)](https://www.nuget.org/packages/Opw.PineBlog.RazorPages/)- **Opw.PineBlog.Core package**
The PineBlog core package. This package is a dependency for `Opw.PineBlog.RazorPages` and `Opw.PineBlog.EntityFrameworkCore`.
[![NuGet Badge](https://img.shields.io/nuget/v/Opw.PineBlog.Core.svg)](https://www.nuget.org/packages/Opw.PineBlog.Core/)> For using MongoDb, see [Using MongoDb](https://github.com/ofpinewood/pineblog/tree/main/docs/mongodb.md) on how to setup that.
## Getting started
You add the PineBlog services and the Razor Pages UI in the Startup.cs of your application.``` csharp
public void ConfigureServices(IServiceCollection services)
{
...
services.AddPineBlog(Configuration);services.AddRazorPages().AddPineBlogRazorPages();
// or services.AddMvcCore().AddPineBlogRazorPages();
// or services.AddMvc().AddPineBlogRazorPages();
...
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{// Make sure you enable static file serving
app.UseStaticFiles();...
app.UseEndpoints(endpoints =>
{
// make sure to add the endpoint mapping for both RazorPages and Controllers
endpoints.MapRazorPages();
endpoints.MapControllers();
});
...
}
```NOTE: Make sure you enable static file serving `app.UseStaticFiles();`, to enable the serving of the css and javascript from the `Opw.PineBlog.RazorPages` packages.
See [Customizing the layout](https://github.com/ofpinewood/pineblog/tree/main/docs/custom-layout.md) on how to setup the layout pages, css and javascript.
### Configuration
And a few properties need to be configured before you can run your web application with PineBlog.``` json
{
"ConnectionStrings": {
"DefaultConnection": "Server=inMemory; Database=pineblog-db;"
},
"PineBlogOptions": {
"Title": "PineBlog",
"Description": "A blogging engine based on ASP.NET Core MVC Razor Pages and Entity Framework Core",
"ItemsPerPage": 5,
"CreateAndSeedDatabases": true,
"ConnectionStringName": "DefaultConnection",
"AzureStorageConnectionString": "UseDevelopmentStorage=true",
"AzureStorageBlobContainerName": "pineblog",
"FileBaseUrl": "http://127.0.0.1:10000/devstoreaccount1"
}
}
```#### Blog Settings ConfigurationProvider
To be able to update the blog settings from the admin pages, you need to add the PineBlog `IConfigurationProvider`s to the
`IConfigurationBuilder` in the `Program.cs`. Add `config.AddPineBlogEntityFrameworkCoreConfiguration(reloadOnChange: true);` to `ConfigureAppConfiguration(..)` on the `IWebHostBuilder`.``` csharp
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureAppConfiguration((hostingContext, config) => {
config.AddPineBlogEntityFrameworkCoreConfiguration(reloadOnChange: true);
});
```## Documentation
For more information, please check the documentation.- [Getting started](https://github.com/ofpinewood/pineblog/tree/main/docs/getting-started.md)
- [Customizing the layout](https://github.com/ofpinewood/pineblog/tree/main/docs/custom-layout.md)
- [Features](https://github.com/ofpinewood/pineblog/tree/main/docs/features.md)For technical background information, check the blog: [ofpinewood.com](https://ofpinewood.com/Blog?category=pineblog).
## Samples
- The [sample project](https://github.com/ofpinewood/pineblog/tree/main/samples/Opw.PineBlog.Sample) contains an example web application with PineBlog.
- The [NuGet sample project](https://github.com/ofpinewood/pineblog/tree/main/samples/Opw.PineBlog.Sample.NuGet) contains an example web application using just the NuGet packages.**Check the code** :nerd_face:
## Usage
PineBlog is used on the following website:
- [ofpinewood.com](https://ofpinewood.com)## Contributing
We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content.* [Contributing](https://github.com/ofpinewood/pineblog/blob/main/CONTRIBUTING.md)
* [Code of conduct](https://github.com/ofpinewood/pineblog/blob/main/CODE_OF_CONDUCT.md)---
Copyright © 2024, [Of Pine Wood](http://ofpinewood.com).
Created by [Peter van den Hout](http://ofpinewood.com).
Released under the terms of the [MIT license](https://github.com/ofpinewood/pineblog/blob/main/LICENSE).