Sumon Selim

Homo sapiens by Born. Coder by Heart. Entrepreneur by Passion.

SSH Login EC2 Instance

Accessing & Installing Web Server (LEMP) on Amazon EC2 Instance

On my last post, I wrote about how to create and launch an Amazon EC2 instance on Amazon Web Services (AWS). We had created an Amazon EC2 instance under AWS Free Tierand launched it successfully. Now we will go through step by step guide to SSH into the instance and then install Nginx, MySQL & PHP (LEMP) – which will be enough for us to host a simple PHP application.

Allocate IP Address to EC2 Instance

First of all, we will need to allocate an IP address to our instance. To do that we will need to go to the “Elastic IPs” section and click on the “Allocate New Address” button.

Allocate New Elastic IP

You will be allocated an IP address. Next, we will need to associate the IP address with our instance.

Associate IP Address with EC2 Instance

This IP address will be you public IP address to access your instance or server. Now we will need to SSH into this IP address to have control of the instance or server.

Security Group on EC2 Instance

You may also need to modify/add a security group to determine the access permission of the instance. Make sure to set access permission to the ports by which we will need to communicate. For example, here we are allowing access from anywhere to port 22 via SSH/TCP; so that we can SSH into the instance.

It’s time to login to our instance via SSH using the .pem file – we have got it earlier while launching our instance.

We will need to change the permission of the file first by running the following command:

Replace the file name and location according to your environment.

Then we will run the ssh command to login:

You will need to replace the private key file name and server IP address as per your environment and information.

After successful login, you will see something like this on your terminal.

SSH Login EC2 Instance

We have successfully got access to our instance and now we will install Nginx, MySQL and PHP to prepare a simple web server so that we can run and host our PHP application there.

First of all, we will install Nginx by running the following command:

This will install the Nginx server on our instance. Next we will install MySQL.

You will need to provide some information like MySQL root password while installing the MySQL server.

Next we will run sudo mysql_secure_installation to configure and set some basic settings for the MySQL server.

At last, we will install PHP (php-fpm) to our instance along with some other modules.

Next , we will need to configure php-fpm to work with our Nginx server.

To do this, we need to open the php.ini file and edit it. We may run the following command to do this:

This command will open the file on nano editor.

We will need the find the line cgi.fix_pathinfo and uncomment it. Then set the value to 0.

While using nano editor, you can type CTRL+W to search within the file.

Next, we will need to configure the default virtual host so that we can access our web pages.

Run the following command:

Edit the file according to your need and you will be ready. We need to tell Nginx that all our PHP files should be run by php-fpm. Here’s the information from my file:

You need to restart Nginx by running the following command and then you can visit your Public DNS name or domain name address to see the default folder of your web server.

Hope this helps. If you have any questions, feel free to ask on the comment section.


Launching Free Amazon EC2 Instance

Launching An Amazon EC2 Instance

I am a great fan of cloud hosting as it gives me ease and control to manage my own production environment as per my need. Luckily, Amazon Web Services (AWS) offers AWS Free Tier”  by using which we can get hands-on experience with AWS Cloud Services at no charge for 12 months. So, I took the chance to test drive their services. Today I am going to write about launching and preparing my first instance on Amazon EC2 service where we will host a web application developed using PHP (Laravel 5.1).

First, we will need to login to our AWS Management Console and select EC2. We will see a dashboard like below:

EC2 Management Console

You can see lots of options there. But to launch our first instance, click on the blue “Launch Instance” button. You will then be prompted to choose an AMI to launch your instance. An AMI is a template that contains the software configuration (operating system, application server, and applications) required to launch your instance.

I am going to select Ubuntu Server 14.04 LTS for on our instance and luckily it’s eligible to use with AWS Free Tier.

Choose an Amazon Machine Image (AMI)
Next, we will need to select our instance type. We will choose t1.micro type instance this time as our AMI is eligible to run on this instance and free tier is only eligible for micro instances.  If you are ready to afford some money to get more powerful instance, you can choose any other instance that fits you the best.

Choose Instance Type

On the next step, you can configure instance details as per your need . But I will keep the default configuration for now and move on to the next step.

Then we will need to add storage to our instance. Free tier eligible customers can get up to 30 GB of EBS General Purpose (SSD) or Magnetic storage. For now, I will add an EBS General Purpose (SSD) and allocate 20 GB of space and uncheck the “Delete on Termination” option so that my data remains available even after the termination of the associated instance.

