πŸŒ• Moonglade

Build Status Docker Build and Push

The .NET Core blog system of edi.wang that runs on Microsoft Azure. Enabling most common blogging features including Posts, Comments, Categories, Archive, Tags, Pages and Friendlink.

image

πŸ“¦ Deployment

☁ Full Deploy on Azure (Recommend)

This is the way https://edi.wang is deployed, by taking advantage of as many Azure services as possible, the blog can run very fast and secure with only ~$300 USD/month.

It is recommended to use stable code from Release rather than master branch.

This diagram shows a recommended full feature Azure deployment for Moonglade. It doesn’t come out of the box. Although the ./Deployment/AzureAppServiceDeploy.ps1 can cover a part of it, you have to manually setup every other piece of it.

image

πŸ‹ Quick Deploy on Azure with/out Docker

Follow instructions here

🐧 Quick Deploy on Linux

To quickly get it running on a new Linux machine without Docker, follow instructions here.

🐡 Development

Tools Alternative
.NET Core 3.1 SDK N/A
Visual Studio 2019 Visual Studio Code
SQL Server 2019 / LocalDB N/A

πŸ’Ύ Setup Database

Create an SQL Server 2019 LocalDB database. e.g. moonglade

Update the MoongladeDatabase with your database connection string in appsettings.Development.json or set environment variable: ConnectionStrings__MoongladeDatabase to your connection string.

Example

"MoongladeDatabase": "Server=(localdb)\\MSSQLLocalDB;Database=moonglade;Trusted_Connection=True;"

For Azure App Service, you can set the connection string in the Configuration blade.

πŸ”¨ Build Source

Build and run ./src/Moonglade.sln

βš™ Configuration

This section discuss system settings in appsettings.[env].json. For blog settings, please use β€œ/admin/settings” UI.

For production, it is strongly recommended to use Environment Variables over appsetting.json file.

πŸ›‘ Authentication

Azure Active Directory

See Wiki document

Local Account (Alternative)

Set Authentication:Provider to "Local". You can manage accounts in /admin/settings/account

πŸ–Ό Image Storage

AppSettings:ImageStorage controls how blog post images are stored.

Azure Blob Storage (Preferred)

You need to create an Azure Blob Storage with container level permission.

"Provider": "azurestorage"
"AzureStorageSettings": {
  "ConnectionString": "YOUR CONNECTION STRING",
  "ContainerName": "YOUR CONTAINER NAME"
}

When configured the image storage to use Azure Blob, you can take advantage of CDN for your image resources. Set GetImageByCDNRedirect to true, the blog will get images from client browser using a 302 redirect.

"CDNSettings": {
    "EnableCDNRedirect": true,
    "CDNEndpoint": "https://yourendpoint.azureedge.net/moonglade-images"
}

You can also choose File System for image storage, but this will make your site root not read-only, which would be a potential security issue. And it will be harder for you to backup or update the website.

"Provider": "filesystem",
"FileSystemSettings": {
  "Path": "${basedir}\\UploadedImages"
}

The Path can be relative or absolute. "$\{basedir\}" represents the website’s current directory.

Minio Blob Storage (Free)

You need to hava an Minio Server.

"Provider": "miniostorage"
"MinioStorageSettings": {
  "EndPoint": "Minio Server Endpoint(eg:localhost:9600)",
  "AccessKey": "Your Access Key",
  "SecretKey": "Your Secret Key",
  "BucketName": "Your BucketName",
  "WithSSL": false
}

πŸ“§ Email Notification

If you need email notification for new comments, new replies and pingbacks, you have to setup the Moonglade.Notification Azure Function first, and then set the values in appsettings.[env].json or in your runtime environment variables.

"Notification": {
  "Enabled": true,
  "AzureFunctionEndpoint": "{PROD-ENV-VARIABLE}"
}

πŸ”© Others

πŸŽ‰ Blog Protocols or Standards

🐼 Customers

There are a few individuals already setup thier blogs using Moonglade on Azure (Global or China), Alibaba Cloud, Tencent Cloud, etc.

Just Submit PR or issue if you want your blog to be listed here