目录

  • ECS云服务器新手上路
  • 快速配置Linux云服务器
  • 远程连接VNC
  • 配置Apache服务
  • 解析网站域名
  • 快速搭建LNMP环境(Linux+Nginx+MySQL+PHP)
  • 安装并配置MySQL 5.7.41
  • 数据库优化案例
  • 安装Nginx 1.17.10
  • 安装PHP 5.4.16
  • 快速搭建LAMP环境(Linux+Apache+MySQL+PHP)
  • 配置Apache服务
  • 安装并配置MySQL 5.7.41
  • 安装PHP 5.4.16
  • 安装phpMyAdmin 4.0.10.20
  • 使用云原生PolarDB并使用LAMP搭建门户网站
  • 创建PolarDB数据库账号
  • 安装LAMP环境
  • 使用PbootCMS搭建门户网站
  • 手动部署 Java Web环境
  • 准备编译环境(关闭防火墙和SELinux)
  • 安装JDK1.8
  • 安装Apache Tomcat 8.5.72
  • 部署测试项目并验证
  • 基于ECS搭建云上博客
  • 配置Apache服务
  • 安装MariaDB数据库
  • 安装PHP 5.4.16
  • 安装和配置WordPress
  • 基于Leanote和Mongodb搭建云笔记本
  • 安装Mongodb
  • 安装Leanote
  • 搭建Node.js编程环境
  • 安装配置Node.js v12.4.0
  • 测试Node.js环境
  • 部署Linux主机管理系统WDCP
  • 部署Linux主机管理系统WDCP
  • 手动搭建FTP站点(Windows)
  • 添加 IIS 以及 FTP 服务角色
  • 创建用于访问FTP站点的Windows用户
  • 设置共享文件的权限
  • 添加并设置FTP站点
  • 设置安全组及防火墙
  • 客户端测试访问FTP站点
  • ECS数据管理实践-备份与恢复
  • 数据盘分区及挂载
  • 数据盘快照创建及回滚
  • 部署Hadoop环境
  • 安装JDK 1.8
  • 安装Hadoop 3.3.0
  • 配置Hadoop 3.3.0
  • 配置SSH免密登录
  • 启动Hadoop
  • 快速搭建Docker环境
  • 安装Docker CE 23.0.1
  • 配置阿里云镜像仓库(镜像加速)
  • 下载Ubuntu容器镜像并启动
  • 容器暂停、恢复、启动、停止、删除
  • 容器镜像的管理
  • 使用Docker安装Nginx服务
  • 自定义Dockerfile并构建镜像
  • 基于Docker搭建ELK (Elasticsearch、Logstash、Kibana)
  • 部署Elasticsearch
  • 部署logstash
  • 部署nginx应用
  • 部署filebeat
  • 部署kibana
  • 基于Docker搭建Zabbix
  • 部署Zabbbix
  • 部署高可用架构
  • 配置SLB实例(用于跨可用区挂载多个ECS实例)
  • 迁移自建数据库至RDS实例
  • ECS上自建的MySQL数据库
  • 为RDS实例创建账号和数据
  • 使用数据传输服务DTS将ECS实例上自建数据库迁移至RDS实例


ECS云服务器新手上路

1、创建ECS实例资源

2、RAM用户登录(子用户和子用户密码)进入ECS管理控制台

3、查看实例,选择地域找到ECS实例资源,点击ID进入某个实例的管理界面

4、远程连接:ssh root@xx.xx.xx.xx

快速配置Linux云服务器

创建以ecs.s6-c1m1.small(1 vCPU,1GiB )实例规格为例,Alibaba Cloud Linux 2.1903 LTS 64位系统的云服务器ECS实例。若不再需要这台实例,可以将其释放。释放后,实例停止计费,数据不可恢复。

查看费用账单:ECS管理控制台顶部菜单栏,费用,用户中心,账单详情,明细账单

基础配置:

配置项

示例

说明

付费模式

按量付费

按量付费模式操作相对灵活。详情请参见计费概述。说明 如果您需要为网站域名备案,必须选择包年包月。

地域及可用区

地域:华东1(杭州)可用区:随机分配

实例创建后,无法直接更改地域和可用区,请谨慎选择。

实例规格

规格族:共享标准型 s6实例规格:ecs.s6-c1m1.small

您可以前往ECS实例可购买地域,查看实例在各地域的可购情况。

镜像

类型:公共镜像版本:Alibaba Cloud Linux 2.1903 LTS 64位

实例启动后,系统盘将完整复制镜像的操作系统和应用数据。

网络和安全组:

配置项

示例

说明

专有网络

默认专有网络

首次使用推荐默认专有网络。如果您要创建专有网络,请单击下方的前往控制台创建

交换机

默认交换机

首次使用推荐默认交换机。如果您要创建交换机,请单击下方的前往控制台创建

分配公网IPv4地址

选中分配公网IPv4地址

选中后,自动分配一个公网IPv4地址。

带宽计费模式

按使用流量

按使用流量模式只需为所消耗的公网流量付费。详情请参见公网带宽计费。

带宽峰值

5 Mbps

无。

安全组

默认安全组

系统配置

配置项

示例

说明

登录凭证

自定义密码

本教程中选择自定义密码,并手动设置一个密码,用于远程连接并登录ECS实例。

登录密码

Ecs123456

当登录凭证选择自定义密码时,需要设置此选项并确认密码,在后续连接ECS实例时,您需要输入用户名root和此处设置的密码。

实例名称

EcsQuickStart

分组设置 保持默认

远程连接VNC

创建成功后,远程连接VNC:在实例列表页面,找到您的实例资源,单击右侧操作列下的远程连接

1、在输入VNC密码对话框中, 单击重置VNC密码

2、远程连接ECS实例,输入ECS实例的用户名密码

配置Apache服务
  1. 执行如下命令,安装Apache服务。
yum install -y httpd
  1. 执行如下命令,启动Apache服务。
systemctl start httpd
  1. 执行如下命令,设置Apache服务开机自启动。
systemctl enable httpd
  1. 执行如下命令,可查询Apache服务是否处于运行中状态。
systemctl status httpd
#回应是active(running)
  1. 在当前浏览器页面,新开启一个网页,在地址栏输入实例的弹性IP地址,并回车。
http://<实例公网IP地址>
#出现Hello Apache
解析网站域名

直接通过实例公网IP地址访问Apache服务会降低服务端安全性。如果您已有域名或者想为Apache网站注册一个域名,请参见以下步骤。

1、注册域名。详情请参见注册通用域名。

2、如果域名指向的网站托管在阿里云中国内地地域的节点服务器,您需要备案域名。

首次备案,请参见首次备案流程,其他情况请参见ICP备案流程概述。

3、解析域名,将域名指向实例公网IP。

域名解析是使用域名访问您的网站的必备环节。具体操作流程,请参见设置域名解析。

4、使用解析后的域名访问Apache服务,例如,https://ecs-quickstarts.info。

快速搭建LNMP环境(Linux+Nginx+MySQL+PHP)

基于CentOS 7.7

安装并配置MySQL 5.7.41

1、执行如下命令,下载并安装MySQL官方的Yum Repository。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server --nogpgcheck

2、执行如下命令,启动 MySQL 数据库。

systemctl start mysqld.service

3、执行如下命令,查看MySQL运行状态。

systemctl status mysqld.service

4、执行以下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

5、执行以下命令,登录数据库。

mysql -uroot -p

6、执行以下命令,修改MySQL默认密码。

set global validate_password_policy=0;  #修改密码安全策略为低(只校验密码长度,至少8位)。
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

7、执行以下命令,授予root用户远程管理权限。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

8、输入exit退出数据库。

数据库优化案例

其他有关MySQL索引:

未加索引查看SQL执行计划,可以发现key和key_len的值都是null。

explain select * from test_tb where name='abc';

查看test_tb表的表结构

show create table test_tb;

创建test_tb表的索引,再次查看test_tb表的表结构,会发现表结构中多了一个KEY `name` (`name`)

alter table test_tb add index(name);

查看数据库运行中的SQL

select * from `information_schema`.`PROCESSLIST`
安装Nginx 1.17.10

1、安装Nginx运行所需要的插件。

  • 安装gcc。gcc是Linux下的编译器,它可以编译C、C++、Ada、Object C和Java等语言。
yum -y install gcc
  • 安装pcre。pcre是一个perl库,Nginx的HTTP模块使用pcre来解析正则表达式。
