Earn 250$ For Every Article Published At Linode !

Linode Writer’s Guide

Updated by Linode

Linode has a thriving community of authors who contribute to Linode Guides and Tutorials. We are always looking for guides on popular, trending topics, and updates to existing guides. If you’re interested in writing for Linode, this page describes the process for submitting your work. If your guide is published, you’ll receive $250 per article by PayPal or in Linode credit.


Linode’s bounty program has been an overwhelming success. Too succesful, in fact! Our inbox and repository are overflowing with proposed articles.

As a four-man team responsible for both internally and externally sourced docs, we’re in a bit over our collective head. That’s why – until further notice – we’re no longer accepting new submissions for the Linode bounty program. Any new guides submitted, whether through GitHub or email, will be rejected without review.

Rest assured, this is a temporary moratorium. Once we’ve cleared through the backlog and given the appropriate time and consideration (and, hopefully, payout) to the authors already patiently waiting, we’ll resume the bounty program and with it, introduce a revised set of topic requirements. Further updates will be posted here or on our Github page.

Please note, if you see the need for a correction in an existing guide, feel free to make a pull request. We still want to improve and update our existing guides, even as we review new ones.

Content Guidelines

Guides should instruct readers how to accomplish a task on, or relating to, a Linode or Linodes. When writing, think of both what the guide should accomplish and why the reader would want to use your guide. A guide should consist of about 90% instruction with 10% explanation.

Guides should be informational but friendly. Use the active voice whenever possible, and the pronouns you or we instead of I. Avoid unnecessary information. Brief, to-the-point explanations are preferred, but also consider the audience and the level of technical ability needed to complete each task. A beginner’s topic usually will require more detailed explanations than one for an advanced user.

To be considered, submissions must be written in English and adhere to the formatting described in our Writer’s Formatting Guide. The primary qualities we look for in a guide are:

  • Accuracy: Instructions should be straightforward, technically correct and thoroughly tested. Include brief explanations of each step to explain the purpose of each action. Guides can use technical jargon pertinent to Linode, Linux, and related topics, but use common sense–if a term implies an advanced concept that fewer people would know, take a sentence or two to explain it, or link to a wiki or manual page.
  • Completeness: A guide should leave readers with a finished, working configuration and give them an idea of where to go from there. Considerations for security and best practices must also be made, including firewall rules.
  • Originality: Content should be original material written for Linode. We will not accept submissions which are duplicated from other sources, including personal blogs.

If you would like to see whether your work is in line with our requirements before taking the time to write a full guide, writing samples can be submitted to contribute@linode.com.

The Submission Process

Submit your article as a pull request to Linode/Docs on GitHub. If you are new to GitHub, see our GitHub Beginners Guide which will walk you through the process.

We also accept guides sent to contribute@linode.com, though they are assigned a lower priority than GitHub submissions. If submitting by email, be sure to include the guide title in the subject line, and your PayPal or Linode account information in the message body so we can properly compensate you for your work.

If you have any questions about either submission method, contact contribute@linode.com.

The Review Process

All guides will remain on GitHub for up to 2 weeks for the Linode community to comment on or submit pull requests of their own. If you submitted your article through email, it will be added to GitHub by Linode. After the initial review period, your article will be accepted or rejected.

If accepted, we will do an internal technical review of your material which can take from a few days to about a week. Following the technical review is a copy edit of the article; this will take a few days further. Along the process, you may receive questions or comments from us, pull requests with edits, or a request for a resubmission with changes.

Depending on your submission method, we will either submit the final version to your GitHub fork as a pull request or email it to you. You will have 36 hours to respond and approve our publication of the final version. If you respond positively, we will publish the article and you’ll receive payment. Non-response will be taken as a go-ahead to publish.

General Tips to Consider

  • Choose topics on relevant technology; guides on emerging tech that is not yet well-documented are preferred.
  • Use other Linode guides as building blocks. For example, if your guide requires a system with a working LAMP stack, you can link to our LAMP guides instead of duplicating that information in your own writing.
  • Link to your guide from your own website or social media posts. This actually improves the page rankings of your own site because of an SEO aspect called link authority.
  • Avoid 3rd-party PPAs and repositories.
  • Unless there is a major advantage, use distro repositories rather than compiling and installing from source code.
  • We generally decline guides on tweaking or performance tuning. For a guide of this theme to be considered, it must first designate a use scenario. The changes must show a measurable, reliably reproducible improvement between a control group and an experiment group, both operating in the given scenario.
  • Use proper capitalization for software. For example, nginx is the web server, NGINX Inc. is the company behind it, and Nginx would only be used to start a sentence, title or heading.

