Skip to content

Oldschool anonymous imageboard with some modern touches. Multiple file uploads, user board creation and read-only API. Supports users without javascript.

License

itfff/jschan

 
 

Repository files navigation

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

# 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

About

Oldschool anonymous imageboard with some modern touches. Multiple file uploads, user board creation and read-only API. Supports users without javascript.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 67.7%
  • CSS 17.7%
  • HTML 14.4%
  • Shell 0.2%