从零开始部署linux应用服务器

一、服务器分区

挂载数据盘

1. 查看数据盘信息
登录CentOS云服务器后,可以使用“fdisk -l”命令查看数据盘相关信息。
使用“df –h”命令,无法看到未分区和格式化的数据盘。

2.数据盘分区
执行以下命令,对数据盘进行分区。
fdisk /dev/xvdb
按照界面的提示,依次输入“n”(新建分区)、“p”(新建扩展分区)、“1”(使用第1个主分区),两次回车(使用默认配置),输入“wq”(保存分区表),开始分区。
这里是以创建1个分区为例,用户也可以根据自己的需求创建多个分区。

3. 查看新分区
使用“fdisk -l”命令,即可查看到,新的分区xvdb1已经创建完成。

4. 格式化新分区
在进行分区格式化时,用户可以自行决定文件系统的格式,如ext2、ext3等。
这里以“ext3”为例:
使用下面的命令对新分区进行格式化。
mkfs.ext3 /dev/xvdb1

5. 挂载新分区
使用命令“mkdir /mydata”创建mydata目录,再通过“mount /dev/xvdb1 /mydata”命令手动挂载新分区后,用“df -h”命令查看,出现以下信息说明挂载成功,即可以查看到数据盘了。

6. 添加分区信息
如果希望云服务器在重启或开机时能自动挂载数据盘,必须将分区信息添加到/etc/fstab中。如果没有添加,则云服务器重启或开机后,都不能自动挂载数据盘。
用vim进去加,添加分区信息后,使用“cat /etc/fstab”命令查看,出现以下信息表示添加分区信息成功。
记录安装docker   vdb1:
fdisk /dev/vdb
  661  fdisk -l
  662  mkfs.ext3 /dev/vdb1
  663  mkdir /pd_data1
  664  mount /dev/vdb1 /pd_data1

二、安装docker

1.安装rzsz命令
yum -y install lrzsz

2.安装docker依赖环境
yum install -y yum-utils device-mapper-persistent-data lvm2

