jschan - Anonymous imageboard software. Classic look, modern features and feel. Works without JavaScript and supports Tor, I2P, Lokinet, etc.
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.
 
 
 
 
 
dependabot-preview[bot] c472a01407 Bump del from 4.1.1 to 5.1.0 (#60) 5 years ago
configs fix some awaits in build tasks and make lock ttl configurable 5 years ago
controllers Merge branch 'file-limit-error' 5 years ago
db bugfixes 5 years ago
gulp/res Merge branch 'file-limit-error' 5 years ago
helpers bugfixes 5 years ago
models fix max files upload showing error, show max files on postform, etc #57 #2 5 years ago
schedules reference #55 working on global settings page/config editor, start with global filters and options to force change sitewide captcha 5 years ago
views Merge branch 'file-limit-error' 5 years ago
.gitignore change config to js file so it an include comments 5 years ago
LICENSE Create LICENSE 5 years ago
README.md File limit error references #58 (#59) 5 years ago
backup.sh.example fix backup 5 years ago
ecosystem.config.js use highlight.js for syntax highlighting in code blocks of posts 5 years ago
gulpfile.js local time, change some scripts names and orders, modal, footer, and udpate deps 5 years ago
package-lock.json Bump del from 4.1.1 to 5.1.0 (#60) 5 years ago
package.json Bump del from 4.1.1 to 5.1.0 (#60) 5 years ago
queue.js fix bug in queue setting remove and overriding cron options for helper task 5 years ago
redis.js accounts page, list owned and mod boards in accounts, show on global manage and accounts page 5 years ago
redlock.js no more lmx. since we have redis, use it for redlock and connect-redis for sessions instead of mongo 5 years ago
server.js fix file number check in post controller prevent error in spam check 5 years ago
socketio.js change config to js file so it an include comments 5 years ago
worker.js change config to js file so it an include comments 5 years ago

README.md

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

  • User created boards ala infinity
  • Captcha and basic antispam
  • Read-only JSON api
  • Public modlogs
  • Multi-select posts for moderation actions/reports
  • Post styling & quote linking
  • Backlinks shown without javascript
  • Multiple files per post
  • Websocket updates threads live
  • Webring support lynxchan infinity

Todo

  • Check issues
  • 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)
  • Bcrypt (account password hashes)

Install some dependencies. You may need to add some sources.

$ sudo apt-get update
$ sudo apt-get install bcrypt nginx ffmpeg imagemagick graphicsmagick

Install and configure auth for mongodb. This is to avoid out of date verisons in debian repos.

Install and configure Redis.

Install nodejs. You can use node version manager (nvm) to help with this. Once you have nvm, install the LTS version of nodejs

$ 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. If you need support for Country flags, follow this guide 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.

# in repo directory
$ cp configs/main.js.example configs/main.js && nano configs/main.js #copy example config and edit
$ npm install #install dependencies
$ npm run-script setup #install global modules pm2 and gulp, then runs gulp tasks
$ gulp reset #clear the database, create test board and account username:admin, password:changeme
$ npm run-script start #start all the backend processes
$ pm2 list #list running pm2 processes
$ pm2 logs #see logs