How to install FFMPEG on EC2 running Amazon Linux?


Recently, I needed to install ffmpeg on my EC2 instance and I struggled quite a bit to set it up. The issue was that my EC2 instance is running Amazon Linux based AMI which is probably based on some version of CentOS. For Debian and Ubuntu distributions, ffmpeg is available as a apt-get package but for other distributions you have to manually compile it. To be fair ffmpeg has provided a compilation guide for CentOS but for lazy people, it is too much of an effort. 🙂

Finally, I found a solution that worked perfectly so I thought of sharing it here. Here’s the step by step guide.

Step 1: SSH into your instance and become root

sudo su -

Step 2: Go to the /usr/local/bin directory

cd /usr/local/bin

Step 3: Inside the /usr/local/bin directory, create an ffmpeg directory and go inside it.

mkdir ffmpeg && cd ffmpeg

Step 4: Download a static build of ffmpeg

Go to the following link and download a static build relevant for your system.

https://www.johnvansickle.com/ffmpeg/

To check if your system is 32-bit or 64-bit you can execute the following command:

uname -a

It will output something like:

Linux ip-172-31-1-100 4.9.62-21.56.amzn1.x86_64 #1 SMP Thu Nov 16 05:37:08 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Note: That last i386 indicates that it’s 32-bit; x86_64 indicates 64-bit.

Also, by hit and trial, I found out that the processor is AMD and not ARM. Inside the /usr/local/bin/ffmpeg folder run this command to download the static binaries.

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

Step 5: Unzip the binaries

Use the following command to unzip the binaries.

tar -xf ffmpeg-release-amd64-static.tar.xz

This will create a folder named ffmpeg-4.2.1-amd64-static . Go inside this folder to check if ffmpeg has been installed successfully or not.

./ffmpeg -version

It should output something like:

ffmpeg version 4.2.1-static https://johnvansickle.com/ffmpeg/  
.
.
.
.
Hyper fast Audio and Video encoder

Now we will move to the outer folder.

cp -a /usr/local/bin/ffmpeg/ffmpeg-4.2.1-amd64-static/ . /usr/local/bin/ffmpeg/

Step 6: Create a symlink to use ffmpeg from any location

Next, go ahead and create a symlink so that ffmpeg can be run from any location.

ln -s /usr/local/bin/ffmpeg/ffmpeg /usr/bin/ffmpeg

Note: The first part /usr/local/bin/ffmpeg/ffmpeg is where the file is located after I untarred the file. The second part /usr/bin/ffmpeg is where we want the symlink to go

That’s it. You are done with the installation.

I found this solution on AWS forums and have shared it here so that it is easier to find. Here’s a link to the forum post.

https://forums.aws.amazon.com/thread.jspa?messageID=332091

Web Hosting using PHP and MySQL on AWS


It’s was a Sunday and I was bored. Then I came across a custom URL shortener service, YOURLS that I had previously used in my college days. It was very simple to set it up with my GoDaddy shared web hosting. I no longer have a web hosting package on GoDaddy so I decided to try out AWS cloud instead.

AWS is cheap and easy to get started. Our goal is to get our own custom URL shortener service up and running on http://aloudapp.in.

Before we deep dive into the details of setting up everything, here are our broader goals.

  • Setup an EC2 instance for cloud hosting
  • Setup a hosting zone and configure DNS
  • Setup a load balancer for the EC2 instance.
  • Install a LAMP web server on the EC2 instance.
  • Configure YOURLS on the web server.

This article will cover everything up to setting up the LAMP web server.

Create an EC2 instance

An EC2 instance is a virtual server in Amazon’s Elastic Compute Cloud (EC2) for running applications on the Amazon Web Services (AWS) infrastructure.

Launch an EC2 instance

Click on Launch Instance to create a new instance.

Create an EC2 instance

Run a Linux machine

Choose Amazon Linux from the listed options for machine images.

Choose Amazon Linux image

Choose an Instance Type

We will go for a t2.micro free instance for the purpose of this example.

Choose t2.micro free instance

Review your EC2 instance

All done! Review your settings.

Review your settings

Create Key Pair

Create a public-private key pair if you desire. This is an optional step but we recommend that you create a key pair and download it. We will be using it later on in the article to SSH into our EC2 instance.

View Launch Status

Good Going! Your instance is up and running.


Edit Security Group

