FoolFuuka/Install/Debian

This guide was written by ATC of desuarchive, and is designed for Debian/Ubuntu Linux servers.

Prepare things
apt-get update apt-get upgrade

Add the keys for HipHop Virtual Machine
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449 sudo add-apt-repository &quot;deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main&quot;

Add repo for MariaDB 10.1
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db sudo add-apt-repository 'deb [arch=amd64,i386] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu trusty main'

Add repo for sphinxsearch
sudo add-apt-repository ppa:builds/sphinxsearch-stable Then, Comment out repo in and add to end:

deb http://ppa.launchpad.net/builds/sphinxsearch-stable/ubuntu precise main deb-src http://ppa.launchpad.net/builds/sphinxsearch-stable/ubuntu precise main sudo apt-get update

Install all the needed packages.
Nginx, HHVM, PHP5 Cli, PHP5 Curl, MariaDB, OpenJDK w/ compilier, Maven

sudo apt-get install git nginx hhvm php5-cli php5-curl php5-mysqlnd mariadb-server libmariadbclient-dev mariadb-client imagemagick openjdk-7-jre openjdk-7-jdk openjdk-7-jre-lib maven

Install composer for downloading FoolFuuka dependencies.
curl -sS https://getcomposer.org/installer | php

Move composer to bin
sudo mv composer.phar /usr/local/bin/composer

Install hhvm as a service so it launches at boot.
sudo update-rc.d hhvm defaults

Install hhvm with nginx
sudo /usr/share/hhvm/install_fastcgi.sh

Edit HHVM config to use a unix socket.
sudo nano /etc/hhvm/server.ini Then remove the line starting with hhvm.server.port, and in its place add the following one:

hhvm.server.file_socket=/var/run/hhvm/hhvm.sock

Restart HHVM
sudo service hhvm restart

Configure NGINX to use hhvm's new unix socket.
sudo nano /etc/nginx/hhvm.conf In this file make sure that the fastcgi_pass directive points to the HHVM socket and looks like this:

fastcgi_pass unix:/var/run/hhvm/hhvm.sock;

Download FoolFuuka in home folder and install dependencies.
cd ~ composer create-project foolz/foolfuuka foolfuuka --prefer-source cd foolfuuka composer dump-autoload --optimize composer install

Install Foolfuuka Plugins
You may need to find the repo on their github if their site doesn't work: https://github.com/FoolCode

cd ~/foolfuuka/app/foolz/foolframe/plugins mkdir foolz cd foolz git clone https://github.com/FoolCode/foolframe-plugin-articles.git

cd ~/foolfuuka/app/foolz/foolfuuka/plugins mkdir foolz cd foolz git clone https://github.com/FoolCode/foolfuuka-plugin-board-statistics.git git clone https://github.com/FoolCode/foolfuuka-plugin-dice-roll.git git clone https://github.com/FoolCode/foolfuuka-plugin-quests.git

Set Permissions and Group for FoolFuuka Directory
chmod -Rf 775 ~/foolfuuka chown -Rf www-data:www-data ~/foolfuuka

Restart Nginx
sudo service nginx restart

Create the database and install Foolfuuka user accounts.
sudo mysql_secure_installation mysql -uroot -p CREATE USER 'asagi'@'localhost' IDENTIFIED BY 'pass'; CREATE USER 'foolfuuka'@'localhost' IDENTIFIED BY 'pass'; CREATE DATABASE asagi DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; CREATE DATABASE foolfuuka DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON `asagi`. * TO 'asagi'@'localhost'; GRANT ALL PRIVILEGES ON `asagi`. * TO 'foolfuuka'@'localhost'; GRANT ALL PRIVILEGES ON `foolfuuka`. * TO 'foolfuuka'@'localhost'; FLUSH PRIVILEGES; exit

Restart MariaDB
sudo service mysql restart

Disable transparent_hugepage

su -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'

sudo nano /etc/default/grub

append to, then save the file

sudo update-grub

Enable toku (Find and Uncomment the load module)

sudo nano /etc/mysql/conf.d/tokudb.cnf Raise file limit

Increase mysql file limit:

