{"id":2020,"date":"2022-01-17T16:14:47","date_gmt":"2022-01-17T14:14:47","guid":{"rendered":"https:\/\/upcloud.com\/global\/us\/resources\/tutorials\/multiple-wordpress-sites-wordops\/"},"modified":"2026-02-12T21:13:26","modified_gmt":"2026-02-12T21:13:26","slug":"multiple-wordpress-sites-wordops","status":"publish","type":"tutorial","link":"https:\/\/upcloud.com\/global\/resources\/tutorials\/multiple-wordpress-sites-wordops\/","title":{"rendered":"How to set up multiple WordPress sites with WordOps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Build a blazingly fast WordPress development server with UpCloud &amp; <a rel=\"noopener\" href=\"https:\/\/wordops.net\/\" target=\"_blank\">WordOps.net<\/a> in just a few minutes. WordOps is a powerful CLI tool forked from EasyEngine that lets you deploy fast and secured Nginx WordPress sites by using simple and easy-to-remember commands.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/signup.upcloud.com\/\">Test hosting on UpCloud!<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up a cloud server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To get started you will need a new UpCloud server running Ubuntu 18.04 or higher. Log in to your <a href=\"https:\/\/hub.upcloud.com\/\" target=\"_blank\" rel=\"noopener\">UpCloud Control Panel<\/a> and click <em>Deploy server<\/em>. For now, WordOps is only available on Ubuntu or Debian-based Linux distributions and is not supported on CentOS. If you are new to UpCloud, you can get started by <a href=\"https:\/\/signup.upcloud.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">signing up<\/a> for a free trial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019ve deployed a new cloud server, <a href=\"https:\/\/upcloud.com\/global\/docs\/guides\/connecting-to-your-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">log in<\/a>&nbsp;using your SSH client.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Initial Ubuntu server setup<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When deploying new cloud servers, it\u2019s good to follow a common setup routine to get the server prepared. We recommend you follow the steps below to update and secure your cloud server before installing WordOps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While logged in as the root user, update and upgrade your Ubuntu server. It\u2019s important to keep your server up to date to avoid security vulnerabilities caused by outdated software.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt update &amp;&amp; apt upgrade -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You should also install a UFW firewall which can be used to restrict incoming traffic to only the required ports; SSH, HTTP and HTTPS (ports 22, 80 and 443). This is optional but is highly recommended as it adds an extra layer of protection to your server. Alternatively, you may wish to check out <a href=\"https:\/\/upcloud.com\/global\/docs\/guides\/managing-firewall\/\" target=\"_blank\" rel=\"noreferrer noopener\">UpCloud\u2019s L3 firewall<\/a> feature in your cloud server\u2019s settings.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">apt install ufw -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you installed UFW, add the following rules and then enable the firewall.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ufw allow ssh\nufw allow http\nufw allow https\nufw enable<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lastly, create a new user with sudo privileges. It\u2019s good practice to use a non-root account for connecting to your cloud server and to <a href=\"https:\/\/upcloud.com\/global\/docs\/guides\/use-ssh-keys-authentication\/\" target=\"_blank\" rel=\"noreferrer noopener\">disable password authentication<\/a> for SSH altogether to prevent brute-forcing.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">adduser <span style=\"color: #ff0000;\">new-user<\/span>\nusermod -aG sudo <span style=\"color: #ff0000;\">new-user<\/span><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Login to your server with the new user in a new SSH session, or by using the command below.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">su <span style=\"color: #ff0000;\">new-user<\/span><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up WordOps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With your cloud server prepared, you can now go ahead and install WordOps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The installation process is extremely simple \u2013 requiring only one command. While logged in as a user with sudo privileges, run the following command to begin the installation.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wget -qO wo wops.cc &amp;&amp; sudo bash wo<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The script will install all required dependencies as well as WordOps itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While the installation completes, now would be a good time to set up a domain for your development server if you haven\u2019t already. This will allow you to use subdomains for each WordPress site you create.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When the installation process finishes, you\u2019ll be prompted to Enter a name and email address.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Welcome to WordOps install\/update script v3.13.2\n\nInstalling wo dependencies      [OK]\nInstalling WordOps      [OK]\nRunning post-install steps      [OK]\nWordOps (wo) require an username &amp; and an email address to configure Git (used to save server configurations)\nYour informations will ONLY be stored locally\nEnter your name: Sam\nEnter your email: sam@example.com\nSynchronizing wo database, please wait...\nWordOps (wo) installed successfully\n\nTo enable bash-completion, just use the command:\nbash -l\n\nTo install WordOps recommended stacks, you can use the command:\nwo stack install\n\nTo create a first WordPress site, you can use the command:\nwo site create site.tld --wp\n\nWordOps Documentation : https:\/\/docs.wordops.net\nWordOps Community Forum : https:\/\/community.wordops.net\nWordOps Community Chat : https:\/\/chat.wordops.net\n\nGive WordOps a GitHub star : https:\/\/github.com\/WordOps\/WordOps\/\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring domain name records<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To be able to reach the WordPress sites running on your WordOps server, you will need to have configured a <strong>domain name A record<\/strong> pointing to your cloud server. The actual process of creating domain name records varies from one provider to another, but you can find general instructions for the topic from our guide on <a href=\"https:\/\/upcloud.com\/global\/docs\/guides\/domain-name-system\/\" target=\"_blank\" rel=\"noreferrer noopener\">how to manage DNS records<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With a valid domain name, you can use subdomains to create as many websites with WordOps as you want.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating WordPress sites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With WordOps installed, you can begin to create websites.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you just need a basic installation of WordPress, you can create a site with the following command. Remember to replace <span style=\"color: #ff0000;\">example.com<\/span> with your own domain or subdomain.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site create <span style=\"color: #ff0000;\">example.com<\/span> --wp<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, with WordOps you can also set up a WordPress site with a free Let\u2019s Encrypt SSL certificate and Nginx FastCGI Cache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that a valid domain name is required for Let\u2019s Encrypt to be able to obtain SSL certificates for your website. Therefore, you need to ensure your DNS records correctly point to your server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <span style=\"color: #ff0000;\">example.com<\/span> with your domain or subdomain name.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site update <span style=\"color: #ff0000;\">example.com<\/span> --wpfc -le<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When completed, you will see an output similar to the one below.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Start : wo-kernel [OK]\nAdding repository for MySQL, please wait...\nAdding repository for NGINX, please wait...\nAdding repository for PHP, please wait...\nUpdating apt-cache              [OK]\nInstalling APT packages         [OK]\nApplying Nginx configuration templates\nTesting Nginx configuration     [OK]\nRestarting Nginx                [OK]\nTesting Nginx configuration     [OK]\nRestarting Nginx                [OK]\nConfiguring php7.3-fpm\nRestarting php7.3-fpm           [OK]\nTuning MySQL configuration      [OK]\nRestarting mysql                [OK]\nRunning pre-update checks       [OK]\nSetting up NGINX configuration  [Done]\nSetting up webroot              [Done]\nDownloading WordPress           [Done]\nSetting up database             [Done]\nConfiguring WordPress           [OK]\nInstalling WordPress            [OK]\nInstalling plugin nginx-helper  [OK]\nSetting plugin nginx-helper     [OK]\nTesting Nginx configuration     [OK]\nReloading Nginx                 [OK]\nHTTP Auth User Name: WordOps\nHTTP Auth Password : t3shyrdQhkOQhtcM6QTbDPeB\nWordOps backend is available on https:\/\/95.111.199.103:22222 or https:\/\/607d-24ff-feef-1353.v6.sg-sin1.upcloud.host:22222\nWordPress admin user : Sam\nWordPress admin password : FI5shPXMrvGuYnz3yVHxW8Qf\nNginx-Helper configuration :    http:\/\/example.com\/wp-admin\/options-general.php?page=nginx\nSuccessfully created site http:\/\/example.com\nCertificate type : domain\nValidation mode : Webroot challenge\nIssuing SSL cert with acme.sh   [OK]\nDeploying SSL cert              [OK]\nSecuring WordOps backend with current cert\nAdding HTTPS redirection        [OK]\nUpdating site url with https    [OK]\nTesting Nginx configuration     [OK]\nReloading Nginx                 [OK]\nCongratulations! Successfully Configured SSL on https:\/\/example.com<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Enter the site\u2019s URL into your web browser, and you should see a freshly installed WordPress site with HTTPS enabled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can log in to your WordPress admin panel by going to <span style=\"color: #ff0000;\">https:\/\/example.com\/wp-admin\/<\/span> and using the WordPress admin credentials that were generated in the previous output.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can repeat the WordPress site deployment as many times as you want to install multiple websites on the same cloud server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Managing your WordPress sites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordOps has a host of features and can be used to configure WordPress sites of all types. However, listing all the available features is beyond the scope of this tutorial. You can refer to the official <a href=\"https:\/\/docs.wordops.net\/commands\/\" target=\"_blank\" rel=\"noopener\">WordOps documentation<\/a> for the full set of features and how to use them. Below are a handful of commands that you may find useful when first managing your server and websites.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Delete a site<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In case you no longer need your WordPress site, or perhaps simply want to start over again, you can use the <a href=\"https:\/\/docs.wordops.net\/commands\/site\/#site-delete\" target=\"_blank\" rel=\"noopener\">site delete<\/a> command in WordOps to completely remove a website including its files and database.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site delete <span style=\"color: #ff0000;\">example.com<\/span><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">List all available sites<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">At some point, you may have several websites running on your server. To list them all you can use the <a href=\"https:\/\/docs.wordops.net\/commands\/site\/#site-list\" target=\"_blank\" rel=\"noopener\">site list<\/a> command.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site list<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Show information about a site<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/docs.wordops.net\/commands\/site\/#site-info\" target=\"_blank\" rel=\"noopener\">site info<\/a> command lets you view general information about your websites such as the cache backend, PHP version and the user database credentials.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site info <span style=\"color: #ff0000;\">example.com<\/span><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Show a site\u2019s Nginx configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/docs.wordops.net\/commands\/site\/#site-show\" target=\"_blank\" rel=\"noopener\">site show<\/a> subcommand in WordOps lets you view your site\u2019s Nginx configuration.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo wo site show <span style=\"color: #ff0000;\">example.com<\/span><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The commands listed above should be sufficient to get you up and running initially, but like mentioned above, WordOps can do so much more. For a full list of all the available features and commands, you can refer to the official <a href=\"https:\/\/docs.wordops.net\/commands\/\" target=\"_blank\" rel=\"noopener\">WordOps documentation<\/a><\/p>\n","protected":false},"author":23,"featured_media":28480,"comment_status":"open","ping_status":"closed","template":"","community-category":[250,277],"class_list":["post-2020","tutorial","type-tutorial","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/2020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial"}],"about":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/types\/tutorial"}],"author":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/comments?post=2020"}],"version-history":[{"count":1,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/2020\/revisions"}],"predecessor-version":[{"id":3448,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/tutorial\/2020\/revisions\/3448"}],"wp:attachment":[{"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/media?parent=2020"}],"wp:term":[{"taxonomy":"community-category","embeddable":true,"href":"https:\/\/upcloud.com\/global\/wp-json\/wp\/v2\/community-category?post=2020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}