如何在Ubuntu 16.04上使用Virtualmin和Ansible部署多个Wordpress网站

Vultr虚拟服务器的常见用法是托管Wordpress网站。本指南向您展示如何从头开始(使用Ansible)自动化虚拟服务器的配置以及如何部署多个独立的Wordpress网站(使用Webmin / Virtualmin)。Virtualmin / Webmin是一个图形用户界面,使您可以管理同一台计算机上的多个虚拟服务器帐户的部署(已完成LAMP / LEMP堆栈)。Virtualmin与cPanel和Plesk非常相似,在本教程中,我们将使用免费的GPL版本。在初始设置Vultr服务器并安装Virtualmin之后,您可以非常快速地从Virtualmin界面中设置多个虚拟服务器,并在具有自己域名的虚拟服务器上直接安装Wordpress。

在本教程中,我们将使用Ansible,而不是手动输入一长串命令。Ansible是基于python的自动化工具,可让您可靠且重复地自动化服务器任务。这意味着,一旦您按照本教程进行操作,就可以通过几个命令以相同的方式部署另一台服务器。

先决条件

  • 至少一个完全合格的域名并访问DNS记录
  • Vultr帐户

第1步-在本地计算机上安装Ansible

在本地计算机或其他服务器上安装Ansible。

mkdir ansible
cd ansible
virtualenv env
source env/bin/activate
pip install ansible

第2步-生成SSH密钥并部署服务器

Ansible通过SSH登录到服务器来工作。如果我们使用密钥而不是密码,则SSH访问是最安全的。首先让我们生成一个公钥和私钥对。

mkdir ssh_keys
ssh-keygen -t rsa -b 2048 -f ./ssh_keys

ssh_keys目录中现在将有两个文件,ssh_keysssh_keys.pubssh_keys是您的私钥文件,应保持安全。现在ssh_keys.pub,您可以打开,其中包含公钥。

登录到Vultr Web仪表板,然后单击Deploy New Server

选择一个区域,服务器类型(Ubuntu 16.04),服务器大小,然后在第6部分(SSH keys)中,单击Add New。在下一页上粘贴您的公钥并为其命名,然后单击Add SSH key。最后,确保已选择密钥,然后单击确定Deploy now
服务器完成部署后,将显示其IP地址。您需要登录到域名的DNS服务器,并将其指向该地址。

第3步-创建基本的Ansible配置

Ansible的自动化文件称为roles。我们将首先设置目录结构(在ansible您在步骤1中刚刚创建的目录内)和基本文件。

mkdir -p group_vars roles/common/tasks/ roles/common/handlers
touch hosts group_vars/all deploy.yml roles/common/handlers/main.yml

编辑hosts文件以包含以下内容,用替换ip address刚才创建的服务器。Ansible使用python 2,默认情况下未安装Ubuntu 16.04。在hosts文件中,我们告诉Ansible使用python 3。

[common]  
192.0.2.1 ansible_python_interpreter=/usr/bin/python3

编辑deploy.yml文件以包含以下内容。我们将使用root用户。

- name: apply common configuration to server
  hosts: all
  user: root
  roles:
    - common

编辑/group_vars/all文件以包含以下内容。这些变量告诉Ansible SSH密钥,交换文件参数,完全合格的域名和root密码的位置。请记住不要将该文件包含在源代码管理中,因为它以明文形式包含您的密码。

ssh_dir: ./ssh_keys
swap_file_path: /swapfile
swap_file_size: 1G
swappiness: 1
hostname: example.com
new_password: YOUR_PASSWORD_HERE

编辑common/handlers/main.yml文件以包含以下内容。

- name: restart sshd
  service: name=ssh state=restarted

第4步-为基本服务器设置创建Ansible任务

如果我们将Ansible自动化分解为任务,则更容易理解。让我们为流程中的每个任务创建文件。

cd roles/common/tasks
touch hosts main.yml setup.yml users.yml ufw.yml swap.yml virtualmin.yml

main.yml 应该指向每个包含Ansible命令的文件,因此对其进行编辑以包含以下内容。

- include: setup.yml
- include: users.yml
- include: ufw.yml
- include: swap.yml
- include: virtualmin.yml

设置新服务器的第一步是更新存储库缓存并设置时区。编辑common/handlers/setup.yml文件以包含以下内容。