yum install -y pcre pcre-devel
  • 安装zlib。zlib是一个文件压缩和解压缩的库,Nginx使用zlib对HTTP数据包进行gzip压缩和解压。
yum install -y zlib zlib-devel

2、下载Nginx安装包。

wget http://nginx.org/download/nginx-1.17.10.tar.gz

3、解压Nginx安装包。

tar -zxvf nginx-1.17.10.tar.gz

4、编译安装Nginx。

cd nginx-1.17.10
./configure
make && make install

5、启动Nginx。

cd /usr/local/nginx/
sbin/nginx

6、测试Nginx启动。在浏览器地址栏输入ECS服务器的公网地址xx.xx.xx.xx,出现如下界面表示安装启动成功。

安装PHP 5.4.16

1、安装PHP。

yum -y install php php-mysql php-fpm

2、在nginx.conf文件中增加对PHP的支持。

vim /usr/local/nginx/conf/nginx.conf

进入Vim编辑器后,按下i键进入编辑模式,在server的根路由配置中新增index.php。

location / {
      root   html;
      index  index.html index.htm index.php;
}

并在根路由下面新增以下配置。在server{中}

if (!-e $request_filename) {
     rewrite ^/(.*)$ /index.php/$1 last;
}

location ~ .*\.php(\/.*)*$ {
     fastcgi_pass   127.0.0.1:9000;
     include       fastcgi.conf;
     fastcgi_index  index.php;
}

按下ESC键,输入:wq保存并退出Vim编辑器。

3、重启php-fpm服务。

systemctl restart php-fpm

4、重启Nginx服务。

/usr/local/nginx/sbin/nginx -s reload

5、检查PHP安装。

a. 在Nginx的网站根目录下创建PHP探针文件phpinfo.php。

echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/phpinfo.php

b. 访问PHP探针页面。在浏览器地址栏输入xx.xx.xx.xx/phpinfo.php(请将xx.xx.xx.xx替换为ECS服务器的公网地址),出现如下页面表示PHP环境配置成功。

快速搭建LAMP环境(Linux+Apache+MySQL+PHP)

基于CentOS 7.7

配置Apache服务
  1. 执行如下命令,安装Apache服务及其扩展包。
yum -y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql
  1. 执行如下命令,启动Apache服务。
systemctl start httpd.service
  1. 在当前浏览器页面,新开启一个网页,在地址栏输入实例的弹性IP地址,并回车。
http://<实例公网IP地址>
安装并配置MySQL 5.7.41

1、执行如下命令,下载并安装MySQL官方的Yum Repository。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server --nogpgcheck

2、执行如下命令,启动 MySQL 数据库。

systemctl start mysqld.service

3、执行如下命令,查看MySQL运行状态。

systemctl status mysqld.service

4、执行以下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

5、执行以下命令,登录数据库。

mysql -uroot -p

6、执行以下命令,修改MySQL默认密码。

set global validate_password_policy=0;  #修改密码安全策略为低(只校验密码长度,至少8位)。
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

7、执行以下命令,授予root用户远程管理权限。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

8、运行以下命令查看MySQL版本号。

mysql -V
安装PHP 5.4.16

PHP(PHP:Hypertext Preprocessor递归缩写)中文名字是:“超文本预处理器”,是一种广泛使用的通用开源脚本语言,适合于Web网站开发,它可以嵌入HTML中。编程范型是面向对象、命令式编程的。

1、安装PHP环境。

yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap

2、执行以下命令创建PHP测试页面。

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

3、执行以下命令,重启Apache服务。

systemctl restart httpd

4、在本地浏览器的址栏中,,访问http://<ECS公网IP>/phpinfo.php,显示如下页面表示PHP语言环境安装成功。

安装phpMyAdmin 4.0.10.20

phpMyAdmin是一个MySQL数据库管理工具,通过Web接口管理数据库方便快捷。

1、执行以下命令,创建phpMyAdmin数据存放目录。

mkdir -p /var/www/html/phpmyadmin

2、执行以下命令,下载phpMyAdmin压缩包。

wget --no-check-certificate https://labfileapp.oss-cn-hangzhou.aliyuncs.com/phpMyAdmin-4.0.10.20-all-languages.zip

3、执行以下命令,安装unzip并解压phpMyAdmin压缩包。

yum install -y unzip
unzip phpMyAdmin-4.0.10.20-all-languages.zip

4、执行以下命令,复制phpMyAdmin文件到数据存放目录。