3.配置国内docker-ce的yum源(这里采用的是阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.看一下有没有配置成功
cd /etc/yum.repos.d
ls
[root@VM-8-12-centos yum.repos.d]# ll
total 24
-rw-r--r-- 1 root root  614 Jun  7 17:20 CentOS-Base.repo
-rw-r--r-- 1 root root  230 Jun  7 17:20 CentOS-Epel.repo
-rw-r--r-- 1 root root  616 Nov 23  2020 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 2081 Aug 28 17:43 docker-ce.repo
-rw-r--r-- 1 root root 1358 Sep  5  2021 epel.repo
-rw-r--r-- 1 root root 1457 Sep  5  2021 epel-testing.repo

5.安装docker
yum -y install docker-ce doker-ce-cli containerd.io

6.安装完成
docker version

7.使用软连接的方式移动docker到其他地方
mv /var/lib/docker /opt/docker

8.加载镜像加速站点:
systemctl daemon-reload

9.启动docker并且设置开机启动
systemctl enable docker && systemctl start docker

10.将docker安装目录移动到/opt/docker

11.创建软连接
ln -s /opt/docker /var/lib/docker

12.最后启动docker
systemctl restart docker

13查看/var/lib/docker目录大小,大小为260kb
#进入目录
cd /var/lib/docker
#查看当前目录大小,260kb
du -sh

三、安装redis(推荐docker)

a.源码安装

1、在Redis版本库:https://download.redis.io/releases/ 可根据自己的需求选择下载对应的版本,然后直接下载
这次用的是redis 6.0.0

2.传到了/opt,解压在/opt/redis-6.0.0

3.yum -y install gcc安装gcc编译器,这玩意是c语言写的,但是默认是4.8版本,要升级到9版本才能编译通过

4.安装下面依赖
sudo yum install centos-release-scl
---注意,如果想安装7.*版本的,就改成devtoolset-7-gcc*,以此类推

5.sudo yum install devtoolset-9-gcc*
激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-9 bash

6.查看一下gcc版本
gcc -v

7.进入redis-6.0.0,然后输入:make
然后进入到redis目录,进入redis-6.0.0,然后输入:make,控制台会输出一编译的信息

8.make install
编译成功后,输入:make install   ,自此redis就安装成功了。
安装完成后,会输出INSTALL install蓝色的显示。

9.vim redis.conf
# ip设置为0.0.0.0
bind 0.0.0.0
//设置密码
# requirepass foobared
requirepass xxx
//允许后台静默运行
#daemonize no
daemonize yes
//开启远程访问
protected-mode no

10.创建redis命令软连接
//进入etc目录
cd /etc
//创建redis目录
mkdir redis
//拷贝redis.conf文件并命名为6379.conf存储到刚才创建的redis目录下
cp /opt/redis-6.0.0/redis.conf /etc/redis/6379.conf

11.//新建redis-server.service文件
# 添加systemctl服务
vim /etc/systemd/system/redis-server.service

//redis-server文件添加一下内容
[Unit]
Description=Redis 6379
After=syslog.target network.target
[Service]
Type=forking
PrivateTmp=yes
Restart=always
ExecStart=/opt/redis/src/redis-server /etc/redis/6379.conf
ExecStop=/opt/redis/src/redis-cli -h 127.0.0.1 -p 6379 -a jcon shutdown
User=root
Group=root
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000
[Install]
WantedBy=multi-user.target

12.//重新加载redis服务配置文件
systemctl daemon-reload
//启动redis-server
systemctl start redis-server.service
//加入开机启动
systemctl enable redis-server
//查看服务是否启动成功
systemctl status redis-server
ps -aux|grep redis

13.基础命令
systemctl status redis-server
systemctl stop redis-server
systemctl start redis-server
netstat -na | grep 6379
ps -ef|grep redis

b.docker安装 

1.下载好redis镜像
docker pull redis
mkdir -p /opt/redis/data

2.创建测试容器,把redis的内容复制出来
docker run -d redis:latest
docker cp /etc/redis/redis.conf /opt/redis

3.vim redis.conf
# ip设置为0.0.0.0
bind 0.0.0.0
//设置密码
# requirepass foobared
requirepass xxx
//允许后台静默运行
#daemonize no
daemonize yes
//开启远程访问
protected-mode no

4.运行docker
docker run --restart=always -p 6379:6379 --name redis --privileged=true \
-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis/data:/data -d redis:latest

四、mysql安装(推荐源码)

mysql
1.首先官网下载安装包:https://downloads.mysql.com/archives/community/
选择8.0.33,Linux - Generic,Linux - Generic (glibc 2.12) (x86, 64-bit)

2.cd /opt  
tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

3.mv mysql-8.0.33-linux-glibc2.12-x86_64 /opt移动到放mysql的地方

4.创建mysql用户组和用户并修改权限
groupadd mysql
useradd -r -g mysql mysql

5.创建目录并赋予权限
mkdir -p  /opt/mysql/data            #创建mysql存放data的数据目录
chown mysql:mysql -R /opt/mysql/data/mysql   #赋予权限

6.vim /etc/my.cnf
(修改这个文件必须把mysql先关掉systemctl stop mysql,关掉后看下进程是否关掉,确定全部关掉后才可以编辑这个文件并保存,否则出出现很多问题:如mysql.pid丢失)

[mysqld]
server-id = 1
bind-address=0.0.0.0
port=3307
user=mysql
basedir=/opt/mysql/mysql_install/
datadir=/opt/mysql/data/
socket=/opt/mysql/data/mysql.sock
log-error=/opt/mysql/data/mysql.err
pid-file=/opt/mysql/data/mysql.pid
symbolic-links=0
explicit_defaults_for_timestamp=true

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

#最大连接数
max_connections = 400

#最大错误连接数
max_connect_errors = 1000

#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800

#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log

#检查未使用到索引的sql
log_queries_not_using_indexes = 1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes = 5

#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 8

#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100

[client]
default-character-set=utf8
socket=/opt/mysql/data/mysql.sock

[mysql]
default-character-set=utf8
socket=/opt/mysql/data/mysql.sock

7.初始化数据库进入bin目录下
cd /opt/mysql/mysql/bin/
初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql/mysql_install/ --datadir=/opt/mysql/data/ --user=mysql --initialize

查看密码
cat /opt/mysql/data/mysql.err
o;wfIdaK?5&Y

8.先将mysql.server放置到/etc/init.d/mysql中
cp /opt/mysql/mysql_install/support-files/mysql.server /etc/init.d/mysql

9.启动
service mysql start
ps -ef|grep mysql

10.修改默认密码
./mysql -u root -p   #bin目录下
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;

查询用户
select host,user from mysql.user;

11.配置远程连接
use mysql;
update user set host='%' where user='root';
flush privileges;

12. 查看安装路径和安装环境是否正常!
whereis mysql;
whereis mysqldump;

如果少了,或者没有需要手动配置一下
vi /etc/profile
在最后添加一行
export PATH=$PATH:/opt/mysql/mysql_install/bin

source /etc/profile

13.mysql自动启动

方式一

将服务文件拷贝到init.d下,并重命名为mysql
cp /opt/mysql/mysql_install/support-files/mysql.server /etc/init.d/mysql
赋予可执行权限
chmod +x /etc/init.d/mysql
添加服务
chkconfig --add mysql
显示服务列表
chkconfig --list
如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则键入
chkconfig --level 345 mysql on
重启
reboot

方式二

添加systemctl服务
vim /etc/systemd/system/mysql.service

[Unit]
Description=MySQL Server
After=network.target
[Service]
ExecStart=/opt/mysql/mysql_install/bin/mysqld_safe --defaults-file=/etc/my.cnf --datadir=/opt/mysql/data/ --socket=/opt/mysql/data/mysql.sock
User=mysql
Group=mysql
Restart=always
[Install]
WantedBy=multi-user.target

设置文件权限
chmod 644 /etc/systemd/system/mysql.service
chown root:root /etc/systemd/system/mysql.service

重新加载systemd配置
systemctl daemon-reload

启动
systemctl start mysql

验证MySQL服务状态
systemctl status mysql

还要确保设置了环境变量
vim /etc/profile
在文件最后添加:
export PATH=$PATH:/opt/mysql/mysql_install/bin

生效配置
source /etc/profile

14.验证
netstat -na | grep 3307
如果看到有监听说明服务启动了
或者用ps -ef|grep mysql 或者 systemctl status mysql

15.基本命令
systemctl status mysql
systemctl stop mysql
systemctl start mysql
netstat -na | grep 3307
ps -ef |grep mysql

五、nginx安装(推荐docker)

1.docker pull nginx

2.启动docker下的nginx,使用挂载路径
测试:docker run  --name nginx -p 28888:80 -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx  -d --restart=always nginx:latest

3.配置https

带证书的https
user  root;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {

server {
 #SSL 默认访问端口号为 443
 listen 443 ssl;
 #请填写绑定证书的域名
 server_name zs.zs.zs.zs; 
 #请填写证书文件的相对路径或绝对路径
 ssl_certificate  zs.zs.zs.zs_bundle.crt; 
 #请填写私钥文件的相对路径或绝对路径
 ssl_certificate_key zs.zs.zs.zs.cn.key;;
 ssl_session_timeout 5m;
 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 #请按照以下协议配置
 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_prefer_server_ciphers on;
 location / {
   proxy_pass http://xxxxxxxxx;
   root html;
   index index.html index.htm;
 }
 location ~ .* {
     proxy_redirect off;
     proxy_pass http://xxxxxxx;
     proxy_set_header Host $http_host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forw $proxy_add_x_forwarded_for;
     proxy_set_header Upgrade-Insecure-Requests 1;
     proxy_set_header X-Forwarded-Proto https;
  }
}
   server {
    listen 80;
    #请填写绑定证书的域名
    server_name zs.zs.zs.zs; 
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
   }
}


4.nginx配置优化

以下是Nginx配置优化的一些方法和步骤:

调整worker_processes参数:worker_processes参数指定了Nginx使用的进程数,可以根据服务器的CPU核心数进行调整。通常建议将worker_processes设置为CPU核心数的2倍。

调整worker_connections参数:worker_connections参数指定了每个worker进程可以同时处理的最大连接数。可以根据服务器的硬件配置和预期的并发连接数进行调整。通常建议将worker_connections设置为1024或更高。

启用keepalive连接:keepalive连接可以减少TCP连接的建立和关闭次数,从而提高性能。可以通过在Nginx配置文件中设置keepalive_timeout参数来启用keepalive连接。

启用gzip压缩:启用gzip压缩可以减少传输数据的大小,从而提高性能。可以通过在Nginx配置文件中设置gzip参数来启用gzip压缩。

启用缓存:启用缓存可以减少对后端服务器的请求次数,从而提高性能。可以通过在Nginx配置文件中设置proxy_cache_path参数来启用缓存。

调整日志级别:将日志级别设置为warn或error可以减少日志的数量,从而提高性能。可以通过在Nginx配置文件中设置error_log参数来调整日志级别。

调整TCP参数:可以通过在Nginx配置文件中设置tcp参数来调整TCP参数,例如调整TCP连接超时时间、TCP缓冲区大小等。

使用SSL加密:使用SSL加密可以保护数据的安全性,但会增加服务器的负载。可以通过在Nginx配置文件中设置ssl参数来启用SSL加密。

nginx
# 示例Nginx配置文件
worker_processes 4;
worker_connections 1024;

http {
    keepalive_timeout 30s;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

    tcp_nodelay on;
    tcp_nopush on;
    sendfile on;
    sendfile_max_chunk 512k;

    server {
        listen 80;
        server_name example.com;
        access_log /var/log/nginx/access.log;

        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_valid 200 60m;
            proxy_cache_valid 404 1m;
            proxy_cache_bypass $http_pragma;
            proxy_cache_revalidate on;
            proxy_cache_lock on;
            proxy_cache_key "$scheme$request_method$host$request_uri";
        }
    }

    server {
        listen 443 ssl;
        server_name example.com;
        access_log /var/log/nginx/access.log;

        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;

        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_valid 200 60m;
            proxy_cache_valid 404 1m;
            proxy_cache_bypass $http_pragma;
            proxy_cache_revalidate on;
            proxy_cache_lock on;
            proxy_cache_key "$scheme$request_method$host$request_uri";
        }
    }
}