- apt: update_cache=yes
  sudo: yes

- name: set timezone to Europe/London
  timezone:
    name: Europe/London

现在,我们将为根用户提供一个密码(我们将需要访问它来访问virtualmin Web界面),但是禁用通过SSH的密码登录(因为我们使用的是更安全的密钥身份验证方法)。编辑users.yml以包含以下内容。

- name: Change passwd
  user: name=root password={{ new_password | password_hash('sha512') }} update_password=always

- name: Disable SSH password login
  lineinfile: dest=/etc/ssh/sshd_config regexp="^#?PasswordAuthentication" line="PasswordAuthentication no"
  notify: restart sshd

为了安全,我们需要防火墙。我们将使用“不复杂的防火墙”来允许SSH访问端口22,Web访问端口80和安全Web访问端口443。编辑ufw.yml文件以包含以下内容。

- name: Set default firewall policy to deny all
  become: True
  ufw: state=enabled direction=incoming policy=deny
  tags: firewall

- name: enable SSH in firewall
  ufw: rule=allow port=22
  sudo: yes

- name: enable HTTP connections for web server
  ufw: rule=allow port=80
  sudo: yes

- name: enable HTTPS connections for web server
  ufw: rule=allow port=443
  sudo: yes

- name: enable firewall
  ufw: state=enabled
  sudo: yes

(可选)您可以包括交换文件。如果服务器的RAM小于2GB,这对于避免内存不足崩溃至关重要。编辑swap.yml以包含以下内容。

- name: Set swap_file variable
  set_fact:
    swap_file: "{{swap_file_path}}"
  tags:
    - swap.set.file.path

- name: Check if swap file exists
  stat:
    path: "{{swap_file}}"
  register: swap_file_check
  tags:
    - swap.file.check

- name: Create swap file
  command: fallocate -l {{swap_file_size}} {{swap_file}}
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.create

- name: Change swap file permissions
  file: path="{{swap_file}}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions

- name: Format swap file
  sudo: yes
  command: "mkswap {{swap_file}}"
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.mkswap

- name: Write swap entry in fstab
  mount: name=none
         src={{swap_file}}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab

- name: Turn on swap
  sudo: yes
  command: swapon -a
  when: not swap_file_check.stat.exists
  tags:
    - swap.turn.on

- name: Set swappiness
  sudo: yes
  sysctl:
    name: vm.swappiness
    value: "{{swappiness}}"
  tags:
    - swap.set.swappiness

第5步-为Virtualmin设置添加Ansible任务

Virtualmin有自己的安装程序文件,可以由Ansible下载并运行。在这里,我们使用最小安装(LINK)。其他项用于配置由Virtualmin安装时未设置的MySQL服务器密码。我们需要暂时停止MySQL并添加身份验证目录,然后再更改密码。编辑virtualmin.yml以包含以下内容。

- name: download virtualmin install script
  get_url: >
    url=http://software.virtualmin.com/gpl/scripts/install.sh
    dest=/root/install.sh
    mode=0755

- name: virtualmin install (takes around 10 mins) you can see progress using $ sudo tail -f /root/virtualmin-install.log
  tags: non-idem
  shell: ~/install.sh --force --hostname {{ hostname }} --minimal --yes
  args:
    chdir: /root

- name: temp stop mysql
  service:
    name: mysql
    state: stopped

- name: change owner (and group) of mysqld dir
  file:
    path: "/var/run/mysqld"
    state: directory
    owner: mysql
    group: mysql

- name: virtualmin set mysql password
  shell: virtualmin set-mysql-pass --user root --pass {{ new_password }}

- name: restart mysql
  service:
    name: mysql
    state: started

Ansible角色现已完成,我们已准备好进行部署。

步骤6-使用Ansible执行安装

现在,从ansible文件夹中,我们可以简单地运行以下命令,而Ansible将执行我们自动创建的所有任务。首次连接时,您会收到SSH密钥警告,只需yes在提示符下输入“ ”即可。

ansible-playbook deploy.yml --private-key=ssh_keys/ssh_keys -i hosts

如果我们希望使用其他服务器,则只需更改hosts文件中的IP地址,然后再次运行该命令即可完成完全相同的设置。

步骤7-Virtualmin安装后向导