mv phpMyAdmin-4.0.10.20-all-languages/*  /var/www/html/phpmyadmin

5、在本地浏览器的址栏中,输入http://实例公网 IP/phpmyadmin,访问phpMyAdmin。

返回页面出现phpMyAdmin登录页,说明phpMyAdmin安装成功。

6、在phpMyAdmin登录页面,依次输入MySQL的用户名和密码,单击执行

使用云原生PolarDB并使用LAMP搭建门户网站

创建PolarDB数据库账号

在阿里云控制台页面,依次单击产品与服务>云数据库PolarDB ,进入云数据库PolarDB管理控制台,在集群列表页面顶部菜单栏中,切换资源所在地域,找到您的PolarDB实例,单击实例ID。创建数据库账号和创建数据库.

设置数据库白名单。连接数据库需要设置数据库白名单。在左侧导航栏中,选择配置与管理>集群白名单。在集群白名单页面的IP列表区域,单击配置。将默认的白名单地址127.0.0.1更改为0.0.0.0/0,然后单击确定,使白名单地址生效。

安装LAMP环境

安装Apache服务及其扩展包

yum -y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql

PbootCMS是使用PHP语言开发的CMS系统需安装PHP环境。

执行以下命令,安装PHP

yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap

执行以下命令下载并安装MySQL

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

启动MySQL数据库

systemctl start mysqld
使用PbootCMS搭建门户网站

安装Git

yum -y install git

下载PbootCMS源码文件,并回退到兼容低版本PHP的版本,PbootCMS是一套全新内核且永久开源免费的PHP企业网站开发建设管理系统。系统默认采用sqlite轻型数据库,放入PHP空间即可直接使用,可选mysql、pgsql等数据库。&& 表示前一条命令执行成功时,才执行后一条命令。

cd ~ && git clone https://gitee.com/hnaoyun/PbootCMS.git && cd ~/PbootCMS/ && git checkout 43bd6e4481eb5d3516f1d33187c308b25de76af3 && cd ~

将安装包拷贝到Apache的wwwroot目录下

cp -r PbootCMS/* /var/www/html/

修改站点根目录文件权限

chmod -R a+w /var/www/html

向数据库中导入CMS的初始数据,初始化数据库pbootcms的表结构和数据。

sql_file="/var/www/html/static/backup/sql/"$(ls /var/www/html/static/backup/sql/) &&
mysql -h数据库连接地址(公网地址) -uUserName -pPassWord -Dpbootcms < $sql_file

修改CMS系统数据库配置

cat > /var/www/html/config/database.php << EOF
<?php
return array(
    'database' => array(
        'type' => 'mysqli', // 数据库连接驱动类型: mysqli,sqlite,pdo_mysql,pdo_sqlite
        'host' => '数据库连接地址', // PolarDB数据库链接地址
        'user' => 'UserName', // PolarDB数据库的用户名
        'passwd' => 'PassWord', // PolarDB数据库的密码
        'port' => '3306', // 数据库端口
        'dbname' => 'pbootcms' //数据库名称
    )
);
EOF

在云数据库PolarDB控制台页面左侧,依次单击产品与服务>云服务器ECS,进入云服务器ECS管理控制台找到实例ID,在实例详情页面, 单击安全组,在安全组页面的访问规则区域,确保安全组开放了80端口访问,否则无法访问已搭建的门户网站。

安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力,用于在云端划分安全域。通过配置安全组规则,可以控制安全组内一台或多台ECS实例的入流量和出流量。

重启Apache服务

systemctl restart httpd

在浏览器地址栏输入http:///admin.php,访问系统后台。默认账号为admin,密码为123456

手动部署 Java Web环境

基于Alibaba Cloud Linux 2.1903 LTS 64位操作系统

准备编译环境(关闭防火墙和SELinux)

本步骤将指导您如何在ECS实例上关闭防火墙和SELinux。

关闭防火墙

  1. 执行如下命令,查看当前防火墙的状态。
systemctl status firewalld

返回结果您可查看到当前防火墙的状态

  1. 关闭防火墙。如果防火墙为关闭状态可以忽略此步骤。
  • 如果您想临时关闭防火墙,需要运行以下命令。

说明 临时关闭防火墙后,如果Linux实例重启,则防火墙将会自动开启。

systemctl stop firewalld
  • 如果您想永久关闭防火墙,需要依次运行以下命令。说明 如果您想重新开启防火墙,请参见firewalld官网信息。

执行如下命令,关闭防火墙。

systemctl stop firewalld

执行如下命令,实例开机时,禁止启动防火墙服务。

systemctl disable firewalld

关闭SELinux

  1. 执行如下命令,查看SELinux的当前状态。
getenforce

返回如下结果,您可查看到SELinux的当前状态为Disabled。

  • 如果SELinux状态参数是Disabled,则SELinux为关闭状态。
  • 如果SELinux状态参数是Enforcing,则SELinux为开启状态。

关闭SELinux。如果SELinux为关闭状态可以忽略此步骤。如果您想临时关闭SELinux,运行以下命令。

setenforce 0

说明 该操作只是暂时关闭SELinux,下次重启Linux后,SELinux还会开启。

如果您想永久关闭SELinux,运行以下命令打开SELinux配置文件。

vi /etc/selinux/config

在/etc/selinux/config文件内,将光标移动到SELINUX=enforcing一行,按i键进入编辑模式,修改为SELINUX=disabled,然后按Esc键,再输入:wq并回车,保存关闭SELinux配置文件。重启系统使设置生效。

说明 如果您想重新开启SELinux,具体操作,请参见开启或关闭SELinux。

执行如下命令,创建一般用户www来运行Tomcat。

useradd www

执行如下命令,创建网站根目录。

mkdir -p /data/wwwroot/default		#-p 确保目录名称存在,不存在的就建一个。
  1. 执行如下命令,将网站根目录的所属用户设置为www。
chown -R www.www /data/wwwroot     #-R : 处理指定目录以及其子目录下的所有文件
安装JDK1.8
  1. 执行如下命令,通过yum命令查找JDK1.8软件包。
yum -y list java*
  1. 执行如下命令,安装列表中的JDK1.8软件包。
yum -y install java-1.8.0-openjdk-devel.x86_64
  1. 执行如下命令,查看JDK版本。
java -version

配置环境变量。

vim /etc/profile

说明 JAVA_HOME值为当前JDK安装的路径。本示例中,运行命令

find /usr/lib/jvm -name ‘java-1.8.0-openjdk-1.8.0*’,查看JDK安装后文件的路径。

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.1.al7.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
  1. 按下Esc键,输入:wq并回车以保存并关闭文件。
  2. 执行如下命令,立即生效环境变量。
source /etc/profile
安装Apache Tomcat 8.5.72

下载Tomcat 8安装包。

wget --no-check-certificate https://labfileapp.oss-cn-hangzhou.aliyuncs.com/apache-tomcat-8.5.72.tar.gz

解压Tomcat 8安装包。

tar -zxvf apache-tomcat-8.5.72.tar.gz

移动Tomcat所在目录。

mv apache-tomcat-8.5.72 /usr/local/tomcat/

将文件的所属用户设置为www。

chown -R www.www /usr/local/tomcat/

在/usr/local/tomcat/目录下:

  • bin:存放Tomcat的一些脚本文件,包含启动和关闭Tomcat服务脚本。
  • conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml。
  • webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录。
  • logs:存放Tomcat执行时的日志文件。

配置server.xml文件。切换到/usr/local/tomcat/conf/目录。

cd /usr/local/tomcat/conf/

重命名server.xml文件。

mv server.xml server.xml_bk

新建一个server.xml文件。创建并打开server.xml文件。

vi server.xml
  1. 按下i键,添加以下内容。
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<Listener className="org.apache.catalina.core.AprLifecycleListener"/>
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
 type="org.apache.catalina.UserDatabase"
 description="User database that can be updated and saved"
 factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
 pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080"
 protocol="HTTP/1.1"
 connectionTimeout="20000"
 redirectPort="8443"
 maxThreads="1000"
 minSpareThreads="20"
 acceptCount="1000"
 maxHttpHeaderSize="65536"
 debug="0"
 disableUploadTimeout="true"
 useBodyEncodingForURI="true"
 enableLookups="false"
 URIEncoding="UTF-8"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
  resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="/data/wwwroot/default" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/wwwroot/default" debug="0" reloadable="false" crossContext="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>

设置 JVM 内存参数,创建并打开/usr/local/tomcat/bin/setenv.sh文件。

vi /usr/local/tomcat/bin/setenv.sh

指定 JAVA_OPTS 参数,用于设置 JVM 的内存信息以及编码格式。

JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx496m -Dfile.encoding=UTF-8'

设置Tomcat自启动脚本

下载Tomcat自启动脚本文件。该脚本来源于社区,仅供参考。如果您运行wget命令下载失败,您可以通过浏览器访问https://raw.githubusercontent.com/oneinstack/oneinstack/master/init.d/Tomcat-init 直接获取脚本内容。

wget https://raw.githubusercontent.com/oneinstack/oneinstack/master/init.d/Tomcat-init
#!/bin/bash
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: tomcat-server daemon
# Description:       tomcat-server daemon
### END INIT INFO
#
# chkconfig: - 95 15
# description: Tomcat start/stop/status script

#Location of JAVA_HOME (bin files)
export JAVA_HOME=

#Add Java binary files to PATH
export PATH=$JAVA_HOME/bin:$PATH

#CATALINA_HOME is the location of the configuration files of this instance of Tomcat
CATALINA_HOME=/usr/local/tomcat

#TOMCAT_USER is the default user of tomcat
TOMCAT_USER=www

#TOMCAT_USAGE is the message if this script is called without any options
TOMCAT_USAGE="Usage: $0 {\e[00;32mstart\e[00m|\e[00;31mstop\e[00m|\e[00;32mstatus\e[00m|\e[00;31mrestart\e[00m}"

#SHUTDOWN_WAIT is wait time in seconds for java proccess to stop
SHUTDOWN_WAIT=20

tomcat_pid() {
  echo `ps -ef | grep java | grep $CATALINA_HOME/ | grep -v grep | tr -s " "|cut -d" " -f2`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]; then
    echo -e "\e[00;31mTomcat is already running (pid: $pid)\e[00m"
  else
    echo -e "\e[00;32mStarting tomcat\e[00m"
    if [ `user_exists $TOMCAT_USER` = "1" ]; then
      su $TOMCAT_USER -c $CATALINA_HOME/bin/startup.sh
    else
      $CATALINA_HOME/bin/startup.sh
    fi
    status
  fi
  return 0
}

status() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]; then
    echo -e "\e[00;32mTomcat is running with pid: $pid\e[00m"
  else
    echo -e "\e[00;31mTomcat is not running\e[00m"
  fi
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]; then
    echo -e "\e[00;31mStoping Tomcat\e[00m"
    $CATALINA_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\e[00;31mwaiting for processes to exit\e[00m\n";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\n\e[00;31mkilling processes which didn't stop after $SHUTDOWN_WAIT seconds\e[00m"
      kill -9 $pid
    fi
  else
    echo -e "\e[00;31mTomcat is not running\e[00m"
  fi

  return 0
}

user_exists() {
  if id -u $1 >/dev/null 2>&1; then
    echo "1"
  else
    echo "0"
  fi
}

case $1 in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
    echo -e $TOMCAT_USAGE
    ;;
esac
exit 0

执行如下命令,移动并重命名Tomcat-init。

mv Tomcat-init /etc/init.d/tomcat

执行如下命令,为/etc/init.d/tomcat添加可执行权限。

chmod +x /etc/init.d/tomcat

设置启动脚本 JAVA_HOME。

说明 脚本中JDK的路径信息必须与您安装的JDK路径保持一致,否则Tomcat会启动失败。

sed -i 's@^export JAVA_HOME=.*@export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.1.al7.x86_64@' /etc/init.d/tomcat

依次执行如下命令,设置Tomcat开机自启动。

chkconfig --add tomcat
chkconfig tomcat on

执行如下命令,启动Tomcat

service tomcat start
# 多了org.apache.catalina.startup.Bootstrap进程
部署测试项目并验证

将需要部署的Java Web项目文件War包上传到网站根目录下,并将网站根目录下文件所属用户改为www。您可以使用支持文件传输功能的远程连接工具或搭建FTP站点上传项目文件。

本示例中,网站根目录为/data/wwwroot/default,运行以下命令直接在网站根目录下新建一个Tomcat测试页面,并进行访问。

执行如下命令,新建测试文件。

echo Tomcat test > /data/wwwroot/default/index.jsp

在本地浏览器地址栏中输入http://弹性IP:8080进行访问。

基于ECS搭建云上博客

基于CentOS 7.7

配置Apache服务

执行如下命令,安装Apache服务及其扩展包。

yum -y install httpd mod_ssl mod_perl mod_auth_mysql

查看Apache是否安装成功。

httpd -v

启动Apache服务,在浏览器的址栏中,访问http://ECS公网地址

systemctl start httpd.service
安装MariaDB数据库

由于使用WordPress搭建云上博客,需要使用MySQL数据库存储数据。
在ECS实例上安装MySQL的开源替代品MariaDB(MariaDB兼容MySQL),并创建博客数据库。

安装MariaDB Server

yum install -y mariadb-server

启动MariaDB Server

systemctl start mariadb

查看MariaDB Server运行状态。

systemctl status mariadb	
#返回结果可看到active (running)时,表示MariaDB Server启动成功

设置数据库root用户的初始密码。(出现Enter Password提示符的时,直接回车)

mysqladmin -u root -p password

连接数据库。

mysql -uroot -p

创建WordPress数据库。

create database wordpress;

创建WordPress数据库。create database wordpress;

安装PHP 5.4.16

PHP是一种广泛使用的通用开源脚本语言,适合于Web网站开发,它可以嵌入HTML中。

安装PHP

yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap

执行如下命令,创建PHP测试页面。

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

执行如下命令,重启Apache服务。

systemctl restart httpd

浏览器的地址栏中,访问http://<ECS公网地址>/phpinfo.php。

安装和配置WordPress

安装WordPress

yum -y install wordpress

修改WordPress配置文件

修改wp-config.php指向路径为绝对路径

# 进入/usr/share/wordpress目录。
cd /usr/share/wordpress
# 修改路径。
ln -snf /etc/wordpress/wp-config.php wp-config.php
# 查看修改后的目录结构。
ll

移动wordpress文件到Apache根目录

# 在Apache的根目录/var/www/html下,创建一个wp-blog文件夹。
mkdir /var/www/html/wp-blog
mv * /var/www/html/wp-blog/

修改wp-config.php配置文件

sed -i 's/database_name_here/wordpress/' /var/www/html/wp-blog/wp-config.php
sed -i 's/username_here/root/' /var/www/html/wp-blog/wp-config.php
sed -i 's/password_here/123456789/' /var/www/html/wp-blog/wp-config.php

查看配置文件信息是否修改成功

cat -n /var/www/html/wp-blog/wp-config.php

#可看到 修改
    23  define( 'DB_NAME', 'wordpress' );
    25  /** MySQL database username */
    26  define( 'DB_USER', 'root' );
    28  /** MySQL database password */
    29  define( 'DB_PASSWORD', '123456789' );

