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 39a2db4178 Typo, close #162 4 years ago
configs Dev auto reset triggers (#152) 4 years ago
controllers add process ip so modlog can be filled, closes #141 4 years ago
db Merge branch 'dev' into experimental/ip-changes 4 years ago
gulp/res Dont show webring link in navbar if disabled reference #145 4 years ago
helpers remove label from trigger reset task if none happened 4 years ago
migrations Cleanup 0.0.9 migration 4 years ago
models Typo, close #162 4 years ago
schedules Fix webring bug where sites with multiple domains get added twice. check endpooint. 4 years ago
views Charset to captcha page reference #155 4 years ago
.gitignore gitignore and untrack some more stuff 4 years ago
LICENSE Create LICENSE 5 years ago
README.md Update README.md 4 years ago
backup.sh.example dont deflate backup files since its mostly images that are already compressed 5 years ago
ecosystem.config.js more general ecosystem config for how many cpu cores 4 years ago
gulpfile.js Gulpfile fixes, remove update migrateversion comment and handle news properly on reset 4 years ago
package-lock.json Update package-lock.json closes #148 4 years ago
package.json Merge branch 'dev' into experimental/ip-changes 4 years ago
queue.js Dev auto reset triggers (#152) 4 years ago
redis.js Dev auto reset triggers (#152) 4 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
remarkup.js improve remarkup tool to uspport multiple posts 4 years ago
server.js Dont show webring link in navbar if disabled reference #145 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 migration move files from /img to /file since it can contain more than just images 4 years ago
worker.js Dev auto reset triggers (#152) 4 years ago

README.md

jschan

Anonymous imageboard software.

Goals

  • Oldschool look, newschool feel
  • Work with javascript disabled
  • Be usable on mobile
  • Static file serving

Features

  • User created boards ala infinity
  • Multiple files per post
  • Captcha and antispam
  • Read-only JSON api
  • Multi-select moderation actions
  • Websocket update threads w/o polling
  • Webring w/proxy support (lynxchan) (infinity)

Todo

  • Support running as a hidden service
  • More features
  • Mobile app
  • Full install script

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 run gulp migrate && gulp && pm2 reload all after pulling. 🚨

  • 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 this 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

# copy example custompages for rules and faq and edit
$ cp views/custompages/faq.pug.example views/custompages/faq.pug
$ cp views/custompages/rules.pug.example views/custompages/rules.pug

# 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

Use https://realfavicongenerator.net/ to generate favicons how you want them to look and replace the files in gulp/res/icons/ with the icons from that package

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

# 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 migrate #check for and run db migrations
$ gulp #run default gulp task
  1. Optionally, if you plan to use the webring and want to make requests with tor to mask your origin server IP: Install docker and run torproxy in a container: https://github.com/dperson/torproxy Edit configs/webring.json and wer proxy enabled:true