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 "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
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 /etc/apt/sources.list.d/*
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
Set required php.ini vars.
sudo nano /etc/hhvm/php.ini
date.timezone = UTC upload_max_filesize = 32M post_max_size = 32M
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
sudo chmod -Rf 775 ~/foolfuuka sudo chown -Rf www-data:www-data ~/foolfuuka
Configure Nginx to host foolfuuka
sudo nano /etc/nginx/sites-enabled/default
root /home/ubuntu/foolfuuka/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
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
edit MariaDB to use utf8mb4 for correct unicode processing
sudo nano /etc/mysql/my.cnf
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
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 transparent_hugepage=never
to GRUB_CMDLINE_LINUX_DEFAULT
, 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
sudo nano /etc/security/limits.conf
* soft nofile 63545 * hard nofile 63545 * soft nproc 63545 * hard nproc 63545
Increase mysql file limit:
sudo nano /etc/mysql/my.cnf
# Put this after [mysqld] open-files-limit=40000
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.
- 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
6144m
.- If you aren't archiving more than 8 boards, this probably won't be an issue that you need to deal with.
- The permsize is about the permanent generation objects: depends on your heap size.
- 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 > Search > 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