重启Apache服务

systemctl restart httpd

测试WordPress:浏览器的地址栏中,访问 http://<ECS公网地址>/wp-blog/wp-admin/install.php。

在WordPress配置页面,配置相关信息,然后单击Install WordPress。
参数说明:
Site Title:站点名称。本示例为Hello ABC。
Username:管理员用户名。本示例为admin。
Password:访问密码。本示例为Cm%c4(MKI3gQwGk8ap。
Your Email:邮箱地址,建议使用真实有效的邮箱地址。若没有,可以填写虚拟邮箱地址,但将无法接收信息。

基于Leanote和Mongodb搭建云笔记本

安装Mongodb

MongoDB是一个基于分布式文件存储的高性能数据库,属于NOSQL,由C++语言编写,运行稳定,性能高。支持的数据结构非常松散是类似于json和bson格式,可以存储比较复杂的数据类型。它支持的查询语言非常强大,可以实现类似关系数据库单表查询的绝大部分功能,支持对数据建立索引。

#1.配置MongoDB的yum源
vim /etc/yum.repos.d/mongodb-org-3.4.repo
#添加以下内容:
[mongodb-org-3.4]  
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/  
gpgcheck=1  
enabled=1  
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
#2. 将服务器上的软件包信息在本地缓存,以提高搜索安装软件的速度
yum makecache

#3.安装MongoDB
yum -y install mongodb-org

#4. 查看mongo安装位置 
whereis mongod

#5. 修改mongo配置文件
vim /etc/mongod.conf
net:
  port: 27017
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.
#修改配置文件的 bindIp, 默认是 127.0.0.1 只限于本机连接。所以安装完成后必须把这个修改为 0.0.0.0 ,否则无法通过远程连接,需要远程连接需要把服务器端口打开。

#6. 启动MongoDB
systemctl start mongod

#7. 查到mongodb的状态
systemctl status mongod
安装Leanote
#0. 创建/app目录,用于存放Leanote软件
mkdir /app
cd /app

#1.下载Leanote二进制安装包
wget https://nchc.dl.sourceforge.net/project/leanote-bin/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz

#2.解压安装包
tar -zxvf leanote-linux-amd64-v2.6.1.bin.tar.gz

#3.Leanote配置
#编辑文件/app/leanote/conf/app.conf,在文件中找到app.secret项,将该项的值改为任意字符串。
#根据Leanote官方文档,如不修改app.secret项的值,将会有安全隐患。
vim /app/leanote/conf/app.conf
#修改app.secret=任意字符串

#4.初始化数据库
mongorestore -h localhost -d leanote --dir /app/leanote/mongodb_backup/leanote_install_data/

#5.启动服务
nohup bash /app/leanote/bin/run.sh > /app/leanote/run.log 2>&1 &

根据Leanote的配置文件/app/leanote/conf/app.conf可知,笔记服务使用的端口号为9000,在浏览器中访问http://<ECS公网地址>:9000 访问云笔记。默认管理用户为admin,密码为abc123

搭建Node.js编程环境

基于CentOS 7.7

安装配置Node.js v12.4.0

下载Node.js的安装包。

wget https://npm.taobao.org/mirrors/node/v12.4.0/node-v12.4.0-linux-x64.tar.xz

解压Node.js的安装包。

tar -xvf node-v12.4.0-linux-x64.tar.xz

重命名Node.js安装目录。

mv node-v12.4.0-linux-x64/ /usr/local/node

配置Node.js,将Node.js的可执行文件目录加入到系统环境变量中。

echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profile
source /etc/profile

分别查看node和npm版本。

node -v
npm -v
测试Node.js环境

使用vim命令创建一个测试文件。

vim HelloWorld.js

复制如下代码到HelloWorld.js文件中。

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(
        200,
        {
            'Content-Type': 'text/plain'
        });
    response.end('Hello World\n');
}).listen(8080);
console.log('Server started');

运行HelloWorld.js文件。

node HelloWorld.js

4 打开浏览器,在地址范围输入http://<ECS公网地址>:8080 看见打印的Hello World

部署Linux主机管理系统WDCP

WDCP(WDlinux Control Panel)是一套Linux服务器及虚拟主机管理系统,通过Web控制和管理服务器。在WDCP的后台中,您可以更方便地使用Linux系统作为网站服务器系统,并对Linux服务器进行管理。

部署Linux主机管理系统WDCP

查看我们创建的实例ID,在ECS控制台实例列表中找到对应的实例。普通停机模式停止实例。接下来更换操作系统,点击更换操作系统。在更换操作系统页面,单击镜像市场,然后单击从镜像市场获取更多选择(含操作系统)。在镜像市场对话框中,输入WDCPv3.0,并单击搜索。示例选用 PHP运行环境(WDCPv3.0面板 多引擎切换 免费版)镜像,可进入该云市场镜像页面获取产品信息。单击使用。使用云市场镜像更换操作系统后,您可以开始使用WDCP主机管理系统,示例中,WDCP主机管理系统访问地址为 http://ECS实例的公网IP:8080

手动搭建FTP站点(Windows)

基于Windows Server 2012 R2数据中心版64位操作系统

添加 IIS 以及 FTP 服务角色