sudo service mysql stop sudo reboot mysql -u root -p set global default_storage_engine=TokuDB; SET GLOBAL log_bin_trust_function_creators = 1; Now, Install FoolFuuka at the website using foolfuuka credentials

Install and compile Asagi from source.
cd ~ git clone https://github.com/FoolCode/asagi.git cd asagi mvn package assembly:single mv target/asagi-0.4.0-SNAPSHOT-full.jar ./asagi.jar

Configure Asagi
cp asagi.json.example asagi.json nano asagi.json

Insert the following JSON into that file:

### {"settings": { "dumperEngine": "DumperJSON", "sourceEngine": "YotsubaJSON",

"boardSettings": { "default": { "engine": "Mysql", "database": "asagi", "host": "localhost", "username": "asagi", "password": "afj8a428dauwj", "charset": "utf8mb4", "path": "/home/ubuntu/foolfuuka/public/foolfuuka/boards/", "useOldDirectoryStructure": false, "webserverGroup": "www-data", "thumbThreads": 3, "mediaThreads": 0, "newThreadsThreads": 3, "deletedThreadsThresholdPage": 8, "refreshDelay": 30, "throttleAPI": true, "throttleURL": "api.4cdn.org", "throttleMillisec": 11100,

"threadRefreshRate": 10, "pageSettings": [ {"delay": 30, "pages": [0, 1]}, {"delay": 500, "pages": [2, 3, 4, 5, 6, 7, 8]}, {"delay": 30, "pages": [9, 10]} ]   },

"3": {},   "a": {}, "aco": {}, "adv": {}, "an": {}, "asp": {}, "b": {}, "biz": {}, "c": {}, "cgl": {}, "ck": {}, "cm": {}, "co": {}, "d": {}, "diy": {}, "e": {}, "f": {}, "fa": {}, "fit": {}, "g": {}, "gd": {}, "gif": {}, "h": {}, "hc": {}, "hm": {}, "his": {}, "hr": {}, "i": {}, "ic": {}, "int": {}, "jp": {}, "k": {}, "lgbt": {}, "lit": {}, "m": {}, "mlp": {}, "mu": {}, "n": {}, "news": {}, "o": {}, "out": {}, "p": {}, "po": {}, "pol": {}, "qa": {}, "qst": {}, "r": {}, "r9k": {}, "s": {}, "s4s": {}, "sci": {}, "soc": {}, "sp": {}, "t": {}, "tg": {}, "toy": {}, "trash": {}, "trv": {}, "tv": {}, "u": {}, "v": {}, "vg": {}, "vp": {}, "vr": {}, "w": {}, "wg": {}, "wsg": {}, "wsr": {}, "x": {}, "y": {} } }}

Start asagi (There is a better way to do this).
Maybe we should use systemd for it...

UseParallelGC adds Parallelization to the garbage collector, which really helps for Java.

screen java -XX:+UseParallelGC -XX:+UseParallelOldGC -verbose:gc -jar asagi.jar

ATC of Desuarchive prefers these parameters, which have two customizations.


 * 1) For the first parameter, Java by default will use 1/4th your system memory, so you can set your own hard memory roof to reduce usage or increase it. He used.
 * 2) * If you aren't archiving more than 8 boards, this probably won't be an issue that you need to deal with.
 * 3) The permsize is about the permanent generation objects: depends on your heap size.
 * 4) * This setting is probably related to how many boards are on Desuarchive, but Sunako doesn't had that sort of issue.

screen java -Xmx6144m -XX:+UseParallelGC -XX:+UseParallelOldGC -verbose:gc -XX:MaxPermSize=512m -jar asagi.jar

Now, Configure asagi as the database and remove the table prefix from FoolFuuka.

Add boards, Configure Sphinx
http://IP/admin &gt; Search &gt; Generate Config.

Copy config out of FF and add your MySQL database information. Paste this to /etc/sphinxsearch/sphinx.conf

Build the indexes
sudo indexer *_ancient --rotate sudo indexer *_main --rotate

Configure Crontab
@hourly sudo -u sphinxsearch /usr/bin/indexer --rotate *_delta > /dev/null @daily sudo -u sphinxsearch /usr/bin/indexer --rotate *_main > /dev/null @monthly sudo -u sphinxsearch /usr/bin/indexer --rotate *_ancient > /dev/null