Category Archives: Debian

Updating ghost-cli process name

Imagine you’ve created your new Ghost install but have set it up with the incorrect process name. The official documentation does not tell us how to update it, it just tells us that it can be set using the --pname flag during initial installation. Let’s look at how we can update the process name after we’ve installed our site.

Run ghost ls

Ghost ls output

So in this case, I wanted to rename bitsnbytes-thecurlybraces-com to bitsnpieces-thecurlybraces-com

First stop the running server process using ghost stop bitsnbytes-thecurlybraces-com.

Open the .ghost-cli file in the folder where the site / server is deployed. You’ll see the following content,

Change the name key to the following – bitsnpieces-thecurlybraces-com.

Restart with ghost restart bitsnpieces-thecurlybraces-com and you should now see the updated name in the ghost ls.

After you do this, you might have to reconfigure systemd. To do that, run the following command –

Incase you forget to stop the server before renaming the ghost-cli file, and you had configured systemd, you’ll not be able to start the server. You might be shown the following error –

To fix this, you’ll have to go through some extra steps.

Disable systemd for the blog and restart

Delete this file from the ghost site installation folder first –

Also remove a symlink from under /etc/systemd/system/ that was created by ghost-cli.

Restart systemd.

Stop the old server process

Now that we’ve disabled systemd, killing the node process will not cause it to restart.

Use a software like htop to kill the running server process. If you don’t do this and try to start the new server, you’ll get an error stating that the port is already in use.

Once done, you should be able to start your server again.

Note that if you are doing this, you might also have to do the following,

  1. Update the virtual host in nginx from to Click here to find out how to do that.
  2. Add or update the domains under your Let’s Encrypt certificate. Click here to find out how to do that.

Renewing Let’s Encrypt certificate

Have the following command setup in my crontab to renew the certificate for this blog, and for the main website –

This causes the command to run,

At 03:30 on day-of-month 1 in every 2nd month.


Incase you want to add more domains to an existing certificate, you can use the following command –

This assumes that you have only a single certificate. If you’ve more, you’ll have to use --cert-name. Read more here.

Just putting this here for reference, and with the hope that it might be useful for someone else.

Setting up a blog using Ghost on Debian

My web hosting’s annual payment date was drawing close, and instead of renewing it, I decided I’d rent a server on Digital Ocean for 10$ a month. It turns out to be a lot more expensive but gives me the option to use the server for something other than just blogging and running PHP application.

After shifting to this new server, the first thing to do was to migrate my blog here. WordPress is an amazing platform, but over the years it has evolved to something a lot more than just a blogging tool. Besides the new kid on the block – Ghost, was creating a lot of buzz for its simplicity. I wanted to give it a try.

I setup my Digital Ocean server with Debian (Jessie 8.2). Node.js is required to run Ghost. Since I wanted to use this server for multiple applications, I decided I’d put nginx as a front facing proxy/compression server.

This blog item is a guide for setting up Ghost on a server running Debian. Let’s start,

Setting up the server

After logging onto the server for the first time, I noticed that sudo was missing, so this was the first thing to do.

Next, I decided to create a normal sudo user to do my work as, working as the root user at all times is probably not the best idea.

I then proceeded to install nginx-light since the features in it sufficed my needs.

I decided to build the Node.js source and for this, I needed g++ and make

I then grabbed the Node.js source from their website, and proceeded to build it. Do note that this approach does take a while, for me it took about 30 minutes. Ghost.js recommends that we use the LTS version of Node.js

Ok, so that’s the base setup done, let’s now setup Ghost.

Setting up Ghost

Let’s first grab Ghost from their website

We’ll need to install unzip to run Ghost.

Then move the whole extracted folder to the /var/www/html folder where web applications are traditionally kept.

Running your Node.js application as a root user is generally a bad idea. If your website gets hacked, the hacker will have root access to your machine. We’ll create a system user that will run just our website. We will then shift to that user to work with our website. For our guide purpose, let’s name the user as website-user

Install the modules that Ghost needs to run in production mode.

Start and then stop the server, so that it creates a base config.js file that we will then tweak.

Ok, time to make modifications to the config.js file. The following needs to be modified –

  • Set the url to
  • Under connection, set filename to
  • Under server, set the host as
  • Under server, set the port as 3001
  • Turn off gzipping, set compress as false. We’ll set it up using nginx later.

Change the website-user’s .profile file and add the following at the end of it to run Ghost in production mode. This file is usually in the home directory of the user.


Now change to the sudo user (abijeet) that we had added initially and install pm2. We’ll use pm2 to monitor our app, and restart it in case of a crash.

Start running the server using pm2

Finally, we’ll instruct pm2 to restart the Ghost application whenever the server is restarted.

Next, its time to setup routing and compression on nginx.

Setting up nginx

Create a file under /etc/nginx/sites-available

Put the following content in the file,

Create a symbolic link to this file under /etc/nginx/sites-enabled.

Remember to remove the default file present under /etc/nginx/sites-enabled/ and /etc/nginx/sites-available/.

Turn on gzipping for nginx. The following goes into the /etc/nginx/nginx.conf

This section might already be present under the nginx.conf file, so search before you add it.

Also add the following to nginx, to prevent it from sending the version number in HTTP response headers.

Alright, once all that is done, time to restart nginx. But first we’ll check the configurations.

We’re done. Type in the URL of your website in a browser, and you should see Ghost’s startup page.

My tools on Linux

Update 2016-01-16