六、Linux配置ntp时间同步

1.安装ntp服务
首先查看以下系统中是否安装了ntp服务,centos7应该是默认安装了:

rpm -qa | grep ntp

如果未安装,使用以下命令安装:

yum -y install ntp

# 查看服务状态
service ntpd status

# 启动ntpd服务
systemctl start ntpd.service

# 停止ntpd服务
systemctl stop ntpd.service

# 设置开机自启动
systemctl enable ntpd.service

# 停止开机自启动
systemctl disable ntpd.service

# 查看服务当前状态
systemctl status ntpd.service

# 重新启动服务
systemctl restart ntpd.service

# 查看所有已启动的服务
systemctl list-units --type=service

2.修改配置文件
安装完成后,会在/etc/目录下生成配置文件ntp.conf

3.配置内网NTP-Server(192.168.1.1)

配置NTPD服务的服务器需要能访问外网,这里挑选了一台可以访问外网的Linux服务器配置内网的NTPD服务,作为NTP-Server,其他几台内网通过它来进行时间同步。

4.这里假设其IP为192.168.1.90,其他几台内网的服务器IP分别为192.168.1.41。

5.在配置NTPD服务之前,先手动同步一下时间。注意,使用ntpdate同步前需要关闭ntpd服务,不然会失败。
systemctl stop ntpd.service
ntpdate cn.pool.ntp.org

