2016-12-27 20:25:32 +00:00
# blog
2019-12-26 21:51:37 +00:00
This is a simple self-hosted, lightweight, singe-user PHP blog, where you can create your own Facebook-like feed. Give read access to other people, and you can share rich text with photos including highlighted code or links.
2016-12-27 20:25:32 +00:00
2019-12-26 21:51:37 +00:00
In this context lightweight means:
* No npm dependency, there won't be an annoying 1GB `node_modules` directory.
* No pipeline. What you see is pure code without a need to install it.
* No overhead, essential features, simple usage.
2016-12-27 20:25:32 +00:00
2020-01-24 19:17:00 +00:00
## Screenshots
< details >
< summary > Light theme< / summary >
![screenshot ](https://raw.githubusercontent.com/m1k1o/blog/master/static/screenshot-theme02-light.png )
< / details >
< details >
< summary > Dark theme< / summary >
![screenshot ](https://raw.githubusercontent.com/m1k1o/blog/master/static/screenshot-theme02-dark.png )
< / details >
< details >
< summary > Legacy theme (compatible with older browsers)< / summary >
![screenshot ](https://raw.githubusercontent.com/m1k1o/blog/master/static/screenshot-theme01.png )
< / details >
2019-12-26 21:01:29 +00:00
## Install standalone app using `docker-compose`
2019-12-26 21:51:37 +00:00
You need to install [docker-compose ](https://docs.docker.com/compose/install/ ).
2019-12-26 21:01:29 +00:00
### Step 1: Clone this repository:
```
git clone https://github.com/m1k1o/blog
cd blog
```
### Step 2: Build & run containers using docker-compose.
```
docker-compose up -d
```
2019-12-26 21:51:37 +00:00
You can specify these environment variables, otherwise the default ones will be used:
* **HTTP_PORT=80** - where the blog will be accessible.
* **DATA=./data** - directory to store the user data.
2019-12-26 21:01:29 +00:00
2019-12-26 21:51:37 +00:00
These environment variables can be stored in the `.env` file or passed to the command directly:
2019-12-26 21:01:29 +00:00
```
2020-01-22 20:46:06 +00:00
HTTP_PORT=3001 DATA=/home/user/blog docker-compose up -d
2019-12-26 21:01:29 +00:00
```
2019-12-26 21:51:37 +00:00
### Step 3: Copy the config
Copy the config from the root directory to your new `./data/` directory.
2019-12-26 21:01:29 +00:00
```
cp ./config.ini ./data/config.ini
```
Now you can modify your config.
### Correct permissions
2019-12-26 21:51:37 +00:00
Make sure your `./data/` directory has correct permissions. Apache is running as a `www-data` user, which needs to have write access to the `./data/` directory (for uploading images).
2019-12-26 21:01:29 +00:00
2019-12-26 21:51:37 +00:00
#### Prefered solution
Change the directory owner to the `www-data` user:
2019-12-26 21:01:29 +00:00
```
chown 33:33 ./data/
```
2019-12-26 21:51:37 +00:00
Alternatively, add the `www-data` user to the user group that owns the `./data/` directory.
2019-12-26 21:01:29 +00:00
#### Bad solution (but it works)
2019-12-26 21:51:37 +00:00
Set `777` permission for your `./data/` , so everyone can read, write, and execute:
2019-12-26 21:01:29 +00:00
```
chmod 777 ./data/
```
2019-12-26 21:51:37 +00:00
**NOTICE:** You should not use `777` . You are giving access to anyone for this directory. Maybe to some attacker, who can run his exploit here.
2019-12-26 21:01:29 +00:00
## Install using docker
2019-12-26 21:51:37 +00:00
You need to install [docker ](https://docs.docker.com/install/ ).
2019-12-26 21:01:29 +00:00
2019-12-26 21:51:37 +00:00
If you don't want do spawn a new database server, but you want to use your existing `mariadb` or `mysql` server, you can install this blog using Docker.
2019-12-26 21:01:29 +00:00
### Build image
2019-12-26 21:51:37 +00:00
After you have cloned and accessed the repository, you need to run this command. It will build a docker image with a tag `blog` .
2019-12-26 21:01:29 +00:00
```
docker build --tag blog .
```
### Run container
2019-12-26 21:51:37 +00:00
After you have built the image, you can run it as the following:
2019-12-26 21:01:29 +00:00
```
docker run \
-p 80:80 \
-p 443:443 \
-v ./data:/var/www/html/data \
blog
```
2019-12-26 21:51:37 +00:00
Now you can copy the config to your new `./data` directory and set up the database connection settings.
2019-12-26 21:01:29 +00:00
```
cp ./config.ini ./data/config.ini
```
## Install
2019-12-26 21:51:37 +00:00
If you have decied that you don't want to use Docker, you can intall it manually.
2019-12-26 21:01:29 +00:00
**Requirements:** Apache 2.0*, PHP 7.4, MariaDB 10.1
2019-12-26 21:51:37 +00:00
**NOTICE:** If you would like to use Nginx or another web server, make sure that the sensitive data are not exposed to the public. Since `.htaccess` is protecting those files in Apache, that could not be the case in a different environment. Take care of:
* **config.ini** - disallow access to all *.ini* files for the public.
* **data/logs/\_ANY_.log** - make sure no sensitive information are located in *.log* .
2019-12-26 21:01:29 +00:00
### Database Schema
2019-12-26 21:51:37 +00:00
You can find database schema in the `./app/db/01_schema.sql` file.
2019-12-26 21:01:29 +00:00
### Debug mode
2019-12-26 21:51:37 +00:00
To check if your server is set up correctly, turn on a debug mode (in config add `debug = true` ) to see the details. In the debug mode, an error may be shown if you are missing some **PHP extensions** needed to be installed on your server.
2019-12-26 21:01:29 +00:00
## Config file
2019-12-26 21:51:37 +00:00
**DO NOT** edit `./config.ini` file. If you wish to modify the config, simply make a copy to the `./data/config.ini` directory and edit it there.
2019-12-26 21:01:29 +00:00
2019-12-26 21:51:37 +00:00
**But, why?** If there is any change in config file (most likely adding a new feature), you will have problems with merging a new version. Also, if you would fork this repository, you might accidentally push your secrets to the git. We don't want that to happen. Content of the `/data` directory is ignored by the git, so none of your pictures or personal data should ever be published to git.
2020-01-10 21:21:53 +00:00
# Features
2020-01-24 19:17:00 +00:00
* Dark mode, retina ready, legacy theme available.
2020-01-10 21:21:53 +00:00
* Use BBcode in texts.
* Make posts available for **everyone** , **only you** or just for **friends** .
* Extra fields in post: **Feeling** , **With** and **At** .
2020-02-08 00:17:14 +00:00
* Hide posts from timeline so they are visible only when you need them to be.
2020-02-21 16:57:26 +00:00
* All pasted links will get preview with page title, description and image (can be configured proxy).
2020-01-10 21:21:53 +00:00
* Upload images using button *(for mobile)* .
* Upload images using drag & drop *(drop it into textarea)* .
* Upload images using CTRL + V *(paste it into textarea)* .
* Highlight code in post using `[code]..your code..[/code]` .
* Highlight your goal using `[goal]Text of your goal.[/goal]` .
* Use tags in posts (allowed characters `A-Za-z0-9-_` terminated by space or EOL): `#song`
* Sort posts by hashtags: `http://blog/#tag=songs`
* Sort posts by location in url using: `http://blog/#loc=Vienna` .
2020-01-23 21:33:07 +00:00
* Display posts from chosen date using (format YYYY-MM-DD or YYY-MM): `http://blog/#from=2017-06` .
* Display posts to chosen date using (format YYYY-MM-DD or YYY-MM): `http://blog/#to=2017-06` .
* Combine parameters in url using `&` , e.g. show posts between dates: `http://blog/#from=2017-06&to=2017-08` .
2020-04-05 13:58:04 +00:00
## Language support
Feel free to create new PR and add a new language. Specify language in config or in url: `http://blog/?hl=sk` .
* en - 🇬🇧 English
* de - 🇩🇪 German
* sk - 🇸🇰 Slovak