ruby : 2.2.3 rubygems : 2.4.5 rails : 4.2.4
Add below mentioned both entrys 127.0.0.1 server url <serverip> server url #This was tested in CentOS 6.5. yum install epel-release -y yum update -y yum groupinstall "Development Tools" -y yum groupinstall "Additional Development" -y yum install gcc gcc-c++ make wget libtool libxml libxml-devel libxslt libxslt-devel subversion curl-devel java-1.7.0-openjdk java-1.7.0-openjdk-devel git-core openssl-devel -y yum install ImageMagick ImageMagick-devel -y yum install gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel -y
useradd -m expdev01 vi /etc/sudoers expdev01 ALL=(ALL) NOPASSWD: ALL ##add this line su - expdev01
a) Install rbenv
# Check out rbenv into ~/.rbenv. git clone https://github.com/sstephenson/rbenv.git ~/.rbenv # Add ~/.rbenv/bin to your $PATH for access to the rbenv command-line utility. echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile # Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile. echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # Restart your shell so that PATH changes take effect. (Opening a new terminal tab will usually do it.) # Now check if rbenv was set up - type rbenv #=> "rbenv is a function"
b) Install rbenv-build
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
c) Install ruby 2.2.3
rbenv install 2.2.3
d) Update rubygems to 2.4.5
rbenv global 2.2.3 #make this version of ruby global rbenv rehash #reload shims gem -v #check the gem version (Most likely this will be 2.4.5.1) gem install rubygems-update update_rubygems gem update --system '2.4.5' mkdir -p ~/.rbenv/plugins git clone git://github.com/dcarley/rbenv-sudo.git ~/.rbenv/plugins/rbenv-sudo
yum install wget -y
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm
yum install mysql-community-server.x86_64 -y
/etc/init.d/mysqld start
mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("GIVE-NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
Install Passenger and Nginx
passenger-install-nginx-module
copy the nginx.conf file from "/opt/nginx/conf/nginx.conf" from existing machine to the new machine on the same location and change "server_name" and "passenger_pre_start"
server_name newqa01.performexa.com;
passenger_pre_start "http://newqa01.performexa.com/";
vi /opt/nginx/conf/nginx.conf
worker_processes 3;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
passenger_root /home/expdev01/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.0.18;
passenger_ruby /home/expdev01/.rbenv/versions/2.2.3/bin/ruby;
passenger_min_instances 1;
passenger_max_pool_size 3;
passenger_pre_start "http://newqa01.performexa.com/";
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 32k;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 12;
server_tokens off;
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 15;
server {
listen 80;
server_name newqa01.performexa.com;
rewrite ^/?(.*) https://$host/$1 redirect;
}
server {
listen 443 ssl;
server_name newqa01.performexa.com;
ssl_certificate /opt/nginx/ssl/server.crt;
ssl_certificate_key /opt/nginx/ssl/server.key;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/pki/tls/private/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
passenger_enabled on;
passenger_app_env staging;
root /deploy/performance/current/public;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
}
}
copy the ssl folder from existing machine to the new machine ( which contain ssl certificates) zip -r ssl.zip /opt/nginx/ssl put it into ftp login to the new machine cd /opt/nginx connect to ftp and download the ssl.zip file unzip ssl.zip copy the nginx.conf file from "/opt/nginx/conf/nginx.conf" from existing machine to the new machine on the same location change the old machine name with the newone
Download the latest version of Ejabberd from www.process-one.net website, at the time of writing this document 15.07 was the latest.
wget "https://www.process-one.net/downloads/downloads-action.php?file=/ejabberd/15.07/ejabberd-15.07-linux-x86_64-installer.run" chmod 751 ejabberd-15.07-linux-x86_64-installer.run ./ejabberd-15.07-linux-x86_64-installer.run Do you accept this license? [y/n]: y Installation Directory [/opt/ejabberd-15.07]: ejabberd server domain [newqa01.performexa.com]: newqa01.performexa.com (Specify the Fully qualified name - Hostname) Administrator username [admin]: Administrator password [********] : Retype password [********] : Cluster [y/N]: n Do you want to continue? [Y/n]: y ---------------------------------------------------------------------------- Please wait while Setup installs ejabberd on your computer. Installing 0% ______________ 50% ______________ 100% ######################################### ---------------------------------------------------------------------------- cd /opt/ejabberd-15.07/bin cp ejabberd.init /etc/init.d/ejabberd /etc/init.d/ejabberd start
1. Change the config settings. Config file can be found in your ejabberd directory under conf (ex - /opt/ejabberd-15.07/conf/ejabberd.yml)
Change “register:” (around line 481)
register:
all: allow
registration_timeout: infinity
Change “registration_timeout:” (around line 494)
registration_timeout: infinity //(yaml file level)
Enable “mod_ping”
mod_ping:
send_pings: true
ping_interval: 250
timeout_action: none
2. Start/Restart ejabberd
3. Create a shared roster for every one.
4. Add a host entry for the IP pointing to the URL.
vi /opt/ejabberd-15.07/conf/ejabberd.yml
1) insert the below lines on line number 161 under "http_bind: true" ( search for "http_bind: true")
*******************************************************************************************************
tls: true
certfile: "/opt/ejabberd-15.07/conf/server.pem"
2) uncomment and do the changes in Line No: 171 from "optional" to "required"
******************************************************************************
s2s_use_starttls: required
3) uncomment the below mentioned line in Line No: 176
*********************************************************
s2s_certfile: "/opt/ejabberd-15.07/conf/server.pem"
4) set the value for "max_fsm_queue: 25000" in Line No : 375
**************************************************************
max_fsm_queue: 25000
5) search for "register:" in Line No: 483 and place the below line under "all: allow"
***************************************************************************************
registration_timeout: infinity
6) search for "By default the frequency of account registrations from the same IP is limited to 1 account every 10 minutes. To
disable, specify: infinity" and place the below mentioned line in Line No:496
*******************************************************************************************************************************
registration_timeout: infinity
7) search for "mod_ping:" and do the below changes in Line No: 574 ( Hint : remove "[]" in mod_ping )
*******************************************************************************************************
mod_ping:
send_pings: true
ping_interval: 120
timeout_action: none
Generate the server.pem file
cd /opt/nginx/ssl cat server.crt server.key > server.pem cd /opt/ejabberd-15.07/conf mv server.pem ejabbert-original-server.pem cp /opt/nginx/ssl/server.pem . cd /opt/ejabberd-15.07/conf chmod 640 server.pem chown -R ejabberd:root server.pem
gem install capistrano -v 3.4.0 gem install capistrano-bundler -v 1.1.4 gem install capistrano-ext -v 1.2.1 gem install capistrano-log_with_awesome -v 0.0.2 gem install capistrano-passenger -v 0.2.0 gem install capistrano-rails -v 1.1.6 gem install capistrano-rbenv -v 2.0.4 gem install capistrano-stats -v 1.1.1 gem install god -v 0.13.7
mkdir /var/run/god/ chown -R expdev01:expdev01 /var/run/god
To Install mysql2 (Interface)
gem install mysql2 -v '0.3.20'
The Application uses bundler gem to manage the gem dependencies. Install the bundler gem first.
sudo gem install bundler
Once the bundler gem is installed, from the application directory (eg: /deploy/crossbow/current), run
bundle install
This would install all the necessary gems required by the application.
mkdir -p /deploy/performance/current
cd /deploy
mkdir systasks
cd /deploy/performance
mkdir backups
mkdir shared
mkdir releases
cd /home/expdev01
Issue the command from /home/expdev01 to download the configuration files from SVN for performexa staging site
****************************************************************************************************************
svn co https://repos.exphosted.com/svnrepos/tools/scripts/performexa/deployment/staging/performance/
cp -r /home/expdev01/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0 /deploy/performance/shared/bundle/ruby/
cd /home/expdev01/performance
./runcap.sh
copy the build folder from "/home/expdev01/" to "/deploy/performance/releases/" ( eg "1.0.9.0-JACK" folder)
**************************************************************************************************************
cp -r /home/expdev01/1.0.9.0-JACK /deploy/performance/releases/
cd /deploy/performance
ln -s current /deploy/performance/releases/1.0.9.0-JACK/
cd /deploy/performance/releases/1.0.9.0-JACK/config
mv api.yml bkp-api.yml
mv newrelic.yml bkp-newrelic.yml
mv database.yml bkp-database.yml
mv chat.yml bkp-chat.yml
mv environments bkp-environments
copy the following files from "/deploy/performance/releases/1.0.9.0-JACK/config" directory to "/deploy/performance/shared/config"
*********************************************************************************************************************************
cd /deploy/performance/releases/1.0.9.0-JACK/config
cp api.yml /deploy/performance/shared/config
cp database.yml /deploy/performance/shared/config
cp chat.yml /deploy/performance/shared/config
cp newrelic.yml /deploy/performance/shared/config
cp -r environments /deploy/performance/shared/config
Add the following in "api.yml" ( e.g - In my case it is staging )
******************************************************************
vi api.yml
staging:
doorkeeper_token_expire_time: <%= 30.days %>
enabled_for_subsites: false
enabled: true
Change the Database name and credentials for staging
*****************************************************
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: Expertus1@
host: localhost
production:
<<: *default
database: production
staging:
<<: *default
database: performance_staging
development:
<<: *default
database: performance_development01
#test:
# <<: *default
# database: performance_development
Do the changes (server, bosh , websocket , admin_jid and admin_password in staging block in chat.yml)
*****************************************************************************************************
staging:
server: https://newqa01.performexa.com:5280
bosh: https://newqa01.performexa.com:5280/http-bind
websocket: wss://newqa01.performexa.com:5280/websocket
domain: newqa01.performexa.com
enabled: true
create_xmpp_user: true
reconnect_timeout: 10000
admin_jid: admin@newqa01.performexa.com
admin_password: Expertus1@
push_notifications: true
stun: {
host : 'stun.services.mozilla.com',
port : 3478,
transport : 'udp'
}
test:
server: http://qa01.performexa.com:5280
websocket: ws://qa01.performexa.com:5280/websocket
domain: qa01.performexa.com
bosh: http://qa01.performexa.com:5280/http-bind
enabled: false
create_xmpp_user: false
production:
server: http://qa01.performexa.com:5280
websocket: ws://qa01.performexa.com:5280/websocket
domain: qa01.performexa.com
bosh: http://qa01.performexa.com:5280/http-bind
enabled: false
create_xmpp_user: false
Do the changes in "/deploy/performance/releases/1.0.9.0-JACK/config/environments/staging.rb"
*********************************************************************************************
APP_URL = "https://newqa01.performexa.com"
API_URL = "https://newqa01.performexa.com"
AUTHENTICATION_URL = "https://newqa01.performexa.com"
Create a symlink from "/deploy/performance/shared/config" directory
********************************************************************
cd /deploy/performance/shared/config/
ln -s /deploy/performance/shared/config/api.yml
ln -s /deploy/performance/shared/config/database.yml
ln -s /deploy/performance/shared/config/chat.yml
ln -s /deploy/performance/shared/config/newrelic.yml
ln -s /deploy/performance/shared/config/environments
copy "/etc/init.d/god" script from qa01.performexa.com and paste into the same location with "newqa01.performexa.com" and changed the ownership of the file file to "expdev01" chown -R expdev01:expdev01 /etc/init.d/god chmod 755 /etc/init.d/god check out the god.sh from the below svn link execute the below command from /deploy/systasks cd /deploy/systasks svn co https://repos.exphosted.com/svnrepos/tools/scripts/performexa/services/staging/god.sh . change the ownership and permission chown -R expdev01:expdev01 /deploy/systasks/god.sh chmod 755 /etc/init.d/god start the god service /etc/init.d/god start
The Application uses bundler gem to manage the gem dependencies. Install the bundler gem first.
sudo gem install bundler
Once the bundler gem is installed, from the application directory (eg: /deploy/crossbow/current), run
bundle install
This would install all the necessary gems required by the application.
bundle install will end with this message:
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Modify the database.yml file to reflect proper DB settings in development and test section and then run following rake task to create all the databases.
bundle exec rake db:create:all
Once the DBs are created run the migrations to create necessary tables using following command.
bundle exec rake db:migrate bundle exec rake db:migrate RAILS_ENV=test
Run rake db:seed to create the default company and related data (This is just one time task)
bundle exec rake db:seed
The default company will be created with name 'Performexa' and subdomain as 'default'. No subdomain in url will refer to default company. e.g. http://dev01.performexa.com will take default company as a context. An admin user for the default company will also be created. The username for admin user is 'admin@performexa.com' and password is 'pforperformance'.