安装完成,我们现在可以转到https://192.0.2.1:10000(使用您服务器的IP地址)。您的浏览器将发出安全警告,因为证书是自签名的,因此请单击advanced并添加例外。您将看到一个登录页面。用户名是root,密码是您group_vars/all在步骤3中输入文件的密码。第一次输入Virtualmin时,将显示安装后向导。您可以手动进行这些设置,也可以单击cancel以接受默认设置。

第8步-创建服务器并安装WordPress

要启动并运行第一台Wordpress服务器,请从Virtualmin仪表板单击Create Virtual Server。您需要输入域名,描述和管理员密码。域名应与Virtualmin完全限定域名不同,并且您需要将DNS记录指向服务器的IP地址。

点击Create Server。Virtualmin完成创建服务器后,单击Install Scripts左侧菜单。选择Wordpress,单击Show install options,然后在下一页上选择Wordpress安装的位置。只需选择At top level并单击Install Now

这就是您需要做的-您可以通过访问您的http://example.net/wp-admin/install.phpexample.net此虚拟服务器域名在哪里)来完成Wordpress的安装。如果您的DNS记录尚未传播,则可以Services > Preview Website从Virtualmin菜单转到。

您可以多次重复此步骤,以在同一Vultr服务器上全部创建多个Wordpress网站。



Leave a Comment

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在OpenBSD 6上设置Ghost Professional发布平台

在OpenBSD 6上设置Ghost Professional发布平台

Ghost是与WordPress竞争的最新,最大的暴发户。主题开发既快速又容易学习,因为Ghost开发人员决定同时使用

如何在Fedora 25上部署Ghost v0.11 LTS

如何在Fedora 25上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

在Ubuntu 16.04 LTS上安装Fork CMS

在Ubuntu 16.04 LTS上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在Debian 8上部署Ghost v0.11 LTS

如何在Debian 8上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

如何在CentOS 7上安装排字机CMS

如何在CentOS 7上安装排字机CMS

Typesetter是一个用PHP编写的开源CMS,专注于True WYSIWYG编辑和平面文件存储的易用性。在本文中,我们将安装

如何在Debian 9(Stretch)上安装Dotclear

如何在Debian 9(Stretch)上安装Dotclear

使用其他系统?Dotclear是一个非常简单的博客引擎。它是开源的,易于使用。本教程将通过以下方式进行安装

如何在CentOS 7 LAMP VPS上安装MODX Revolution

如何在CentOS 7 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在OpenBSD 6.2上安装WordPress

在OpenBSD 6.2上安装WordPress

简介WordPress是互联网上占主导地位的内容管理系统。它通过动态内容为从博客到复杂网站的一切提供支持

如何在Debian 9 LAMP VPS上安装MODX Revolution

如何在Debian 9 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在Fedora 28上安装Fork CMS

在Fedora 28上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在CentOS 7上安装Neos CMS

如何在CentOS 7上安装Neos CMS

Neos是一种创新的开源内容管理系统,非常适合创建和编辑在线内容。考虑到作者和编辑,Neo

如何在Ubuntu 16.04上安装Dotclear

如何在Ubuntu 16.04上安装Dotclear

使用其他系统?Dotclear是一个非常简单的博客引擎,已在PHP之上构建。在本教程中,我们将在Ubunt上安装Dotclear

如何在Ubuntu 16.04 LAMP VPS上安装MODX Revolution

如何在Ubuntu 16.04 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 16.04上部署Ghost

如何在Ubuntu 16.04上部署Ghost

使用其他系统?自2013年发布以来,Ghost是一个开源博客平台,在开发人员和普通用户中越来越受欢迎。一世

如何在CentOS 7.3上部署Ghost v0.11 LTS

如何在CentOS 7.3上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

在Debian 9上安装Fork CMS

在Debian 9上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在Debian 8.7上部署Ghost

如何在Debian 8.7上部署Ghost

使用其他系统?自2013年发布以来,Ghost是一个开源博客平台,在开发人员和普通用户中越来越受欢迎。一世

在CentOS 7上创建Jekyll博客

在CentOS 7上创建Jekyll博客

使用其他系统?Jekyll是WordPress的不错替代品。它不需要任何数据库,并且可以使用许多人熟悉的机智语言

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。