6.配置NTP服务为自启动,重新启动
systemctl enable ntpd.service
systemctl start ntpd.service

7.修改NTPD服务的配置文件/etc/ntp.conf

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift
#pidfile    /var/run/ntpd.pid
#logfile    /var/log/ntp.log
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
#restrict default nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#local clock
#外部时间服务器不可用时,以本地时间作为时间服务
server 127.0.0.1
Fudge  127.0.0.1 stratum 10
#中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
server 210.72.145.44 perfer      # 中国国家受时中心
server 202.112.10.36             # 1.cn.pool.ntp.org
server 59.124.196.83             # 0.asia.pool.ntp.org
#broadcast 192.168.1.255 autokey        # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 autokey            # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 autokey # manycast client

# Enable public key cryptography.
#crypto

includefile /etc/ntp/crypto/pw

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys

# Specify the key identifiers which are trusted.
#trustedkey 4 8 42

# Specify the key identifier to use with the ntpdc utility.
#requestkey 8

# Specify the key identifier to use with the ntpq utility.
#controlkey 8

# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats

# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor

8.配置文件修改完成,保存退出,重启服务。
sudo service ntpd restart

9.启动后,一般需要5-10分钟左右的时候才能与外部时间服务器开始同步时间。可以通过命令查询NTPD服务情况。
[root@server-8ba72fa7-dbb8-4455-818d-600b01c79b8d ~]# netstat -tlunp | grep ntp
udp        0      0 172.17.0.1:123          0.0.0.0:*                           56528/ntpd
udp        0      0 192.168.1.90:123        0.0.0.0:*                           56528/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           56528/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           56528/ntpd
udp6       0      0 fe80::f816:3eff:fec:123 :::*                                56528/ntpd
udp6       0      0 ::1:123                 :::*                                56528/ntpd
udp6       0      0 :::123                  :::*                                56528/ntpd

