https://github.com/mewx/yorhel-vndb
The VNDB.org source codes. Imported from: https://code.blicky.net/yorhel/vndb.git
https://github.com/mewx/yorhel-vndb
Last synced: over 1 year ago
JSON representation
The VNDB.org source codes. Imported from: https://code.blicky.net/yorhel/vndb.git
- Host: GitHub
- URL: https://github.com/mewx/yorhel-vndb
- Owner: MewX
- License: agpl-3.0
- Created: 2020-09-09T15:23:44.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-09-09T15:24:28.000Z (almost 6 years ago)
- Last Synced: 2025-01-15T12:13:25.775Z (over 1 year ago)
- Language: Perl
- Homepage:
- Size: 5.73 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
# The VNDB.org Source Code
## Quick and dirty setup using Docker
Setup:
```
docker build -t vndb .
```
Run (will run on the foreground):
```
docker run -ti --name vndb -p 3000:3000 -v "`pwd`":/var/www --rm vndb
```
If you need another terminal into the container while it's running:
```
docker exec -ti vndb su -l devuser # development shell (files are at /var/www)
docker exec -ti vndb psql -U vndb # postgres shell
```
To start Multi, the optional application server:
```
docker exec -ti vndb su -l devuser -c 'make -C /var/www multi-restart'
```
It will run in the background for as long as the container is alive. Logs are
written to `data/log/multi.log`.
The PostgreSQL database will be stored in `data/docker-pg/` and the uploaded
files in `static/{ch,cv,sf,st}`. If you want to restart with a clean slate, you
can stop the container and run:
```
# Might want to make a backup of these dirs first if you have any interesting data.
rm -rf data/docker-pg static/{ch,cv,sf,st}
```
## Requirements (when not using Docker)
Global requirements:
- Linux, or an OS that resembles Linux. Chances are VNDB won't run on Windows.
- A standard C build system (make/gcc/etc)
- PostgreSQL 10+ (including development files)
- Perl 5.26+
- Elm 0.19.1
**Perl modules** (core modules are not listed):
General:
- AnyEvent
- Crypt::ScryptKDF
- Crypt::URandom
- DBD::Pg
- DBI
- Image::Magick
- JSON::XS
- PerlIO::gzip
- graphviz (/usr/bin/dot is used by default)
util/vndb.pl (the web backend):
- Algorithm::Diff::XS
- SQL::Interp
- Text::MultiMarkdown
- TUWF
- HTTP::Server::Simple
util/multi.pl (application server, optional):
- AnyEvent::HTTP
- AnyEvent::IRC
- AnyEvent::Pg
## Manual setup
- Make sure all the required dependencies (see above) are installed. Hint: See
the Docker file for Alpine Linux commands, other distributions will be similar.
For non-root setup, check out cpanminus & local::lib.
- Run the build system:
```
make
```
- Setup a PostgreSQL server and make sure you can login with some admin user
- Build the *vndbfuncs* PostgreSQL library:
```
make -C sql/c
```
- Copy `sql/c/vndbfuncs.so` to the appropriate directory (either run
`sudo make -C sql/c install` or see `pg_config --pkglibdir` or
`SHOW dynamic_library_path`)
- Initialize the VNDB database (assuming 'postgres' is a superuser):
```
# Create the database & roles
psql -U postgres -f sql/superuser_init.sql
psql -U postgres vndb -f sql/vndbid.sql
# Set a password for each database role:
echo "ALTER ROLE vndb LOGIN PASSWORD 'pwd1'" | psql -U postgres
echo "ALTER ROLE vndb_site LOGIN PASSWORD 'pwd2'" | psql -U postgres
echo "ALTER ROLE vndb_multi LOGIN PASSWORD 'pwd3'" | psql -U postgres
# OPTION 1: Create an empty database:
psql -U vndb -f sql/all.sql
# OPTION 2: Import the development database (https://vndb.org/d8#3):
curl -L https://dl.vndb.org/dump/vndb-dev-latest.tar.gz | tar -xzf-
psql -U vndb -f dump.sql
rm dump.sql
```
- Update `data/conf.pl` with the proper credentials for *vndb_site* and
*vndb_multi*.
- Now simply run:
```
util/vndb-dev-server.pl
```
- (Optional) To start Multi, the application server:
```
make multi-restart
```
# Rewrites, rewrites, rewrites
The VNDB website is currently (like every project beyond a certain age) in a
transitional state of rewrites. There are three "versions" and coding styles
across this repository:
**Version 2**
This is the code that powers the actual website. It lives in `lib/VNDB/` and
has `util/vndb.pl` as entry point. Front-end assets are in `data/js/`,
`data/style.css`, `data/icons/`, `static/f/` and `static/s/`.
**Version 2-rw**
This is a (recently started) backend rewrite of version 2. It lives in
`lib/VNWeb/` with Elm and Javascript code in `elm/`. Individual parts of the
website are gradually being moved into this new coding style and structure.
Version 2 and 2-rw run side-by-side in the same process and share a common
route table and database connection, so the entry point is still
`util/vndb.pl`. The primary goal of this rewrite is to make use of the clearer
version 3 structure and to slowly migrate the brittle frontend Javascript parts
to Elm and JSON APIs.
**Version 3**
There also used to be a "version 3" rewrite with a completely new user
interface. All of the improvements developed in version 3 are slowly being
backported and improved upon in version 2-rw and version 3 does not exist
anymore (though it can still be found in the version history).
**Non-rewrites**
Some parts of this repository are not affected by these rewrites. These include
the database structure, most of the scripts in `util/`, some common modules
spread across `lib/` and Multi, which resides in `lib/Multi/`. That's not to
say these are *final* or *stable*, but they're largely independent from the
website code.
# License
GNU AGPL, see COPYING file for details.