实例进行Workbench远程连接——>Window图标服务器管理,选择管理,选择添加角色和功能,默认进到服务器角色选择添加 Web 服务器(IIS),下一步至选择角色服务选中IIS管理控制台以及 FTP 服务器 进行安装。

创建用于访问FTP站点的Windows用户
说明:创建 Windows 用户,用于访问 FTP 站点时的身份验证。如果只需要匿名用户(即仅提供用户名 anonymous 或 ftp 的用户)访问 FTP 站点,可以跳过本步骤。

Window图标管理工具选择计算机管理,左侧导航栏选择系统工具 > 本地用户和组 > 用户。页面右侧的操作列,单击更多操作,然后单击新用户

说明:具体配置用户名:示例中创建一个用户名为 ftptest 的 Windows 用户。密码及确认密码:输入自定义密码信。密码须包括大小写字母和数字,否则提示无法通过密码策略。密码相关设置:选中密码永不过期。
设置共享文件的权限
说明:需创建一个文件夹作为 FTP 站点共享文件的入口,该文件夹需要开放访问、修改等权限。后续各客户端访问该 FTP 站点时,文件传输均基于该文件夹完成。

Windows实例磁盘创建一个供FTP站点使用的文件夹。例在C盘下创建一个名为ftp的文件夹——>修改属性安全页签单击编辑——>单击添加,输入对象名称ftptest,然后单击检查名称。检查名称无误后,单击确定。——>在组或用户名区域,单击新添加的用户名ftptest,然后在ftptest 的权限区域设置权限后,单击确定。示例中允许所有权限。可根据实际业务对权限的要求,自行设置权限为允许或拒绝。

添加并设置FTP站点

Window图标服务器管理器顶部导航栏工具 Internet Information Services(IIS)管理器——>左侧导航栏选择Windows实例主机名 网站,然后在右侧操作列,单击添加 FTP 站点——>在弹出的对话框中设置站点信息,然后单击下一步。具体配置说明如下:FTP站点名称:自定义名称。例如 ftptest。内容目录:FTP所需的共享文件夹。示例对应的是C盘中的ftp文件夹 ——> 设置IP地址(默认)以及SSL证书(无),然后单击下一步——>设置身份验证(基本)和授权信息(指定用户 ftptest),设置权限(读取,写入),然后单击完成,完成后可以在IIS管理器查看到成功搭建的FTP站点 ——>配置FTP站点的防火墙。在IIS管理器中,双击 FTP 站点名称 ftptest,进入FTP站点的主页。双击FTP 防火墙支持。在防火墙的外部 IP 地址下的文本框中,输入Windows实例的公网IP地址,页面右侧单击应用

说明:具体配置:
 
   - IP地址:保持默认配置。
   - SSL:不同配置项对应的说明如下。本示例中选择 无 ,即不需要SSL加密。如果您需要保证数据传输安全且已拥有SSL证书,请根据实际的数据传输安全要求,设置为 允许 或 需要 。
     -  无 :不需要SSL加密。
     -  允许 :允许FTP服务器支持与客户端的非SSL和SSL连接。
     -  需要 :需要对FTP服务器和客户端之间的通信进行SSL加密。
   - 其他配置保持默认设置。
说明:具体配置项:

- 身份验证:不同选项的说明如下所示。本示例中仅选择 基本 ,后续将通过已创建的ftptest用户访问FTP站点。如果您对数据传输安全没有要求,可以设置为 匿名 ,使匿名用户支持直接访问FTP站点。
  -  匿名 :允许任何仅提供用户名anonymous或ftp的用户访问内容。
  -  基本 :需要用户提供有效用户名和密码才能访问内容。由于基本身份验证通过网络传输未加密的密码,因此请仅在清楚客户端和FTP服务器之间的连接是安全的情况下(例如,使用安全套接字层SSL时)使用此身份验证方法。
- 授权:允许访问的范围说明如下所示。本示例中选择**指定用户**,并在对应的文本框中输入ftptest。
  -  所有用户 :所有用户(不论是匿名用户还是已标识的用户)均可访问FTP站点对应的共享文件夹。
  -  匿名用户 :匿名用户可访问FTP站点对应的共享文件夹。
  -  指定角色或用户组 :仅特定角色或用户组的成员才能访问FTP站点对应的共享文件夹。需要在对应的文本框中输入角色或用户组。
  -  指定用户 :仅指定用户才能访问FTP站点对应的共享文件夹。需要在对应的文本框中输入用户名。
- 权限:选中 读取 和 写入 权限。
设置安全组及防火墙

说明:当在Windows实例中搭建好FTP站点后,需要在实例所属的安全组中,添加入方向规则,放行FTP服务器所需的21端口以及FTP服务器被动模式可能占用的端口范围1024~65535。

有两种配置方式:(1)在Windows实例所属的安全组中,添加入方向规则,放行21端口以及1024~65535端口。

具体操作,请参见添加安全组规则。(2)配置Windows实例内部的防火墙。Windows实例内部的防火墙默认为关闭状态。如果您的防火墙为开启状态,则需要放行TCP 21端口与1024~65535端口用于FTP服务。具体操作,请参见设置 ECS 实例远程连接防火墙

采用第二种方式中的添加端口规则

Window图标 运行——>输入wf.msc,在弹出的 高级安全 Winodws 防火墙 窗口,单击 入站规则,然后单击 新建规则,在弹出的新建入站规则向导窗口,选择 端口下一步。在弹出的窗口中,选择 TCP,然后添加 **特定本地端口(21端口以及1024~65535端口)**填写:21,1024-65535,下一步。在弹出的窗口中,选择 允许连接下一步。使用默认配置即可,下一步。在弹出的窗口中,填写规则名称。单击 完成——>查看 Windows 防火墙属性,以确认防火墙是否启用。如防火墙未启用,选择 启用(推荐)提示:建议将 域配置文件专用配置文件公用配置文件 选项卡下的防火墙全部启用。

客户端测试访问FTP站点

Windows的文件夹目录、命令行工具、浏览器或者是第三方FTP连接工具均可用来测试FTP服务器。示例将以本地Windows主机作为客户端,通过文件夹目录测试访问FTP站点。在本地物理主机中,打开文件夹目录,在文件夹路径中,输入ftp://FTP站点的公网IP地址:21进行访问。在弹出的登录身份对话框,完成登录信息设置,然后单击登录。示例中使用ftptest用户名及对应的密码信息,登录FTP站点。可新建一个测试文件夹test。重新登录Windows实例,查看C盘的ftp文件夹中新增了test文件夹,表示FTP站点搭建成功且可以进行文件数据传输。

ECS数据管理实践-备份与恢复

在ECS中对已创建的数据盘进行分区并挂载到ECS上,从而可以使用数据盘进行文件存储;然后,用户创建ECS数据盘的快照,并使用快照进行磁盘的回滚。

数据盘分区及挂载

查询当前系统中的数据盘

fdisk -l

对数据盘进行分区:

fdisk /dev/vdb

在弹出的命令行中需要输入的参数是:

Command(m for help)输入n; #新建一个分区

Command action输入p; #分区类型为主分区(如果想添加扩展分区,就按e)

Partition number(1-4,default 1)输入1;

First cylinder和Last cylinder处直接输入回车,使用默认的配置;

Command(m for help)输入w,从而使上面的配置生效。 #输入w保存退出

再次执行如下命令,查询当前系统中的数据盘。如果看到显示分区 /dev/vdb1 的信息,则说明数据盘分区成功。

fdisk -l

对数据盘进行格式化:

mkfs.ext3 /dev/vdb1

创建目录 /alidata:

mkdir /alidata

然后,将磁盘挂载上去

mount /dev/vdb1 /alidata

查看磁盘的使用情况。

df -h
数据盘快照创建及回滚

进入数据盘 /alidata 目录下。

cd /alidata

在数据盘上创建一个文件 test.txt,并往文件里面写入内容:

>test.txt
echo “Hello Aliyun”>test.txt

在ECS实例的管理页面中,点击云盘,界面显示ECS实例挂载的磁盘信息:数据盘系统盘。点击数据盘右侧的创建快照。在弹出的页面中自定义一个快照的名称,例如:sl001-ss 。完成后,点击【确定】。

返回ECS的远程登录工具,在ECS的命令行中,使用如下命令,删除刚刚创建的文件 test.txt,模拟数据误删的情况

rm -f test.txt