10.启动后,可通过 ntpstat 命令查看时间同步状态。
[root@server-8ba72fa7-dbb8-4455-818d-600b01c79b8d ~]# ntpstat
unsynchronised
  time server re-starting
   polling server every 8 s

11.配置内网NTP-Clients
ntp同步形式
内网其他设备作为NTP的客户端配置,通过上面配置的时间同步服务器同步时间。

12.首先需要安装NTPD服务,然后配置为自启动(与NTP-Server完全一样),然后找其中一台配置/etc/ntp.conf文件,配置完成验证通过后,拷贝到其他客户端机器,直接使用即可。

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict    default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.0.0.1
Fudge  127.0.0.1 stratum 10
#中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
#server 210.72.145.44 perfer      # 中国国家受时中心
#server 202.112.10.36             # 1.cn.pool.ntp.org
#server 59.124.196.83             # 0.asia.pool.ntp.org
# 配置时间服务器为本地的时间服务器
server 192.168.1.90
#broadcast 192.168.1.255 autokey        # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 autokey            # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 autokey # manycast client

# Enable public key cryptography.
#crypto

includefile /etc/ntp/crypto/pw

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys

# Specify the key identifiers which are trusted.
#trustedkey 4 8 42

# Specify the key identifier to use with the ntpdc utility.
#requestkey 8

# Specify the key identifier to use with the ntpq utility.
#controlkey 8

# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats

# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor

13.保存退出,请求服务器前,先使用ntpdate手动同步下时间:
systemctl stop ntpd.service
ntpdate -u 192.168.1.90

14.这里有可能出现同步失败,一般情况下原因都是本地的NTPD服务器还没有正常启动起来,一般需要几分钟时间后才能开始同步。

手动同步成功后,启动服务:

systemctl start ntpd.service

15.ntpdate设置计划任务同步时间
停止ntpd服务,如果不停止,使用ntpdate同步会报错:the NTP socket is in use, exiting。

systemctl stop ntpd.service

16.查找命令的绝对路径(计划任务中需要)

[root@xxx ~]# which ntpdate
/usr/sbin/ntpdate

17.添加计划任务

sudo crontab -e

# sync time
0-59/10 * * * * /usr/sbin/ntpdate 192.168.1.1

说明:每10分钟从192.168.1.90这台时间服务器同步一次时间

18.查看计划任务

sudo crontab -l

七、Linux配置SCP免密码传输文件

1.创建SSH信任机制
主机A要想通过无密码的SCP方式将文件传输到主机B,主机A得先获得主机B的信任。所谓信任机制可以这样抽象的理解,主机A将自己的某一个证件放到主机B那儿,当有一个请求发到主机B的时候,主机B用这个证件来判断是不是主机A,如果是主机A,则可以直接传输文件,否则要求输入密码才能传输。而这个证件就是主机A上的公钥。
获取A的公钥:

