Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/flyhigher139/OctBlog

Yet another blog system powered by Flask and MongoDB
https://github.com/flyhigher139/OctBlog

blog docker flask mongodb mongoengine python

Last synced: about 2 months ago
JSON representation

Yet another blog system powered by Flask and MongoDB

Awesome Lists containing this project

README

        

# About OctBlog

[![Join the chat at https://gitter.im/flyhigher139/OctBlog](https://badges.gitter.im/flyhigher139/OctBlog.svg)](https://gitter.im/flyhigher139/OctBlog?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![](https://images.microbadger.com/badges/image/gevin/octblog.svg)](http://microbadger.com/images/gevin/octblog "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/gevin/octblog.svg)](http://microbadger.com/images/gevin/octblog "Get your own version badge on microbadger.com") [![Build Status](https://travis-ci.org/flyhigher139/OctBlog.svg?branch=master)](https://travis-ci.org/flyhigher139/OctBlog)

[OctBlog](https://github.com/flyhigher139/OctBlog) is almost the same with [MayBlog](https://github.com/flyhigher139/MayBlog) except that it is powered by [Flask](http://flask.pocoo.org/) and [MongoDB](https://www.mongodb.org/) rather than [Django](https://www.djangoproject.com/) and SQL Databases.

And as my customary, I named it OctBlog as OctBlog was started in October, 2015

OctBlog offers every function in MayBlog, and aims to do it better, its features are as follow:

- Multiple user
- OctBlog roles: su, admin, editor, writer, reader
- Blog features: posts, pages, tags, and categories
- Markdown support
- Admin interface
- Change configurations by configuration file or environment variable
- Multiple comment plugin
- User defined widgets
- Deploy with docker
- Sort posts by weight

## Demo

[Gevin's Blog](https://blog.igevin.info/) is powered by OctBlog

## Explanation

The weight is used to order articles, and if you want to hidden an article from the article list, weight is also qualified:

The default weight for each article is 10, if a article's weight is heavier than 10, it will be firstly displayed, and if the weight is negative, the article will be never displayed in the article list

## Dependency

### Backend

- Flask
- flask-script
- flask-login
- flask-admin
- Flask-WTF
- flask-principal
- flask_mongoengine
- WTForms
- mongoengine
- markdown2
- bleach

### Frontend

- jQuery
- BootStrap
- [Clean Blog theme](http://startbootstrap.com/template-overviews/clean-blog/)
- bootbox.js
- bootstrap-markdown.js
- bootstrap-datetimepicker.js
- Font Awesome
- highlight.js

## How to run OctBlog ?

### Run from source code

If you want to see more about the source code, checkout the [source code readme](app)

### Run by docker(recommended)

Run OctBlog by docker is recommended, here are some instruction:

#### First Run

1\. Get your OctBlog image

In command line, switch to OctBlog root directory, and run the following command to build your own OctBlog image:

```bash
cd app
(sudo) docker build -t gevin/octblog:0.1 .

# Now you can take a cup of coffee and wait for a few minutes :)
```

Alternatively, pull Octblog image from DockerHub(**recommended**):

```bash
(sudo) docker pull gevin/octblog:0.1
```

2\. Create your `docker-compose.yml`

You need to create a docker-compose file similar to the `docker-compose_no_swarm.yml` file

Replace ```/Users/gevin/projects/data/mongodb``` with a path on your machine

3\. Run OctBlog

```bash
(sudo) docker-compose up -d
```

Then you can visit OctBlog in your brower at `http://localhost`

All environment variables can be found in `/OctBlog/config.py`

A `.env` file example:

```
DEBUG=false
config=prd
MONGO_HOST=mongo
allow_registration=true
allow_su_creation=true

name=Gevin's Blog
subtitle=技术、生活都要折腾
description=技术、生活都要折腾

wechat_name=GevinView @
wechat_subtitle=技术、生活都要折腾

copyright_msg=注:转载本文,请与Gevin联系
donation_msg=如果您觉得Gevin的文章有价值,就请Gevin喝杯茶吧!
wechat_msg=欢迎关注我的微信公众账号

google_site_verification=
allow_comment=true

allow_daovoice=true
daovoice_app_id=
```

3\. Get into OctBlog container

Maybe you would like to dig into the container, the following command will help:

```bash
# Specify OctBlog container ID, eg:12345678
(sudo) docker ps

# Get into OctBlog container
(sudo) docker exec -it 12345678 bash

```

#### After first run

- Start OctBlog

```bash
(sudo) docker-compose start
```

- Stop OctBlog

```bash
(sudo) docker-compose stop
```

### Run by docker with swarm mode

#### Preparation

If you want to use docker swarm mode, you need to activate this mode first:

```
docker swarm init
```

This command activates your docker swarm mode and make it as a swarm manager

Then you can join other swarm node to this manager with `docker swarm join`

#### Run OctBlog

You need to create a docker-compose file similar to the `docker-compose.yml` file.

Then, start your application:

```
docker stack deploy -c docker-compose.yml octblog
```

review your application:

```
docker stack ps octblog
```

remove your application:

```
docker stack rm octblog
```

You can refer to [Docker Documentation](https://docs.docker.com/) for more docker swarm usages.

### Get started with OctBlog

#### 1\. Create a superuser to administrate OctBlog

Visit the following url and create a superuser

`http://localhost:8000/accounts/registration/su`

If the url is forbidden, you need to modify your configurations to allow the creation.

#### 2\. Administrate OctBlog

The admin home is: `http://localhost:8000/admin`

You will be redirected to login page if you haven't logged in

#### 3\. Modify the default configurations

You either change settings in `app/OctBlog/config.py` file, or set environment variables defined in that file.

**Setting environment variables is recommended, and once the configuration is changed, you need to restart the service.**

## License

OctBlog is under [GPL2](https://github.com/flyhigher139/OctBlog/blob/dev/LICENSE)

## What's more

If you find a bug or want to add a new feature, just issue me.

Want to contribute? Please fork OctBlog and pull request to me.

I'm not good at frontend development, so I used a free bootstrap blog theme. If you can redesign the blog theme and admin interface, I'll appriciate your work very much!