Add Storage to EC2 Instance
Next, we can add tag to our instance. If you are confused about what this is all about, go through this:

Then we will need to configure security group  set firewall rules that control the traffic for our instance. For now, I am going to select the existing security group which will allow all traffic to access my instance. But for better security, you may modify these rules to prevent unauthorized access. Then click on “Review and Launch“. All the details of your instance will be shown. If needed you can make necessary changes, otherwise click on the “Launch” button.

Launch an Amazon EC2 Instance

Next, you will be able to create e new key pair which you will need to login to your instance. Give the key pair a name, download the Key Pair (.pem) file and click “Launch Instances“. Please keep in mind that you have to download the private key file (*.pem file) before you can continue. Store it in a secure and accessible location. You will not be able to download the file again after it’s created.

It will take some time to complete the instance launching process. After that, you will see a page with Launch Status of your instance.  Voila! You are ready with your first Amazon EC2 instance now :)

Launch Status of Amazon EC2 Instance

If you visit the “Instances” section now, you will see that your running instance is listed there.  On our next part, we will connect with our newly created instance via SSH and install the necessary software to run a web server.

Note: If you are looking for a paid cloud hosting provider, I would recommend Digital Ocean (affiliate link, will give you 10$ referral credit) which is being used to host this website. and I am pretty much happy with their service.

Increase Your WordPress File Upload Size Limit

Increase Your WordPress Maximum File Upload Size Limit

I’m a part-time WordPress developer and use it mostly to develop sites for my clients.  As most of the clients use shared hosting, sometimes I find it difficult to upload/install plugin and themes for the default maximum file upload size limit of the hosting.

Using .htaccess file

The most common solution to this problem is to use a .htaccess file in the root directory and add the following code to it:

This will override the existing values set by the host and you’ll be able to set the value as much as you want. Here, I am increasing the maximum file upload size limit to 32 MB.

Using php.ini file

You can also fix the problem by creating a php.ini file in your directory and add the following code to it:

But some hosting providers might not allow you to override the php.ini settings and .htaccess method can come handy then.

Hope this small piece of information will help you if you face this problem. Feel free to share your method of solving this problem with us.

Life is a battle!

Actually there’s no victory in life. Only battles. You have to keep fighting – all alone. Nobody will fight for you – actually nobody can. Some will try and quit. But it’s you – who can never quit!

LAMP on elementary OS Freya

Installing LAMP (PHP 5.6, Apache 2.4, MySQL 5.6) on Elementary OS

I’m a web and mobile application developer by profession and developing on LAMP (Linux, Apache, MySQL and PHP) stack for last couple of years. Now it’s time to get development environment ready on my newly installed elementary OS “Freya”. I will install everything separately instead of using the tasksel command.

At the time of writing this article, I’m installing the latest stable version of all the things I am going to need.

  • PHP 5.6
  • Apache 2.4
  • MySQL 5.6

Installing Apache 2.4

We will add the repository of the latest Apache version to our system by using the following command:

Then run the following two commands to install Apache 2.4:

Installing PHP 5.6

First, we will add the repository of the latest PHP version to our system by using the following command:

Then run the following two commands to install PHP 5.6:

This will install PHP on our system.

Installing MySQL 5.6

We will add the repository of the latest MySQL version to our system by using the following command:

Then run the following two commands to install MySQL 5.6:

This will install MySQL on our system.

You will be asked to set password for the “root” user for the MySQL server during the process.

Voila! Our development environment is ready now :)

If you visit http://localhost now, you will see the Apache2 Ubuntu Default Page.

Apache2 Ubuntu Default Page

Now let’s write some PHP code to check if everything is working properly. Let’s create a PHP file named info.php on the default document root folder of Apache web server which is /var/www/html and add the following code to the file:

Save the file. Then visit the file on your browser: http://localhost/info.php

You should get an output like this:

LAMP on elementary OS Freya


You may need to install some other PHP extensions and libraries according to your need manually. I will cover this in future. Feel free to comment if you have any queries.

guake, oh-my-zsh and screenfetch on freya

Customizing Terminal with Guake, oh-my-zsh and screenFetch on Elementary OS Freya

As I stated previously that I am a great elementary OS fan and installed the latest beta of elementary OS titled “Freya” few days ago. Now, it’s time to customize it and making it ready as my primary development environment. The first thing I am going to customize is my terminal because I am not that much fan of the default bash terminal.