cd /root/.ssh/

ssh-keygen  -t  rsa 

2.这一步要输入三个参数

存储公私钥的文件夹位置,默认为/root/.ssh/,文件名默认是id_rsa和id_rsa.pub
使用该公私钥时是否需要密码,默认不需要密码
再次确认是否需要密码
推荐一路回车,选择默认即可
执行完毕后,看一下,多了两个文件id_rsa和id_rsa.pub。接下来只需要将id_rsa.pub中的内容复制到主机B中的authorized_keys文件中。
cat id_rsa.pub >authorized_keys2

3.使用scp将authorized_keys2传输到主机B的/root/.ssh/ 目录下,如果主机B存在authorized_keys文件,则追加到authorized_keys里面
cat authorized_keys2 >>authorized_keys

否则直接创建
cat authorized_keys2 >authorized_keys

八、mysql异地备份shell+异地备份文件定时清理

mysql备份

#!/bin/bash

#数据库备份路径
BACKUP=/MYSQL_BACKUP

#当前时间
DATETIME=$(date +%Y-%m-%d)

#数据库名称
DATABASE=dream_db

#数据库地址
HOST=192.168.1.1

#数据库用户名
DB_USER=root

#文件数量3
NUM_THREE=3

#文件数量10
NUM_TEN=10

echo "===数据库备份开始===" 