通过快照回滚的方式,将磁盘恢复到包含删除数据的时间点,从而将数据恢复出来。回滚磁盘需要ECS是停止的状态。点击【本实例快照】,进入ECS的快照页面。然后,在右侧快照列表中,找到已创建的数据盘快照,点击【回滚磁盘】进行磁盘数据的回滚。

当ECS实例启动成功后,重新远程登录到ECS实例中,并重新使用命令,将数据盘挂载到挂载到 /alidata。

mount /dev/vdb1/alidata

将会看到误删除的数据 test.txt 文件已恢复。

ls /alidata

部署Hadoop环境

基于 CentOS7.7 搭建Hadoop 3.3.0 伪分布式环境

安装JDK 1.8

1、下载JDK1.8安装包。

wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz

2、解压下载的JDK1.8安装包。

tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz

3、移动并重命名JDK包。

mv java-se-8u41-ri/ /usr/java8

4、执行以下命令,配置Java环境变量。

echo 'export JAVA_HOME=/usr/java8' >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
source /etc/profile

5、执行以下命令,查看Java是否成功安装。

java -version

安装Hadoop

安装Hadoop 3.3.0

1、执行以下命令,下载Hadoop安装包。示例安装hadoop-3.3.0版本

wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

2、执行以下命令,解压Hadoop安装包至/opt/hadoop

tar -zxvf hadoop-3.3.0.tar.gz -C /opt/
mv /opt/hadoop-3.3.0 /opt/hadoop

3、执行以下命令,配置Hadoop环境变量。

echo 'export HADOOP_HOME=/opt/hadoop/' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile

4、执行以下命令,修改配置文件 yarn-env.sh 和 hadoop-env.sh

echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh
echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh

5、执行以下命令,测试Hadoop是否安装成功。

hadoop version
配置Hadoop 3.3.0

1、修改Hadoop配置文件 core-site.xml。

vim /opt/hadoop/etc/hadoop/core-site.xml

在节点内插入如下内容。

<property>
    	<!-- 指定 hadoop 数据的存储目录 -->
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/hadoop/tmp</value>
    </property>
    <property>
    	<!-- 指定 NameNode 的地址 -->
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

2、修改Hadoop配置文件 hdfs-site.xml。

vim /opt/hadoop/etc/hadoop/hdfs-site.xml

在节点内插入如下内容。

<property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/hadoop/tmp/dfs/data</value>
    </property>

3、修改 start-dfs.sh 和 stop-dfs.sh文件。

在/opt/hadoop/sbin目录下找到start-dfs.sh和stop-dfs.sh两个文件,在文件顶部添加以下内容:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

4、修改start-yarn.sh和stop-yarn.sh文件.

在 /opt/hadoop/sbin目录下找到start-yarn.sh和stop-yarn.sh两个文件,在文件顶部添加以下内容:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
配置SSH免密登录

1、执行以下命令,创建公钥和私钥。点击回车键

ssh-keygen -t rsa

2、执行以下命令,将公钥添加到authorized_keys文件中。

cd .ssh
cat id_rsa.pub >> authorized_keys
启动Hadoop

1、执行以下命令,初始化namenode 。

hdfs namenode -format

2、依次执行以下命令,启动Hadoop。

start-dfs.sh
start-yarn.sh

3、执行jps命令查看已启动的进程,若显示RM,NM,NN,SNN,DN,JPS,表明Hadoop启动成功。

4、打开浏览器访问http://ECS公网地址:8088和 http://ECS公网地址:9870查看Hadoop的Web页面

快速搭建Docker环境

基于CentOS 7.7

安装Docker CE 23.0.1

Docker有两个分支版本:Docker CE和Docker EE,即社区版和企业版。

安装Docker的依赖库

yum install -y yum-utils device-mapper-persistent-data lvm2

添加Docker CE的软件源信息。添加aliyun docker-ce yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

源添加成功后,使用yum list命令查看当前的docker源中支持的安装包版本列表。

yum list docker-ce --showduplicates | sort -r

安装Docker CE

yum makecache fast #将软件包信息提前在本地索引缓存,提高搜索安装软件速度,执行命令可提升yum安装速度
yum -y install docker-ce

或者选择需要的docker版本,通过yum install命令进行安装。

yum install -y docker-ce.x86_64 3:20.10.16-3.el7

启动Docker服务,使用docker version命令查看docker版本号

systemctl start docker
docker version
# Docker Engine Community 23.0.1

将docker服务配置为开机自启动。(可选)

systemctl enable docker.service
配置阿里云镜像仓库(镜像加速)

Docker的默认官方远程仓库是hub.docker.com,由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像站点,从而加速官方镜像的下载。下面使用阿里云镜像仓库。

复制容器镜像服务控制台地址,在FireFox浏览器打开新页签,粘贴并访问云容器镜像服务控制台。

https://cr.console.aliyun.com/

在容器镜像服务控制台左侧导航栏中,选择镜像工具>镜像加速器

镜像加速器页面的加速器区域,单击复制 加速器地址

切换至终端页面。执行如下命令配置Docker的自定义镜像仓库地址。请将命令中的镜像仓库地址 https://kqh8****.mirror.aliyuncs.com 替换为上一步阿里云为您提供的专属镜像加速地址。

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://****.mirror.aliyuncs.com"]
}
EOF

# tee命令用于读取标准输入的数据,并将其内容输出成文件
# >表示覆盖原文件内容(文件的日期也会自动更新)>>表示追加内容(会另起一行,文件的日期也会自动更新)

重新加载服务配置文件。

systemctl daemon-reload

重启Docker服务。

systemctl restart docker

服务重启后可通过下面指令测试docker运行环境是否安装成功。执行成功说明docker安装配置成功。

docker run hello-world
下载Ubuntu容器镜像并启动

通过docker search命令在的镜像源中查找所需要的容器镜像

docker search ubuntu

找到所需要容器镜像的名称后,通常需进一步在docker的镜像源中查找该镜像的版本列表。由于docker本身没有直接提供查看版本的功能,因此创建一个可以查看镜像版本的简单脚本docker-tags

vi docker-tags

在docker-tags脚本中加入

curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$1/tags/?page=$2" |
sed -e 's/,/\n/g' -e 's/\[/\\\[\n/g' |
grep -E '"name":|"count":' |
sed -e 's/"//g' -e "s/name:/$1:/g" -e "s/{count:/$1总版本数-/"

docker-tags脚本编辑好之后,需要通过chmod修改文件权限才可以执行。权限修改完成后,可使用docker-tags脚本来查询相关镜像的最近版本信息了。

chmod 777 docker-tags
./docker-tags ubuntu

查找到镜像版本信息后,就可从docker镜像源来拉取镜像到本地。在拉取镜像时直接拉取拉取的版本,也可不指定版本默认拉取最新版本。

docker pull ubuntu:jammy
# docker pull ubuntu

通过docker images命令来查看已经拉取到的本地镜像

docker images

启动容器,需首先根据镜像创建容器,使用docker create命令,利用下载好的ubuntu镜像创建容器。

注意:因为要创建一个可以持久运行的ubuntu容器,因此需要添加 -it参数

docker create -it ubuntu

容器创建成功后,可使用docker ps命令查看现有的容器

注意:如果docker ps默认只会显示正在运行的容器。如果想查看所有状态的容器,需要添加-a参数。

docker ps -a
# CONTAINER ID表示系统为容器创建的ID,IMAGE为容器的镜像名称。STATUS表示容器当前的状态。NAMES为容器的名称。使用默认的docker create命令所创建的容器并没有指定名称,因此docker会为容器生成一个随机的名字。如果用户想创建指定名称的容器,则可以使用-name参数。注意如果用户制定了容器名,则要注意容器不要重名,否则会创建失败
docker create -it --name ubuntu-1 ubuntu
docker ps -a

当容器创建好之后,可通过docker start命令来启动容器,容器启动成功后通过docker ps命令可以查看到容器状态的变化。在这里我们要注意:同一个镜像创建的多个容器之间是不相关的。

docker start ubuntu-1
docker ps -a

以上的步骤为docker容器创建的标准流程。而在实际操作过程中,使用标准步骤创建启动容器会比较繁琐,因此docker提供了更加简便的命令docker run

使用docker run命令时,docker会自动完成下载镜像,创建容器,启动容器的工作。通过以下的一条命令,就可完成下载busybox的容器镜像,创建名为busyboxdebian-1的容器,将该容器启动并在后台运行的全部功能。

