mirror of https://gitgud.io/fatchan/jschan.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.8 KiB
83 lines
3.8 KiB
# jschan
|
|
|
|
Anonymous imageboard. A type of BBS or forum software.
|
|
Still in development, so beware if attempting to run a public instance.
|
|
Demo site running at https://fatpeople.lol
|
|
|
|
## Goals
|
|
- Oldschool imageboard look, with some modern touches
|
|
- Support users that have javascript disabled (TOR users, or the security conscious)
|
|
- Leverage nginx to serve static files, do GeoIP lookups and various other things
|
|
|
|
## Features
|
|
- [x] User created boards ala infinity
|
|
- [x] Multiple files per post
|
|
- [x] Captcha and basic antispam
|
|
- [x] Read-only JSON api
|
|
- [x] Multi-select moderation actions
|
|
- [x] Websocket update threads w/o polling
|
|
- [x] Webring support ([lynxchan](https://gitlab.com/alogware/LynxChanAddon-Webring)) ([infinity](https://gitlab.com/Tenicu/infinityaddon-webring))
|
|
|
|
## Todo
|
|
- Fix issues
|
|
- Add missing features
|
|
- Improve moderation tools
|
|
- Improve frontend scripts
|
|
- Fork some mobile app and make it compatible with the API
|
|
|
|
## Setup
|
|
Please note:
|
|
- these instructions are not step-by-step or complete
|
|
- you should be able to read, be comfortable with a command line and have problem solving skills (aka search engine)
|
|
|
|
##### Requirements
|
|
- Linux (debian used in this example)
|
|
- Node.js (to run the app)
|
|
- MongoDB (database, duh)
|
|
- Redis (sessions, build task queue, locks, caching, websocket data)
|
|
- Nginx (handle https, serve static content, GeoIP lookup)
|
|
- Certbot/letsencrypt (for https cert)
|
|
- Graphicsmagick+Imagemagick (thumbnailing images, generating captchas)
|
|
- Ffmpeg (thumbnailing videos)
|
|
|
|
Install some dependencies. You may need to add some sources.
|
|
```bash
|
|
$ sudo apt-get update
|
|
$ sudo apt-get install nginx ffmpeg imagemagick graphicsmagick
|
|
```
|
|
|
|
[Install](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/#install-mongodb-community-edition-on-debian) and [configure auth for mongodb](https://medium.com/mongoaudit/how-to-enable-authentication-on-mongodb-b9e8a924efac). This is to avoid out of date verisons in debian repos.
|
|
|
|
[Install and configure](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-debian-9) Redis.
|
|
|
|
Install nodejs. You can use [node version manager](https://github.com/nvm-sh/nvm) (nvm) to help with this.
|
|
Once you have nvm, install the LTS version of nodejs
|
|
```bash
|
|
$ nvm install --lts
|
|
```
|
|
|
|
Configure nginx. Modify the example config included in configs/nginx.example and put it in /etc/nginx/sites-available, then symlink it to /etc/nginx/sites-enabled. Make sure the sites enabled folder is included by the main nginx.conf
|
|
Next, get https with a certificate generated from [letsencrypt](https://wiki.debian.org/LetsEncrypt).
|
|
If you need support for Country flags, [follow this guide](http://archive.is/2SMOb) to set them up in nginx.
|
|
Then edit your `/etc/nginx/nginx.conf` and put these directives within the http block:
|
|
```
|
|
#geoip settings
|
|
geoip_country /usr/share/GeoIP/GeoIP.dat;
|
|
geoip_city /usr/share/GeoIP/GeoIPCity.dat;
|
|
|
|
```
|
|
|
|
Now clone the repo, browse to the folder and set some things up.
|
|
```bash
|
|
# in repo directory
|
|
$ cp configs/main.js.example configs/main.js && nano configs/main.js #copy example config and edit, some comments included
|
|
$ npm install #install dependencies
|
|
$ npm run-script setup #install global modules pm2 and gulp, then runs gulp tasks
|
|
$ gulp reset #clear the database, creates account username:admin, password:changeme (dont run this again unless you want to completely irreversibly wipe everything)
|
|
$ npm run-script start #start all the backend processes
|
|
$ pm2 list #list running pm2 processes
|
|
$ pm2 logs #see logs
|
|
$ pm2 reload all #reload everything, or use "chan", "build-worker" or "schedules" to only reload specific parts if you know what you are doing
|
|
$ gulp --tasks #list available gulp tasks
|
|
$ gulp #run default gulp task, usually used for updates, can run specific tasks if you know what you are doing
|
|
```
|
|
|