|
5 years ago | |
---|---|---|
configs | 5 years ago | |
controllers | 5 years ago | |
db | 5 years ago | |
gulp/res | 5 years ago | |
helpers | 5 years ago | |
models | 5 years ago | |
schedules | 5 years ago | |
views | 5 years ago | |
.gitignore | 5 years ago | |
LICENSE | 6 years ago | |
README.md | 5 years ago | |
backup.sh.example | 5 years ago | |
ecosystem.config.js | 5 years ago | |
gulpfile.js | 5 years ago | |
package-lock.json | 5 years ago | |
package.json | 5 years ago | |
queue.js | 5 years ago | |
redis.js | 5 years ago | |
redlock.js | 5 years ago | |
server.js | 5 years ago | |
socketio.js | 5 years ago | |
style.css | 5 years ago | |
worker.js | 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
- 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:
- 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)
Install some dependencies. You may need to add some sources.
$ sudo apt-get update
$ sudo apt-get install 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, some comments included
$ npm install #install dependencies
$ npm run-script setup #install global modules pm2 and gulp, then runs gulp tasks
$ gulp reset #clear the database, creates account username:admin, password:changeme (dont run this again unless you want to completely irreversibly wipe everything)
$ npm run-script start #start all the backend processes
$ pm2 list #list running pm2 processes
$ pm2 logs #see logs
$ pm2 reload all #reload everything, or use "chan", "build-worker" or "schedules" to only reload specific parts if you know what you are doing
$ gulp --tasks #list available gulp tasks
$ gulp #run default gulp task, usually used for updates, can run specific tasks if you know what you are doing