docker run -itd --name busybox-1 busybox	#许多Docker镜像使用BusyBox为您提供最小镜像。
docker ps -a

在操作容器之前,先用查看宿主操作系统

lsb_release -a

宿主机网络信息

ifconfig
# 出现docker 0

首先用docker run创建一个新的ubuntu容器并启动

docker run -itd --name ubuntu-2 ubuntu

容器创建好之后,使用docker exec命令在ubuntu-2容器上启动bash控制台程序,从而对容器进行操作。

docker exec -it ubuntu-2 bin/bash

命令执行之后提示行提示符发生了改变。这说明当前用户所操作的已经是容器中的操作系统。

这时再通过lsb_release查看操作系统的状态。会显示命令无法找到,原因是通过容器安装的ubuntu属于极简版本,没有安装非必要的命令。因此需要先用apt-get命令安装常用命令。此步骤受网络速度影响可能会有比大的延迟。

apt-get update
apt-get install -y lsb-core net-tools vim --fix-missing

查看容器操作系统的状态和网络状态。发现和宿主机的信息已经不同。

lsb_release -a
ifconfig

想从容器操作系统退回宿主机操作系统。只需要输入exit命令即可。

用户在使用docker run创建容器的时候,如果不使用-d参数。则启动容器成功之后,会自动进入容器操作系统控制台。但是此种方法进入容器操作系统之后,如果使用exit退出,容器会被关闭。

docker run -it --name temp ubuntu 
exit
docker ps -a
容器暂停、恢复、启动、停止、删除

对于已经启动的容器。我们可以使用docker pause/unpause命令对容器进行暂停/恢复。当容器被暂停之后,容器内的服务将会暂停,当容器恢复之后服务恢复。

创建新的ubuntu容器。创建成功后进入容器控制台,安装必要的应用

docker run -itd --name ubuntu-3 ubuntu
docker exec -it ubuntu-3 /bin/bash
apt-get update
apt-get install -y python3 net-tools curl

在容器中启动一个默认的python3 http服务器。并将服务器设置为后台运行。在服务启动之后通过curl测试服务的运行状态。

nohup python3 -m http.server 8000 &
curl 127.0.0.1:8000

在容器内部测试http服务成功后,接下来需要在宿主机中测试http服务。在此之前,我们先通过ifconfig命令来显示并记录一下容器的ip地址。然后退出容器的控制台。

ifconfig
exit

在宿主机控制台中,同样使用curl命令来访问容器中的http服务,需要注意的是:在宿主机中我们需要通过容器IP地址才能访问到容器中的服务。

curl [容器IP]:8000

除了通过curl之外,还可以通过docker top命令来查看容器中正在运行的具体进程。

docker top ubuntu-3

通过docker pause命令暂停容器运行,容器暂停后通过docker top命令来查看容器中进程。发现进程依然存在,再通过curl测试http服务,发现已经无响应,证明服务已经停止。

docker pause ubuntu-3
docker ps -a
curl [容器IP]:8000
Ctrl+C

通过docker unpause命令恢复容器运行,测试http服务,发现已经恢复访问。

docker unpause ubuntu-3
curl [容器IP]:8000

容器重启之后,容器内部运行的应用会被停止。比较类似于物理机的重新启动。

显示正在运行的容器和容器中正在运行的应用

docker ps -a 
docker top ubuntu-3

docker stop命令停止服务,并利用docker ps -a 查看容器状态。发现容器的状态已经变成了Exited,利用docker start或者docker restart 重启,容器重启之后再利用docker top和curl测试容器中的http服务,发现服务已经不存在了。

docker restart ubuntu-3
docker top ubuntu-3
curl [容器IP]:8000

docker stop虽然会停止容器中的服务,但是并不会释放容器所占据的系统资源,因此对于已经不在需要的容器,可以使用docker rm命令删除,docker rm 命令可以使用CONTAINER ID或者NAME作为参数。如果容器的状态不是停止。则需要添加–force参数才可以删除。

docker rm --force [CONTAINER ID]
# 或者 docker rm --force ubuntu-3
容器镜像的管理

通过docker pull的方式通过镜像仓库将镜像下载到本地docker内部。但这种方法需要保证服务器可以访问到外网且访问速度有保证。如果用户在网络条件不好的情况下希望获取镜像,则可以采用镜像的保存加载方式。首先我们可以通过docker save命令可以将docker内部的一个或多个镜像导出成文件。下面的命令将nginx,hello-world两个镜像导出到images.tar文件。

docker pull hello-world
docker pull nginx
docker save -o images.tar nginx hello-world 
ll images.tar

将现有的两个镜像从docker内部删除。为后面的镜像读取做准备。docker rmi : 删除本地一个或多个镜像。

docker rmi hello-world
docker rmi nginx
docker images

通过docker load命令将images.tar中的两个镜像导入回docker内部。即可实现在没有网络访问的情况更新镜像。要注意的是:如果docker内部已经存在了相关的镜像,文件中的镜像会被忽略。

docker load -i images.tar
docker images

通过docker save和 docker load的方法可以实现docker内部的镜像保存和加载。

而对于已经创建出来的容器,可使用导出容器的快照的方式实现备份或者保存。

首先创建一个容器ubuntu-3,然后在ubuntu-3创建一个文本文件。此处可以使用docker exec bash -c 方式直接在宿主机命令行执行。

docker run -itd --name ubuntu-3 ubuntu
docker exec ubuntu-3 bash -c "echo snapshot > snapshot.txt"
docker exec ubuntu-3 bash -c "cat snapshot.txt"

通过docker export 命令来将容器以快照的形式导出到文件。

docker export ubuntu-3 > ubuntu-snapshot.tar
ll ubuntu-snapshot.tar

对于容器的快照文件。可以通过docker import命令导入到docker中,特别注意的是:docker import是以镜像而不是容器的形式导入快照。也就是说导入的快照并不能直接运行,而是需要根据此快照镜像再次创建容器才可以使用。

docker import ubuntu-snapshot.tar ubuntu-snapshot:latest
docker images

利用导入的快照镜像创造一个新的容器。并验证通过快照创建的容器中包含着之前容器中创建的文件。

docker run -itd --name snapshot ubuntu-snapshot /bin/bash
docker exec snapshot cat snapshot.txt
使用Docker安装Nginx服务

查看Docker镜像仓库中Nginx的可用版本

docker search nginx

拉取最新版的Nginx镜像

docker pull nginx:latest

查看本地镜像

docker images

运行容器

docker run --name nginx-test -p 8080:80 -d nginx

命令参数说明:

  • –name nginx-test:容器名称
  • -p 8080:80: 端口进行映射,将本地8080端口映射到容器内部的80端口
  • -d nginx: 设置容器在后台一直运行
# 查看运行中的容器
docker ps -a

浏览器打开新页签,地址栏输入http://<ECS公网地址>:8080访问Nginx服务

进入启动了nginx的Docker容器系统

docker exec -it nginx-test /bin/bash
自定义Dockerfile并构建镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

编写Dockerfile文件,文件名为Dockerfile,内容如下:

FROM centos:centos7
MAINTAINER myname <myname@gmail.com>
# 安装工具包
RUN yum install -y gcc-c++  pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 安装nginx1.14.2
RUN useradd -M -s /sbin/nologin nginx
COPY ./nginx-1.14.2.tar.gz /opt/
WORKDIR /opt/
RUN tar zxvf nginx-1.14.2.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.14.2 && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module  --with-http_sub_module && make && make install
RUN rpmkeys --import file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 && yum -y update && yum clean all
# 设置启动脚本
RUN mkdir -p /opt/work/bin
COPY ./start.sh /opt/work/bin
WORKDIR /opt/work/bin
RUN chmod -R 755 /opt/work/bin
# 定义要暴露的端口
EXPOSE 80
# 启动nginx脚本
CMD ["./start.sh"]

构建自定义镜像,下载需要的nginx-1.14.2源码包

wget http://nginx.org/download/nginx-1.14.2.tar.gz

创建start.sh文件,文件内容如下:

#!/bin/bash 
/usr/local/nginx/sbin/nginx -g "daemon off;"

构建镜像(注意命令后面有个“点”)docker build 命令用于使用 Dockerfile 创建镜像。

docker build -t my-nginx-server .
docker images

启动容器

