In this tutorial, we will explain how to install Publify on an Ubuntu 14.04 VPS with MariaDB, Puma and Nginx. Publify is a simple but full featured open source web publishing software. Publify is built on Ruby on Rails framework and it is the oldest Rails open source project alive. This guide should work on other Linux VPS systems as well but was tested and written for Ubuntu 14.04 VPS.
Login to your VPS via SSH
ssh user@vps
Update the system and install necessary packages
[user]# sudo apt-get update && sudo apt-get -y upgrade [user]# sudo apt-get install software-properties-common imagemagick build-essential git openssl nano
Install MariaDB 10.1
[user]# sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db [user]# sudo add-apt-repository 'deb [arch=amd64,i386] http://mirrors.accretive-networks.net/mariadb/repo/10.1/ubuntu trusty main' [user]# sudo apt-get update [user]# sudo apt-get install mariadb-server libmariadbclient-dev
When the installation is complete, run the following command to secure your installation:
[user]# sudo mysql_secure_installation
Next, we need to create a database for our Publify installation:
[user]# mysql -uroot -p MariaDB [(none)]> CREATE DATABASE publify CHARACTER SET utf8; MariaDB [(none)]> GRANT ALL PRIVILEGES ON publify.* TO 'publify'@'localhost' IDENTIFIED BY 'publify_passwd'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> \q
Publify user
Create a new system user for Publify.
[user]# sudo adduser --home /opt/publify --shell /bin/bash --gecos 'Publify publishing software' publify [user]# sudo install -d -m 755 -o publify -g publify /opt/publify [user]# sudo usermod -a -G sudo publify [user]# sudo su - publify
Install Ruby using RVM
The following commands are run as publify user.
[publify]# cd [publify]# curl -sSL https://rvm.io/mpapis.asc | gpg --import - [publify]# curl -sSL https://get.rvm.io | bash -s stable --ruby [publify]# rvm install ruby-2.1.5
To start using RVM run the following command:
[publify]# source ~/.rvm/scripts/rvm
To verify everything is done correctly, use the command ruby --version
.
The output should be similar to the following:
[publify]# ruby --version ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
Install Publify
Clone the latest release of Publify from github using the following command:
[publify]# cd && git clone https://github.com/publify/publify.git
[publify]# git checkout v8.2.0
Copy database.yml.mysql as database.yml
[publify]# cp ~/publify/config/database.yml.mysql ~/publify/config/database.yml
Open the database.yml
file and update username/password
[publify]# vim ~/publify/config/database.yml
production: login: &login adapter: mysql2 host: localhost username: publify password: publify_passwd
Create a new Puma configuration file.
[publify]# nano ~/publify/config/puma.rb
#!/usr/bin/env puma application_path = '/opt/publify/publify' directory application_path environment 'production' daemonize true pidfile "#{application_path}/tmp/pids/puma.pid" state_path "#{application_path}/tmp/pids/puma.state" stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log" bind "unix://#{application_path}/tmp/sockets/publify.sock"
[publify]# mkdir -p ~/publify/tmp/{pids,log,sockets}
Install Gems
[publify]# cd ~/publify [publify]# echo "gem 'puma'" >> Gemfile [publify]# echo "gem: --no-ri --no-rdoc" >> ~/.gemrc [publify]# RAILS_ENV=production bundle install --without development test postgresql sqlite
Prepare the database and compile the assets
[publify]# RAILS_ENV=production rake db:setup [publify]# RAILS_ENV=production rake db:migrate [publify]# RAILS_ENV=production rake db:seed [publify]# RAILS_ENV=production rake assets:precompile
Create an Upstart script
[publify]# sudo nano /etc/init/publify.conf
description "Puma Publify Service" start on filesystem or runlevel [2345] stop on runlevel [!2345] setuid publify setgid publify respawn respawn limit 3 30 script exec /bin/bash << EOT source /opt/publify/.rvm/scripts/rvm cd /opt/publify/publify exec puma -C config/puma.rb EOT end script
You can now start your Publify service with :
[publify]# sudo service publify start
Install and Configure Nginx
The latest version of Nginx 1.8 is not available via the default Ubuntu repositories, so we will add the “nginx/stable” PPA, update the system and install the nginx package.
[user]$ sudo add-apt-repository ppa:nginx/stable [user]$ sudo apt-get update [user]$ sudo apt-get install nginx
Create a new Nginx server block with the following content
[publify]# sudo nano /etc/nginx/sites-available/publify.domain.com
upstream publify { server unix:/opt/publify/publify/tmp/sockets/publify.sock; } server { server_name publify.domain.com; root /opt/publify/publify; location / { try_files $uri @ruby; } location @ruby { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_read_timeout 300; proxy_pass http://publify; } }
Activate the server block by creating a symbolic link and restart Nginx:
[user]# sudo ln -s /etc/nginx/sites-available/publify.domain.com /etc/nginx/sites-enabled/publify.domain.com [user]# sudo service nginx restart
That’s it. You have successfully installed Publify on your Ubuntu VPS. For more information about Publify, please refer to the Publify website.
Of course you don’t have to do any of this if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to setup this for you. They are available 24×7 and will take care of your request immediately.
PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.