Docker 是一个开源项目，为开发人员和系统管理员提供了一个开放平台，可以将应用程序构建、打包为一个轻量级容器，并在任何地方运行。Docker 会在软件容器中自动部署应用程序。Django 是一个用 Python 编写的 Web 应用程序框架，遵循 MVC（模型-视图-控制器）架构。它是免费的，并在开源许可下发布。它速度很快，旨在帮助开发人员尽快将他们的应用程序上线。在本教程中，我将逐步向你展示在 Ubuntu 16.04 中如何为现有的 Django 应用程序创建 docker 镜像。我们将学习如何 docker 化一个 Python Django 应用程序，然后使用一个 docker-compose 脚本将应用程序作为容器部署到 docker 环境。为了部署我们的 Python Django 应用程序，我们需要其它 docker 镜像：一个用于 Web 服务器的 nginx docker 镜像和用于数据库的 PostgreSQL 镜像。我们要做什么？安装 Docker-ce安装 Docker-compose配置项目环境构建并运行测试步骤 1 - 安装 Docker-ce在本教程中，我们将从 docker 仓库安装 docker-ce 社区版。我们将安装 docker-ce 社区版和 docker-compose（其支持 compose 文件版本 3）。在安装 docker-ce 之前，先使用 apt 命令安装所需的 docker 依赖项。sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common现在通过运行以下命令添加 docker 密钥和仓库。curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"更新仓库并安装 docker-ce。sudo apt update sudo apt install -y docker-ce安装完成后，启动 docker 服务并使其能够在每次系统引导时启动。systemctl start docker systemctl enable docker接着，我们将添加一个名为 omar 的新用户并将其添加到 docker 组。useradd -m -s /bin/bash omar usermod -a -G docker omar以 omar 用户身份登录并运行 docker 命令，如下所示。su - omar docker run hello-world确保你能从 Docker 获得 hello-world 消息。Docker-ce 安装已经完成。步骤 2 - 安装 Docker-compose在本教程中，我们将使用支持 compose 文件版本 3 的最新 docker-compose。我们将手动安装 docker-compose。使用 curl 命令将最新版本的 docker-compose 下载到 /usr/local/bin 目录，并使用 chmod 命令使其有执行权限。运行以下命令：sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose现在检查 docker-compose 版本。docker-compose version确保你安装的是最新版本的 docker-compose 1.21。已安装支持 compose 文件版本 3 的 docker-compose 最新版本。步骤 3 - 配置项目环境在这一步中，我们将配置 Python Django 项目环境。我们将创建新目录 guide01，并使其成为我们项目文件的主目录，例如包括 Dockerfile、Django 项目、nginx 配置文件等。登录到 omar 用户。su - omar创建一个新目录 guide01，并进入目录。mkdir -p guide01 cd guide01/现在在 guide01 目录下，创建两个新目录 project 和 config。mkdir project/ config/注意：project 目录：我们所有的 python Django 项目文件都将放在该目录中。config 目录：项目配置文件的目录，包括 nginx 配置文件、python pip 的requirements.txt 文件等。创建一个新的 requirements.txt 文件接下来，使用 vim 命令在 config 目录中创建一个新的 requirements.txt 文件。vim config/requirements.txt粘贴下面的配置：Django==2.0.4 gunicorn==19.7.0 psycopg2==2.7.4保存并退出。创建 Nginx 虚拟主机文件 django.conf在 config 目录下创建 nginx 配置目录并添加虚拟主机配置文件 django.conf。mkdir -p config/nginx/ vim config/nginx/django.conf粘贴下面的配置：upstream web { ip_hash; server web:8000; } # portal server { location / { proxy_pass http://web/; } listen 8000; server_name localhost; location /static { autoindex on; alias /src/static/; } }保存并退出。创建 Dockerfile在 guide01 目录下创建新文件 Dockerfile。运行以下命令：vim Dockerfile现在粘贴下面的 Dockerfile 脚本：FROM python:3.5-alpine ENV PYTHONUNBUFFERED 1 RUN apk update && \ apk add --virtual build-deps gcc python-dev musl-dev && \ apk add postgresql-dev bash RUN mkdir /config ADD /config/requirements.txt /config/ RUN pip install -r /config/requirements.txt RUN mkdir /src WORKDIR /src保存并退出。注意：我们想要为我们的 Django 项目构建基于 Alpine Linux 的 Docker 镜像，Alpine 是最小的 Linux 版本。我们的 Django 项目将运行在带有 Python 3.5 的 Alpine Linux 上，并添加 postgresql-dev 包以支持 PostgreSQL 数据库。然后，我们将使用 python pip 命令安装在 requirements.txt 上列出的所有 Python 包，并为我们的项目创建新目录 /src。创建 Docker-compose 脚本使用 vim 命令在 guide01 目录下创建 docker-compose.yml 文件。vim docker-compose.yml粘贴以下配置内容：version: '3' services: db: image: postgres:10.3-alpine container_name: postgres01 nginx: image: nginx:1.13-alpine container_name: nginx01 ports: - "8000:8000" volumes: - ./project:/src - ./config/nginx:/etc/nginx/conf.d depends_on: - web web: build: . container_name: django01 command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000" depends_on: - db volumes: - ./project:/src expose: - "8000" restart: always保存并退出。注意：使用这个 docker-compose 文件脚本，我们将创建三个服务。使用 alpine Linux 版的 PostgreSQL 创建名为 db 的数据库服务，再次使用 alpine Linux 版的 Nginx 创建 nginx 服务，并使用从 Dockerfile 生成的自定义 docker 镜像创建我们的 python Django 容器。配置 Django 项目将 Django 项目文件复制到 project 目录。cd ~/django cp -r * ~/guide01/project/进入 project 目录并编辑应用程序设置 settings.py。cd ~/guide01/project/ vim hello_django/settings.py注意：我们将部署名为 “hello\_django” 的简单 Django 应用程序。在 ALLOW_HOSTS 行中，添加服务名称 web。ALLOW_HOSTS = ['web']现在更改数据库设置，我们将使用 PostgreSQL 数据库来运行名为 db 的服务，使用默认用户和密码。DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }至于 STATIC_ROOT 配置目录，将此行添加到文件行的末尾。STATIC_ROOT = os.path.join(BASE_DIR, 'static/')保存并退出。现在我们准备在 docker 容器下构建和运行 Django 项目。步骤 4 - 构建并运行 Docker 镜像在这一步中，我们想要使用 guide01 目录中的配置为我们的 Django 项目构建一个 Docker 镜像。进入 guide01 目录。cd ~/guide01/现在使用 docker-compose 命令构建 docker 镜像。docker-compose build启动 docker-compose 脚本中的所有服务。docker-compose up -d等待几分钟让 Docker 构建我们的 Python 镜像并下载 nginx 和 postgresql docker 镜像。完成后，使用以下命令检查运行容器并在系统上列出 docker 镜像。docker-compose ps docker-compose images现在，你将在系统上运行三个容器，列出 Docker 镜像，如下所示。我们的 Python Django 应用程序现在在 docker 容器内运行，并且已经创建了为我们服务的 docker 镜像。步骤 5 - 测试打开 Web 浏览器并使用端口 8000 键入服务器地址，我的是：http://ovh01:8000/。现在你将看到默认的 Django 主页。接下来，通过在 URL 上添加 /admin 路径来测试管理页面。http://ovh01:8000/admin/然后你将会看到 Django 管理登录页面。Docker 化 Python Django 应用程序已成功完成。参考https://docs.docker.com/via: https://www.howtoforge.com/tutorial/docker-guide-dockerizing-python-django-application/作者：Muhammad Arul 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Gogs 是由 Go 语言编写的，自由开源的 Git 服务。Gogs 是一款无痛式自托管的 Git 服务器，能在尽可能小的硬件资源开销上搭建并运行您的私有 Git 服务器。Gogs 的网页界面和 GitHub 十分相近，且提供 MySQL、PostgreSQL 和 SQLite 数据库支持。在本教程中，我们将使用 Gogs 在 Ununtu 16.04 上按步骤指导您安装和配置您的私有 Git 服务器。这篇教程中涵盖了如何在 Ubuntu 上安装 Go 语言、PostgreSQL 和安装并且配置 Nginx 网页服务器作为 Go 应用的反向代理的细节内容。搭建环境Ubuntu 16.04Root 权限我们将会接触到的事物更新和升级系统安装和配置 PostgreSQL安装 Go 和 Git安装 Gogs配置 Gogs运行 Gogs 服务器安装和配置 Nginx 反向代理测试步骤 1 - 更新和升级系统继续之前，更新 Ubuntu 所有的库，升级所有包。运行下面的 apt 命令：sudo apt update sudo apt upgrade 步骤 2 - 安装和配置 PostgreSQLGogs 提供 MySQL、PostgreSQL、SQLite 和 TiDB 数据库系统支持。此步骤中，我们将使用 PostgreSQL 作为 Gogs 程序的数据库。使用下面的 apt 命令安装 PostgreSQL。sudo apt install -y postgresql postgresql-client libpq-dev 安装完成之后，启动 PostgreSQL 服务并设置为开机启动。systemctl start postgresql systemctl enable postgresql 此时 PostgreSQL 数据库在 Ubuntu 系统上完成安装了。之后，我们需要为 Gogs 创建数据库和用户。使用 postgres 用户登录并运行 psql 命令以访问 PostgreSQL 操作界面。su - postgres psql 创建一个名为 git 的新用户，给予此用户 CREATEDB 权限。CREATE USER git CREATEDB; \password git 创建名为 gogs_production 的数据库，设置 git 用户作为其所有者。CREATE DATABASE gogs_production OWNER git; 用于 Gogs 的 gogs_production PostgreSQL 数据库和 git 用户已经创建完毕。步骤 3 - 安装 Go 和 Git使用下面的 apt 命令从库中安装 Git。sudo apt install git 此时，为系统创建名为 git 的新用户。sudo adduser --disabled-login --gecos 'Gogs' git 登录 git 账户并且创建名为 local 的目录。su - git mkdir -p /home/git/local 切换到 local 目录，依照下方所展示的内容，使用 wget 命令下载 Go（最新版）。cd ~/local wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz 解压并且删除 go 的压缩文件。tar -xf go1.9.2.linux-amd64.tar.gz rm -f go1.9.2.linux-amd64.tar.gz Go 二进制文件已经被下载到 ~/local/go 目录。此时我们需要设置环境变量 - 设置 GOROOT 和 GOPATH 目录到系统环境，这样，我们就可以在 git 用户下执行 go 命令。执行下方的命令。cd ~/ echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc 之后通过运行 source ~/.bashrc 重载 Bash，如下：source ~/.bashrc 确定您使用的 Bash 是默认的 shell。现在运行 go 的版本查看命令。go version 之后确保您得到下图所示的结果。现在，Go 已经安装在系统的 git 用户下了。步骤 4 - 使用 Gogs 安装 Git 服务使用 git 用户登录并且使用 go 命令从 GitHub 下载 Gogs。su - git go get -u github.com/gogits/gogs 此命令将在 GOPATH/src 目录下载 Gogs 的所有源代码。切换至 $GOPATH/src/github.com/gogits/gogs 目录，并且使用下列命令搭建 Gogs。cd $GOPATH/src/github.com/gogits/gogs go build 确保您没有遇到错误。现在使用下面的命令运行 Gogs Go Git 服务器。./gogs web 此命令将会默认运行 Gogs 在 3000 端口上。打开网页浏览器，键入您的 IP 地址和端口号，我的是 http://192.168.33.10:3000/ 。您应该会得到与下方一致的反馈。Gogs 已经在您的 Ubuntu 系统上安装完毕。现在返回到您的终端，并且键入 Ctrl + C 中止服务。步骤 5 - 配置 Gogs Go Git 服务器本步骤中，我们将为 Gogs 创建惯例配置。进入 Gogs 安装目录并新建 custom/conf 目录。cd $GOPATH/src/github.com/gogits/gogs mkdir -p custom/conf/ 复制默认的配置文件到 custom 目录，并使用 vim 修改。cp conf/app.ini custom/conf/app.ini vim custom/conf/app.ini 在 [server] 小节中，修改 HOST_ADDR 为 127.0.0.1。[server] PROTOCOL = http DOMAIN = localhost ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ HTTP_ADDR = 127.0.0.1 HTTP_PORT = 3000 在 [database] 选项中，按照您的数据库信息修改。[database] DB_TYPE = postgres HOST = 127.0.0.1:5432 NAME = gogs_production USER = git PASSWD = aqwe123@# 保存并退出。运行下面的命令验证配置项。./gogs web 并且确保您得到如下的结果。Gogs 现在已经按照自定义配置下运行在 localhost 的 3000 端口上了。步骤 6 - 运行 Gogs 服务器这一步，我们将在 Ubuntu 系统上配置 Gogs 服务器。我们会在 /etc/systemd/system 目录下创建一个新的服务器配置文件 gogs.service。切换到 /etc/systemd/system 目录，使用 vim 创建服务器配置文件 gogs.service。cd /etc/systemd/system vim gogs.service 粘贴下面的代码到 Gogs 服务器配置文件中。[Unit] Description=Gogs After=syslog.target After=network.target After=mariadb.service mysqld.service postgresql.service memcached.service redis.service [Service] # Modify these two values and uncomment them if you have # repos with lots of files and get an HTTP error 500 because # of that ### #LimitMEMLOCK=infinity #LimitNOFILE=65535 Type=simple User=git Group=git WorkingDirectory=/home/git/go/src/github.com/gogits/gogs ExecStart=/home/git/go/src/github.com/gogits/gogs/gogs web Restart=always Environment=USER=git HOME=/home/git [Install] WantedBy=multi-user.target 之后保存并且退出。现在可以重载系统服务器。systemctl daemon-reload 使用下面的命令开启 Gogs 服务器并设置为开机启动。systemctl start gogs systemctl enable gogs Gogs 服务器现在已经运行在 Ubuntu 系统上了。使用下面的命令检测：netstat -plntu systemctl status gogs 您应该会得到下图所示的结果。步骤 7 - 为 Gogs 安装和配置 Nginx 反向代理在本步中，我们将为 Gogs 安装和配置 Nginx 反向代理。我们会在自己的库中调用 Nginx 包。使用下面的命令添加 Nginx 库。sudo add-apt-repository -y ppa:nginx/stable 此时更新所有的库并且使用下面的命令安装 Nginx。sudo apt update sudo apt install nginx -y 之后，进入 /etc/nginx/sites-available 目录并且创建虚拟主机文件 gogs。cd /etc/nginx/sites-available vim gogs 粘贴下面的代码到配置文件。server { listen 80; server_name git.hakase-labs.co; location / { proxy_pass http://localhost:3000; } } 保存退出。注意: 请使用您的域名修改 server_name 项。现在激活虚拟主机并且测试 nginx 配置。ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/ nginx -t 确保没有遇到错误，重启 Nginx 服务器。systemctl restart nginx 步骤 8 - 测试打开您的网页浏览器并且输入您的 Gogs URL，我的是 http://git.hakase-labs.co现在您将进入安装界面。在页面的顶部，输入您所有的 PostgreSQL 数据库信息。之后，滚动到底部，点击 “Admin account settings” 下拉选项。输入您的管理者用户名和邮箱。之后点击 “Install Gogs” 按钮。然后您将会被重定向到下图显示的 Gogs 用户面板。下面是 Gogs 的 “Admin Dashboard（管理员面板）”。现在，Gogs 已经通过 PostgreSQL 数据库和 Nginx 网页服务器在您的 Ubuntu 16.04 上完成安装。via: https://www.howtoforge.com/tutorial/how-to-install-gogs-go-git-service-on-ubuntu-1604/作者：Muhammad Arul 译者：CYLeft 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
OTRS ，即开源 问题单 （ ticket ） 申请系统，是一个用于客户服务、帮助台和 IT 服务管理的开源问题单软件。该软件是用 Perl 和 javascript 编写的。对于那些需要管理票据、投诉、支持请求或其他类型的报告的公司和组织来说，这是一个问题单解决方案。OTRS 支持包括 MySQL、PostgreSQL、Oracle 和 SQL Server 在内的多个数据库系统，它是一个可以安装在 Windows 和 Linux 上的多平台软件。在本教程中，我将介绍如何在 Ubuntu 16.04 上安装和配置 OTRS。我将使用 PostgreSQL 作为 OTRS 的数据库，将 Apache Web 服务器用作 Web 服务器。先决条件Ubuntu 16.04。最小 2GB 的内存。root 权限步骤 1 - 安装 Apache 和 PostgreSQL在第一步中，我们将安装 Apache Web 服务器以及 PostgreSQL。我们将从 ubuntu 仓库中使用最新的版本。使用 SSH 登录到你的 Ubuntu 服务器中：ssh root@192.168.33.14 更新 Ubuntu 仓库。sudo apt-get update 使用 apt 安装 Apache2 以及 PostgreSQL：sudo apt-get install -y apache2 libapache2-mod-perl2 postgresql 通过检查服务器端口确保 Apache 以及 PostgreSQL 运行了。netstat -plntu 你可以看到 80 端口被 apache 使用了，5432 端口被 postgresql 数据库使用了。步骤 2 - 安装 Perl 模块OTRS 基于 Perl，因此我们需要安装一些 OTRS 需要的 Perl 模块。使用这个 apt 命令安装 perl 模块：sudo apt-get install -y libapache2-mod-perl2 libdbd-pg-perl libnet-dns-perl libnet-ldap-perl libio-socket-ssl-perl libpdf-api2-perl libsoap-lite-perl libgd-text-perl libgd-graph-perl libapache-dbi-perl libarchive-zip-perl libcrypt-eksblowfish-perl libcrypt-ssleay-perl libencode-hanextra-perl libjson-xs-perl libmail-imapclient-perl libtemplate-perl libtext-csv-xs-perl libxml-libxml-perl libxml-libxslt-perl libpdf-api2-simple-perl libyaml-libyaml-perl 安装完成后，我们需要为 apache 激活 Perl 模块，接着重启 apache 服务。a2enmod perl systemctl restart apache2 接下来，使用下面的命令检查模块是否已经加载了：apachectl -M | sort 你可以在 “Loaded Modules” 部分下看到 perl\_module。步骤 3 - 为 OTRS 创建新用户OTRS 是一个基于 web 的程序并且运行与 apache web 服务器下。为了安全，我们需要以普通用户运行它，而不是 root 用户。使用 useradd 命令创建一个 otrs 新用户：useradd -r -d /opt/otrs -c 'OTRS User' otrs -r：将用户作为系统用户。-d /opt/otrs：在 /opt/otrs 下放置新用户的主目录。-c：备注。接下来，将 otrs 用户加入到 www-data 用户组，因为 apache 运行于 www-data 用户及用户组。usermod -a -G www-data otrs 在 /etc/passwd 文件中已经有 otrs 用户了。grep -rin otrs /etc/passwd OTRS 的新用户已经创建了。步骤 4 - 创建和配置数据库在这节中，我们会为 OTRS 系统创建一个新 PostgreSQL 数据库，并对 PostgreSQL 数据库的配置做一些小的更改。登录到 postgres 用户并访问 PostgreSQL shell。su - postgres psql 创建一个新的角色 otrs，密码是 myotrspw，并且是非特权用户。create user otrs password 'myotrspw' nosuperuser; 接着使用 otrs 用户权限创建一个新的 otrs 数据库：create database otrs owner otrs; \q 接下来为 otrs 角色验证编辑 PostgreSQL 配置文件。vim /etc/postgresql/9.5/main/pg_hba.conf 在 84 行后粘贴下面的配置：local otrs otrs password host otrs otrs 127.0.0.1/32 password 保存文件并退出 vim使用 exit 回到 root 权限并重启 PostgreSQL：exit systemctl restart postgresql PostgreSQL 已经为 OTRS 的安装准备好了。步骤 5 - 下载和配置 OTRS在本教程中，我们会使用 OTRS 网站中最新的版本。进入 /opt 目录并使用 wget 命令下载 OTRS 5.0：cd /opt/ wget http://ftp.otrs.org/pub/otrs/otrs-5.0.16.tar.gz 展开该 otrs 文件，重命名目录并更改所有 otrs 的文件和目录的所属人为 otrs。tar -xzvf otrs-5.0.16.tar.gz mv otrs-5.0.16 otrs chown -R otrs:otrs otrs 接下来，我们需要检查系统并确保可以安装 OTRS 了。使用下面的 otrs 脚本命令检查 OTRS 安装需要的系统软件包：/opt/otrs/bin/otrs.CheckModules.pl 确保所有的结果是对的，这意味着我们的服务器可以安装 OTRS 了。OTRS 已下载，并且我们的服务器可以安装 OTRS 了。接下，进入 otrs 目录并复制配置文件。cd /opt/otrs/ cp Kernel/Config.pm.dist Kernel/Config.pm 使用 vim 编辑 Config.pm 文件：vim Kernel/Config.pm 更改 42 行的数据库密码：$Self->{DatabasePw} = 'myotrspw'; 注释 45 行的 MySQL 数据库支持：# $Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};"; 取消注释 49 行的 PostgreSQL 数据库支持：$Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};"; 保存文件并退出 vim。接着编辑 apache 启动文件来启用 PostgreSQL 支持。vim scripts/apache2-perl-startup.pl 取消注释 60 和 61 行：# enable this if you use postgresql use DBD::Pg (); use Kernel::System::DB::postgresql; 保存文件并退出编辑器。最后，检查缺失的依赖和模块。perl -cw /opt/otrs/bin/cgi-bin/index.pl perl -cw /opt/otrs/bin/cgi-bin/customer.pl perl -cw /opt/otrs/bin/otrs.Console.pl 你可以在下面的截图中看到结果是 “OK”：步骤 6 - 导入样本数据库在本教程中，我们会使用样本数据库，这可以在脚本目录中找到。因此我们只需要将所有的样本数据库以及表结构导入到第 4 步创建的数据库中。登录到 postgres 用户并进入 otrs 目录中。su - postgres cd /opt/otrs/ 作为 otrs 用户使用 psql 命令插入数据库以及表结构。psql -U otrs -W -f scripts/database/otrs-schema.postgresql.sql otrs psql -U otrs -W -f scripts/database/otrs-initial_insert.postgresql.sql otrs psql -U otrs -W -f scripts/database/otrs-schema-post.postgresql.sql otrs 在需要的时候输入数据库密码 myotrspw。步骤 7 - 启动 OTRS数据库以及 OTRS 已经配置了，现在我们可以启动 OTRS。将 otrs 的文件及目录权限设置为 www-data 用户和用户组。/opt/otrs/bin/otrs.SetPermissions.pl --otrs-user=www-data --web-group=www-data 通过创建一个新的链接文件到 apache 虚拟主机目录中启用 otrs apache 配置。ln -s /opt/otrs/scripts/apache2-httpd.include.conf /etc/apache2/sites-available/otrs.conf 启用 otrs 虚拟主机并重启 apache。a2ensite otrs systemctl restart apache2 确保 apache 启动没有错误。步骤 8 - 配置 OTRS 计划任务OTRS 已经安装并运行在 Apache Web 服务器中了，但是我们仍然需要配置 OTRS 计划任务。登录到 otrs 用户，接着以 otrs 用户进入 var/cron 目录。su - otrs cd var/cron/ pwd 使用下面的命令复制所有 .dist 计划任务脚本：for foo in *.dist; do cp $foo `basename $foo .dist`; done 使用 exit 回到 root 权限，并使用 otrs 用户启动计划任务脚本。exit /opt/otrs/bin/Cron.sh start otrs 接下来，手动收取电子邮件的 PostMaster 创建一个新的计划任务。我会配置为每 2 分钟收取一次邮件。su - otrs crontab -e 粘贴下面的配置：*/2 * * * * $HOME/bin/otrs.PostMasterMailbox.pl >> /dev/null 保存并退出。现在停止 otrs 守护进程并再次启动。bin/otrs.Daemon.pl stop bin/otrs.Daemon.pl start OTRS 安装以及配置完成了。步骤 9 - 测试 OTRS打开你的 web 浏览器并输入你的服务器 IP 地址： http://192.168.33.14/otrs/使用默认的用户 root@localhost 以及密码 root 登录。使用默认的 root 账户你会看到一个警告。点击警告信息来创建一个新的 admin root 用户。下面是用另外的 admin root 用户登录后出现的 admin 页面，这里没有出现错误信息。如果你想作为客户登录，你可以使用 customer.pl ：http://192.168.33.14/otrs/customer.pl你会看到客户登录界面，输入客户的用户名和密码。下面是一个创建新单据的客户页面。步骤 10 - 疑难排查如果你仍旧看到 “OTRS Daemon is not running” 的错误，你可以像这样调试 OTRS 守护进程。su - otrs cd /opt/otrs/ 停止 OTRS 守护进程：bin/otrs.Daemon.pl stop 使用 --debug 选项启动 OTRS 守护进程。bin/otrs.Daemon.pl start --debug 参考http://wiki.otterhub.org/index.php?title=InstallationonDebian6with\_Postgreshttp://www.geoffstratton.com/otrs-installation-5011-ubuntu-1604https://www.linkedin.com/pulse/ticketing-system-otrs-ubuntu-1404-muhammad-faiz-khanvia: https://www.howtoforge.com/tutorial/how-to-install-otrs-opensource-trouble-ticket-system-on-ubuntu-16-04/作者：Muhammad Arul 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 Ubuntu 上使用 pm2 和 Nginx 部署 Node.js 应用
pm2 是一个 Node.js 应用的进程管理器，它可以让你的应用程序保持运行，还有一个内建的负载均衡器。它非常简单而且强大，你可以零间断重启或重新加载你的 node 应用，它也允许你为你的 node 应用创建集群。在这篇博文中，我会向你展示如何安装和配置 pm2 用于这个简单的 'Express' 应用，然后配置 Nginx 作为运行在 pm2 下的 node 应用的反向代理。前提：Ubuntu 16.04 - 64bitRoot 权限第一步 - 安装 Node.js LTS在这篇指南中，我们会从零开始我们的实验。首先，我们需要在服务器上安装 Node.js。我会使用 Nodejs LTS 6.x 版本，它能从 nodesource 仓库中安装。从 Ubuntu 仓库安装 python-software-properties 软件包并添加 “nodesource” Nodejs 仓库。sudo apt-get install -y python-software-properties curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - 安装最新版本的 Nodejs LTS：sudo apt-get install -y nodejs 安装完成后，查看 node 和 npm 版本。node -v npm -v 第二步 - 生成 Express 示例 App我会使用 express-generator 软件包生成的简单 web 应用框架进行示例安装。express-generator 可以使用 npm 命令安装。用 npm安装 express-generator：npm install express-generator -g -g ： 在系统内部安装软件包。我会以普通用户运行应用程序，而不是 root 或者超级用户。我们首先需要创建一个新的用户。创建一个名为 yume 的用户：useradd -m -s /bin/bash yume passwd yume 使用 su 命令登录到新用户：su - yume 下一步，用 express 命令生成一个新的简单 web 应用程序：express hakase-app 命令会创建新项目目录 hakase-app。进入到项目目录并安装应用需要的所有依赖。cd hakase-app npm install 然后用下面的命令测试并启动一个新的简单应用程序：DEBUG=myapp:* npm start 默认情况下，我们的 express 应用会运行在 3000 端口。现在访问服务器的 IP 地址：192.168.33.10:3000 ：这个简单 web 应用框架现在以 'yume' 用户运行在 3000 端口。第三步 - 安装 pm2pm2 是一个 node 软件包，可以使用 npm 命令安装。（用 root 权限，如果你仍然以 yume 用户登录，那么运行命令 exit 再次成为 root 用户）：npm install pm2 -g 现在我们可以为我们的 web 应用使用 pm2 了。进入应用目录 hakase-app：su - yume cd ~/hakase-app/ 这里你可以看到一个名为 package.json 的文件，用 cat 命令显示它的内容。cat package.json 你可以看到 start 行有一个 nodejs 用于启动 express 应用的命令。我们会和 pm2 进程管理器一起使用这个命令。像下面这样使用 pm2 命令运行 express 应用：pm2 start ./bin/www 现在你可以看到像下面这样的结果：我们的 express 应用正在 pm2 中运行，名称为 www，id 为 0。你可以用 show 选项 show nodeid|name 获取更多 pm2 下运行的应用的信息。pm2 show www 如果你想看我们应用的日志，你可以使用 logs 选项。它包括访问和错误日志，你还可以看到应用程序的 HTTP 状态。pm2 logs www 你可以看到我们的程序正在运行。现在，让我们来让它开机自启动。pm2 startup systemd systemd： Ubuntu 16 使用的是 systemd。你会看到要用 root 用户运行命令的信息。使用 exit 命令回到 root 用户然后运行命令。sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume 它会为启动应用程序生成 systemd 配置文件。当你重启服务器的时候，应用程序就会自动运行。第四步 - 安装和配置 Nginx 作为反向代理在这篇指南中，我们会使用 Nginx 作为 node 应用的反向代理。Ubuntu 仓库中有 Nginx，用 apt 命令安装它：sudo apt-get install -y nginx 下一步，进入到 sites-available 目录并创建新的虚拟主机配置文件。cd /etc/nginx/sites-available/ vim hakase-app 粘贴下面的配置：upstream hakase-app { # Nodejs app upstream server 127.0.0.1:3000; keepalive 64; } # Server on port 80 server { listen 80; server_name hakase-node.co; root /home/yume/hakase-app; location / { # Proxy_pass configuration proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_max_temp_file_size 0; proxy_pass http://hakase-app/; proxy_redirect off; proxy_read_timeout 240s; } }保存文件并退出 vim。在配置中：node 应用使用域名 hakase-node.co 运行。所有来自 nginx 的流量都会被转发到运行在 3000 端口的 node app。测试 Nginx 配置确保没有错误。nginx -t 启用 Nginx 并使其开机自启动。systemctl start nginx systemctl enable nginx 第五步 - 测试打开你的 web 浏览器并访问域名（我的是）：http://hakase-app.co 。你可以看到 express 应用正在 Nginx web 服务器中运行。下一步，重启你的服务器，确保你的 node app 能开机自启动：pm2 save sudo reboot 如果你再次登录到了你的服务器，检查 node app 进程。以 yume 用户运行下面的命令。su - yume pm2 status www Node 应用在 pm2 中运行并使用 Nginx 作为反向代理。链接UbuntuNode.jsNginxvia: https://www.howtoforge.com/tutorial/how-to-deploy-nodejs-applications-with-pm2-and-nginx-on-ubuntu/作者：Muhammad Arul 译者：ictlyh 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 Ubuntu16.04 中用 Apache 部署 Jenkins 自动化服务器
Jenkins 是从 Hudson 项目衍生出来的自动化服务器。Jenkins 是一个基于服务器的应用程序，运行在 Java servlet 容器中，它支持包括 Git、SVN 以及 Mercurial 在内的多种 SCM（ 源码控制工具 （ Source Control Management ） ）。Jenkins 提供了上百种插件帮助你的项目实现自动化。Jenkins 由 Kohsuke Kawaguchi 开发，在 2011 年使用 MIT 协议发布了第一个发行版，它是个自由软件。在这篇指南中，我会向你介绍如何在 Ubuntu 16.04 中安装最新版本的 Jenkins。我们会用自己的域名运行 Jenkins，在 apache web 服务器中安装和配置 Jenkins，而且支持反向代理。前提Ubuntu 16.04 服务器 - 64 位Root 权限第一步 - 安装 Java OpenJDK 7Jenkins 基于 Java，因此我们需要在服务器上安装 Java OpenJDK 7。在这里，我们会从一个 PPA 仓库安装 Java 7，首先我们需要添加这个仓库。默认情况下，Ubuntu 16.04 没有安装用于管理 PPA 仓库的 python-software-properties 软件包，因此我们首先需要安装这个软件。使用 apt 命令安装 python-software-properties。apt-get install python-software-properties 下一步，添加 Java PPA 仓库到服务器中。add-apt-repository ppa:openjdk-r/ppa 用 apt 命令更新 Ubuntu 仓库并安装 Java OpenJDK。apt-get update apt-get install openjdk-7-jdk 输入下面的命令验证安装：java -version 你会看到安装到服务器上的 Java 版本。第二步 - 安装 JenkinsJenkins 给软件安装包提供了一个 Ubuntu 仓库，我们会从这个仓库中安装 Jenkins。用下面的命令添加 Jenkins 密钥和仓库到系统中。wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - echo 'deb https://pkg.jenkins.io/debian-stable binary/' | tee -a /etc/apt/sources.list 更新仓库并安装 Jenkins。apt-get update apt-get install jenkins 安装完成后，用下面的命令启动 Jenkins。systemctl start jenkins 通过检查 Jenkins 默认使用的端口（端口 8080）验证 Jenkins 正在运行。我会像下面这样用 netstat 命令检测：netstat -plntu Jenkins 已经安装好了并运行在 8080 端口。第三步 - 为 Jenkins 安装和配置 Apache 作为反向代理在这篇指南中，我们会在一个 Apache web 服务器中运行 Jenkins，我们会为 Jenkins 配置 apache 作为反向代理。首先我会安装 apache 并启用一些需要的模块，然后我会为 Jenkins 用域名 my.jenkins.id 创建虚拟主机文件。请在这里使用你自己的域名并在所有配置文件中出现的地方替换。从 Ubuntu 仓库安装 apache2 web 服务器。apt-get install apache2 安装完成后，启用 proxy 和 proxy\_http 模块以便将 apache 配置为 Jenkins 的前端服务器/反向代理。a2enmod proxy a2enmod proxy_http 下一步，在 sites-available 目录创建新的虚拟主机文件。cd /etc/apache2/sites-available/ vim jenkins.conf 粘贴下面的虚拟主机配置。<Virtualhost *:80> ServerName my.jenkins.id ProxyRequests Off ProxyPreserveHost On AllowEncodedSlashes NoDecode <Proxy http://localhost:8080/*> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/ nocanon ProxyPassReverse / http://localhost:8080/ ProxyPassReverse / http://my.jenkins.id/ </Virtualhost>保存文件。然后用 a2ensite 命令激活 Jenkins 虚拟主机。a2ensite jenkins 重启 Apache 和 Jenkins。systemctl restart apache2 systemctl restart jenkins 检查 Jenkins 和 Apache 正在使用 80 和 8080 端口。netstat -plntu 第四步 - 配置 JenkinsJenkins 用域名 'my.jenkins.id' 运行。打开你的 web 浏览器然后输入 URL。你会看到要求你输入初始管理员密码的页面。Jenkins 已经生成了一个密码，因此我们只需要显示并把结果复制到密码框。用 cat 命令显示 Jenkins 初始管理员密码。cat /var/lib/jenkins/secrets/initialAdminPassword a1789d1561bf413c938122c599cf65c9 将结果粘贴到密码框然后点击 Continue。现在为了后面能比较好的使用，我们需要在 Jenkins 中安装一些插件。选择 Install Suggested Plugin，点击它。Jenkins 插件安装过程：安装完插件后，我们需要创建一个新的管理员密码。输入你的管理员用户名、密码、电子邮件等，然后点击 ‘Save and Finish’。点击 start 开始使用 Jenkins。你会被重定向到 Jenkins 管理员面板。成功完成 Jenkins 安装和配置。第五步 - Jenkins 安全在 Jenkins 管理员面板，我们需要为 Jenkins 配置标准的安全，点击 ‘Manage Jenkins’ 和 ‘Configure Global Security’。Jenkins 在 ‘Access Control’ 部分提供了多种认证方法。为了能够控制所有的用户权限，我选择了 ‘Matrix-based Security’。在复选框 ‘User/Group’ 中启用 admin 用户。通过勾选所有选项给 admin 所有权限，给 anonymous 只读权限。现在点击 ‘Save’。你会被重定向到面板，如果出现了登录选项，只需输入你的管理员账户和密码。第六步 - 测试一个简单的自动化任务在这一部分，我想为 Jenkins 服务测试一个简单的任务。为了测试 Jenkins 我会创建一个简单的任务，并用 top 命令查看服务器的负载。在 Jenkins 管理员面板上，点击 ‘Create New Job’。输入任务的名称，在这里我输入 ‘Checking System’，选择 Freestyle Project 然后点击 OK。进入 Build 标签页。在 Add build step，选择选项 Execute shell。在输入框输入下面的命令。top -b -n 1 | head -n 5 点击 Save。现在你是在任务 ‘Project checking system’ 的任务页。点击 Build Now 执行任务 ‘checking system’。任务执行完成后，你会看到 Build History，点击第一个任务查看结果。下面是 Jenkins 任务执行的结果。到这里就介绍完了在 Ubuntu 16.04 中用 Apache web 服务器安装 Jenkins 的内容。via: https://www.howtoforge.com/tutorial/how-to-install-jenkins-with-apache-on-ubuntu-16-04/作者：Muhammad Arul 译者：ictlyh 校对：wxy本文由 LCTT 组织编译，Linux中国 荣誉推出
Elasticsearch 是基于 Lucene 由 Java 开发的开源搜索引擎。它提供了一个分布式、多租户的全文搜索引擎（LCTT 译注：多租户是指多租户技术，是一种软件架构技术，用来探讨与实现如何在多用户的环境下共用相同的系统或程序组件，并且仍可确保各用户间数据的隔离性。），并带有 HTTP 仪表盘的 Web 界面（Kibana）。数据会被 Elasticsearch 查询、检索，并且使用 JSON 文档方案存储。Elasticsearch 是一个可扩展的搜索引擎，可用于搜索所有类型的文本文档，包括日志文件。Elasticsearch 是 Elastic Stack 的核心，Elastic Stack 也被称为 ELK Stack。Logstash 是用于管理事件和日志的开源工具。它为数据收集提供实时传递途径。 Logstash 将收集您的日志数据，将数据转换为 JSON 文档，并将其存储在 Elasticsearch 中。Kibana 是 Elasticsearch 的开源数据可视化工具。Kibana 提供了一个漂亮的仪表盘 Web 界面。 你可以用它来管理和可视化来自 Elasticsearch 的数据。 它不仅美丽，而且强大。在本教程中，我将向您展示如何在 CentOS 7 服务器上安装和配置 Elastic Stack 以监视服务器日志。 然后，我将向您展示如何在操作系统为 CentOS 7 和 Ubuntu 16 的客户端上安装 “Elastic beats”。前提条件64 位的 CentOS 7，4 GB 内存 - elk 主控机64 位的 CentOS 7 ，1 GB 内存 - 客户端 164 位的 Ubuntu 16 ，1 GB 内存 - 客户端 2步骤 1 - 准备操作系统在本教程中，我们将禁用 CentOS 7 服务器上的 SELinux。 编辑 SELinux 配置文件。vim /etc/sysconfig/selinux 将 SELINUX 的值从 enforcing 改成 disabled 。SELINUX=disabled 然后重启服务器：reboot 再次登录服务器并检查 SELinux 状态。getenforce 确保结果是 disabled。步骤 2 - 安装 Java部署 Elastic stack 依赖于Java，Elasticsearch 需要 Java 8 版本，推荐使用 Oracle JDK 1.8 。我将从官方的 Oracle rpm 包安装 Java 8。使用 wget 命令下载 Java 8 的 JDK。wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm" 然后使用 rpm 命令安装：rpm -ivh jdk-8u77-linux-x64.rpm 最后，检查 java JDK 版本，确保它正常工作。java -version 您将看到服务器的 Java 版本。步骤 3 - 安装和配置 Elasticsearch在此步骤中，我们将安装和配置 Elasticsearch。 从 elastic.co 网站提供的 rpm 包安装 Elasticsearch，并将其配置运行在 localhost 上（以确保该程序安全，而且不能从外部访问）。在安装 Elasticsearch 之前，将 elastic.co 的密钥添加到服务器。rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 接下来，使用 wget 下载 Elasticsearch 5.1，然后安装它。wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm rpm -ivh elasticsearch-5.1.1.rpm Elasticsearch 已经安装好了。 现在进入配置目录编辑 elasticsaerch.yml 配置文件。cd /etc/elasticsearch/ vim elasticsearch.yml 去掉第 40 行的注释，启用 Elasticsearch 的内存锁。这将禁用 Elasticsearch 的内存交换。bootstrap.memory_lock: true 在 Network 块中，取消注释 network.host 和 http.port 行。network.host: localhost http.port: 9200 保存文件并退出编辑器。现在编辑 elasticsearch.service 文件的内存锁配置。vim /usr/lib/systemd/system/elasticsearch.service 去掉第 60 行的注释，确保该值为 unlimited。MAX_LOCKED_MEMORY=unlimited 保存并退出。Elasticsearch 配置到此结束。Elasticsearch 将在本机的 9200 端口运行，我们通过在 CentOS 服务器上启用 mlockall 来禁用内存交换。重新加载 systemd，将 Elasticsearch 置为开机启动，然后启动服务。sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch 等待 Eelasticsearch 启动成功，然后检查服务器上打开的端口，确保 9200 端口的状态是 LISTEN。netstat -plntu 然后检查内存锁以确保启用 mlockall，并使用以下命令检查 Elasticsearch 是否正在运行。curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty' curl -XGET 'localhost:9200/?pretty' 会看到如下结果。步骤 4 - 安装和配置 Kibana 和 Nginx在这一步，我们将在 Nginx Web 服务器上安装并配置 Kibana。 Kibana 监听在 localhost 上，而 Nginx 作为 Kibana 的反向代理。用 wget 下载 Kibana 5.1，然后使用 rpm 命令安装：wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm rpm -ivh kibana-5.1.1-x86_64.rpm 编辑 Kibana 配置文件。vim /etc/kibana/kibana.yml 去掉配置文件中 server.port、server.host 和 elasticsearch.url 这三行的注释。server.port: 5601 server.host: "localhost" elasticsearch.url: "http://localhost:9200" 保存并退出。将 Kibana 设为开机启动，并且启动 Kibana 。sudo systemctl enable kibana sudo systemctl start kibana Kibana 将作为 node 应用程序运行在端口 5601 上。netstat -plntu Kibana 安装到此结束。 现在我们需要安装 Nginx 并将其配置为反向代理，以便能够从公共 IP 地址访问 Kibana。Nginx 在 Epel 资源库中可以找到，用 yum 安装 epel-release。yum -y install epel-release 然后安装 Nginx 和 httpd-tools 这两个包。yum -y install nginx httpd-tools httpd-tools 软件包包含 Web 服务器的工具，可以为 Kibana 添加 htpasswd 基础认证。编辑 Nginx 配置文件并删除 server {} 块，这样我们可以添加一个新的虚拟主机配置。cd /etc/nginx/ vim nginx.conf 删除 server { } 块。保存并退出。现在我们需要在 conf.d 目录中创建一个新的虚拟主机配置文件。 用 vim 创建新文件 kibana.conf。vim /etc/nginx/conf.d/kibana.conf 复制下面的配置。server { listen 80; server_name elk-stack.co; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.kibana-user; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 保存并退出。然后使用 htpasswd 命令创建一个新的基本认证文件。sudo htpasswd -c /etc/nginx/.kibana-user admin “输入你的密码” 测试 Nginx 配置，确保没有错误。 然后设定 Nginx 开机启动并启动 Nginx。nginx -t systemctl enable nginx systemctl start nginx 步骤 5 - 安装和配置 Logstash在此步骤中，我们将安装 Logstash，并将其配置为：从配置了 filebeat 的 logstash 客户端里集中化服务器的日志，然后过滤和转换 Syslog 数据，并将其移动到存储中心（Elasticsearch）中。下载 Logstash 并使用 rpm 进行安装。wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm rpm -ivh logstash-5.1.1.rpm 生成新的 SSL 证书文件，以便客户端可以识别 elastic 服务端。进入 tls 目录并编辑 openssl.cnf 文件。cd /etc/pki/tls vim openssl.cnf 在 [v3_ca] 部分添加服务器标识。[ v3_ca ] # Server IP Address subjectAltName = IP: 10.0.15.10 保存并退出。使用 openssl 命令生成证书文件。openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt 证书文件可以在 /etc/pki/tls/certs/ 和 /etc/pki/tls/private/ 目录中找到。接下来，我们会为 Logstash 创建新的配置文件。创建一个新的 filebeat-input.conf 文件来为 filebeat 配置日志源，然后创建一个 syslog-filter.conf 配置文件来处理 syslog，再创建一个 output-elasticsearch.conf 文件来定义输出日志数据到 Elasticsearch。转到 logstash 配置目录，并在 conf.d 子目录中创建新的配置文件。cd /etc/logstash/ vim conf.d/filebeat-input.conf 输入配置，粘贴以下配置：input { beats { port => 5443 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } } 保存并退出。创建 syslog-filter.conf 文件。vim conf.d/syslog-filter.conf 粘贴以下配置：filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } 我们使用名为 grok 的过滤器插件来解析 syslog 文件。保存并退出。创建输出配置文件 output-elasticsearch.conf。vim conf.d/output-elasticsearch.conf 粘贴以下配置：output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } } 保存并退出。最后，将 logstash 设定为开机启动并且启动服务。sudo systemctl enable logstash sudo systemctl start logstash 步骤 6 - 在 CentOS 客户端上安装并配置 FilebeatBeat 作为数据发送人的角色，是一种可以安装在客户端节点上的轻量级代理，将大量数据从客户机发送到 Logstash 或 Elasticsearch 服务器。有 4 种 beat，Filebeat 用于发送“日志文件”，Metricbeat 用于发送“指标”，Packetbeat 用于发送“网络数据”，Winlogbeat 用于发送 Windows 客户端的“事件日志”。在本教程中，我将向您展示如何安装和配置 Filebeat，通过 SSL 连接将数据日志文件传输到 Logstash 服务器。登录到客户端1的服务器上。 然后将证书文件从 elastic 服务器复制到客户端1的服务器上。ssh root@client1IP 使用 scp 命令拷贝证书文件。scp root@elk-serverIP:~/logstash-forwarder.crt . 输入 elk-server 的密码 创建一个新的目录，将证书移动到这个目录中。sudo mkdir -p /etc/pki/tls/certs/ mv ~/logstash-forwarder.crt /etc/pki/tls/certs/ 接下来，在客户端 1 服务器上导入 elastic 密钥。rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 下载 Filebeat 并且用 rpm 命令安装。wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm rpm -ivh filebeat-5.1.1-x86_64.rpm Filebeat 已经安装好了，请转到配置目录并编辑 filebeat.yml 文件。cd /etc/filebeat/ vim filebeat.yml 在第 21 行的路径部分，添加新的日志文件。 我们将创建两个文件，记录 ssh 活动的 /var/log/secure 文件 ，以及服务器日志 /var/log/messages 。 paths: - /var/log/secure - /var/log/messages 在第 26 行添加一个新配置来定义 syslog 类型的文件。 document-type: syslog Filebeat 默认使用 Elasticsearch 作为输出目标。 在本教程中，我们将其更改为 Logshtash。 在 83 行和 85 行添加注释来禁用 Elasticsearch 输出。禁用 Elasticsearch 输出：#-------------------------- Elasticsearch output ------------------------------ #output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] 现在添加新的 logstash 输出配置。 去掉 logstash 输出配置的注释，并将所有值更改为下面配置中的值。output.logstash: # The Logstash hosts hosts: ["10.0.15.10:5443"] bulk_max_size: 1024 ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] template.name: "filebeat" template.path: "filebeat.template.json" template.overwrite: false 保存文件并退出 vim。将 Filebeat 设定为开机启动并启动。sudo systemctl enable filebeat sudo systemctl start filebeat 步骤 7 - 在 Ubuntu 客户端上安装并配置 Filebeat使用 ssh 连接到服务器。ssh root@ubuntu-clientIP 使用 scp 命令拷贝证书文件。scp root@elk-serverIP:~/logstash-forwarder.crt . 创建一个新的目录，将证书移动到这个目录中。sudo mkdir -p /etc/pki/tls/certs/ mv ~/logstash-forwarder.crt /etc/pki/tls/certs/ 在服务器上导入 elastic 密钥。wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - 下载 Filebeat .deb 包并且使用 dpkg 命令进行安装。wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb dpkg -i filebeat-5.1.1-amd64.deb 转到配置目录并编辑 filebeat.yml 文件。cd /etc/filebeat/ vim filebeat.yml 在路径配置部分添加新的日志文件路径。 paths: - /var/log/auth.log - /var/log/syslog 设定文档类型为 syslog 。 document-type: syslog 将下列几行注释掉，禁用输出到 Elasticsearch。#-------------------------- Elasticsearch output ------------------------------ #output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] 启用 logstash 输出，去掉以下配置的注释并且按照如下所示更改值。output.logstash: # The Logstash hosts hosts: ["10.0.15.10:5443"] bulk_max_size: 1024 ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] template.name: "filebeat" template.path: "filebeat.template.json" template.overwrite: false 保存并退出 vim。将 Filebeat 设定为开机启动并启动。sudo systemctl enable filebeat sudo systemctl start filebeat 检查服务状态：systemctl status filebeat 步骤 8 - 测试打开您的网络浏览器，并访问您在 Nginx 中配置的 elastic stack 域名，我的是“elk-stack.co”。 使用管理员密码登录，然后按 Enter 键登录 Kibana 仪表盘。创建一个新的默认索引 filebeat-*，然后点击“创建”按钮。默认索引已创建。 如果 elastic stack 上有多个 beat，您可以在“星形”按钮上点击一下即可配置默认 beat。转到 “发现” 菜单，您就可以看到 elk-client1 和 elk-client2 服务器上的所有日志文件。来自 elk-client1 服务器日志中的无效 ssh 登录的 JSON 输出示例。使用其他的选项，你可以使用 Kibana 仪表盘做更多的事情。Elastic Stack 已安装在 CentOS 7 服务器上。 Filebeat 已安装在 CentOS 7 和 Ubuntu 客户端上。via: https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-centos-7/作者：Muhammad Arul 译者：Flowsnow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 CentOS 7 中在 HHVM 和 Nginx 之上安装 WordPress
HHVM （HipHop Virtual Machine） 是一个用于执行以 PHP 和 Hack 语言编写的代码的虚拟环境。它是由 Facebook 开发的，提供了当前 PHP 7 的大多数功能。要在你的服务器上运行 HHVM，你需要使用 FastCGI 来将 HHVM 和 Nginx 或 Apache 衔接起来，或者你也可以使用 HHVM 中的内置 Web 服务器 Proxygen。在这篇教程中，我将展示给你如何在 Nginx Web 服务器的 HHVM 上安装 WordPress。这里我使用 CentOS 7 作为操作系统，所以你需要懂一点 CentOS 操作的基础。先决条件CentOS 7 - 64位Root 权限步骤 1 - 配置 SELinux 并添加 EPEL 仓库在本教程中，我们将使用 SELinux 的强制模式，所以我们需要在系统上安装一个 SELinux 管理工具。这里我们使用 setools 和 setrobleshoot 来管理 SELinux 的各项配置。CentOS 7 已经默认启用 SELinux，我们可以通过以下命令来确认：# sestatus # getenforce 如图，你能够看到，SELinux 已经开启了强制模式。接下来就是使用 yum 来安装 setools 和 setroubleshoot 了。# yum -y install setroubleshoot setools net-tools 安装好这两个后，再安装 EPEL 仓库。# yum -y install epel-release 步骤 2 - 安装 NginxNginx (发音：engine-x) 是一个高性能、低内存消耗的轻量级 Web 服务器软件。在 CentOS 中可以使用 yum 命令来安装 Nginx 包。确保你以 root 用户登录系统。使用 yum 命令从 CentOS 仓库中安装 nginx。# yum -y install nginx 现在可以使用 systemctl 命令来启动 Nginx，同时将其设置为跟随系统启动。# systemctl start nginx # systemctl enable nginx 为确保 Nginx 已经正确运行于服务器中，在浏览器上输入服务器的 IP，或者如下使用 curl 命令检查显示结果。# curl 192.168.1.110 我这里使用浏览器来验证。步骤 3 - 安装并配置 MariaDBMariaDB 是由原 MySQL 开发者 Monty Widenius 开发的一款开源数据库软件，它由 MySQL 分支而来，与 MySQL 的主要功能保持一致。在这一步中，我们要安装 MariaDB 数据库并为之配置好 root 密码，然后再为所要安装的 WordPress 创建一个新的数据库和用户。安装 mariadb 和 mariadb-server：# yum -y install mariadb mariadb-server 启动 MariaDB 并添加为服务，以便随系统启动。# systemctl start mariadb # systemctl enable mariadb 现在 MariaDB 已经启动了，还需要为 mariadb/mysql 数据库配置 root 用户密码。输入以下命令来设置 MariaDB root 密码。# mysql_secure_installation 提示设置 root 用户密码时，输入新密码进行设置：Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y ... Success! Disallow root login remotely? [Y/n] Y ... Success! Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y ... Success! 这样就设置好了 MariaDB 的 root 密码。现在登录到 MariaDB/MySQL shell 并为 WordPress 的安装创建一个新数据库 wordpressdb 和新用户 wpuser，密码设置为 wpuser@。为你的设置选用一个安全的密码。登录到 MariaDB/MySQL shell：# mysql -u root -p 接着输入你刚刚设置的 root 用户密码。创建数据库和用户：MariaDB [(none)]> create database wordpressdb; MariaDB [(none)]> create user wpuser@localhost identified by 'wpuser@'; MariaDB [(none)]> grant all privileges on wordpressdb.* to wpuser@localhost identified by 'wpuser@'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> \q 现在安装好了 MariaDB，并为 WordPress 创建好了数据库。步骤 4 - 安装 HHVM对于 HHVM，我们需要安装大量的依赖项。作为选择，你可以从 GitHub 下载 HHVM 的源码来编译安装，也可以从网络上获取预编译的包进行安装。在本教程中，我使用的是预编译的安装包。为 HHVM 安装依赖项：# yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \ > {ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \ > lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \ > {unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \ > glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \ > mariadb mariadb-server libc-client make 然后是使用 rpm 安装从 HHVM 预编译包镜像站点 下载的 HHVM 预编译包。# rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm # ln -s /usr/local/bin/hhvm /bin/hhvm 安装好 HHVM 之后使用如下命令按了验证：# hhvm --version 为了能使用 PHP 命令，可以把 hhvm 命令设置为 php。这样在 shell 中输入 php 命令的时候，你会看到和输入 hhvm 命令一样的结果。# sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60 # php --version 步骤 5 - 配置 HHVM这一步中，我们来配置 HHVM 以系统服务来运行。我们不通过端口这种常规的方式来运行它，而是选择使用 unix socket 文件的方式，这样运行的更快速一点。进入 systemd 配置目录，并创建一个 hhvm.service 文件。# cd /etc/systemd/system/ # vim hhvm.service 复制粘贴如下配置到文件中去。[Unit] Description=HHVM HipHop Virtual Machine (FCGI) After=network.target nginx.service mariadb.service [Service] ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi -vServer.FileSocket=/var/run/hhvm/hhvm.sock [Install] WantedBy=multi-user.target 保存文件退出 vim。接下来，进入 hhvm 目录并编辑 server.ini 文件。# cd /etc/hhvm/ # vim server.ini 将第 7 行 hhvm.server.port 替换为 unix socket，如下：hhvm.server.file_socket = /var/run/hhvm/hhvm.sock 保存文件并退出编辑器。我们已在 hhvm 服务文件中定义了 hhvm 以 nginx 用户身份运行，所以还需要把 socket 文件目录的属主变更为 nginx。然后我们还必须在 SELinux 中修改 hhvm 目录的权限上下文以便让它可以访问这个 socket 文件。# chown -R nginx:nginx /var/run/hhvm/ # semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?" # restorecon -Rv /var/run/hhvm 服务器重启之后，hhvm 将不能运行，因为没有存储 socket 文件的目录，所有还必须在启动的时候自动创建一个。使用 vim 编辑 rc.local 文件。# vim /etc/rc.local 将以下配置粘贴到文件末行。# mkdir -p /var/run/hhvm/ # chown -R nginx:nginx /var/run/hhvm/ # semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?" # restorecon -Rv /var/run/hhvm 保存文件并退出 vim。然后给文件赋予执行权限。# chmod +x /etc/rc.local 重新加载 systemd 服务，启动 hhvm 并设置为随系统启动。# systemctl daemon-reload # systemctl start hhvm # systemctl enable hhvm 要确保无误，使用 netstat 命令验证 hhvm 运行于 socket 文件。# netstat -pl | grep hhvm 步骤 6 - 配置 HHVM 和 Nginx在这个步骤中，我们将配置 HHVM 已让它运行在 Nginx Web 服务中，这需要在 Nginx 目录创建一个 hhvm 的配置文件。进入 /etc/nginx 目录，创建 hhvm.conf 文件。# cd /etc/nginx/ # vim hhvm.conf 粘贴以下内容到文件中。location ~ \.(hh|php)$ { root /usr/share/nginx/html; fastcgi_keep_conn on; fastcgi_pass unix:/var/run/hhvm/hhvm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }然后，保存并退出。接下来，编辑 nginx.conf 文件，添加 hhvm 配置文件到 include 行。# vim nginx.conf 添加配置到第 57 行的 server 指令中。include /etc/nginx/hhvm.conf; 保存并退出。然后修改 SELinux 中关于 hhvm 配置文件的权限上下文。# semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf # restorecon -v /etc/nginx/hhvm.conf 测试 Nginx 配置并重启服务。# nginx -t # systemctl restart nginx 记住确保测试配置没有错误。步骤 7 - 通过 HHVM 和 Nginx 创建虚拟主机在这一步中，我们要为 Nginx 和 hhvm 创建一个新的虚拟主机配置文件。这里我使用域名 natsume.co 来作为例子，你可以使用你主机喜欢的域名，并在配置文件中相应位置以及 WordPress 安装过程中进行替换。进入 nginx 的 conf.d 目录，我们将在该目录存储虚拟主机文件。# cd /etc/nginx/conf.d/ 使用 vim 创建一个名为 natsume.conf 的配置文件。# vim natsume.conf 粘贴以下内容到虚拟主机配置文件中。server { listen 80; server_name natsume.co; # note that these lines are originally from the "location /" block root /var/www/hakase; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; location = /50x.html { root /var/www/hakase; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/hhvm/hhvm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 保存并退出。在这个虚拟主机配置文件中，我们定义该域名的 Web 根目录为 /var/www/hakase。目前该目录还不存在，所有我们要创建它，并变更属主为 nginx 用户和组。# mkdir -p /var/www/hakase # chown -R nginx:nginx /var/www/hakase 接下来，为该文件和目录配置 SELinux 上下文。# semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?" # restorecon -Rv /etc/nginx/conf.d 最后，测试 nginx 配置文件以确保没有错误后，重启 nginx：# nginx -t # systemctl restart nginx 步骤 8 - 安装 WordPress在步骤 5 的时候，我们已经为 WordPress 配置好了虚拟主机，现在只需要下载 WordPress 和使用我们在步骤 3 的时候创建的数据库和用户来编辑数据库配置就好了。进入 Web 根目录 /var/www/hakase 并使用 Wget 命令下载 WordPress：# cd /var/www/hakase # wget wordpress.org/latest.tar.gz 解压 latest.tar.gz 并将 wordpress 文件夹中所有的文件和目录移动到当前目录：# tar -xzvf latest.tar.gz # mv wordpress/* . 下一步，复制一份 wp-config-sample.php 并更名为 wp-config.php，然后使用 vim 进行编辑：# cp wp-config-sample.php wp-config.php # vim wp-config.php 将 DB_NAME 设置为 wordpressdb、DB_USER 设置为 wpuser 以及 DB_PASSWORD 设置为 wpuser@。define('DB_NAME', 'wordpressdb'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'wpuser@'); define('DB_HOST', 'localhost'); 保存并退出。修改关于 WordPress 目录的 SELinux 上下文。# semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?" # restorecon -Rv /var/www/hakase 现在打开 Web 浏览器，在地址栏输入你之前为 WordPress 设置的域名，我这里是 natsume.co。选择语言并点击 继续 Continue 。根据自身要求填写站点标题和描述并点击 安装 Wordpress Install Wordpress "。耐心等待安装完成。你会见到如下页面，点击 登录 Log In 来登录到管理面板。输入你设置的管理员用户账号和密码，在此点击 登录 Log In 。现在你已经登录到 WordPress 的管理面板了。Wordpress 的主页：至此，我们已经在 CentOS 7 上通过 Nginx 和 HHVM 成功安装 Wordpress。参考链接https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/译者简介：GHLandy —— 划不完粉腮柳眉泣别离。via: https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-centos-7/作者：Muhammad Arul 译者：GHLandy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件，由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写，支持多种数据库系统，比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。它可以使你的桌面系统和云服务器中的文件保持同步，Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆，它还提供了很多附加特性，如日历、联系人、计划任务以及流媒体 Ampache。在这篇文章中，我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud，同时使用 MariaDB 做为数据库系统。先决条件64 位的 CentOS 7服务器的 Root 权限步骤 1 - 在 CentOS 7 中安装 Nginx 和 PHP7-FPM在开始安装 Nginx 和 php7-fpm 之前，我们还学要先添加 EPEL 包的仓库源。使用如下命令：yum -y install epel-release 现在开始从 EPEL 仓库来安装 Nginx：yum -y install nginx 然后我们还需要为 php7-fpm 添加另外一个仓库。互联网中有很个远程仓库提供了 PHP 7 系列包，我在这里使用的是 webtatic。添加 PHP7-FPM webtatic 仓库：rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 然后就是安装 PHP7-FPM 以及 Nextcloud 需要的一些包。yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-devel 最后，从服务器终端里查看 PHP 的版本号，以便验证 PHP 是否正确安装。php -v 步骤 2 - 配置 PHP7-FPM在这一个步骤中，我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 nginx 用户来运行，并监听 9000 端口。使用 vim 编辑默认的 php7-fpm 配置文件。vim /etc/php-fpm.d/www.conf 在第 8 行和第 10行，user 和 group 赋值为 nginx。user = nginx group = nginx 在第 22 行，确保 php-fpm 运行在指定端口。listen = 127.0.0.1:9000 取消第 366-370 行的注释，启用 php-fpm 的系统环境变量。env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp 保存文件并退出 vim 编辑器。下一步，就是在 /var/lib/ 目录下创建一个新的文件夹 session，并将其拥有者变更为 nginx 用户。mkdir -p /var/lib/php/session chown nginx:nginx -R /var/lib/php/session/ 然后启动 php-fpm 和 Nginx，并且将它们设置为随开机启动的服务。sudo systemctl start php-fpm sudo systemctl start nginx sudo systemctl enable php-fpm sudo systemctl enable nginx PHP7-FPM 配置完成步骤 3 - 安装和配置 MariaDB我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 yum 命令从 CentOS 默认远程仓库中安装 mariadb-server 包。yum -y install mariadb mariadb-server 启动 MariaDB，并将其添加到随系统启动的服务中去。systemctl start mariadb systemctl enable mariadb 现在开始配置 MariaDB 的 root 用户密码。mysql_secure_installation 键入 Y ，然后设置 MariaDB 的 root 密码。Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y 这样就设置好了密码，现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 nextcloud_db 的数据库以及名为 nextclouduser 的用户，用户密码为 nextclouduser@。当然了，要给你自己的系统选用一个更安全的密码。mysql -u root -p 输入 MariaDB 的 root 密码，即可登录 mysql shell。输入以下 mysql 查询语句来创建新的数据库和用户。create database nextcloud_db; create user nextclouduser@localhost identified by 'nextclouduser@'; grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextclouduser@'; flush privileges; nextcloud_db 数据库和 nextclouduser 数据库用户创建完成步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书在教程中，我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书，或者是自己创建自签名 (self signed) SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。为 SSL 文件创建新目录：mkdir -p /etc/nginx/cert/ 如下，使用 openssl 生成一个新的 SSL 证书。openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key 最后使用 chmod 命令将所有证书文件的权限设置为 600。chmod 700 /etc/nginx/cert chmod 600 /etc/nginx/cert/* 步骤 5 - 下载和安装 Nextcloud我直接使用 wget 命令下载 Nextcloud 到服务器上，因此需要先行安装 wget。此外，还需要安装 unzip 来进行解压。使用 yum 命令来安装这两个程序。yum -y install wget unzip 先进入 /tmp 目录，然后使用 wget 从官网下载最新的 Nextcloud 10。cd /tmp wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip 解压 Nextcloud，并将其移动到 /usr/share/nginx/html/ 目录。unzip nextcloud-10.0.2.zip mv nextcloud/ /usr/share/nginx/html/ 下一步，转到 Nginx 的 web 根目录为 Nextcloud 创建一个 data 文件夹。cd /usr/share/nginx/html/ mkdir -p nextcloud/data/ 变更 nextcloud 目录的拥有者为 nginx 用户和组。chown nginx:nginx -R nextcloud/ 步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机在步骤 5 我们已经下载好了 Nextcloud 源码，并配置好了让它运行于 Nginx 服务器中，但我们还需要为它配置一个虚拟主机。在 Nginx 的 conf.d 目录下创建一个新的虚拟主机配置文件 nextcloud.conf。cd /etc/nginx/conf.d/ vim nextcloud.conf 将以下内容粘贴到虚拟主机配置文件中：upstream php-handler { server 127.0.0.1:9000; #server unix:/var/run/php5-fpm.sock; } server { listen 80; server_name cloud.nextcloud.co; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name cloud.nextcloud.co; ssl_certificate /etc/nginx/cert/nextcloud.crt; ssl_certificate_key /etc/nginx/cert/nextcloud.key; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Path to the root of your installation root /usr/share/nginx/html/nextcloud/; location = /robots.txt { allow all; log_not_found off; access_log off; } # The following 2 rules are only needed for the user_webfinger app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json # last; location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } # set max upload size client_max_body_size 512M; fastcgi_buffers 64 4K; # Disable gzip to avoid the removal of the ETag header gzip off; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location / { rewrite ^ /index.php$uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js and css files # Make sure it is BELOW the PHP block location ~* \.(?:css|js)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=7200"; # Add headers to serve security related headers (It is intended to # have those duplicated to the ones above) # Before enabling Strict-Transport-Security headers please read into # this topic first. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; # Optional: Don't log access to assets access_log off; } location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; # Optional: Don't log access to other assets access_log off; } }保存文件并退出 vim。下载测试以下该 Nginx 配置文件是否有错误，没有的话就可以重启服务了。nginx -t systemctl restart nginx 步骤 7 - 为 Nextcloud 配置 SELinux 和 FirewallD 规则本教程中，我们将以强制模式运行 SELinux，因此需要一个 SELinux 管理工具来为 Nextcloud 配置 SELinux。使用以下命令安装 SELinux 管理工具。yum -y install policycoreutils-python 然后以 root 用户来运行以下命令，以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录，记得将 nextcloud 替换掉。semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/assets(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess' semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini' restorecon -Rv '/usr/share/nginx/html/nextcloud/' 接下来，我们要启用 firewalld 服务，同时为 Nextcloud 开启 http 和 https 端口。启动 firewalld 并设置随系统启动。systemctl start firewalld systemctl enable firewalld 现在使用 firewall-cmd 命令来开启 http 和 https 端口，然后重新加载防火墙。firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload 至此，服务器配置完成。步骤 8 - Nextcloud 安装打开你的 Web 浏览器，输入你为 Nextcloud 设置的域名，我这里设置为 cloud.nextcloud.co，然后会重定向到安全性更好的 https 连接。设置你的管理员用户名和密码，然后输入数据验证信息，点击 '完成安装 (Finish Setup)'。Nextcloud 管理面板大致如下：Nextcloud 用户设置：管理设置：至此，我们在 CentOS 7 服务器上通过使用 Nginx、PHP7-FPM、MariaDB 完成了 Nextcloud 的安装。参考链接https://docs.nextcloud.com/译者简介：GHLandy —— 划不完粉腮柳眉泣别离。via: https://www.howtoforge.com/tutorial/how-to-install-nextcloud-with-nginx-and-php-fpm-on-centos-7/作者：Muhammad Arul 译者：GHLandy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Ceph 是一个高性能、可靠、可扩展的开源存储平台。它是一个自由的分布式存储系统，提供了对象、块和文件级存储的接口，并可以不受单点故障的影响而运行。在这个教程中，我将指导你在 Ubuntu 16.04 服务器上安装建立一个 Ceph 集群。Ceph 集群包括这些组件：Ceph OSD (ceph-osd) - 控制数据存储，数据复制和恢复。Ceph 集群需要至少两个 Ceph OSD 服务器。这次安装中我们将使用三个 Ubuntu 16.04 服务器。Ceph Monitor (ceph-mon) - 监控集群状态并运行 OSD 映射 和 CRUSH 映射。这里我们使用一个服务器。Ceph Meta Data Server (ceph-mds) - 如果你想把 Ceph 作为文件系统使用，就需要这个。前提条件6 个安装了 Ubuntu 16.04 的服务器节点所有节点上的 root 权限我将使用下面这些 hostname /IP 安装：主机名 IP 地址 ceph-admin 10.0.15.10 mon1 10.0.15.11 osd1 10.0.15.21 osd2 10.0.15.22 osd3 10.0.15.23 client 10.0.15.15 第 1 步 - 配置所有节点这次安装，我将配置所有的 6 个节点来准备安装 Ceph 集群软件。所以你必须在所有节点运行下面的命令。然后确保所有节点都安装了 ssh-server。创建 Ceph 用户在所有节点创建一个名为 cephuser 的新用户useradd -m -s /bin/bash cephuser passwd cephuser 创建完新用户后，我们需要给 cephuser 配置无密码的 sudo 权限。这意味着 cephuser 可以不先输入密码而获取到 sudo 权限运行。运行下面的命令来完成配置。echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser chmod 0440 /etc/sudoers.d/cephuser sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers 安装和配置 NTP安装 NTP 来同步所有节点的日期和时间。先运行 ntpdate 命令通过 NTP 设置日期。我们将使用 US 池的 NTP 服务器。然后开启并使 NTP 服务在开机时启动。sudo apt-get install -y ntp ntpdate ntp-doc ntpdate 0.us.pool.ntp.org hwclock --systohc systemctl enable ntp systemctl start ntp 安装 Open-vm-tools如果你正在 VMware 里运行所有节点，你需要安装这个虚拟化工具。sudo apt-get install -y open-vm-tools 安装 Python 和 parted在这个教程，我们需要 python 包来建立 ceph 集群。安装 python 和 python-pip。sudo apt-get install -y python python-pip parted 配置 Hosts 文件用 vim 编辑器编辑所有节点的 hosts 文件。vim /etc/hosts 粘帖如下配置：10.0.15.10 ceph-admin 10.0.15.11 mon1 10.0.15.21 ceph-osd1 10.0.15.22 ceph-osd2 10.0.15.23 ceph-osd3 10.0.15.15 ceph-client 保存 hosts 文件，然后退出 vim 编辑器。现在你可以试着在两个服务器间 ping 主机名来测试网络连通性。ping -c 5 mon1 第 2 步 - 配置 SSH 服务器这一步，我们将配置 ceph-admin 节点。管理节点是用来配置监控节点和 osd 节点的。登录到 ceph-admin 节点然后使用 cephuser 用户。ssh root@ceph-admin su - cephuser 管理节点用来安装配置所有集群节点，所以 ceph-admin 上的用户必须有不使用密码连接到所有节点的权限。我们需要为 'ceph-admin' 节点的 cephuser 用户配置无密码 SSH 登录权限。生成 cephuser 的 ssh 密钥。ssh-keygen 让密码为空。下面，为 ssh 创建一个配置文件vim ~/.ssh/config 粘帖如下配置：Host ceph-admin Hostname ceph-admin User cephuser Host mon1 Hostname mon1 User cephuser Host ceph-osd1 Hostname ceph-osd1 User cephuser Host ceph-osd2 Hostname ceph-osd2 User cephuser Host ceph-osd3 Hostname ceph-osd3 User cephuser Host ceph-client Hostname ceph-client User cephuser 保存文件并退出 vim。改变配置文件权限为 644。chmod 644 ~/.ssh/config 现在使用 ssh-copy-id 命令增加密钥到所有节点。ssh-keyscan ceph-osd1 ceph-osd2 ceph-osd3 ceph-client mon1 >> ~/.ssh/known_hosts ssh-copy-id ceph-osd1 ssh-copy-id ceph-osd2 ssh-copy-id ceph-osd3 ssh-copy-id mon1 当请求输入密码时输入你的 cephuser 密码。现在尝试从 ceph-admin 节点登录 osd1 服务器，测试无密登录是否正常。ssh ceph-osd1 第 3 步 - 配置 Ubuntu 防火墙出于安全原因，我们需要在服务器打开防火墙。我们更愿使用 Ufw（不复杂防火墙）来保护系统，这是 Ubuntu 默认的防火墙。在这一步，我们在所有节点开启 ufw，然后打开 ceph-admin、ceph-mon 和 ceph-osd 需要使用的端口。登录到 ceph-admin 节点，然后安装 ufw 包。ssh root@ceph-admin sudo apt-get install -y ufw 打开 80，2003 和 4505-4506 端口，然后重启防火墙。sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 2003/tcp sudo ufw allow 4505:4506/tcp 开启 ufw 并设置开机启动。sudo ufw enable 从 ceph-admin 节点，登录到监控节点 mon1 然后安装 ufw。ssh mon1 sudo apt-get install -y ufw 打开 ceph 监控节点的端口然后开启 ufw。sudo ufw allow 22/tcp sudo ufw allow 6789/tcp sudo ufw enable 最后，在每个 osd 节点 ceph-osd1、ceph-osd2 和 ceph-osd3 上打开这些端口 6800-7300。从 ceph-admin 登录到每个 ceph-osd 节点安装 ufw。ssh ceph-osd1 sudo apt-get install -y ufw 在 osd 节点打开端口并重启防火墙。sudo ufw allow 22/tcp sudo ufw allow 6800:7300/tcp sudo ufw enable ufw 防火墙配置完成。第 4 步 - 配置 Ceph OSD 节点这个教程里，我们有 3 个 OSD 节点，每个节点有两块硬盘分区。/dev/sda 用于根分区/dev/sdb 空闲分区 - 20GB我们要使用 /dev/sdb 作为 ceph 磁盘。从 ceph-admin 节点，登录到所有 OSD 节点，然后格式化 /dev/sdb 分区为 XFS 文件系统。ssh ceph-osd1 ssh ceph-osd2 ssh ceph-osd3 使用 fdisk 命令检查分区表。sudo fdisk -l /dev/sdb 格式化 /dev/sdb 分区为 XFS 文件系统，使用 parted 命令创建一个 GPT 分区表。sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100% 下面，使用 mkfs 命令格式化分区为 XFS 格式。sudo mkfs.xfs -f /dev/sdb 现在检查分区，然后你会看见一个 XFS 文件系统的 /dev/sdb 分区。sudo fdisk -s /dev/sdb sudo blkid -o value -s TYPE /dev/sdb 第 5 步 - 创建 Ceph 集群在这步，我们将从 ceph-admin 安装 Ceph 到所有节点。马上开始，先登录到 ceph-admin 节点。ssh root@ceph-admin su - cephuser 在 ceph-admin 节点上安装 ceph-deploy首先我们已经在系统上安装了 python 和 python-pip。现在我们需要从 pypi python 仓库安装 Ceph 部署工具 'ceph-deploy'。用 pip 命令在 ceph-admin 节点安装 ceph-deploy 。sudo pip install ceph-deploy 注意： 确保所有节点都已经更新。ceph-deploy 工具已经安装完毕后，为 Ceph 集群配置创建一个新目录。创建一个新集群创建一个新集群目录。mkdir cluster cd cluster/ 下一步，用 ceph-deploy 命令通过定义监控节点 mon1 创建一个新集群。ceph-deploy new mon1 命令将在集群目录生成 Ceph 集群配置文件 ceph.conf。用 vim 编辑 ceph.conf。vim ceph.conf 在 [global] 块下，粘贴下面的配置。# Your network address public network = 10.0.15.0/24 osd pool default size = 2 保存文件并退出编辑器。安装 Ceph 到所有节点现在用一个命令从 ceph-admin 节点安装 Ceph 到所有节点。ceph-deploy install ceph-admin ceph-osd1 ceph-osd2 ceph-osd3 mon1 命令将自动安装 Ceph 到所有节点：mon1、osd1-3 和 ceph-admin - 安装将花一些时间。现在到 mon1 节点部署监控节点。ceph-deploy mon create-initial 命令将创建一个监控密钥，用 ceph 命令检查密钥。ceph-deploy gatherkeys mon1 增加 OSD 到集群在所有节点上安装了 Ceph 之后，现在我们可以增加 OSD 守护进程到该集群。OSD 守护进程将在磁盘 /dev/sdb 分区上创建数据和日志 。检查所有 osd 节点的 /dev/sdb 磁盘可用性。ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3 你将看见我们之前创建 XFS 格式的 /dev/sdb。下面，在所有 OSD 节点上用 zap 选项删除该分区表。ceph-deploy disk zap ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb 这个命令将删除所有 Ceph OSD 节点的 /dev/sdb 上的数据。现在准备所有 OSD 节点，请确保结果没有报错。ceph-deploy osd prepare ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb 当你看到 ceph-osd1-3 结果已经准备好供 OSD 使用，就表明命令已经成功。用下面的命令激活 OSD：ceph-deploy osd activate ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb 现在你可以再一次检查 OSDS 节点的 sdb 磁盘。ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3 结果是 /dev/sdb 现在已经分为两个区：/dev/sdb1 - Ceph Data/dev/sdb2 - Ceph Journal或者你直接在 OSD 节点山检查。ssh ceph-osd1 sudo fdisk -l /dev/sdb 接下来，部署管理密钥到所有关联节点。ceph-deploy admin ceph-admin mon1 ceph-osd1 ceph-osd2 ceph-osd3 在所有节点运行下面的命令，改变密钥文件权限。sudo chmod 644 /etc/ceph/ceph.client.admin.keyring Ceph 集群在 Ubuntu 16.04 已经创建完成。第 6 步 - 测试 Ceph在第 4 步，我们已经安装并创建了一个新 Ceph 集群，然后添加了 OSD 节点到集群。现在我们应该测试集群确保它如期工作。从 ceph-admin 节点，登录到 Ceph 监控服务器 mon1。ssh mon1 运行下面命令来检查集群是否健康。sudo ceph health 现在检查集群状态。sudo ceph -s 你可以看到下面返回结果：确保 Ceph 健康状态是 OK 的，有一个监控节点 mon1 IP 地址为 '10.0.15.11'。有 3 个 OSD 服务器都是 up 状态并且正在运行，可用磁盘空间为 45GB - 3x15GB 的 Ceph 数据 OSD 分区。我们在 Ubuntu 16.04 建立一个新 Ceph 集群成功。参考http://docs.ceph.com/docs/jewel/via: https://www.howtoforge.com/tutorial/how-to-install-a-ceph-cluster-on-ubuntu-16-04/作者：Muhammad Arul 译者：wyangsun 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Shinken 是一个用 Python 实现的开源的主机和网络监控框架，并与 Nagios like 兼容，它可以运行在所有支持 Python 程序的操作系统上，比如说 Linux、Unix 和 Windows。Shinken 是 Jean Gabes 为了验证一个新的 Nagios 架构思路而编写，但是这个想法被 Nagios 的作者拒绝后成为了一个独立的网络系统监视软件，并保持了与 Nagios 的兼容。在这篇教程中，我将会描述如何从源代码编译安装 Shinken 和向监视系统中添加一台 Linux 主机。我将会以 Ubuntu 16.04 Xenial Xerus 操作系统来作为 Shinken 服务器和所监控的主机。第一步 安装 Shinken 服务器Shinken 是一个 Python 框架，我们可以通过 pip 安装或者从源码来安装它，在这一步中，我们将用源代码编译安装 Shinken。在我们开始安装 Shinken 之前还需要完成几个步骤。安装一些新的 Python 软件包并创建一个名为 shinken 的系统用户：sudo apt-get install python-setuptools python-pip python-pycurl useradd -m -s /bin/bash shinken 从 GitHub 仓库下载 Shinken 源代码：git clone https://github.com/naparuba/shinken.git cd shinken/ 然后用以下命令安装 Shinken：git checkout 2.4.3 python setup.py install 然后，为了得到更好的效果，我们还需要从 Ubuntu 软件库中安装 python-cherrypy3 软件包：sudo apt-get install python-cherrypy3 到这里，Shinken 已经成功安装，接下来我们将 Shinken 添加到系统启动项并且启动它：update-rc.d shinken defaults systemctl start shinken 第二步 安装 Shinken Webui2Webui2 是 Shinken 的 Web 界面（在 shinken.io 可以找到）。最简单的安装 Shinken webui2 的方法是使用shinken CLI 命令（必须作为 shinken 用户执行）。切换到 shinken 用户：su - shinken 初始化 shiken 配置文件，下面的命令将会创建一个新的配置文件 .shinken.ini ：shinken --init 接下来用 shinken CLI 命令来安装 webui2：shinken install webui2 至此 webui2 已经安装好，但是我们还需要安装 MongoDB 和用 pip 来安装另一个 Python 软件包。在 root 下运行如下命令：sudo apt-get install mongodb pip install pymongo>=3.0.3 requests arrow bottle==0.12.8 接下来，切换到 shinken 目录下并且通过编辑 broker-master.cfg 文件来添加这个新的 webui2 模块：cd /etc/shinken/brokers/ vim broker-master.cfg 在第 40 行添加一个模块选项：modules webui2 保存文件并且退出编辑器。现在进入 contacts 目录下编辑 admin.cfg 来进行管理配置。cd /etc/shinken/contacts/ vim admin.cfg 按照如下修改：contact_name admin # Username 'admin' password yourpass # Pass 'mypass' 保存和退出。第三步 安装 Nagios 插件和 Shinken 软件包在这一步中，我们将安装 Nagios 插件和一些 Perl 模块。然后从 shinken.io 安装其他的软件包来实现监视。安装 Nagios 插件和安装 Perl 模块所需要的 cpanminus：sudo apt-get install nagios-plugins* cpanminus 用 cpanm 命令来安装 Perl 模块。cpanm Net::SNMP cpanm Time::HiRes cpanm DBI 现在我们创建一个 utils.pm 文件的链接到 shinken 的目录，并且为 Log_File_Health 创建了一个新的日志目录 。chmod u+s /usr/lib/nagios/plugins/check_icmp ln -s /usr/lib/nagios/plugins/utils.pm /var/lib/shinken/libexec/ mkdir -p /var/log/rhosts/ touch /var/log/rhosts/remote-hosts.log 然后，从 shinken.io 安装 shinken 软件包 ssh 和 linux-snmp 来监视 SSH 和 SNMP ：su - shinken shinken install ssh shinken install linux-snmp 第四步 添加一个 Linux 主机 host-one我们将添加一个新的将被监控的 Linux 主机，IP 地址为 192.168.1.121，主机名为 host-one 的 Ubuntu 16.04。连接到 host-one 主机：ssh host1@192.168.1.121 从 Ubuntu 软件库中安装 snmp 和snmpd 软件包：sudo apt-get install snmp snmpd 然后，用 vim 编辑 snmpd.conf 配置文件：vim /etc/snmp/snmpd.conf 注释掉第 15 行并取消注释第 17 行：#agentAddress udp:127.0.0.1:161 agentAddress udp:161,udp6:[::1]:161 注释掉第 51 和 53 行，然后加一行新的配置，如下：#rocommunity mypass default -V systemonly #rocommunity6 mypass default -V systemonly rocommunity mypass 保存并退出。现在用 systemctl 命令来启动 snmpd 服务：systemctl start snmpd 在 shinken 服务器上通过在 hosts 文件夹下创建新的文件来定义一个新的主机：cd /etc/shinken/hosts/ vim host-one.cfg 粘贴如下配置信息：define host{ use generic-host,linux-snmp,ssh contact_groups admins host_name host-one address 192.168.1.121 _SNMPCOMMUNITY mypass # SNMP Pass Config on snmpd.conf } 保存并退出。在 shinken 服务器上编辑 SNMP 配置文件。vim /etc/shinken/resource.d/snmp.cfg 将 public 改为 mypass -必须和你在客户端 snmpd 配置文件中使用的密码相同：$SNMPCOMMUNITYREAD$=mypass 保存并退出。现在将服务端和客户端都重启：reboot 现在 Linux 主机已经被成功地添加到 shinken 服务器中了。第五步 访问 Shinken Webui2在端口 7677 访问 Shinken webui2 （将 URL 中的 IP 替换成你自己的 IP 地址）：http://192.168.1.120:7767 用管理员用户和密码登录（你在 admin.cfg 文件中设置的）Webui2 中的 Shinken 面板：我们的两个服务器正在被 Shinken 监控：列出所有被 linux-snmp 监控的服务：所有主机和服务的状态信息：第6步 Shinken 的常见问题NTP 服务器相关的问题当你得到如下的 NTP 错误提示TimeSync - CRITICAL ( NTP CRITICAL: No response from the NTP server) TimeSync - CRITICAL ( NTP CRITICAL: Offset unknown ) 为了解决这个问题，在所有 Linux 主机上安装 ntp。sudo apt-get install ntp ntpdate 编辑 ntp 配置文件：vim /etc/ntp.conf 注释掉所有 pools 并替换为：#pool 0.ubuntu.pool.ntp.org iburst #pool 1.ubuntu.pool.ntp.org iburst #pool 2.ubuntu.pool.ntp.org iburst #pool 3.ubuntu.pool.ntp.org iburst pool 0.id.pool.ntp.org pool 1.asia.pool.ntp.org pool 0.asia.pool.ntp.org 然后，在新的一行添加如下限制规则：# Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict 192.168.1.120 #shinken server IP address restrict ::1 NOTE: 192.168.1.120 is the Shinken server IP address. 保存并退出。启动 ntp 并且检查 Shinken 面板。ntpd check\_netint.pl Not Found 问题从 github 仓库下载源代码到 shinken 的库目录下：cd /var/lib/shinken/libexec/ wget https://raw.githubusercontent.com/Sysnove/shinken-plugins/master/check_netint.pl chmod +x check_netint.pl chown shinken:shinken check_netint.pl 网络占用的问题这是错误信息：ERROR : Unknown interface eth\d+ 检查你的网络接口并且编辑 linux-snmp 模版。在我的 Ununtu 服务器，网卡是 “enp0s8”，而不是 eth0，所以我遇到了这个错误。vim 编辑 linux-snmp 模版：vim /etc/shinken/packs/linux-snmp/templates.cfg 在第 24 行添加网络接口信息：_NET_IFACES eth\d+|em\d+|enp0s8 保存并退出。via: https://www.howtoforge.com/tutorial/server-monitoring-with-shinken-on-ubuntu-16-04/作者：Muhammad Arul 译者：LinuxBars 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出Save and exit.