docker run -p 8080:80 --name my_nginx2 -d my-nginx-server
docker ps -a

基于Docker搭建ELK (Elasticsearch、Logstash、Kibana)

下载需要的镜像

docker pull elasticsearch
docker pull kibana
docker pull logstash
docker pull nginx
docker images
部署Elasticsearch

修改JVM堆大小,默认情况下,Elasticsearch的JVM使用的堆大小为2GB,可以修改ES的jvm默认参数

find /var/lib/docker/overlay2/ -name jvm.options
# 修改相应的配置文件
# -Xms2g 改为 -Xms1g
# -Xmx2g 改为 -Xmx1g

调整vm.max_map_count大小

vim /etc/sysctl.conf
# 末尾添上 vm.max_map_count=262144
sysctl -p	#从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

启动elasticsearch容器

docker run --name elasticsearch -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200 -d elasticsearch
docker logs elasticsearch
curl http://localhost:9200
部署logstash

创建logstash配置文件

mkdir -p /docker/config/logstash/
vim /docker/config/logstash/logstash.conf

在/docker/config/logstash/目录下创建配置文件logstash.conf,内容如下:

input {
     beats {
         port => 5044
         type => beats
     }
}

output {
     elasticsearch {
         hosts => ["elasticsearch:9200"]
     }
}

启动logstash容器

docker run --name logstash --link elasticsearch:elasticsearch -p 5044:5044 -d -v /docker/config/logstash:/config-dir logstash -f /config-dir/logstash.conf
docker logs logstash
部署nginx应用
docker run -e TZ="Asia/Shanghai" -d -p 80:80 -v "$PWD/logs":/var/log/nginx --name nginx nginx
部署filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
rpm -ivh filebeat-7.4.2-x86_64.rpm
vim /etc/filebeat/filebeat.yml
grep -Ev '#|^

# 修改 filebeat.inputs中的enable为true,paths改为——root/logs/*.log
# output.logstash中hosts:["localhost:5044"]

启动filebeat服务

systemctl restart filebeat
systemctl enable filebeat
部署kibana
docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana
docker ps -a

访问kibana http://[ECS公网地址]:5601/ ,创建Index pattern,Discover查看采集到的日志信息。

基于Docker搭建Zabbix

下载实验需要的镜像

docker pull mysql:5.7
docker pull zabbix/zabbix-server-mysql:centos-latest
docker pull zabbix/zabbix-web-nginx-mysql:latest
docker pull zabbix/zabbix-java-gateway:latest
docker images
部署Zabbbix

创建Docker网络

docker network create -d bridge zabbix
docker network ls

启动mysql容器

docker run -dit -p 3306:3306 --name zabbix-mysql --network zabbix -v /etc/localtime:/etc/localtime --restart always  -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix-password" -e MYSQL_ROOT_PASSWORD="root-password" mysql:5.7
docker run -dit -p 10051:10051 --mount source=zabbix-server-vol,target=/etc/zabbix -v /etc/localtime:/etc/localtime --name=zabbix-server --restart=always --network zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e  MYSQL_PASSWORD="zabbix-password" -e MYSQL_ROOT_PASSWORD="root-password" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" zabbix/zabbix-server-mysql:centos-latest
docker run -dit -p 8080:8080 -v /etc/localtime:/etc/localtime --name zabbix-web --restart=always --network zabbix -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix-password" -e  MYSQL_ROOT_PASSWORD="root-password" -e ZBX_SERVER_HOST="zabbix-server" zabbix/zabbix-web-nginx-mysql:latest

部署高可用架构

基于四台配置了CentOS 7.7版本的ECS实例、一个负载均衡SLB实例一个云数据库RDS MySQL弹性公网IP和数据传输服务( RDS+DTS数据传输+EIP ) 部署多可用区高可用架构。

配置SLB实例(用于跨可用区挂载多个ECS实例)

访问弹性公网IP控制台——>选择

https://vpc.console.aliyun.com/eip/

绑定弹性公网IP至SLB实例

弹性公网IP页面,找到您的弹性公网实例,单击操作列下的绑定资源实例类型选择负载均衡SLB实例,在选择要绑定的实例区域中,选择您的负载均衡SLB实例,单击确定。

等待IP状态变为已分配,表示您已成功将弹性公网IP至您的SLB实例。

配置SLB实例

访问负载均衡管理控制台

https://slbnew.console.aliyun.com/slb/overview

选择传统型负载均衡CLB(原SLB)>实例管理。找到您的负载均衡SLB实例,单击点我开始配置

协议&监听页签,负载均衡协议选择HTTP,监听端口输入80,在高级配置右侧单击修改调度算法选择轮询(RR),其他配置使用默认值,单击下一步后端服务器页签,选择默认服务器组,单击继续添加。在我的服务器面板的选择服务器中,选择您的所有ECS实例,单击下一步。在我的服务器面板的配置端口和权重中,保持默认配置,单击添加。在后端服务器页签中,配置所有服务器的端口为80,单击下一步健康检查页签、配置审核页签保持默认配置。负载均衡业务配置向导对话框中, 等待配置成功。

当健康检查状态为正常时,表示后端ECS实例已经可以正常处理负载均衡转发的请求。在FireFox浏览器打开新页签,访问http://<弹性公网的IP地址>。多次刷新页面,由于调度算法为轮询,可看到请求会轮流发往每台ECS实例,表示SLB已经配置成功。随意选中ECS实例停止,刷新http://<弹性公网的IP地址> 可看到请求会轮流发往实例状态正常的ECS实例。可以反应出当服务器ECS 宕机时,整体业务场景不会受到影响。

迁移自建数据库至RDS实例

使用数据传输服务将ECS实例上的自建MySQL数据库迁移至RDS实例。

ECS上自建的MySQL数据库

使用root用户登录数据库,例子为MySQL 5.7.36

mysql -uroot -p12345678

修改密码安全策略为低,只校验密码长度,至少8位

set global validate_password_policy=0;

为名为 bakery数据库创建用户 dts。示例创建的用户为dts,密码为12345678。

grant all on *.*  to 'dts'@'%'  IDENTIFIED BY '12345678';
FLUSH PRIVILEGES;
mysql -udts -p12345678

测试例子数据库bakery中有customer表和product表和相应的数据。

为RDS实例创建账号和数据

访问RDS管理控制台

https://rdsnext.console.aliyun.com/

单击实例列表,找到RDS实例,单击实例ID,左侧,单击账号管理创建账号。例如数据库账号输入lab_user,账号类型选择普通账号,密码输入Passw0rd。数据库管理,创建数据库,例如数据库(DB)名称输入lab_db,授权账号选择lab_user(普通账号),单击创建。回到账号管理页面进行数据库的授权,修改权限进行授权。

使用数据传输服务DTS将ECS实例上自建数据库迁移至RDS实例

访问数据传输控制台

https://dts.console.aliyun.com/

左侧控制台,单击数据迁移,数据迁移页面,迁移任务列表选择地区,然后单击配置迁移任务

源库及目标库页签的源库信息区域中,配置如下参数信息,单击测试连接

源库参数说明:

  • 任务名称:自定义设置数据传输DTS任务名称
  • 实例类型:选择ECS上的自建数据库
  • 实例地区:选择云服务器ECS实例所在地域
  • ECS实例ID:选择云服务器ECS-1实例ID
  • 数据库类型:选择MySQL
  • 端口:输入3306
  • 数据库账号:输入dts
  • 数据库密码:输入12345678

目标库参数说明:

  • 实例类型:选择RDS实例
  • 实例地区:选择您的RDS实例所在地域
  • RDS实例ID:选择您的RDS实例ID
  • 数据库账号:输入lab_user
  • 数据库密码:输入Passw0rd

DTS服务器访问授权对话框中,单击下一步迁移类型及列表页签,在迁移对象中单击例如bakery数据库,单击向右 图标,当选择对象中出现bakery数据库后,然后单击预检查并启动。在预检查对话框中,单击下一步

回到数据迁移页面,迁移任务列表选择地域,单击刷新。等待3-4分钟,迁移任务状态变为已成功,表示数据迁移完成。

验证RDS实例

切换至RDS管理控制台页签,单击登录数据库。数据库账号输入lab_user,数据库密码输入Passw0rd,单击测试连接,可以看到例如customer和product两张表,表示ECS实例上的自建数据库的数据已成功迁移至RDS实例。