Oracle’s “Always Free” Cloud Instance – Adding a web server to your free MySQL compute instance with zero monthly charges
November 19, 2019 3 Comments
In a previous post, I explained how you can take advantage of Oracle’s “Always Free” Cloud instance to obtain a free Oracle Cloud compute instance (virtual machine) and install a copy of MySQL – without having to pay a setup fee and without incurring any monthly charges. And, you can have two free compute instances per account.
This free Cloud option from Oracle is great. I can think of a lot of ways to utilize a free Oracle Cloud compute instance – but the first one that came to mind is by using it as a web server. Part of Oracle’s “Always Free” offering falls under their “Additional Services” category – which includes 10 TB of outbound data transfer each month. If you have a small web site without a ton of graphics or one where you don’t have a million hits per month, using this free Oracle Cloud instance could save you a little bit of money versus paying to host your web site with a web hosting company.
To get started, go back and read the post I mentioned, to get your “Always Free” Oracle Cloud account and to install MySQL (if you need a database for your web site). If you don’t need MySQL, just follow the post to set up your cloud account and create your first compute instance.
Once you have created your first compute instance, you only have three small tasks to complete:
1. You will need to install a web server
2. Setup a security rule to allow traffic over port 80
3. Connect your Oracle public IP address to your domain name by editing the domain name service (DNS) entry for your domain name.
The first two tasks should take you less than ten minutes to complete. Updating your DNS entry shouldn’t take but a few minutes – if you know how to do it with your domain name provider.
Installing a web server
Depending upon which operating system (OS) you chose when you created your compute instances, you should be able to install the default web server that comes with that OS. For my compute instance, I chose to install the default OS of Oracle Linux, so I can install the Apache web server via yum. Your OS might be different, but for most Linux versions, the command is “sudo yum install httpd“. If you want yum to automatically answer any install questions with a “yes”, you can add the -y option. (Click here for more yum options)
Note: Remember that with an Oracle compute instance, you will need to run most tasks via sudo (as root).
$ sudo yum install httpd -y Loaded plugins: langpacks, ulninfo mysql-connectors-community | 2.5 kB 00:00:00 mysql-tools-community | 2.5 kB 00:00:00 mysql80-community | 2.5 kB 00:00:00 ol7_UEKR5 | 2.8 kB 00:00:00 ol7_addons | 2.8 kB 00:00:00 ol7_developer | 2.8 kB 00:00:00 ol7_developer_EPEL | 3.4 kB 00:00:00 ol7_ksplice | 2.8 kB 00:00:00 ol7_latest | 3.4 kB 00:00:00 ol7_oci_included | 2.9 kB 00:00:00 ol7_optional_latest | 2.8 kB 00:00:00 ol7_software_collections | 2.8 kB 00:00:00 (1/5): ol7_optional_latest/x86_64/updateinfo | 869 kB 00:00:00 (2/5): ol7_latest/x86_64/updateinfo | 2.6 MB 00:00:00 (3/5): ol7_optional_latest/x86_64/primary_db | 4.0 MB 00:00:00 (4/5): ol7_latest/x86_64/primary_db | 17 MB 00:00:01 (5/5): ol7_ksplice/primary_db | 276 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-90.0.1.el7 will be installed --> Processing Dependency: httpd-tools = 2.4.6-90.0.1.el7 for package: httpd-2.4.6-90.0.1.el7.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-90.0.1.el7.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-90.0.1.el7.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-90.0.1.el7.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.4.8-5.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.0.1.el7 will be installed ---> Package httpd-tools.x86_64 0:2.4.6-90.0.1.el7 will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================== Package Arch Version Repository Size ============================================================================== Installing: httpd x86_64 2.4.6-90.0.1.el7 ol7_latest 1.2 M Installing for dependencies: apr x86_64 1.4.8-5.el7 ol7_latest 103 k apr-util x86_64 1.5.2-6.0.1.el7 ol7_latest 91 k httpd-tools x86_64 2.4.6-90.0.1.el7 ol7_latest 90 k mailcap noarch 2.1.41-2.el7 ol7_latest 30 k Transaction Summary ============================================================================== Install 1 Package (+4 Dependent packages) Total download size: 1.5 M Installed size: 4.3 M Downloading packages: (1/5): apr-util-1.5.2-6.0.1.el7.x86_64.rpm | 91 kB 00:00:00 (2/5): apr-1.4.8-5.el7.x86_64.rpm | 103 kB 00:00:00 (3/5): httpd-tools-2.4.6-90.0.1.el7.x86_64.rpm | 90 kB 00:00:00 (4/5): mailcap-2.1.41-2.el7.noarch.rpm | 30 kB 00:00:00 (5/5): httpd-2.4.6-90.0.1.el7.x86_64.rpm | 1.2 MB 00:00:00 ------------------------------------------------------------------------------- Total 2.8 MB/s | 1.5 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-5.el7.x86_64 1/5 Installing : apr-util-1.5.2-6.0.1.el7.x86_64 2/5 Installing : httpd-tools-2.4.6-90.0.1.el7.x86_64 3/5 Installing : mailcap-2.1.41-2.el7.noarch 4/5 Installing : httpd-2.4.6-90.0.1.el7.x86_64 5/5 Verifying : httpd-tools-2.4.6-90.0.1.el7.x86_64 1/5 Verifying : mailcap-2.1.41-2.el7.noarch 2/5 Verifying : apr-util-1.5.2-6.0.1.el7.x86_64 3/5 Verifying : httpd-2.4.6-90.0.1.el7.x86_64 4/5 Verifying : apr-1.4.8-5.el7.x86_64 5/5 Installed: httpd.x86_64 0:2.4.6-90.0.1.el7 Dependency Installed: apr.x86_64 0:1.4.8-5.el7 apr-util.x86_64 0:1.5.2-6.0.1.el7 httpd-tools.x86_64 0:2.4.6-90.0.1.el7 mailcap.noarch 0:2.1.41-2.el7 Complete!
With Apache installed, I can go ahead and start the web server, and I can also configure it to start after the system reboots.
$ sudo apachectl start $ sudo systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
If you want, you can run a quick check on the Apache configuration.
$ sudo apachectl configtest Syntax OK
Next, you will want to create the firewall rules to allow access to the ports on which the HTTP server listens.
$ sudo firewall-cmd --permanent --zone=public --add-service=http success $ sudo firewall-cmd --reload success
Create an initial web page
And finally, create a starter web page so you can test the web server later.
sudo bash -c 'echo This is my new web page running on Oracle Cloud Always Free compute instance > /var/www/html/index.html'
Note: The web page files are stored in /var/www/html.
Monitor your usage and potential fees
WARNING: I have not fully tested Oracle’s “Always Free” service yet, and while there shouldn’t be any hidden “gotchas” when it comes to Oracle’s Cloud billing, I am not entirely sure if this use case will fall under their “Always Free” usage. I will be setting up a web page and testing it to make sure I don’t run into any hidden problems as far as being charged for using the cloud network. Therefore, you will want to also monitor your usage.
To monitor your instance’s usage, from the Oracle Cloud menu (top left of your screen), go to Account Management -> Cost Analysis after your web site has been running for a day or two – and you can see if this is truly an “Always Free” option for your web site.
Creating a security rule
You will need to create a stateless security rule to allow ingress traffic on port 80. From the Oracle Cloud menu (top left of your screen), go down to Networking and over to Virtual Cloud Networks.
You will be presented with a list of the Virtual Cloud Networks (VCN) you have already created, and if you are doing this from the beginning, you should only have one VCN listed. Click on the VCN name that begins with VirtualCloudNetwork.
On the left, you will see a menu like this. Click on “Security Lists”:
To the right of the above menu, you will be see a list of the security lists you have already created, and if you are doing this from the beginning, you should only have one security list available. Click on the security list name that begins with Default Security List for VirtualCloudNetwork – where the VirtualCloudNetwork name matches your VirtualCloudNetwork name.
You are going to need to add an Ingress Rule, so click on the “Add Ingress Rules” button:
Fill out the form like this, and then click on “Add Ingress Rules”.
Note: You do not want to click on the “Stateless” box. A stateless rule means that you will also need to create an egress rule for the outbound port 80 traffic. If you leave this unchecked, the rule that is created will be a “stateful” rule, which means that if you allow inbound traffic on port 80, outbound traffic is also automatically allowed.
From Oracle’s documentation:
“Marking a security rule as stateful indicates that you want to use connection tracking for any traffic that matches that rule. This means that when an instance receives traffic matching the stateful ingress rule, the response is tracked and automatically allowed back to the originating host, regardless of any egress rules applicable to the instance. And when an instance sends traffic that matches a stateful egress rule, the incoming response is automatically allowed, regardless of any ingress rules. For more details, see Connection Tracking Details for Stateful Rules.
You should now see a list of Ingress Rules that looks something like this, with your new Ingress Rule at the bottom.
Testing the web server
After you have completed the steps above, you can put your public IP address into a browser window and you should see the web page you created above.
Connecting your domain name to the Oracle Cloud IP address
If you have a domain name for your web site, you will need to go to your domain name hosting company, edit the DNS entry for your domain name and use your Oracle Cloud Public IP address. I can’t really provide you with instructions on how to do this specific to your hosting site. But, if you need an inexpensive domain name and website hosting company, I would recommend www.ionos.com (formerly www.1and1.com). I have used them for over 15 years and they have great products and customer service. And they have special prices for first-year domain names. I just registered a .us domain name for $7.50 for the first year, and $15 for each year after that.
The DNS changes will take anywhere from 24-48 hours to propagate across the Internet. But you can test your web site using the Oracle Cloud public IP address.
Now you have a free Oracle Cloud compute instance with MySQL and a web server running on it. Remember – the “Always Free” tier allows you to create two free compute instances (or virtual machines).
![]() |
Tony Darnell is a Principal Sales Consultant for MySQL, a division of Oracle, Inc. MySQL is the world’s most popular open-source database program. Tony may be reached at info [at] ScriptingMySQL.com and on LinkedIn. |
![]() |
Tony is the author of Twenty Forty-Four: The League of Patriots Visit http://2044thebook.com for more information. |
![]() |
Tony is the editor/illustrator for NASA Graphics Standards Manual Remastered Edition Visit https://amzn.to/2oPFLI0 for more information. |