Edit security group settings to allow SSH inbound traffic from your IP address.

Edit Inbound Traffic for your instance

Add a custom rule

Whitelist your IP

Domain Mapping

Next, you need to create a Hosting Zone where you would configure your DNS settings for the domain name. Here are the steps.

Create a Hosting zone

Click on Create Hosting Zone to get started.

Create a hosted zone

Setup Your Domain

Fill in your Domain Name to create a new hosted zone.

Put in your domain name

Edit Namespace for your Domain

Once you have created a Hosted zone, you will be able to see associated namespace records for it. Edit these NS records for your domain. I purchased the domain from GoDaddy, so I had to go and edit these records in DNS settings for the domain on GoDaddy’s admin panel.

Edit namespace on GoDaddy

Add a A Record

Coming back to your Hosted Zone, create a new A record. Leave the Name field empty if you don’t want to configure just for a particular subdomain.


That’s it. Your Hosted Zone is now set up. You can also set up a subdomain in 4 easy steps by following this step by step guide.

View at Medium.com

Create a Load Balancer

Next, you need to create a Load Balancer for your EC2 instance. As described by Wikipedia,

In computing, load balancing improves the distribution of workloads across multiple computing resources, such as computers, a computer cluster, network links, central processing units, or disk drives.

Create a Classic Load Balancer

Choose a Classic Load balancer which is used for HTTP, HTTPS and TCP traffic.

Click on Create Load Balancer

Choose a Classic Load Balancer

Follow the wizard to complete the Load Balancer settings.

Define Load Balancer Properties

Define its name and protocol as depicted in the section below.

Load balancer settings

Assign Security Groups

Assign security groups to the load balancer. Create a new security group for your load balancer that allows traffic from any IP address.

Create a new Security group for load balancer

Set Load balancer’s security group to the newly created one.


Setup Health Checks

Setup health checks. Again you and go ahead with the default options as of now. We can revisit these settings later.

Default health check settings

Map with an EC2 instance

Choose the EC2 instance that you created earlier for the load balancer.

Map with your EC2 instance

Create tags

Tags are optional and help to identify your resources.

Optional tags

All done! Your load balancer is now set up.

Edit Inbound Rules for EC2 instance

Go back to your EC2 instance and add a new inbound rule for it. This will allow all traffic from the load balancer.

Edit security rules for EC2

Now your EC2 instance, hosting zone, and load balancer are all setup. We will go ahead and install a LAMP web server on our EC2 instance.

Connect to your Instance

  • Open an SSH client
  • Locate your private key file and provide permissions
chmod 400 amazon_ec2_key.pem
  • Connect to your EC2 instance
ssh -i "amazon_ec2_key.pem" ec2-user@ec2-13-127-42-0.ap-south-1.compute.amazonaws.com

Install a LAMP webserver

  • Check if software packages are up to date.
sudo yum update -y
  • Install the packages for php and mysql.
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
  • Start the http server
sudo service httpd start
  • Create a health.html file in cd/var/www/html . Put any content in the file and save it.
nano health.html
  • Edit health check settings for your load balancer.

Change health check settings

Now you should be able to see the test page when you hit the domain.

http://aloudapp.in


Set File Permissions for your User

Run the following commands to set file permissions.

sudo usermod -a -G apache ec2-user
sudo chown -R ec2-user:apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} ;
find /var/www -type f -exec sudo chmod 0664 {} ;

Run these commands to give permissions to your user

Test your LAMP server

Create a PHP file in Apache document root.

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Open http://aloudapp.in/phpinfo.php to test it.

Secure the MySQL server

  • Start MySQL server.
sudo service mysqld start
  • Run mysql_secure_installation and set root password, remove anonymous user accounts, disable remote root login, remove the test database, reload the privilege tables.
sudo mysql_secure_installation

Install phpMyAdmin

Run the following commands to setup phpMyAdmin.

sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
sudo service httpd restart
cd /var/www/html
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
tar -xvzf phpMyAdmin-latest-all-languages.tar.gz
mv phpMyAdmin-4.7.6-all-languages phpMyAdmin
sudo service mysqld start

Special thanks to Chetan Gulati who helped me set it up.

All done! Now your web server is up and running. We will cover the configuration of YOURLS on this web server in the next story.


Make sure you give this post 50 claps and follow me if you enjoyed this post and want to see more!

Bitnami