First, I am going to install Guake to change the appearance behavior of my terminal. I really liked the drop-down approach of Guake which helps me to work without any flaw with so many things within the workspace.  I can just press the “F12” key to toggle the visibility of my terminal after installing Guake. There are couple of others handy customization options available too.

So, let’s install Guake. First we may update our system by running the following command on the terminal:

Then run the following command to install Guake:

There may be some others dependencies that need to be installed. If needed, you may install those.

After installing Guake, you may run it from the terminal by just running “guake” on the terminal or from the Applications menu.

You can customize the preferences according to your need by right clicking on the Guake terminal and clicking on the Preferences option.

properties Preferences for Guake Terminal

To use it instead of your default Terminal, you will need to add it on the Startup Applications so that every time you run your system you can use Guake immediately by just pressing “F12”. You may also change it according to your need.

To add Guake on the Startup Applications, go to your “System Settings” and select “Applications“. Then click on the “Startup” tab. Click on the “+” icon placed at the bottom left of the screen and select “Guake Terminal” from there.

Add Guake Terminal on Startup

From now, every time you start your system, Guake will run automatically.

Next, I am going to install oh-my-zsh as I like it very much. But first, I need some other things to install first such as curl, git, vim and zsh.

To install them run the following:

Then we can use the automatic installer to install oh-my-zsh on our system easily.

After installation, we just need to set oh-my-zsh as the default terminal from our Guake terminal. To do that open the Preferences option and just set “/bin/zsh” as the default interpreter.

Re-start the terminal now. And we will be ready to go :)

oh-my-zsh terminal with guake

At last, I will add screenFetch to add some system/theme information in terminal. For elementary OS, run the following commands on terminal:

Thanks to memoryleakx for his screenFetch special version for elementary OS.

At last, we have to add the following line to the end of our .zshrc file:

Here’s the final look of my terminal:

guake, oh-my-zsh and screenfetch on freyaLet me know what you think of it!

Date and time visibility problem fixed on Freya Beta 1

Fixing Date and Time Visibility Problem on elementary OS Freya Beta

I am a hardcore elementary OS lover and was using Luna for a long time. But couldn’t wait more for the new version of elementary OS Freya and decided to move onto it. So installed Freya Beta 1 64 bit on my HP ProBook 4420s as my primary OS replacing Luna 32 bit.

The Problem: But I found that time and date is missing on the top bar (wingpanel).

Date and Time problem on Freya Beta 1The solution:

After googling, I found out that the solution is to add a single line of information on the /etc/environment file.

I’m a terminal lover. So, I typed the following command on the terminal to edit the file. Remeber, you will need administration access to edit the file.

And the result was:
Editing the /etc/environment fileAll I need to do was to add the following line on it and save it.

You can set your locale (e.g. bn_BD.UTF-8) too as a value.

After a restart the problem was fixed and date and time was visible on the wingpanel.

Date and time visibility problem fixed on Freya Beta 1Alternatively if you are not comfortable editing on the terminal, run the following command on the terminal.

This command will open the /etc/ folder on the Files browser and then you can edit the environment file using your default text editor.

If gksu is not installed, you can install it by using the following command:

Basically gksu is a graphical front-end for sudo that allows graphical command to be run without the need to run an X terminal emulator and using su directly. It’s effectively just a GTK+ skin for the superuser commands.

Sumon Selim speaking at A Day with PHP

In search of happiness…

Hi, I am Muhammad Sumon Molla Selim (mostly known as Sumon Selim) from Dhaka, Bangladesh. I’m a coder by <3.  Love to write codes mostly using PHP and Laravel. I will talk more about this later. But let’s move on to something else – myself, my life.

I was going through much hardship in last few years – mostly mentally. But now I have decided to move on. I’m sacrificing all my dream and hope. Instead I will live from now only to fulfill my responsibilities – responsibility towards my family, responsibility towards humanity!

I’ll write regularly from now to tell stories about my Life, Thoughts, Experience and my Coding journey.

While I start my journey, here are some lines I would love to mention:

In my search for freedom
And peace of mind
I’ve left the memories behind
Want to start a new life
But it seems to be rather absurd
When I know the truth
Is that I always think of you…

Powered by WordPress & Theme by Anders Norén