mirror of https://gitgud.io/fatchan/jschan.git
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.
107 lines
4.4 KiB
107 lines
4.4 KiB
# 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
|
|
- [x] User created boards ala infinity
|
|
- [x] Multiple files per post
|
|
- [x] Captcha and basic antispam
|
|
- [x] Read-only JSON api
|
|
- [x] Multi-select moderation actions
|
|
- [x] Websocket update threads w/o polling
|
|
- [x] Webring support ([lynxchan](https://gitlab.com/alogware/LynxChanAddon-Webring)) ([infinity](https://gitlab.com/Tenicu/infinityaddon-webring))
|
|
|
|
## 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
|
|
|
|
2. Install dependencies. You may need to add sources depending on your distro.
|
|
```bash
|
|
$ sudo apt-get update
|
|
$ sudo apt-get install nginx ffmpeg imagemagick graphicsmagick
|
|
```
|
|
|
|
3. [Install MongoDB](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/#install-mongodb-community-edition-on-debian) and [configure authentication](https://medium.com/mongoaudit/how-to-enable-authentication-on-mongodb-b9e8a924efac)
|
|
|
|
4. [Install and configure](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-debian-9) Redis
|
|
|
|
4. Install nodejs
|
|
Recommended to use [node version manager](https://github.com/nvm-sh/nvm) (nvm).
|
|
Install nvm then run the following commands to get the LTS version of nodejs.
|
|
```bash
|
|
$ nvm install --lts
|
|
$ nvm use --lts
|
|
```
|
|
You can also repeat this process in future to update node versions as they are generally backwards compatible.
|
|
|
|
4. 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](https://wiki.debian.org/LetsEncrypt).
|
|
- For geo flags, [follow this guide](http://archive.is/2SMOb) to setup the [legacy GeoIP db](https://www.miyuru.lk/geoiplegacy) 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;
|
|
```
|
|
|
|
5. Clone ths repo, browse to the folder and set some things up
|
|
```bash
|
|
# 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
|
|
```
|
|
|