#创建备份目录
[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql"

#开始备份
echo "===开始导出sql文件==="
mysqldump --socket=/data/mysql.sock -h localhost   -u${DB_USER}  ${DATABASE} >${BACKUP}/$DATETIME/$DATABASE-$DATETIME.sql
if [ $? -ne 0 ]; then
    echo "$DATETIME:sql导出报错,退出脚本!"
    exit
else
    echo "$DATETIME:导出成功,开始整包压缩。"
fi

#压缩成tar.gz包
cd $BACKUP
tar -cf - $DATETIME | pv -s $(du -sb $DATETIME | awk '{print $1}') | gzip > $DATETIME.tar.gz
if [ $? -ne 0 ]; then
    echo "$DATETIME:压缩报错,退出脚本!"
    exit
else
    echo "$DATETIME:压缩成功,删除备份文件夹。"
fi

#删除备份目录
rm -rf ${BACKUP}/$DATETIME
if [ $? -ne 0 ]; then
    echo "$DATETIME:删除报错,退出脚本!"
    exit
else
    echo "$DATETIME:删除备份文件夹成功,开始传输到异地服务器。"
fi

#备份到服务器
scp $DATETIME.tar.gz [email protected]:/MYSQL_BACKUP
if [ $? -ne 0 ]; then
    echo "$DATETIME:传输失败,退出脚本!"
    exit
else
    echo "$DATETIME:传输成功,成功备份db文件。"
fi

echo "===巡检清理备份数据==="

#数据库:删除10天(不含)前备份的数据
echo "===过期文件如下==="
find $BACKUP -mtime +9 -name "*.tar.gz" -print | wc -l
find $BACKUP -mtime +9 -name "*.tar.gz" -exec rm -rf {} \;
echo "===清理完成==="
2.建立crontab定时任务
输入crontab -e,开始编辑定时任务
#输入以下代码 表示每天23:59自动执行代码
30 1 * * * /MYSQL_BACKUP/mysql_backup.sh
输入:wq 保存退出

九、dockerfile创建JDK1.8+TOMCAT8.5镜像

docker制作JDK1.8+TOMCAT8.5镜像

1.基础镜像拉取
docker pull ubuntu:16.04

2.拉取成功后执行docker images 查看镜像列表
docker images

3.创建工作目录
mkdir -p  /opt/docker/biuld/tomcat8

4.进入工作目录
cd /opt/docker/biuld/tomcat8

5.将jdk和tomcat安装包放入tomcat8目录下

6.编写Dockerfile
Dockerfile内容

FROM ubuntu:16.04 
MAINTAINER HEJJ

#上传
ADD apache-tomcat-8.5.56.tar.gz /opt/tomcat
ADD jdk-8u11-linux-x64.tar.gz /opt/jdk
COPY /run.sh /root/run.sh
RUN  chmod 777 /root/run.sh

#环境变量
ENV JAVA_HOME=/opt/jdk/jdk1.8.0_11/jre
ENV PATH=:$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

ENTRYPOINT ["/root/run.sh"]

7.编写run.sh启动脚本
#!/bin/bash
#sh /opt/tomcat/apache-tomcat-8.5.56/bin/catalina.sh run
sh /opt/tomcat/apache-tomcat-8.5.56/bin/startup.sh
tail -f /opt/tomcat/apache-tomcat-8.5.56/logs/catalina.out

8.生成镜像
docker build -t tomcat_web:1.0 .

9.启动做好的镜像,挂载logs\conf\webapps

10.记录镜像导出
docker save -o tomcat_web.tar tomcat_web:1.0

会导出在当前所在目录

11.记录镜像导入
docker load -i tomcat_web:1.0.tar
会从当前目录导入

十、docker内日志安装及切割

1.创建脚本
vim docker-entrypoint.sh

2.内容如下
#!/bin/bash
set -x
#/etc/init.d/cron start用于启动crontab服务,但这样启动的crontab服务中配置的定时命令是没有Dockerfile中设置的环境变量的。
#因此还需要在这之前执行env >> /etc/default/locale,这样有Dockerfile中通过ENV设置的环境变量在crontab中就可以正常读取了。
# 保存环境变量,开启crontab服务
env >> /etc/default/locale
/etc/init.d/cron start

3.建立crontab定时任务
输入crontab -e,开始编辑定时任务
#输入以下代码 表示每天23:59自动执行代码
0 1 * * * /opt/docker-entrypoint.sh
输入:wq 保存退出

十一、tomcat日志切割

1.创建cut_log.sh

#!/bin/bash
echo "----------$(date "+%Y-%m-%d %H:%M:%S")/tomcat日志清理-----------"

#获取当前日期
DATE=`date +%Y-%m-%d`
#获取一天前的日期
DATE1=`date -d '1 days ago' +%Y-%m-%d`
#获取三天前的日期
DATE3=`date -d '3 days ago' +%Y-%m-%d`
#获取七天前的日期
DATE7=`date -d '7 days ago' +%Y-%m-%d`

#设置变量存路径
log_dir=/opt/tomcat_mount/logs
monitor_file=catalina.out

#进入logs所在目录
cd $log_dir

#判断日志备份文件夹是否存在
if [ -L $log_dir/logs_backup ] 
then 
    echo "The logs_backup exist"
else
    echo "The logs_backup doesn't exist"
    #创建日志备份文件夹
    mkdir logs_backup
    #赋权限
    chmod 777 logs_backup
fi
#判断结束

#把日志复制以当天日期命名的文件
cp catalina.out catalina.out.${DATE}
#清空容器输出的日志文件
echo "" > catalina.out

#移动到日志备份文件夹
mv catalina.out.${DATE} ./logs_backup

#其他文件处理,把前一天的移动到到备份文件夹
mv catalina.${DATE1}.log logs_backup
mv host-manager.${DATE1}.log logs_backup
mv localhost.${DATE1}.log logs_backup
mv localhost_access_log.${DATE1}.txt logs_backup
mv manager.${DATE1}.log logs_backup

#移动到日志备份文件夹清理过期文件(暂时不清理)
# cd $log_dir/logs_backup
# rm -rf catalina.out.${DATE7}
# rm -rf catalina.${DATE3}.log
# rm -rf host-manager.${DATE3}.log
# rm -rf localhost.${DATE3}.log
# rm -rf localhost_access_log.${DATE3}.txt
# rm -rf manager.${DATE3}.log

echo "----------$(date "+%Y-%m-%d %H:%M:%S")/tomcat日志清理完成-----------"

2.建立crontab定时任务
输入crontab -e,开始编辑定时任务
#输入以下代码 表示每天23:59自动执行代码
0 1 * * * /opt/cut_log.sh
输入:wq 保存退出

你可能感兴趣的:(docker使用,docker,redis,nginx,mysql,linux,运维,容器)