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.
 
 
 
 
 
fatchan 06703c4743 dont return html from worker because bull doesnt need to put it in redis 4 years ago
configs optional recent news on homepage and config for max number to show 4 years ago
controllers get ratelimit cost from the right require 4 years ago
db optional recent news on homepage and config for max number to show 4 years ago
gulp/res optional recent news on homepage and config for max number to show 4 years ago
helpers optional recent news on homepage and config for max number to show 4 years ago
migrations start option for unhashed ips 4 years ago
models blockbypass to message li's and another strict filter for alphanumberic only 4 years ago
schedules bugfixes 4 years ago
views 'more boards' link 4 years ago
.gitignore dont track timezone js, since its generated by gulpfile 4 years ago
LICENSE Create LICENSE 5 years ago
README.md minor readme changes 4 years ago
backup.sh.example dont deflate backup files since its mostly images that are already compressed 5 years ago
ecosystem.config.js use highlight.js for syntax highlighting in code blocks of posts 5 years ago
gulpfile.js start on fixing issues with anti-necrobump when deleting posts that are SAGE or in a bumplocked thread, and correcting last activity dates for boards/webring for sage posts 4 years ago
package-lock.json Bump mongodb from 3.5.3 to 3.5.4 4 years ago
package.json Bump bcrypt from 3.0.8 to 4.0.0 4 years ago
queue.js make unlisted and webring visibility independent 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 start option for unhashed ips 4 years ago
socketio.js fallback for when reconnect_failed on socket, set max reconnects, goto polling. also make notifs and scroll to post independent and manual update button when live disabled or in polling mode" 4 years ago
style.css start on draggable postform #57 5 years ago
worker.js dont return html from worker because bull doesnt need to put it in redis 4 years ago

README.md

jschan

Anonymous imageboard. A type of BBS or forum software. 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
  • Multiple files per post
  • Captcha and basic antispam
  • Read-only JSON api
  • Multi-select moderation actions
  • Websocket update threads w/o polling
  • Webring support (lynxchan) (infinity)

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:

🚨 The software is not production-ready. There may be bugs and WILL be breaking changes. If you insist on running your own instance, always ensure you have up-to-date configs and db schema after pulling as these will be common breaking changes until a stable version is reached. 🚨

  • 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
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)
  1. Setup server with some basics
  • new user to run the nodejs backend
  • ssh root login disabled, key login only, etc
  • iptables only open http, https and ssh ports on INPUT
  1. Install dependencies. You may need to add sources depending on your distro.
$ sudo apt-get update
$ sudo apt-get install nginx ffmpeg imagemagick graphicsmagick
  1. Install MongoDB and configure authentication

  2. Install and configure Redis

  3. Install nodejs Recommended to use node version manager (nvm). Install nvm then run the following commands to get the LTS version of nodejs.

$ nvm install --lts
$ nvm use --lts

You can also repeat this process in future to update node versions as they are generally backwards compatible.

  1. Configure nginx
  • Use the example config included in configs/nginx.example and put it in /etc/nginx/sites-available/YOURDOMAIN.COM, then symlink it to /etc/nginx/sites-enabled/YOURDOMAIN.com.
  • Make sure the sites enabled folder is included by /etc/nginx/nginx.conf
  • Get https certificate from letsencrypt.
  • For geo flags, follow this guide to setup the legacy GeoIP db and add these directives to the http block in /etc/nginx/nginx.conf:
geoip_country /usr/share/GeoIP/GeoIP.dat;
geoip_city /usr/share/GeoIP/GeoIPCity.dat;
  1. Clone ths repo, browse to the folder and set some things up
# copy example config file and edit it
$ cp configs/main.js.example configs/main.js && editor configs/main.js

# install dependencies and run build tasks
$ npm install
$ npm run-script setup

# setup the database and folder structure, creates admin account admin:changeme
# dont run this again unless you want to completely irreversibly wipe everything
$ gulp reset

# start all the backend processes
$ npm run-script start


# some commands you may need to use in future/find helpful
# pm2 is a process manager for nodejs
$ pm2 list #list running pm2 processes
$ pm2 logs #see logs
$ pm2 reload all #reload all backend processes
# gulp is used for various jobs like minifying and compiling scripts
$ gulp --tasks #list available gulp tasks
$ gulp #run default gulp task