Development of Crunchbang has now stopped. There are a few community spin-offs available, Bunsen Labs and Crunchbang++. I’m now using a netinst version of Debian at home with the i3 window manager, and Bunsen Labs on my office laptop. Both are working well. I’m still using the same set of software for my work, in addition to a few more, so this post is still valid.

I’ve been using Linux at home and work for over 5 months now. I’m using a Debian based distribution called Crunchbang. Over these past few months I’ve developed/programmed using multiple technologies and have gathered a collection of tools, that I use on a daily basis.

Name Type Link
Eclipse with NodeEclipse – Check Update IDE for Node.js Link
Netbeans IDE for PHP Link
Dbeaver GUI client for Cassandra and others Link
MySQL Workbench MySQL/MariaDB GUI client Link
Dia Flowchart and Diagrams Link
SoapUI Testing – API and Web Services Link
Tilda Drop down terminal Link
Meld Mergetool Link
Remmina GTK RDP Client Link
Tomboy Note Taking App Link
GMTP MTP Client Link
GIMP Image manipulation Link

Integrated Development Environment


Update 2015-10-23 – I’m now using VSCode to develop Node.JS applications.

Used for Node.JS. Cross Platform.

For Node.JS, Eclipse with Eclipse Web Tools Platform, EGit and the NodeEclipse plugin work quite well. It supports debugging although you don’t have a Visual Studio esque Immediate Window. I’m using EJS as my templating language and with a little configuration I was able to set up Eclipse to highlight an EJS file as an HTML file.

I’m also using the AngularJS Eclipse plugin for my frontend development.

The UI organization in Eclipse is very good. If you are new to Eclipse, you can save yourself some headache by learning about Perspectives.


Used for PHP, Cross platform.

For PHP, Netbeans takes the cake. It comes pre-installed with a PHP debugger which can be easily configured by modifying your php.ini file. In addition it has support for Git and SVN out of the box (requires plugins but they come preinstalled). I’ve added support for AngularJS via a plugin. There isn’t much configuration to talk about when it comes to Netbeans, so I’ll just leave a few images that should help you setup debugging. I would have liked to use Netbeans for NodeJS as well, but the NodeJS plugin doesn’t seem to be actively maintained. I’ll probably revisit it again in the future.



For wide variety of databases. Cross platform.

For one of my recent projects, I’ve had to work with Cassandra and MariaDB. Dbeaver is a no – nonsense tool that allows me to work with both. The UI is similar to Eclipse (lacks Perspectives). In addition to MariaSQL/MySQL and Cassandra, dbeaver also supports a ton of other database systems.

MySQL WorkBench

Cross platform.

For more advanced stuff related to MariaDB/MySQL I prefer to use MySQLWorkbench. I use it to manage users and permissions. Managing import/export, database configurations is also quite easy. I’ve also used it to generate beautiful schema diagrams.

Flowchart and Diagrams


Cross platform.

Drawing flowcharts and other diagrams is easy with Dia. It isn’t the prettiest looking software, but it gets the job done. It creates diagrams in the .dia format but these can then be exported into various formats such as transperent PNG and SVG.



Cross platform.

SoapUI is an API testing tool. I use SoapUI to look at responses from a third party Web Services (both SOAP based or REST). In addition, I also use it to test and load test my REST based APIs and Web Services. You can setup test cases and run these after every deployment.

Here’s a video that will help you get started.



Type – Dropdown Terminal
Linux and Unix only

Tilda is an awesome GTK based dropdown terminal. I have it hooked to the F1 key on my keyboard. Whenever I want to run a quick command, I hit the F1 key and out pops the terminal. You can even open multiple tabs inside it. You can change it’s height and width, transperency levels, animation, font, color schemes among other stuff.


Type – Merge-tool
Cross platform

Meld is a merge-tool that I use with Git and SVN. It supports three way merging but that requires a bit of tweaking. Meld can also be used to compare files that are not a part of a versioning system.

It has a help guide and this video should get you started.


Type – Remote Desktop Client
Cross Platform

I use Remmina to connect to my PC at work, and other Windows systems to test my web applications on a Windows platform and Internet Explorer. It’s easy to setup and use. I would urge Windows user to check this software out since it adds some more features on top of the vanilla mstsc application.

Check it out here.


Type – Note taking application.
Cross Platform

Tomboy is a pretty amazing note taking app. I use it along with Dropbox to sync notes between work and home. You can link notes together and notes can be categorized into notebooks. It supports some amount of formatting as well (bold, italics, underline, font size and such). There is also an Android version of the app, but I had trouble getting it to sync with my PC notes via Dropbox.

There are a couple of things I’d like to have though.

  1. Save certain notebooks in a different location so I can avoid syncing all my notes to my office PC.
  2. Markdown support.


Type – MTP Client
Linux and Unix only

When you search on Google, you’ll find a lot of people complaining about their Nexus 7’s not being detected on Linux. It uses libmtp and allows transfer to and from media devices. It’s not very stable, and you have to be “gentle” when you use it, but it gets the job done.


Type – Image manipulation
Cross Platform

I’m mainly a programmer, so I don’t do much image editing but for times when I do need an image editing application, GIMP works well. It’s got a slight learning curve, but it comes with the benefit that I can do more “advanced” stuff with it, without having to move to another app. If you are looking for something simpler and more like Windows Paint, I’d recommend giving Pinta a try.

That’s it for now. I hope to keep making more posts of this kind as time passes by and I gain more experience with Linux. I’m sure I’ll have many more things to share/catalog in the future.