{"id":22942434,"url":"https://github.com/stardustdl/acblog","last_synced_at":"2025-08-12T21:32:41.922Z","repository":{"id":37857662,"uuid":"259549650","full_name":"StardustDL/acblog","owner":"StardustDL","description":"An open source extensible static \u0026 dynamic blog system. (an alternative tool with same features at StardustDL/paperead)","archived":false,"fork":false,"pushed_at":"2023-05-12T15:04:54.000Z","size":1135,"stargazers_count":67,"open_issues_count":27,"forks_count":18,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-29T19:12:25.085Z","etag":null,"topics":["acblog","backend","blazor","blog-engine","cms","content-management-system","csharp","docker","dotnet","dotnet-core","frontend","github-pages","spa","static-site-generator","wasm","wasm-ghpages"],"latest_commit_sha":null,"homepage":"https://acblog.github.io","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StardustDL.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-04-28T06:20:38.000Z","updated_at":"2024-05-23T01:24:50.000Z","dependencies_parsed_at":"2023-07-12T14:00:17.369Z","dependency_job_id":null,"html_url":"https://github.com/StardustDL/acblog","commit_stats":null,"previous_names":["acblog/acblog"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StardustDL%2Facblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StardustDL%2Facblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StardustDL%2Facblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StardustDL%2Facblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StardustDL","download_url":"https://codeload.github.com/StardustDL/acblog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229710743,"owners_count":18111641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acblog","backend","blazor","blog-engine","cms","content-management-system","csharp","docker","dotnet","dotnet-core","frontend","github-pages","spa","static-site-generator","wasm","wasm-ghpages"],"created_at":"2024-12-14T13:47:49.969Z","updated_at":"2024-12-14T13:47:50.603Z","avatar_url":"https://github.com/StardustDL.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AcBlog\n\n![CI](https://github.com/acblog/acblog/workflows/CI/badge.svg) ![CD](https://github.com/acblog/acblog/workflows/CD/badge.svg)\n[![Homepage](https://img.shields.io/github/workflow/status/acblog/acblog.github.io/Deploy/src?label=homepage)](https://github.com/acblog/acblog.github.io) ![Mirrors](https://img.shields.io/github/workflow/status/acblog/mirrors/Mirror/master?label=mirrors) ![License](https://img.shields.io/github/license/acblog/acblog.svg)\n[![AcBlog.Tools.SDK](https://buildstats.info/nuget/AcBlog.Tools.SDK)](https://www.nuget.org/packages/AcBlog.Tools.SDK/)\n\nAn open source extensible static \u0026 dynamic blog system.\n\n![cover](https://repository-images.githubusercontent.com/259549650/50d50d00-9073-11ea-8e72-0d3f1d3a7d8c)\n\nThe [homepage](https://acblog.github.io) is powered by AcBlog hosted on GitHub Pages.\n\n- A mirror homepage on [Gitee](https://acblog.gitee.io).\n\n## Screenshots\n\n![Home](https://github.com/StardustDL/own-staticfile-hosting/raw/master/acblog/images/preview-home.png)\n![Posts](https://github.com/StardustDL/own-staticfile-hosting/raw/master/acblog/images/preview-post.png)\n![Archives](https://github.com/StardustDL/own-staticfile-hosting/raw/master/acblog/images/preview-archive.png)\n![Search](https://github.com/StardustDL/own-staticfile-hosting/raw/master/acblog/images/preview-search.png)\n\n## Features\n\n- Based on WebAssembly \u0026 SignalR\n- Single Page APP\n  - Installable\n  - Offline\n- Frontend\n  - WebAssembly: full static files\n  - SPA by WebAssembly with server prerender\n  - SPA without WebAssembly by communicating with server\n- Backend\n  - Static-file backend with generator\n  - Dynamic server backend\n- Post\n  - Category \u0026 Keywords\n  - Markdown rendering\n  - LaTeX math rendering\n  - Diagram rendering\n  - Media links\n  - Password protection\n  - Table of contents\n- Slides\n  - Preview \u0026 Full page\n- Note\n- Custom pages\n  - Custom layout\n  - Full HTML\n- Visitor statistic\n- Comments\n- Archives with timeline\n- Sitemap\n- Feeds (Atom \u0026 RSS)\n- Search (Open Search supported)\n- Docker deployment\n  - [![Docker](https://img.shields.io/docker/pulls/acblog/wasm.svg)](https://hub.docker.com/r/acblog/wasm) Client.WebAssembly\n  - [![Docker](https://img.shields.io/docker/pulls/acblog/wasm-host.svg)](https://hub.docker.com/r/acblog/wasm-host) Client.WebAssembly.Host\n  - [![Docker](https://img.shields.io/docker/pulls/acblog/client.svg)](https://hub.docker.com/r/acblog/client) Client.Server\n  - [![Docker](https://img.shields.io/docker/pulls/acblog/api.svg)](https://hub.docker.com/r/acblog/api) Server.API\n\n## Guide\n\n### Full Static Hosting\n\nGitHub Pages hosting, based on [wasm-ghpages-generate-action](https://github.com/acblog/wasm-ghpages-generate-action) and [static-backend-generate-action](https://github.com/acblog/static-backend-generate-action).\n\n- [Demo Project](https://github.com/acblog/acblog.github.io)\n- [中文说明](https://stardustdl.gitee.io/posts/Development%2FAcBlog-staticgen)\n\n### Frontend\n\nUse AcBlog's WebAssembly client docker image:\n\n```sh\ndocker pull acblog/wasm:latest\ndocker run -d -p 8000:80 acblog/wasm:latest\n```\n\nYou can use volumn to apply settings:\n\n```sh\ndocker run -d \\\n  -v $PWD/appsettings.json:/app/appsettings.json \\\n  -v $PWD/manifest.json:/app/manifest.json \\\n  -p 8000:80 acblog/wasm:latest\n```\n\nFor GitHub Pages hosting, you can use [wasm-ghpages-generate-action](https://github.com/acblog/wasm-ghpages-generate-action).\n\n---\n\nUse AcBlog's WebAssembly hosted client docker image:\n\n```sh\ndocker pull acblog/wasm-host:latest\ndocker run -d -p 8000:80 acblog/wasm-host:latest\n```\n\nYou can use volumn to apply settings:\n\n```sh\ndocker run -d \\\n  -v $PWD/appsettings.json:/app/appsettings.json \\\n  -v $PWD/manifest.json:/app/wwwroot/manifest.json \\\n  -p 8000:80 acblog/wasm-host:latest\n```\n\n---\n\nUse AcBlog's server client docker image (no WebAssembly):\n\n```sh\ndocker pull acblog/client:latest\ndocker run -d -p 8000:80 acblog/client:latest\n```\n\nYou can use volumn to apply settings:\n\n```sh\ndocker run -d \\\n  -v $PWD/appsettings.json:/app/appsettings.json \\\n  -p 8000:80 acblog/client:latest\n```\n\n### Backend\n\n#### Static\n\nUse AcBlog's SDK:\n\n```sh\ndotnet tool install -g AcBlog.Tools.Sdk \\\n  --add-source https://sparkshine.pkgs.visualstudio.com/StardustDL/_packaging/feed/nuget/v3/index.json\n\nacblog init\nacblog remote add origin \"./dist\"\nacblog push\n```\n\nFor GitHub Pages hosting, you can use [static-backend-generate-action](https://github.com/acblog/static-backend-generate-action).\n\n#### Dynamic\n\nUse AcBlog's API server docker image:\n\n```sh\ndocker pull acblog/api:latest\ndocker run -d -p 8000:80 acblog/api:latest\n```\n\n### Compose\n\nUse docker-compose to deploy WebAssembly hosted client and Api server:\n\n```sh\ncd docker/deploy\ndocker-compose up\n```\n\nMaybe you need to restart api container after database initializing.\n\n### SDK\n\nUse AcBlog's command-line Sdk tool to communicate with AcBlog server.\n\n```sh\ndotnet tool install -g AcBlog.Tools.Sdk \\\n  --add-source https://sparkshine.pkgs.visualstudio.com/StardustDL/_packaging/feed/nuget/v3/index.json\n\nacblog --help\n```\n\n## Build\n\n1. Install .NET SDK 5.0, NodeJS 12.x and npm.\n2. Install Gulp \u0026 Libman\n3. Install psake\n\n```ps1\nnpm install -g gulp\ndotnet tool install --global Microsoft.Web.LibraryManager.Cli\nSet-PSRepository -Name PSGallery -InstallationPolicy Trusted; Install-Module -Name psake\n```\n\n4. Restore dependencies\n\nAdd NuGet source: [StardustDL's NUGET feeds](https://sparkshine.pkgs.visualstudio.com/StardustDL/_packaging/feed/nuget/v3/index.json).\n\n```ps1\nInvoke-psake Restore\n```\n\n1. Build project\n\n```ps1\nInvoke-psake Build\n```\n\n## Test \u0026 Benchmark\n\n```sh\nInvoke-psake CI\n```\n\n## Dependencies\n\n- [.NET](https://github.com/dotnet/runtime) \u0026 [ASP.NET](https://github.com/dotnet/aspnetcore) For basic framework.\n- [Entity Framework](https://github.com/dotnet/efcore) For database access.\n- [ant-design-blazor](https://github.com/ant-design-blazor/ant-design-blazor) For UI designs.\n- [scriban](https://github.com/lunet-io/scriban) For layouts.\n- [RazorComponents.Markdown](https://github.com/StardustDL/RazorComponents.Markdown) For Markdown rendering.\n- [loment](https://github.com/StardustDL/loment) For comment service.\n- [listat](https://github.com/StardustDL/listat) For statistic service.\n\n## Status\n\n![Status](https://buildstats.info/github/chart/acblog/acblog?branch=master)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstardustdl%2Facblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstardustdl%2Facblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstardustdl%2Facblog/lists"}