Reasons Your Guide May Be Rejected

As much as we would like to support all writers, we can not accept every guide we receive. Here are some negatives you can eliminate in your own work to ensure a strong submission:

  • Not enough content, or lacking original content. For example, if the guide too closely resembles a current guide either by Linode or on another source.
  • Guide is a duplicate of your own content from your personal blog, wiki submissions or forum posts.
  • Topic is sufficiently documented in official wikis, manual pages, etc.
  • Content and formatting guidelines were clearly not followed.
  • We already have plenty of guides on the topic. Examples: LAMP & LEMP stacks, MySQL.
  • Inappropriate topic for the Linode Community.

Contributed Guides

Here are some examples of exceptional community-contributed guides. Use these as guidelines for your own submission.

Install Odoo 9 ERP on Ubuntu 14.04 by Damaso Sanoja.

How to Install and Configure GitLab on Ubuntu 14.04 (Trusty Tahr) by Nashruddin Amin.

Host a Terraria Server on Your Linode by Tyler Langlois.

Install and Configure OSSEC on Debian 7 by Sunday Ogwu-Chinuwa.

Turbocharge Your WordPress Search Using Solr by Karthik Shiraly.

COPYRIGHT OWNERSHIP. Writer agrees that the Work is being created by the writer for the Linode Guides & Tutorials repository and that each form of Work is being created by the writer as a “work made for hire” under the United States Copyright Act and, at all stages of development, the Work shall be and remain the sole and exclusive property of Linode. At Linode’s sole, absolute and unfettered discretion, Linode may make any alterations to the Work.

CREDIT. Nothing contained in this Agreement shall be deeded to require Linode to use the Work, or any part thereof, in connection with Linode Guides & Tutorials or otherwise. Credit for the Work shall read, “Contributed by writer’s name.”

PAYMENT. Upon publication of a submission to the Linode Guides & Tutorials Repository, the writer will be paid the sum of USD $250.00 either in the form of a credit to their Linode account or as an electronic payment.

More Information

You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

This guide is published under a CC BY-ND 4.0 license.

How To Host Website At Linode

How To Host Website At Linode

Updated by Linode

Now that you’ve installed Linux and secured your Linode, it’s time to start doing stuff with it. In this guide, you’ll learn how to host a website. Start by installing a web server, database, and PHP – a popular combination which is commonly referred to a LAMP stack (Linux, Apache, MySQL, and PHP). Then create or import a database, upload files, and add DNS records. By the time you reach the end of this guide, your Linode will be hosting one or more websites!

Debian 7 and Ubuntu 14.04 LTS are the Linux distributions we’re using as the starting point for the packages and configurations mentioned in this guide.

This guide is designed for small and medium-size websites running on WordPress, Drupal, or another PHP content management system. If your website doesn’t belong in that category, you’ll need to assess your requirements and install custom packages tailored for your particular requirements.

This guide is written for a non-root user. Commands that require elevated privileges are prefixed with sudo. If you’re not familiar with the sudo command, you can check our Users and Groups guide.

Web Server

Hosting a website starts with installing a web server, an application on your Linode that delivers content through the Internet. This section will help you get started with Apache, the world’s most popular web server. For more information about Apache and other web servers, see our web server reference manuals.

Installing Apache

Install Apache on your Linode by entering the following command:

sudo apt-get install apache2

Your Linode will download, install, and start the Apache web server.

Optimizing Apache for a Linode 1GB

Installing Apache is easy, but if you leave it running with the default settings, your server could run out of memory. That’s why it’s important to optimize Apache before you start hosting a website on your Linode. Here’s how to optimize the Apache web server for a Linode 1GB:

