Openbay : full installation guide on FreeBSD
Rédigé par Xavier - -
Openbay is not easy to install because of the lack of documentation and sphinxsearch which is unknown for many people (like me). I bet there are crazy admins who wants to install Openbay on a FreeBSD server. So I wrote a full tutorial to install it with isohunt's centralized database (Option 1), or with a local one (Option, the hardcore mode).
This tutorial has been tested on FreeBSD 10.1 amd64 with jails. I use mysql56 and php56 because they are available in the ports but older versions should work (php54 or php55). You can use mariadb if you want.
Note: Unfortunately, it's not possible to install the the packages with "pkg install" because some options are missing (for example the php lack the pdo-mysql and mbstring support). You have to work this the ports, that means build everything.
Option 1 : Minimal installation
If you are in a hurry, this is the easiest and fastest way to install openbay. All you need is a web server (nginx) and php. Your openbay installation will use the isohunt's centralized database.
Ports installation
Install these ports :
- www/nginx
- lang/php56
- lang/php56-extensions [select pdo-mysql and mbstring]
- git
Open /etc/rc.conf.local and add :
nginx_enable="YES" php_fpm_enable="YES"
Now, fetch openbay and set the permissions :
# mkdir -p /home/htdocs # cd /home/htdocs # git clone https://github.com/isohuntto/openbay.git # chown -R www: /home/htdocs/openbay
Nginx configuration
Edit /usr/local/etc/nginx/nginx.conf :
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name openbay.dev;
root /home/htdocs/openbay/src/www;
index index.php;
set $yii_bootstrap "index.php";
charset utf-8;
gzip on;
gzip_comp_level 3;
gzip_types text/plain text/css text/javascript application/javascript application/json application/x-java
script text/xml application/xml application/xml+rss;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|svg)$ {
fastcgi_hide_header Set-Cookie;
open_file_cache max=10000 inactive=14d;
open_file_cache_errors on;
open_file_cache_min_uses 3;
open_file_cache_valid 1m;
output_buffers 1 2m;
expires 14d;
}
location ~* \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
#fastcgi_param HTTPS $https_value;
}
}
}
Php-fpm configuration
Open /usr/local/etc/php-fpm.conf, locate listen = 127.0.0.1:9000 and modify like this :
#listen = 127.0.0.1:9000 listen = /var/run/php-fpm.sock listen.owner = www listen.group = www
At the end of the file, add :
php_admin_value[date.timezone] = Europe/Paris
Now you can start/restart php-fpm and nginx :
# service nginx start # service php-fpm start
Configuration wizard
Now open http://YOURSERVERIP.
The only thing you have to set is the name for your Openbay instance. Leave all the switches to "ON".
Click on "deploy" !
Option 2 : Full installation
This is a hardcore mode, for true sysadmins. This time you will need your own database (mysql) and sphinxsearch.
Warning : Sphinx uses a lot of memory. Make sure your have at least 4GB available.
Ports installation
Install the following ports :
- www/nginx
- databases/mysql56-server
- lang/php56
- lang/php56-extensions [select pdo-mysql and mbstring]
- textproc/sphinxsearch
- git [defaults]
Open /etc/rc.conf.local and add :
nginx_enable="YES" php_fpm_enable="YES" mysql_enable="YES" sphinxsearch_enable="YES"
Now, fetch openbay :
# mkdir -p /home/htdocs # cd /home/htdocs # git clone https://github.com/isohuntto/openbay.git # chown -R www: /home/htdocs/openbay
MySQL-server configuration
Make sure mysql-server is running and use the mysql_secure_installation script to secure everything.
Then create a user and a database :
# mysql -u root -p > create database dbopenbay; > create user 'openbay'@'localhost' identified by 'password'; > grant all privileges on dbopenbay.* to 'openbay'@'localhost' identified by 'password'; > flush privileges; > exit
Now you must find a valid dump of the piratebay/isohunt database. The official website have a link to download a .csv but I recommend this thread. Download and extract torrents_mini.sql (1,3 Gio) on your server.
Now you have to import the .sql file on your database :
# mysql -u openbay -p dbopenbay < torrents_mini.sql
This may takes up to 1 hour !
Sphinxsearch configuration
Make sure sphinxsearch is stopped. Then edit /usr/local/etc/sphinx.conf :
source opb_dbconnect {
type = mysql
sql_host = localhost
sql_user = openbay
sql_pass = password
sql_db = dbopenbay
sql_port = 3306
sql_query_pre = SET NAMES utf8
}
index opb_common {
source = opbtorrents
path = /var/db/sphinxsearch/data/opb_common
docinfo = extern
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
#min_word_len = 2
enable_star = 1
#min_infix_len = 3
#min_prefix_len = 3
expand_keywords = 1
index_exact_words = 1
morphology = stem_enru
min_stemming_len = 4
dict = keywords
ngram_len = 1
ngram_chars = U+4E00..U+9FBB, U+3400..U+4DB5, U+20000..U+2A6D6, U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, U+FA29, U+3105..U+312C, U+31A0..U+31B7, U+3041, U+3043, U+3045, U+3047, U+3049, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3063, U+3066, U+3068, U+306A..U+306F, U+3072, U+3075, U+3078, U+307B, U+307E..U+3083, U+3085, U+3087, U+3089..U+308E, U+3090..U+3093, U+30A1, U+30A3, U+30A5, U+30A7, U+30A9, U+30AD, U+30AF, U+30B3, U+30B5, U+30BB, U+30BD, U+30BF, U+30C1, U+30C3, U+30C4, U+30C6, U+30CA, U+30CB, U+30CD, U+30CE, U+30DE, U+30DF, U+30E1, U+30E2, U+30E3, U+30E5, U+30E7, U+30EE, U+30F0..U+30F3, U+30F5, U+30F6, U+31F0, U+31F1, U+31F2, U+31F3, U+31F4, U+31F5, U+31F6, U+31F7, U+31F8, U+31F9, U+31FA, U+31FB, U+31FC, U+31FD, U+31FE, U+31FF, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9, U+A000..U+A48C, U+A492..U+A4C6
preopen = 1
}
source opbtorrents : opb_dbconnect {
sql_query_range = SELECT MIN(id), MAX(id) FROM torrents
sql_range_step = 100000
sql_query = SELECT tr.id AS id, tr.hash, tr.name, tr.tags, tr.category_id, UNIX_TIMESTAMP(tr.created_at) AS created_at, tr.size, tr.downloads_count, tr.seeders, tr.leechers, tr.torrent_status, \
tr.visible_status, \
tr.files_count AS files_count \
FROM `torrents` AS tr \
WHERE tr.id BETWEEN $start AND $end \
GROUP BY tr.id
sql_field_string = name
sql_field_string = tags
sql_attr_uint = category_id
sql_attr_timestamp = created_at
sql_attr_bigint = size
sql_attr_uint = downloads_count
sql_attr_uint = seeders
sql_attr_uint = leechers
sql_attr_uint = torrent_status
sql_attr_uint = visible_status
sql_attr_uint = files_count
sql_attr_string = hash
}
index opbtorrents : opb_common {
source = opbtorrents
path = /var/db/sphinxsearch/data/opbtorrents2
min_infix_len = 3
dict = keywords
}
indexer {
mem_limit = 32M
}
searchd {
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 0
pid_file = /var/run/sphinxsearch/searchd.pid
max_matches = 100000
seamless_rotate = 0
preopen_indexes = 1
unlink_old = 1
workers = threads
binlog_path = /var/db/sphinxsearch/data
}
Generate all indexes :
# indexer --all
This may take up to 1 hour. If no error you can now start sphinxsearch :
# service sphinxsearch start
Nginx configuration
Edit /usr/local/etc/nginx/nginx.conf :
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name openbay.dev;
root /home/htdocs/openbay/src/www;
index index.php;
set $yii_bootstrap "index.php";
charset utf-8;
gzip on;
gzip_comp_level 3;
gzip_types text/plain text/css text/javascript application/javascript application/json application/x-java
script text/xml application/xml application/xml+rss;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|svg)$ {
fastcgi_hide_header Set-Cookie;
open_file_cache max=10000 inactive=14d;
open_file_cache_errors on;
open_file_cache_min_uses 3;
open_file_cache_valid 1m;
output_buffers 1 2m;
expires 14d;
}
location ~* \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
#fastcgi_param HTTPS $https_value;
}
}
}
Php-fpm configuration
Open /usr/local/etc/php-fpm.conf, locate listen = 127.0.0.1:9000 and modify like this :
#listen = 127.0.0.1:9000 listen = /var/run/php-fpm.sock listen.owner = www listen.group = www
At the end of the file, add :
php_admin_value[date.timezone] = Europe/Paris
Now you can start/restart php-fpm and nginx :
# service nginx start # service php-fpm start
Configuration wizard
Open http://YOURSERVERIP.
Set a title for your openbay instance.
On the database section, switch to OFF with these parameters :
- Host : 127.0.0.1
- Port : 3306
- Database : dbopenbay
- Username : openbay
- Password : password
On the Sphinx section, switch to OFF with these parameters :
- Host : 127.0.0.1
- Port : 9306
Leave Cache and Log to ON.
Click on "deploy" !
Frequent errors / questions
404 Shit happens
Open /home/htdocs/openbay/src/protected/config/debug.php and turn on debugging. Reload your page to get a more explicit error.
Empty results
If you mess with sphinxsearch (running "indexer --all" more than 1 time) some times your database appears "broken" :
- Stop sphinxsearch
- Delete everything in /var/db/sphinxsearch/data
- Connect to mysql, drop the database
- Re create the database, don't forget to grant all privileges to 'openbay'@'localhost'
- Import the torrents_mini.sql
- Run indexer --all
- Start sphinxsearch
- Profit
Mysql or sphinxsearch get killed by pid
Yeah, searchd (sphinxsearch daemon) uses a lot of memory. Your server must have at least 4GB of memory.
How can I update my database ?
There are no updates at all. Just use the dump file (torrents_mini.sql) which is static.
I'm a normal person, I use debian or ubuntu
I try to write a similar tutorial for Ubuntu and Debian, wait a few days :)
Should I use the isohunt's centralized database or a local one ?
Well, since there are no updates at all and because of the huge memory consumption of sphinxsearch, I'd say use the centralized database. But there are two flaws :
- Privacy : all your request goes through Isohunt, this can be problematic
- Uptime : their database is under heavy load, you may get connection errors
So running a local database and sphinxsearch may be a reasonable choice after all.