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 ab7ac2558a add short commit hash as v?= query of important scripts and css for updates, to cache bust on updates for public site 4 years ago
configs allow multiple hosts in referer check 4 years ago
controllers Merge branch 'master' into manage-improvements 4 years ago
db dont update lastactivity for threads started with sage 4 years ago
gulp/res Merge branch 'master' of github.com:fatchan/jschan 4 years ago
helpers add short commit hash as v?= query of important scripts and css for updates, to cache bust on updates for public site 4 years ago
migrations migration move files from /img to /file since it can contain more than just images 4 years ago
models Merge branch 'master' of github.com:fatchan/jschan 4 years ago
schedules make that actually hide useragent 4 years ago
views add short commit hash as v?= query of important scripts and css for updates, to cache bust on updates for public site 4 years ago
.gitignore gitignore and untrack some more stuff 4 years ago
LICENSE Create LICENSE 5 years ago
README.md webring fix and readme change 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 add short commit hash as v?= query of important scripts and css for updates, to cache bust on updates for public site 4 years ago
package-lock.json Merge pull request #106 from fatchan/dependabot/npm_and_yarn/ioredis-4.16.2 4 years ago
package.json Merge branch 'master' into manage-improvements 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
remarkup.js improve remarkup tool to uspport multiple posts 4 years ago
server.js add short commit hash as v?= query of important scripts and css for updates, to cache bust on updates for public site 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 dont return html from worker because bull doesnt need to put it in redis 4 years ago

README.md

jschan

Anonymous imageboard software. Live instance at https://fatchan.org

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

# 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

# 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 migrate #check for and run db migrations
$ gulp #run default gulp task