These guidelines are designed to optimize Apache for a Linode 1GB, but you can use this information for any size Linode. The values are based on the amount of memory available, so if you have a Linode 2GB, multiply all of the values by 2 and use those numbers for your settings.

  1. Just to be safe, make a copy of Apache’s configuration file by entering the following command. You can restore the duplicate (apache2.backup.conf) if anything happens to the configuration file.
    sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.backup.conf
  2. Open Apache’s configuration file for editing by entering the following command:
    sudo nano /etc/apache2/apache2.conf
  3. Make sure that the following values are set.

In Ubuntu 14.04 LTS, you will need to append the module section noted below to the end of your apache2.conf file:

KeepAlive Off

<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 6
MaxSpareServers 12
MaxClients 30
MaxRequestsPerChild 3000
  1. Save the changes to Apache’s configuration file by pressing Control + x and then pressingy. Press Enter to confirm.
  2. Restart Apache to incorporate the new settings. Enter the following command:
    sudo service apache2 restart

Good work! You’ve successfully optimized Apache for your Linode, increasing performance and implementing safeguards to prevent excessive resource consumption. You’re almost ready to host websites with Apache.

Configuring Name-based Virtual Hosts

Now that Apache is optimized for performance, it’s time to starting hosting one or more websites. There are several possible methods of doing this. In this section, you’ll use name-based virtual hosts to host websites in your home directory. Here’s how:

You should not be logged in as root while executing these commands. To learn how to create a new user account and log in as that user, see Adding a New User.

  1. Disable the default Apache virtual host by entering the following command:
    sudo a2dissite *default
  2. Navigate to your /var/www directory:
    cd /var/www
  3. Create a folder to hold your website by entering the following command, replacing ‘example.com’ with your domain name:
    sudo mkdir example.com
  4. Create a set of folders inside the folder you’ve just created to store your website’s files, logs, and backups. Enter the following command, replacing example.com with your domain name:
    sudo mkdir -p example.com/public_html
    sudo mkdir -p example.com/log
    sudo mkdir -p example.com/backups
  5. Create the virtual host file for your website by entering the following command. Replace theexample.com in example.com.conf with your domain name:
    sudo nano /etc/apache2/sites-available/example.com.conf

    The file name must end with .conf in Apache versions 2.4 and later, which Ubuntu 14.04 uses. The .confextension is backwards-compatible with earlier versions.

  6. Now it’s time to create a configuration for your virtual host. We’ve created some basic settings to get your started. Copy and paste the settings shown below in to the virtual host file you just created. Replace example.com with your domain name.
    # domain: example.com
    # public: /var/www/example.com/public_html/
    <VirtualHost *:80>
      # Admin email, Server Name (domain name), and any aliases
      ServerAdmin webmaster@example.com
      ServerName  www.example.com
      ServerAlias example.com
      # Index file and Document Root (where the public files are located)
      DirectoryIndex index.html index.php
      DocumentRoot /var/www/example.com/public_html
      # Log file locations
      LogLevel warn
      ErrorLog  /var/www/example.com/log/error.log
      CustomLog /var/www/example.com/log/access.log combined
  7. Save the changes to the virtual host configuration file by pressing Control + x and then pressing y. Press Enter to confirm.
  8. Enable your new website by entering the following command. Replace example.com with your domain name:
     sudo a2ensite example.com.conf

    This creates a symbolic link to your example.com.conf file in the appropriate directory for active virtual hosts.

  9. The previous command will alert you that you need to restart Apache to save the changes. Enter the following command to apply your new configuration:
    sudo service apache2 restart
  10. Repeat steps 1-9 for every other website you want to host on your Linode.

Congratulations! You’ve configured Apache to host one or more websites on your Linode. After you upload files and add DNS records later in this guide, your websites will be accessible to the outside world.


Databases store data in a structured and easily accessible manner, serving as the foundation for hundreds of web and server applications. A variety of open source database platforms exist to meet the needs of applications running on your Linux VPS. This section will help you get started with MySQL, one of the most popular database platforms. For more information about MySQL and other databases, see our database reference manuals.

Installing MySQL

Here’s how to install and configure MySQL:

  1. Install MySQL by entering the following command. Your Linode will download, install, and start the MySQL database server.
    sudo apt-get install mysql-server
  2. You will be prompted to enter a password for the MySQL root user. Enter a password.
  3. Secure MySQL by entering the following command to open mysql_secure_installation utility:
    sudo mysql_secure_installation
  4. The mysql_secure_installation utility appears. Follow the instructions to remove anonymous user accounts, disable remote root login, and remove the test database.

That’s it! MySQL is now installed and running on your Linode.

Optimizing MySQL for a Linode 1GB

MySQL consumes a lot of memory when using the default configuration. To set resource constraints, you’ll need to edit the MySQL configuration file. Here’s how to optimize MySQL for a Linode 1GB:

These guidelines are designed to optimize MySQL 5.5 and up for a Linode 1GB, but you can use this information for any size Linode. If you have a larger Linode, start with these values and modify them while carefully watching for memory and performance issues.

  1. Open the MySQL configuration file for editing by entering the following command:
    sudo nano /etc/mysql/my.cnf
  2. Comment out all lines beginning with key_buffer. This is a deprecated setting and we’ll use the correct option instead.
  3. Edit following values:
    max_connections = 75
    max_allowed_packet = 1M
    thread_stack = 128K

    In MySQL 5.6, you may need to add these lines as one block with [mysql] at the top. In earlier MySQL versions, there may be multiple entries for a single option so be sure to edit both lines.

  4. Add the following lines to the end of my.cnf:
    table_open_cache = 32M
    key_buffer_size = 32M
  5. Save the changes to MySQL’s configuration file by pressing Control + x and then pressing y.
  6. Restart MySQL to save the changes. Enter the following command:
    sudo service mysql restart

Now that you’ve edited the MySQL configuration file, you’re ready to start creating and importing databases.

Creating a Database

The first thing you’ll need to do in MySQL is create a database. (If you already have a database that you’d like to import, skip to Importing a Database.) Here’s how to create a database in MySQL:

  1. Log in to MySQL by entering the following command and then entering the MySQL root password:
    mysql -u root -p
  2. Create a database by entering the following command. Replace exampleDB with your own database name:
    create database exampleDB;
  3. Create a new user in MySQL and then grant that user permission to access the new database by issuing the following command. Replace example_user with your username, and 5t1ck with your password:
    grant all on exampleDB.* to 'example_user' identified by '5t1ck';

    MySQL usernames and passwords are only used by scripts connecting to the database. They do not need to represent actual user accounts on the system.

  4. Tell MySQL to reload the grant tables by issuing the following command:
    flush privileges;
  5. Now that you’ve created the database and granted a user permissions to the database, you can exit MySQL by entering the following command:

Now you have a new database that you can use for your website. If you don’t need to import a database, go ahead and skip to PHP.

Importing a Database

If you have an existing website, you may want to import an existing database in to MySQL. It’s easy, and it allows you to have an established website up and running on your Linode in a matter of minutes. Here’s how to import a database in to MySQL:

  1. Upload the database file to your Linode. See the instructions in Uploading Files.
  2. Import the database by entering the following command. Replace username with your MySQL username and database_name with the database name you want to import to. You will be prompted for your MySQL password:
    mysql -u username -p database_name < FILE.sql

Your database will be imported in to MySQL.


PHP is a general-purpose scripting language that allows you to produce dynamic and interactive webpages. Many popular web applications and content management systems, like WordPress and Drupal, are written in PHP. To develop or host websites using PHP, you must first install the base package and a couple of modules.

Installing PHP

Here’s how to install PHP with MySQL support:

  1. Install the base PHP package by entering the following command:
    sudo apt-get install php5 php-pear
  2. Add MySQL support by entering the following command:
    sudo apt-get install php5-mysql

Optimizing PHP for a Linode 1GB

After you install PHP, you’ll need to enable logging and tune PHP for better performance. The setting you’ll want to pay the most attention to is memory_limit, which controls how much memory is allocated to PHP. Here’s how to enable logging and optimize PHP for performance:

These guidelines are designed to optimize PHP for a Linode 1GB, but you can use this information as a starting point for any size Linode. If you have a larger Linode, you could increase the memory limit to a larger value, like 256M.

  1. Open the PHP configuration files by entering the following command:
    sudo nano /etc/php5/apache2/php.ini
  2. Verify that the following values are set. All of the lines listed below should be uncommented. Be sure to remove any semi-colons (;) at the beginning of the lines.
    max_execution_time = 30
    memory_limit = 128M
    display_errors = Off
    log_errors = On
    error_log = /var/log/php/error.log
    register_globals = Off

    The 128M setting for memory_limit is a general guideline. While this value should be sufficient for most websites, larger websites and some web applications may require 256 megabytes or more.

  3. Save the changes by pressing Control + x and then pressing y.
  4. Create the /var/log/php/ directory for the PHP error log with the following command:
    sudo mkdir -p /var/log/php
  5. Change the owner of the /var/log/php/ directory to www-data, which the PHP user runs as:
    sudo chown www-data /var/log/php
  6. Restart Apache to load the PHP module by entering the following command:
    sudo service apache2 restart

Congratulations! PHP is now installed on your Linode and configured for optimal performance.

Uploading Files

You’ve successfully installed Apache, MySQL, and PHP. Now it’s time to upload a website to your Linode. This is one of the last steps before you “flip the switch” and publish your website on the Internet. Here’s how to upload files to your Linode:

  1. If you haven’t done so already, download and install an SFTP capable client on your computer. We recommend using the FileZilla SFTP client.
  2. Follow the instructions in the guides listed above to connect to your Linode.
  3. Upload your website’s files to the /var/www/example.com/public_html directory. Replaceexample.com with your domain name.

    If you configured name-based virtual hosts, don’t forget to upload the files for the other websites to their respective directories.

If you’re using a content management system like WordPress or Drupal, you may need to configure the appropriate settings file to point the content management system at the MySQL database.


It’s a good idea to test your website(s) before you add the DNS records. This is your last chance to check everything and make sure that it looks good before it goes live. Here’s how to test your website:

  1. Enter your Linode’s IP address in a web browser (e.g., type http://123.456.78.90 in the address bar, replacing the example IP address with your own.) Your website should load in the web browser.
  2. If you plan on hosting multiple websites you can test the virtual hosts by editing the hosts file on your desktop computer. Check out the Previewing Websites Without DNS guide for more information.
  3. Test the name-based virtual hosts by entering the domain names in the address bar of the web browser on your desktop computer. Your websites should load in the web browser.

    Remember to remove the entries for the name-based virtual hosts from your hosts file when you’re ready to test the DNS records.

Adding DNS Records

Now you need to point your domain name(s) at your Linode. This process can take a while, so please allow up to 24 hours for DNS changes to be reflected throughout the Internet. Here’s how to add DNS records:

  1. Log in to the Linode Manager.
  2. Click the DNS Manager tab.
  3. Select the Add a domain zone link. The form shown below appears.

    Create a domain zone.

  4. In the Domain field, enter your website’s domain name in the Domain field.
  5. In the SOA Email field, enter the administrative contact email address for your domain.
  6. Select the Yes, insert a few records to get me started button.
  7. Click Add a Master Zone. Several DNS records will be created for your domain, as shown below.

    The DNS records created for the domain.

  8. Over at your domain registrar (where you bought the domain), make sure that your domain name is set to use our DNS server. Use your domain name registrar’s interface to set the name servers for your domain to the following:
    • ns1.linode.com
    • ns2.linode.com
    • ns3.linode.com
    • ns4.linode.com
    • ns5.linode.com
  9. Repeat steps 1-8 for every other name-based virtual host you created earlier.

You’ve added DNS records for your website(s). Remember, DNS changes can take up to 24 hours to propagate through the Internet. Be patient! Once the DNS changes are completed, you will be able to access your website by typing the domain name in to your browser’s address bar.

Setting Reverse DNS

You’re almost finished! The last step is setting reverse DNS for your domain name. Here’s how:

  1. Log in to the Linode Manager.
  2. Click the Linodes tab.
  3. Select your Linode.
  4. Click the Remote Access tab.
  5. Select the Reverse DNS link, as shown below.

    Select Reverse DNS link.

  6. Enter the domain in the Hostname field, as shown below.

    Enter domain in Hostname field.

  7. Click Look up. A message appears indicating that a match has been found.
  8. Click Yes.

You have set up reverse DNS for your domain name.

This guide is published under a CC BY-ND 3.0 license.

Author : Linode