首页
归档
时光轴
推荐
Cloud
图床
导航
Search
1
Deploy OpenStack offline based on Kolla
742 阅读
2
openstact 基础环境安装 (手动版)
689 阅读
3
Mariadb 主从复制&读写分离
650 阅读
4
Typecho 1.2.0 部署
643 阅读
5
FusionCompute8.0 体验
575 阅读
Python
Linux
随笔
mysql
openstack
Search
标签搜索
linux
Pike
python
爬虫
openstack
mysql
Essay
Ansible
docker
Zabbix
kolla
Internet
Redis
1+X
Hyper-V
jenkins
Kickstart
自动化
sh
pxe
Acha
累计撰写
77
篇文章
累计收到
1
条评论
首页
栏目
Python
Linux
随笔
mysql
openstack
页面
归档
时光轴
推荐
Cloud
图床
导航
搜索到
7
篇与
的结果
2023-07-26
安装 Arch Linux
Arch Linux 1、获取镜像 http://mirrors.163.com/archlinux/iso/latest/ 2、安装前的准备 准备安装介质 启动到 Live 环境 验证引导模式 连接到互联网 更新系统时间 硬盘分区 格式化分区 挂载分区 # 验证引导模式 root@archiso ~ # [ -d /sys/firmware/efi/efivars/ ] && echo "Uefi" || echo "Bios" Uefi 磁盘 Uefi 磁盘分区选 GPT Bios 磁盘分区选 MBR grub 引导 # 获取 IP root@archiso ~ # ip addr | awk '/inet / {print $2}' | grep -v "127.0.0.1/8" 10.52.17.32/24 root@archiso ~ # ping www.baidu.com -c 2 PING www.a.shifen.com (36.152.44.96) 56(84) bytes of data. 64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=1 ttl=57 time=6.32 ms 64 bytes from 36.152.44.96 (36.152.44.96): icmp_seq=2 ttl=57 time=6.75 ms --- www.a.shifen.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 5135ms rtt min/avg/max/mdev = 6.319/6.532/6.745/0.213 ms root@archiso ~ # timedatectl set-timezone Asia/Shanghai root@archiso ~ # timedatectl status Local time: Tue 2023-04-04 13:16:06 CST Universal time: Tue 2023-04-04 05:16:06 UTC RTC time: Tue 2023-04-04 05:16:06 Time zone: Asia/Shanghai (CST, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: no {collapse} {collapse-item label="分区" close} root@archiso ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 687.9M 1 loop /run/archiso/airootfs sda 8:0 0 149.1G 0 disk ├─sda1 8:1 0 149G 0 part │ └─ventoy 254:0 0 809.3M 1 dm └─sda2 8:2 0 32M 0 part mmcblk0 179:0 0 115.3G 0 disk ├─mmcblk0p1 179:1 0 500M 0 part ├─mmcblk0p2 179:2 0 2G 0 part └─mmcblk0p3 179:3 0 112.8G 0 part mmcblk0boot0 179:8 0 4M 1 disk mmcblk0boot1 179:16 0 4M 1 disk root@archiso ~ # fdisk /dev/mmcblk0 Welcome to fdisk (util-linux 2.38.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/mmcblk0: 115.25 GiB, 123748745216 bytes, 241696768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4746e965 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 1026047 1024000 500M ef EFI (FAT-12/16/32) /dev/mmcblk0p2 1026048 5220351 4194304 2G 82 Linux swap / Solaris /dev/mmcblk0p3 5220352 241696767 236476416 112.8G 83 Linux Command (m for help): d Partition number (1-3, default 3): Partition 3 has been deleted. Command (m for help): d Partition number (1,2, default 2): Partition 2 has been deleted. Command (m for help): d Selected partition 1 Partition 1 has been deleted. Command (m for help): p Disk /dev/mmcblk0: 115.25 GiB, 123748745216 bytes, 241696768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4746e965 Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-241696767, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-241696767, default 241696767): +1G Created a new partition 1 of type 'Linux' and of size 1 GiB. Partition #1 contains a vfat signature. Do you want to remove the signature? [Y]es/[N]o: y The signature will be removed by a write command. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (2-4, default 2): First sector (2099200-241696767, default 2099200): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-241696767, default 241696767): +2G Created a new partition 2 of type 'Linux' and of size 2 GiB. Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (3,4, default 3): First sector (6293504-241696767, default 6293504): Last sector, +/-sectors or +/-size{K,M,G,T,P} (6293504-241696767, default 241696767): Created a new partition 3 of type 'Linux' and of size 112.2 GiB. Command (m for help): p Disk /dev/mmcblk0: 115.25 GiB, 123748745216 bytes, 241696768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4746e965 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 2099199 2097152 1G 83 Linux /dev/mmcblk0p2 2099200 6293503 4194304 2G 83 Linux /dev/mmcblk0p3 6293504 241696767 235403264 112.2G 83 Linux Filesystem/RAID signature on partition 1 will be wiped. Command (m for help): t Partition number (1-3, default 3): 1 Hex code or alias (type L to list all): L 00 Empty 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 01 FAT12 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 02 XENIX root 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 03 XENIX usr 40 Venix 80286 85 Linux extended c7 Syrinx 04 FAT16 <32M 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 05 Extended 42 SFS 87 NTFS volume set db CP/M / CTOS / . 06 FAT16 4d QNX4.x 88 Linux plaintext de Dell Utility 07 HPFS/NTFS/exFAT 4e QNX4.x 2nd part 8e Linux LVM df BootIt 08 AIX 4f QNX4.x 3rd part 93 Amoeba e1 DOS access 09 AIX bootable 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O 0a OS/2 Boot Manag 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor 0b W95 FAT32 52 CP/M a0 IBM Thinkpad hi ea Linux extended 0c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs 0e W95 FAT16 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT 0f W95 Ext'd (LBA) 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a9 NetBSD f1 SpeedStor 12 Compaq diagnost 61 SpeedStor ab Darwin boot f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary 16 Hidden FAT16 64 Novell Netware b7 BSDI fs f8 EBBR protective 17 Hidden HPFS/NTF 65 Novell Netware b8 BSDI swap fb VMware VMFS 18 AST SmartSleep 70 DiskSecure Mult bb Boot Wizard hid fc VMware VMKCORE 1b Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fd Linux raid auto 1c Hidden W95 FAT3 80 Old Minix be Solaris boot fe LANstep 1e Hidden W95 FAT1 81 Minix / old Lin bf Solaris ff BBT 24 NEC DOS Aliases: linux - 83 swap - 82 extended - 05 uefi - EF raid - FD lvm - 8E linuxex - 85 Hex code or alias (type L to list all): ef Changed type of partition 'Linux' to 'EFI (FAT-12/16/32)'. Command (m for help): t Partition number (1-3, default 3): 2 Hex code or alias (type L to list all): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris'. Command (m for help): p Disk /dev/mmcblk0: 115.25 GiB, 123748745216 bytes, 241696768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4746e965 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 2099199 2097152 1G ef EFI (FAT-12/16/32) /dev/mmcblk0p2 2099200 6293503 4194304 2G 82 Linux swap / Solaris /dev/mmcblk0p3 6293504 241696767 235403264 112.2G 83 Linux Filesystem/RAID signature on partition 1 will be wiped. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@archiso ~ # fdisk -l /dev/mmcblk0 Disk /dev/mmcblk0: 115.25 GiB, 123748745216 bytes, 241696768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4746e965 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 2099199 2097152 1G ef EFI (FAT-12/16/32) /dev/mmcblk0p2 2099200 6293503 4194304 2G 82 Linux swap / Solaris /dev/mmcblk0p3 6293504 241696767 235403264 112.2G 83 Linux root@archiso ~ # mkfs.ext4 /dev/mmcblk0p3 mke2fs 1.47.0 (5-Feb-2023) Discarding device blocks: done Creating filesystem with 29425408 4k blocks and 7356416 inodes Filesystem UUID: c7bfd5b1-7e6b-4ae5-b483-e1b4a2ed2674 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (131072 blocks): done Writing superblocks and filesystem accounting information: done root@archiso ~ # mkswap /dev/mmcblk0p2 Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=5c75e41d-ee5a-4e2f-9346-eafc20ae1b1a root@archiso ~ # mkfs.fat -F 32 /dev/mmcblk0p1 mkfs.fat 4.2 (2021-01-31) {/collapse-item} {/collapse} root@archiso ~ # mount /dev/mmcblk0p3 /mnt root@archiso ~ # mount --mkdir /dev/mmcblk0p1 /mnt/boot/efi root@archiso ~ # swapon /dev/mmcblk0p2 3、安装 配置镜像源 安装软件包 root@archiso ~ # nano /etc/pacman.d/mirrorlist # 第一行添加 Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch root@archiso ~ # pacman -Syy :: Synchronizing package databases... core extra 153.9 KiB 719 KiB/s 00:00 [#########################################] 100% community 1746.2 KiB 13.4 MiB/s 00:00 [#########################################] 100% root@archiso ~ # pacman -S archlinux-keyring root@archiso ~ # pacstrap /mnt base base-devel linux-lts linux-firmware linux-lts-headers pacstrap /mnt base base-devel linux-lts linux-firmware linux-lts-headers 48.63s user 29.30s system 85% cpu 1:31.19 total root@archiso ~ # pacstrap /mnt networkmanager dhcpcd openssh vim git grub efibootmgr intel-ucode man-db man-pages ntfs-3g noto-fonts-cjk noto-fonts-emoji 4、安装后的配置 配置 Fstab Chroot 设置时区 设置区域语言 网络配置 & 主机名 root 密码 安装引导程序 重启 root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab root@archiso ~ # cat /mnt/etc/fstab # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> # /dev/mmcblk0p3 UUID=c7bfd5b1-7e6b-4ae5-b483-e1b4a2ed2674 / ext4 rw,relatime 0 1 # /dev/mmcblk0p1 UUID=4973-14CE /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # /dev/mmcblk0p2 UUID=5c75e41d-ee5a-4e2f-9346-eafc20ae1b1a none swap defaults 0 0 root@archiso ~ # arch-chroot /mnt [root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime [root@archiso /]# date Tue Apr 4 14:00:44 CST 2023 [root@archiso /]# hwclock --systohc [root@archiso /]# vim /etc/locale.gen # 171 en_US.UTF-8 UTF-8 # 496 zh_CN.UTF-8 UTF-8 [root@archiso /]# locale-gen Generating locales... en_US.UTF-8... done zh_CN.UTF-8... done Generation complete. [root@archiso /]# echo "Arch" > /etc/hostname [root@archiso /]# passwd New password: Retype new password: passwd: password updated successfully {tabs} {tabs-pane label="Uefi"} [root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB Installing for x86_64-efi platform. Installation finished. No error reported. [root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg {/tabs-pane} {tabs-pane label="Bios"} [root@archiso /]# grub-install # grub-install --target=i386-pc /dev/sda Installing for x86_64-efi platform. Installation finished. No error reported. [root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg {/tabs-pane} {/tabs} [root@archiso /]# useradd -m acha -G wheel [root@archiso /]# passwd acha New password: Retype new password: passwd: password updated successfully
2023年07月26日
115 阅读
0 评论
0 点赞
2021-07-04
1+X 初级实验
私有云实训 一、本地 YUM 源管理 使用 VMWare 软件启动提供的 xserver1 虚拟机(配置虚拟机 xserver1 的 IP 为 `192.168.100.11`,主机名为 xserver1) 在虚拟机的/root 目录下,存在一个`CentOS-7-x86_64-DVD-1511.iso` 的镜像文件,使用这个镜像文件配置本地 yum 源, 要求将这个镜像文件挂载在`/opt/centos` 目录,请问如何配置自己的 local.repo 文件,使得可以使用该镜像中的软件包,安装软件。 请将 local.repo 文件的内容和执行 yum repolist 的返回结果(简要)写到下方。 echo "TYPE=Ethernet BOOTPROTO=static DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.100.11 GATEWAY=192.168.100.1 PREFIX=24" > /etc/sysconfig/network-scripts/ifcfg-eno16777736 [root@xserver1 ~]# hostnamectl set-hostname xserver1 [root@xserver1 ~]# bash [root@xserver1 ~]#cd [root@xserver1 ~]# mkdir /opt/centos [root@xserver1 ~]# mount -o loop CentOS-7-x86_64-DVD-1511.iso /opt/centos/ [root@xserver1 ~]# mkdir /etc/yum.repos.d/bak [root@xserver1 ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ echo "[centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1" > /etc/yum.repos.d/local.repo [root@xserver1 ~]# yum clean all [root@xserver1 ~]# yum repolist Loaded plugins: fastestmirror centos | 3.6 kB 00:00:00 (1/2): centos/group_gz | 155 kB 00:00:00 (2/2): centos/primary_db | 2.8 MB 00:00:00 Determining fastest mirrors repo id repo name status centos centos 3,723 repolist: 3,723 二、FTP 安装使用 使用 xserver1 虚拟机,安装 `ftp 服务`,并配置 ftp 的共享目录为/opt。 使用VMWare 软件继续启动提供的 xserver2 虚拟机(配置虚拟机 xserver2 的 IP 为`192.168.100.12`,主机名为xserver2), 并创建该虚拟机的 yum 源文件 `ftp.repo` 使用xserver1 的ftp 源(配置文件中的FTP 地址使用主机名)。 配置完成后,将xserver1节点执行 netstat -ntpl 命令(netstat 命令若不能用,则自行安装 net-tools 工具)的返回结果(简要)和将 xserver2 节点的 ftp.repo 文件内容写到下方。 [root@xserver1 ~]# yum instal vsftpd -y [root@xserver1 ~]# echo anon_root=/opt/ >> /etc/vsftpd/vsftpd.conf [root@xserver1 ~]# systemctl start vsftpd && systemctl enable vsftpd echo "TYPE=Ethernet BOOTPROTO=static DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.100.12 GATEWAY=192.168.100.1 PREFIX=24" > /etc/sysconfig/network-scripts/ifcfg-eno16777736 [root@localhost ~]# hostnamectl set-hostname xserver2 [root@localhost ~]# bash echo "[centos] name=centos baseurl=ftp://192.168.100.11/centos gpgcheck=0 enabled=1" > /etc/yum.repos.d/ftp.repo [root@xserver2 ~]# setenforce 0 [root@xserver2 ~]# systemctl stop firewalld && systemctl disable firewalld [root@xserver1 ~]# setenforce 0 [root@xserver1 ~]# systemctl stop firewalld && systemctl disable firewalld [root@xserver2 ~]# yum clean all [root@xserver2 ~]# yum repolist Loaded plugins: fastestmirror centos | 3.6 kB 00:00:00 (1/2): centos/group_gz | 155 kB 00:00:00 (2/2): centos/primary_db | 2.8 MB 00:00:00 Determining fastest mirrors repo id repo name status centos centos 3,723 repolist: 3,723 [root@xserver1 ~]# yum install -y net-tools [root@xserver1 ~]# netstat -ntpl tcp6 0 0 :::21 :::* LISTEN 3280/vsftpd 三、NFS 服务管理 使用 xserver1、xserver2 虚拟机,安装 NFS 服务所需要的软件包,将 xserver1 节点中的/mnt/share 目录使用 NFS 服务共享出来(目录不存在请自行创建,要求可访问共享目录的网段为 192.168.100.0/24), 接着在 xserver2 节点上,将 xserver1中共享的文件挂载到/mnt 目录下。 操作完毕后,依次将 xserver1 节点上执行showmount -e ip 命令和 xserver2 节点上执行 df -h 命令的返回结果(简要)写到下方 [root@xserver1 ~]# yum -y install nfs-utils rpcbind [root@xserver2 ~]# yum -y install nfs-utils rpcbind echo "/mnt/share 192.168.100.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)" > /etc/exports [root@xserver1 ~]# exportfs -r [root@xserver1 ~]# systemctl start rpcbind && systemctl enable rpcbind [root@xserver1 ~]# systemctl start nfs-server && systemctl enable nfs-server [root@xserver1 ~]# showmount -e 192.168.100.11 Export list for 192.168.100.11: /mnt/share 192.168.100.0/24 [root@xserver2 ~]# setenforce 0 [root@xserver2 ~]# systemctl stop firewalld && systemctl disable firewalld [root@xserver1 ~]# setenforce 0 [root@xserver1 ~]# systemctl stop firewalld && systemctl disable firewalld [root@xserver2 ~]# mount -t nfs 192.168.100.11:/mnt/share /mnt [root@xserver2 ~]# df -h 192.168.100.11:/mnt/share 36G 7.6G 29G 22% /mnt 四、主从数据库管理 在 xserver1、xserver2 上安装 mariadb 数据库, 并配置为主从数据库(xserver1 为主节点、xserver2 为从节点),实现两个数据库的主从同步。 配置完毕后,请在 xserver2 上的数据库中执行“show slave status \G”命令查询从节点复制状态,将查询到的结果(简要)写到下方。 # xserver1 & xserver2 都执行 echo "192.168.100.11 mysql1 192.168.100.12 mysql2" >> /etc/hosts [root@xserver1 ~]# yum install -y mariadb mariadb-server [root@xserver1 ~]# systemctl start mariadb && systemctl enable mariadb [root@xserver2 ~]# yum install -y mariadb mariadb-server [root@xserver2 ~]# systemctl start mariadb && systemctl enable mariadb # xserver1 & xserver2 都执行 [root@xserver1 ~]# mysql_secure_installation Disallow root login remotely? [Y/n] n 其他为 yes ;密码设置为 000000 # 为 xserver1/etc/my.cnf 中的[mysqld]增添如下内容 log_bin=mysql-bin binlog_ignore_db=mysql server_id=11 # xserver1 MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by "000000"; MariaDB [(none)]> grant replication slave on *.* to 'user'@'mysql2' identified by '000000'; # 为 xserver2 /etc/my.cnf 中的[mysqld]增添如下内容 log_bin=mysql-bin binlog_ignore_db=mysql server_id=12 # xserver2 MariaDB [(none)]> change master to master_host='mysql1',master_user='user',master_password='000000'; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G `Slave_IO_Running: Yes` `Slave_SQL_Running: Yes` ## 验证数据同步 # xserver1 MariaDB [(none)]> create database test; MariaDB [(none)]> use test; MariaDB [test]> create table company(id int not null primary key,name varchar(50),addr varchar(255)); MariaDB [test]> insert into company values(1,"alibaba","china"); MariaDB [test]> select * from company; # xserver2 MariaDB [(none)]> show databases; MariaDB [(none)]> use test; MariaDB [test]> show tables; MariaDB [test]> select * from company; +----+---------+-------+ | id | name | addr | +----+---------+-------+ | 1 | alibaba | china | +----+---------+-------+ 1 row in set (0.01 sec) 五、LNMP 环境部署 使用 xserver1 节点,安装单节点 lnmp 环境。 安装 lnmp 环境需要用到的 YUM 源为 CentOS-7-x86_64-DVD-1511.iso 和 lnmp 目录(均在/root 目录下)。 安装并配置完 lnmp 环境后。依次查询数据库、nginx、php 服务的状态,并使用 netstat -ntpl 命令查看端口开放情况。 最后依次将查询服务状态的返回结果(简要),和查看端口开放情况的返回结果(简要)写到下方。 echo "[lnmp] name=centos baseurl=file:///root/lnmp gpgcheck=0 enabled=1" >> /etc/yum.repos.d/local.repo [root@xserver1 ~]# yum clean all [root@xserver1 ~]# yum repolist [root@xserver1 ~]# yum install -y nginx echo "server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }" > /etc/nginx/conf.d/default.conf [root@xserver1 ~]# mysql -uroot -p000000 MariaDB [(none)]> grant all privileges on *.* to root@localhost identified by '000000' with grant option; MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by '000000' with grant option; MariaDB [(none)]> create database wordpress; [root@xserver1 ~]# yum install -y php-fpm php-mysql [root@xserver1 ~]# vi /etc/php-fpm.d/www.conf #修改下两行 user = nginx group = nginx [root@xserver1 ~]# systemctl restart nginx php-fpm [root@xserver1 ~]# yum install net-tools [root@xserver1 ~]# netstat -ntpl 六、部署 WordPress 应用 使用 xserver1 节点,基于 lnmp 环境,部署 WordPress 应用(WordPress 源码包在/root 目录下)。 应用部署完毕后,设置 WordPress 的站点标题为自己的姓名( 例: 名字叫张三, 则设置站点标题为张三的 BLOG), 设置完毕后登录WordPresss 首页。最后将命令 curl ip(ip 为 wordpress 的首页 ip)的返回结果(简要)写到下方。 [root@xserver1 ~]# yum install -y unzip [root@xserver1 ~]# unzip wordpress-4.7.3-zh_CN.zip [root@xserver1 ~]# cp -rfv wordpress/* /usr/share/nginx/html/ echo "<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', '000000'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); define('AUTH_KEY', '<*sWiXc.1x HhNW`r>o?o7b,l`PoiY`_Ji/YD>o4Cc}460|Bew2-Ba)X/LZmsbvS'); define('SECURE_AUTH_KEY', '`v$-3/Gk`/&yRoSBoVrc+%*=WGmQc;R0!KxY}HM61V9Pcyz&= Xw986qi4/,W*4j'); define('LOGGED_IN_KEY', '/%Iuho!m&L#d1J=S:*6C~4>7@72$ZcGJcE=bW)jM0wl^|ZO2YIX5OllUMG*Wr1?W'); define('NONCE_KEY', 'K!KOU7%&2K=x^o7p7VG>/ast51N>ry_Rcl^)c}WOong&~cuh>p 8twe{B]Z[7Q)]'); define('AUTH_SALT', '#ho(+-ICZ>@fy>^;U],e!9Y<sbGV$|LLo)F[Lkveh]~s|Q9KQ)g#cCrgw2fGviP,'); define('SECURE_AUTH_SALT', 'l~@~( d2k-Gh?VczpK(_4}8#;BEX0RFncorH#qf1{r<-1$DpM#@bcBKjv)R4Q}_9'); define('LOGGED_IN_SALT', '1q.8W-yy)tNt^$+pSScX>o*UDX!T?>I%{_RP~<*heM|A6j[6OfL4]w 2:SI)cuud'); define('NONCE_SALT', '6kt&5<?n%]:z4[%i6,jL-l@i#!$v8x-[JXERj+*dja{]))<e`aE!qwzy>?kw$IKI'); $table_prefix = 'wp_'; define('WP_DEBUG', false); define('WP_ZH_CN_ICP_NUM', true); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); " > /usr/share/nginx/html/wp-config.php [root@xserver1 ~]# systemctl restart mariadb nginx php-fpm [root@xserver1 ~]# netstat -lntp [root@xserver1 ~]# curl 192.168.100.11 七、Linux 存储 LVM 管理 使用 xserver1 虚拟机,使用 VMWare 软件自行添加一块大小为 20G 的硬盘, 使用 fdisk 命令对该硬盘进形分区, 要求分出两个大小为 5G 的分区。使用两个分区,创建名 xcloudvg 的卷组, 然后再创建一个 5G 的分区,将 xcloudvg 扩容至 15G,最后执行 vgdisplay 命令查看卷组信息。 将上述所有操作命令和返回结果(简要)写到下方。 [root@controller ~]# lsblk [root@controller ~]# fdisk /dev/sdb # 创建分区 3个分区 [root@controller ~]# lsblk [root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 [root@localhost ~]# vgcreate xcloudvg /dev/sdb[1-2] [root@localhost ~]# vgextend xcloudvg /dev/sdb3 八、OpenStack Keystone 管理 使用 VMWare 软件启动提供的 opensatckallinone 镜像,自行检查 openstack 中各服务的状态,若有问题自行排查。 在 keystone 中创建用户 testuser,密码为123456,创建好之后,查看 testuser 的详细信息。 将上述所有操作命令及返回结果(简要)写到下方。 [root@controller ~]# source /etc/keystone/admin-openrc.sh [root@controller ~]# openstack user create --password 123456 --domain xiandian usertest [root@controller ~]# openstack user show usertest +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | 9321f21a94ef4f85993e92a228892418 | | enabled | True | | id | b9b24fd835344500837cb2cbfb79d90d | | name | usertest | +-----------+----------------------------------+ 九、OpenStack Glance 管理 使用 VMWare 软件启动提供的 opensatckallinone 镜像,自行检查 openstack 中各服务的状态,若有问题自行排查。 在 xserver1 节点的/root 目录下存在一个cirros-0.3.4-x86_64-disk.img 镜像; 使用 glance 命令将镜像上传, 并命名为mycirros, 最后将glance image-show id 命令的返回结果(简要)写到下方。 [root@controller ~]# source /etc/keystone/admin-openrc.sh [root@controller ~]# glance image-create --name "mycirros" --disk-format qcow2 --container-format bare --progress < cirros-0.3.2-x86_64-disk.img [=============================>] 100% +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | 64d7c1cd2b6f60c92c14662941cb7913 | | container_format | bare | | created_at | 2021-06-30T19:45:27Z | | disk_format | qcow2 | | id | ae634816-62f7-4bcb-8b89-04166478d834 | | min_disk | 0 | | min_ram | 0 | | name | mycirros | | owner | f9ff39ba9daa4e5a8fee1fc50e2d2b34 | | protected | False | | size | 13167616 | | status | active | | tags | [] | | updated_at | 2021-06-30T19:45:27Z | | virtual_size | None | | visibility | private | +------------------+--------------------------------------+ [root@controller ~]# glance image-show mycirros +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | 64d7c1cd2b6f60c92c14662941cb7913 | | container_format | bare | | created_at | 2021-06-30T19:45:27Z | | disk_format | qcow2 | | id | ae634816-62f7-4bcb-8b89-04166478d834 | | min_disk | 0 | | min_ram | 0 | | name | mycirros | | owner | f9ff39ba9daa4e5a8fee1fc50e2d2b34 | | protected | False | | size | 13167616 | | status | active | | tags | [] | | updated_at | 2021-06-30T19:45:27Z | | virtual_size | None | | visibility | private | +------------------+--------------------------------------+ 十、Docker 安装 使用 xserver1 节点,自行配置 YUM 源,安装 docker 服务(需要用到的包为xserver1 节点/root 目录下的 Docker.tar.gz)。 安装完服务后,将 registry_latest.tar 上传到 xserver1 节点中并配置为私有仓库。 要求启动 registry 容器时,将内部保存文件的目录映射到外部的/opt/registry 目录,将内部的 5000 端口映射到外部5000 端口。 依次将启动 registry 容器的命令及返回结果、执行 docker info 命令的返回结果(简要)写到下方。 mkdir /opt/docker mv Docker.tar.gz /opt/docker tar -zxvf /opt/docker/Docker.tar.gz echo "[kubernetes] name=kubernetes baseurl=file:///opt/docker/Docker gpgcheck=0 enabled=1 " >> /etc/yum.repos.d/local.repo [root@xserver1 ~]# yum clean all [root@xserver1 ~]# yum repolist [root@xserver1 ~]# yum upgrade -y [root@xserver1 ~]# uname -r [root@xserver1 ~]# iptables -t filter -F [root@xserver1 ~]# iptables -t filter -X [root@xserver1 ~]# iptables -t filter -Z [root@xserver1 ~]# /usr/sbin/iptables-save [root@xserver1 ~]# reboot [root@xserver1 ~]# rm -rf /etc/yum.repos.d/C* [root@xserver1 ~]# yum clean all [root@xserver1 ~]# yum repolist cat >> /etc/sysctl.conf << EOF net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF [root@xserver1 ~]# sysctl -p [root@xserver1 ~]# modprobe br_netfilter [root@xserver1 ~]# yum install -y yum-utils device-mapper-persistent-data [root@xserver1 ~]# yum install docker-ce -y [root@xserver1 ~]# systemctl daemon-reload [root@xserver1 ~]# systemctl restart docker [root@xserver1 ~]# systemctl enable docker [root@xserver1 ~]# docker info [root@xserver1 ~]# docker load -i /opt/docker/images/registry_latest.tar [root@xserver1 opt]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry f32a97de94e1 十一、Dockerfile 编写 使用 xserver1 节点,新建目录 centos-jdk,将提供的 jdk-8u141-linux-x64.tar.gz 复制新建的目录,然后编辑 Dockerfile 文件,文件要求如下: 1.使用 centos:latest 基础镜像; 2.指定作为为 xiandian; 3.新建文件夹/usr/local/java 用于存放 jdk 文件; 4.将 JDK 文件复制到镜像内创建的目录并自动解压; 5.创建软连接:ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk; 6.设置环境变量如下 ENV JAVA_HOME /usr/local/java/jdk ENV JRE_HOME ${JAVA_HOME}/jre ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH ${JAVA_HOME}/bin:$PATH 编写完毕后,构建名为 centos-jdk 的镜像,构建成功后,查看镜像列表。 最后将 Dockerfile 的内容、构建镜像的操作命令、查看镜像列表的命令和返回的(简要)写到下方。 [root@xserver1 ~]# mkdir /home/centos-jdk [root@xserver1 ~]# cp /opt/docker/jdk/jdk-8u141-linux-x64.tar.gz /home/centos-jdk [root@xserver1 centos-jdk]# cat /home/centos-jdk/dockerfile FROM centos:latest MAINTAINER xiandian WORKDIR /usr/local/java ADD jdk-8u141-linux-x64.tar.gz /usr/local/java RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk ENV JAVA_HOME /usr/local/java/jdk ENV JRE_HOME ${JAVA_HOME}/jre ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH ${JAVA_HOME}/bin:$PATH [root@xserver1 ~]# docker build -t centos-jdk /home/centos-jdk [root@xserver1 ~]# docker run -d -it --rm centos-jdk 十二、swarm集群部署 写出部署swarm集群的主要步骤 1. 主机映射 2. 时间同步 3. 配置Docker API 4. 初始化集群 5. Node节点加入集群
2021年07月04日
204 阅读
0 评论
0 点赞
2021-06-21
nginx 基础学习
nginx 默认配置 user www www; #程序运行用户和组 worker_processes auto; #启动进程,指定 nginx 启动的工作进程数量,建议按照 cpu 数目来指定,一般等于 cpu 核心数目 error_log /home/wwwlogs/nginx_error.log crit; #全局错误日志 pid /usr/local/nginx/logs/nginx.pid; #主进程 PID 保存文件 worker_rlimit_nofile 51200; #文件描述符数量 events { use epoll; #使用 epoll 模型,对于 2.6 以上的内核,建议使用 epoll 模型以提高性能 worker_connections 51200; #工作进程的最大连接数量 } http{ #网站优化参数 server { #具体的某一网站的配置信息 listen 80; #监听端口 root html; #网页根目录(/usr/local/nginx/html) server_name www.atguigu.com; #服务器域名 index index.html; #默认加载页面 access_log logs/access.log; #访问日志保存位置 ......; location (.*)\.php$ { 用正则匹配具体的访问对象; } location { 跳转等规则; } } server { 虚拟主机; } } Nginx 的状态统计 1. 安装 nginx 时将 --with-http_stub_status_module 模块开启 2. 修改 nginx 配置文件(写入要访问的 server 标签中) location /nginx_status{ stub_status on; access_log off; } 3. 客户端访问网址:http://IP/nginx_status `Active connections` 表示当前的活动连接数 `server accepts handled requests` 表示已经处理的连接信息 三个数字依次表示已处理的连接数、成功的 TCP 握手次数、已处理的请求数 目录保护 1. 原理和 apache 的目录保护原理一样(利用上一个实验接着完成) 2. 在状态统计的 location 中添加: auth_basic "Welcome to nginx_status!"; auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx; 3. 使用 http 的命令 htpasswd 进行用户密码文件的创建(生成在上面指定的位置) #htpasswd -c /usr/local/nginx/html/htpasswd.nginx user 4. 重启 nginx 并再次访问统计页面 基于 IP 的身份验证(访问控制) 1. 接着上一个实验完成操作 2. 在状态统计的 location 中添加: allow 192.168.88.1; deny 192.168.88.0/24; #仅允许 192.168.88.1 访问服务器 虚拟主机(基于域名) 1. 提前准备好两个网站的域名, 并且规划好两个网站网页存放目录 2. 在 Nginx 主配置文件中并列编写两个 server 标签,并分别写好各自信息 server { listen 80; server_name blog.atguigu.com; index index.html index.htm index.php; root html/blog; access_log logs/blog-access.log main; } server { listen 80; server_name bbs.atguigu.com; index index.html index.htm index.php; root html/bbs; access_log logs/bbs-access.log main; } 3. 分别访问两个不同的域名验证结果 反向代理 1. 在另外一台机器上安装 apache, 启动并填写测试页面 2. 在 nginx 服务器的配置文件中添加(写在某一个网站的 server 标签内) location / { proxy_pass http://192.168.88.100:80; #此处填写 apache 服务器的 IP 地址 } 3. 重启 nginx,并使用客户端访问测试 负载调度 1. 使用默认的 rr 轮训算法,修改 nginx 配置文件 upstream bbs { #此标签在 server 标签前添加 server 192.168.88.100:80; server 192.168.88.200:80; } server { ........; #修改自带的 location / 的标签,将原内容删除,添加下列两项 location / { proxy_pass http://bbs; #添加反向代理,代理地址填写 upstream 声明的名字 proxy_set_header Host $host; #重写请求头部,保证网站所有页面都可访问成功 } } 2. 开启并设置两台 88.100 & 88.200 的主机 安装 apache 并设置不同的 index.html 页面内容(设置不同页面是为了看实验效果) 3. 重启 nginx,并使用客户端访问测试
2021年06月21日
204 阅读
0 评论
0 点赞
2021-03-18
apache 实验
配置文件位置 配置文件位置: 源码包安装: PREFIX/etc/httpd.conf(主配置文件) PREFIX/etc/extra/*.conf(子配置文件) rpm包安装: /etc/httpd/conf/httpd.conf 网页文件位置: 源码包安装: PREFIX/htdocs/ rpm包安装: /var/www/html/ 日志文件位置: 源码包安装: PREFIX/logs/ rpm包安装: /var/log/httpd/ 配置文件详解 注意:apache配置文件严格区分大小写 针对主机环境的基本配置参数 ServerRoot /usr/local/apache2 #apache主目录 Listen :80 #监听端口 LoadModule php7 #加载的相关模块 User Group #用户和组 ServerAdmin #管理员邮箱 ServerName #服务器名(没有域名解析时,使用临时解析。默认不开启) ErrorLog "logs/error_log #服务器错误日志 CustomLog "logs/access_log" common #访问记录日志 DirectoryIndex index.html index.php #默认网页文件名,优先级顺序 Include etc/extra/httpd-vhosts.conf #子配置文件中内容也会加载生效 主页目录及权限 DocumentRoot "/usr/local/apache2/htdocs" #网页文件存放目录(默认) <Directory "/usr/local/apache2/htdocs"> #定义指定目录的权限 Options Indexes FollowSymLinks None #没有任何额外权限 All #所有权限(除去MultiViews以外) Indexes #浏览权限(当此目录下没有默认网页文件时,显示目录内容) FollowSymLinks #准许软连接到其他目录 MultiViews #准许文件名泛匹配(需要手动开启模块才有效negotiation) AllowOverride None #定义是否允许目录下.htaccess文件中的权限生效 None #.htaccess中权限不生效 All #文件中所有权限都生效 AuthConfig #文件中,只有网页认证的权限生效 Require all granted(denied) #访问控制列表 </Directory> <IfModule dir_module> #此标签用来指定访问到指定目录时自动加载哪个页面文件 DirectoryIndex index.php index.html #可以写多个,但是有优先级之分 </IfModule> 实验 说明:以下实验均为源码安装apache yum 安装需要去 /usr/share/doc/httpd-2.4.6/ 配置文件,拷贝到 http.d 1. 目录别名 当 apache 接受请求时,在默认情况下会将 DocumentRoot目录中的文件送到客户端 如果想将某一不 在 DocumentRoot 目录中的文件共享到网站上 可以通过建立别名的方式将 URL 指向特定的目录 编辑主配置文件 # vim /usr/local/apache2/conf/httpd.conf Include etc/extra/httpd-autoindex.conf #去掉注释,开启调用子配置文件 编辑子配置文件 # vim /usr/local/apache2/conf/extra/httpd-autoindex.conf alias /icons/ "/usr/local/apache2/icons/" 结构:别名 "真实目录" #真实目录的结尾要有/,否则报错 <Directory "/usr/local/apache2/icons"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 可以根据模板编写一个自己需要的目录别名 重启服务 2.用户认证 有时候,我们需要给一些特殊的访问。设置一个用户认证机制,增加安全 比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码 但为了更加安全,可以再设置一层用户身 份认证 编辑子配置文件 # vim /usr/local/apache2/etc/httpd.conf 在需要进行登录认证的目录标签中加入如下配置: <Directory "/usr/local/apache2/htdocs/admin"> #声明被保护目录 Options Indexes FollowSymLinks AllowOverride All #开启权限认证文件.htaccess Require all granted </Directory> 在指定目录下创建权限文件 切换到需要进行登录认证的目录,创建 .htaccess 文件,并添加下面的内容 # vi .htaccess AuthName "Welcome to atguigu" #提示信息 AuthType basic #加密类型 AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd #密码文件,文件名自定义。(使用绝对路径) require valid-user #允许密码文件中所有用户访问 建立密码文件,加入允许访问用户(与系统用户无关) # htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd test1 -c 建立密码文件,只有添加第一个用户时,才能-c # htpasswd -m /usr/local/apache2/htdocs/admin/apache.passwd test2 -m 再添加更多用户时,使用-m 参数 注意: htpasswd 该命令是 httpd 的命令,需要绝对路径 、重启服务 3.虚拟主机 虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。 虚拟主机的分类: 基于IP 基于端口 基于域名 实验准备: 域名解析:准备两个域名 www.sohu.com www.sina.com 网站主页目录规划 在/htdocs/目录下分别创建 sohu 和 sina 两个目录,并在新建目录内创建 index.html 文件(分别写不同内容) 实验步骤: 修改主配置文件开启文件关联 # vi /usr/local/apache2/etc/httpd.conf Include etc//extra/httpd-vhosts.conf #此行取消注释 编辑子配置文件,编写虚拟主机标签 # vi /usr/local/apache2/etc/extra/httpd-vhosts.conf 添加下方内容,有几个虚拟主机就写几组(添加之前先把原先存在的示例删除掉) <Directory "/usr/local/apache2/htdocs/sina"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> #目录权限标签根据需要自行添加 <VirtualHost 192.168.88.10:80> #虚拟主机标签 ServerAdmin webmaster@sina.com #管理员邮箱 DocumentRoot "/usr/local/apache2/htdocs/sina" #网站主目录 ServerName www.sina.com #完整域名 ErrorLog "logs/sina-error_log" #错误日志 CustomLog "logs/sina-access_log" common #访问日志 </VirtualHost> 重启服务,验证结果 4.域名跳转 一个站点难免会有多个域名,而多个域名总得有一个主次 比如我的网站可以用两个域名访问:www.sina.com和www.sohu.cn 但大家发现不管我用哪个域名访问,最终都会跳转到 www.sina.com 上 来 这个行为就叫做域名跳转,状态码:301 是永久跳转,302 是临时跳转 网站上一定要设置为 301, 这样对搜索引擎是比较友好的 实验条件: 虚拟主机能正常访问 打开重写配置模块 LoadModule rewrite_module modules/mod_rewrite.so #取消注释 实验步骤: 修改虚拟主机配置文件 # vi */extra/httpd-vhosts.conf <Directory "/usr/local/apache2/htdocs/sohu"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> 创建规则匹配文件 # vi */.htaccess 在指定的网站目录下创建文件,并添加以下内容 RewriteEngine on # 开启rewrite功能 RewriteCond %{HTTP_HOST} ^www.sohu.com # 把以www.sina.com 开头的内容赋值给HTTP_HOST变量 RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L] # ^(.*)$ 指代客户端要访问的资源 # $1 把 .* 所指代的内容赋值到$1变量中 # R=permanent 永久重定向 = 301 # L 指定该规则为最后一条生效的规则,以后的不再生效 重启服务并测试 5.实现https HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道 简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,用于安全的 HTTP 数据传输。 这个系统被 内置于浏览器中,提供了身份验证与加密通讯方法。 准备工作: 检查 Apache 是否支持 SSL,检查相应模块是否安装,若安装则将模块启用 模块存放目录:/usr/local/apache2/modules 检查模块是否启用:apachectl -M CA 证书申请: a. openssl genrsa -out ca.key 1024 #建立服务器私钥,生成 RSA 密钥 b. openssl req -new -key ca.key -out atguigu.csr #需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 common name,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览 器警报。生成的 csr 文件交给 CA 签名后形成服务端自己的证书 c. openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt #使用 CA 服务器签发证书,设置证书的有效期等信息 注意 1:生成完秘钥和证书文件后,将文件存放在 Apache 的安装目录下的 cert 目录下 注意 2:在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别) 配置文件修改: 调用 ssl 模块,并启用 ssl 独立配置文件 # vim /usr/local/apache2/etc/httpd.conf LoadModule ssl_module modules/mod_ssl.so #取消注释 Include etc/extra/httpd-ssl.conf #取消注释 修改 conf/extra/httpd-ssl.conf 配置文件,调用证书等文件 #添加 SSL 协议支持协议,去掉不安全的协议 SSLProtocol all -SSLv2 -SSLv3 #修改加密套件如下 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on #证书公钥配置(签字的) SSLCertificateFile cert/atguigu.crt #证书私钥配置 SSLCertificateKeyFile cert/ca.key 修改主配置文件,添加虚拟主机 <VirtualHost _default_:443> # DocumentRoot 目录位置要和 httpd.conf 里面的一致 DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost:443 SSLCertificateFile cert/atguigu.crt SSLCertificateKeyFile cert/ca.key SSLCertificateChainFile cert/atguigu.crt </VirtualHost> 结果验证 # apachectl -t #检查配置文件语法 # apachectl restart #重启 apache,并测试是否可以使用 https 访问 报错提示:AH00526: Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf: SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?). 解决方案:要么不调用此模块,要么让调用的模块加载上 强制跳转 https: 有些时候为了安全,网站不允许使用 http 访问,仅允许使用 https 访问,目的是为了更加安全 在 http 部分的目录权限标签中添加一下内容 <Directory "/usr/local/apache2/htdocs"> …… RewriteEngine on #开启转发规则 RewriteCond %{SERVER_PORT} !^443$ #检查访问端口只要目标不是443的 RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] #全都使用https重新访问 </Directory> 在做后面实验时为了更加方便理解,我们可以先把 https 关闭掉 需要关闭:跳转&虚拟主机&ssl 配置文件调用 6.日志分割 我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大 如何避免产生大的日志文件?其实 apache 有相关的配置 使日志按照我们的需求进行归档,比如每 天一个新日志,或者每小时一个新的日志 首先简单设置日志的路径名称 #vim /usr/local/apache2/etc/httpd.conf 编辑添加内容如下: ErrorLog "logs/error.log" CustomLog "logs/access.log" combined 指定了日志存放在/usr/local/apache2/logs 目录下分别为 error.log 和 access.log,combined 为日 志显示的格式,日志格式可以参考配置文件 httpd.conf 中格式的指定,如下: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common 设置apache 日志分割 同样编辑配置文件 httpd.conf ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined 注意 1:以上仅为两条命令(一条错误日志,一条访问日志),路径太长写不开 注意 2:若开启了 https,则需要修改 http-ssl.conf 配置文件中的日志记录条目 xxxxxxxxxx 同样编辑配置文件 ErrorLog 是错误日志,CustomLog 是访问日志。|就是管道符,意思是把产生的日志交给 rotatelog 而这个工具就是 apache 自带的切割日志的工具。-l 的作用是校准时区为 UTC,也就是北京时间 86400,单位是秒,正好是一天,那么日志会每天切割一次 而最后面的 combined 为日志的 格式,在 httpd.conf 中有定义 7.不记录指定日志类型 如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的 比如网站的一些图片,还有 js、css 等静态对象。而这些文件的访问往往是巨量的 而且即使记录这 些日志也没有什么用,那么如何忽略不记录这些日志呢? 配置日志不记录图片的访问 # vim /usr/local/apache2/conf/httpd.conf 相关配置为: SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request 说明:在原来的访问日志配置基础上,增加了一些 image-request 的定义 比如把 gif、jpg、bmp、 swf、js、css 等结尾的全标记为 image-request 然后在配置日志后加一个标记 env=!image-request, 表示取反 8.配置静态缓存 所说的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都是图片、js、 css 等 这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时 不再去服务器上下载 加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总 有一些时效性,那么就得设置这个过期时间 Apache 配置静态缓存 # vim /usr/local/apache2/conf/httpd.conf <IfModule mod_expires.c> #此模块默认未启用,请手动启用 ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule> 或者使用 mod_headers 模块实现:该模块默认启用 <IfModule mod_headers.c> # htm,html,txt 类的文件缓存一个小时 <filesmatch "\.(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> # css, js, swf 类的文件缓存一个星期 <filesmatch "\.(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> # jpg,gif,jpeg,png,ico,flv,pdf 等文件缓存一年 <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$"> header set cache-control "max-age=29030400" </filesmatch> </IfModule> 说明:这里的时间单位可以 days、hours 甚至是 min,两种不同的方法, 上面使用的是 mod_expires, 而下面用的是 mod_headers,要想使用这些模块,必须要事先已经支持。 如何查看是否支持,使用命令: # /usr/local/apache2/bin/apachectl -M 重启服务并验证 验证: # curl -x127.0.0.1:80 'http://www.sohu.com/image/a.jpg' -I HTTP/1.1 200 OK Date: Wed, 26 Oct 2016 03:51:26 GMT Server: Apache/2.2.31 (Unix) PHP/5.5.38 Last-Modified: Tue, 31 May 2016 03:08:36 GMT ETag: "46891b-16b-5341ab0597500" Accept-Ranges: bytes Content-Length: 363 Cache-Control: max-age=86400 # 看这里 Expires: Thu, 27 Oct 2016 03:51:26 GMT Content-Type: image/jpg 9.禁止解析PHP 某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多, 比如某些目录可 以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。 配置禁止解析 php: <Directory /usr/local/apache2/htdocs/data> php_admin_flag engine off <filesmatch "(.*)php"> Order deny,allow Deny from all </filesmatch> </Directory>
2021年03月18日
242 阅读
0 评论
1 点赞
2021-03-16
ansible 学习
ansible inventory ANSIBLE_CONFIG ansible.cfg 项目目录 ./ansible.cfg 当前用户的家目录 /etc/ansible/ansible.cfg [root@manager ~]# cat /etc/ansible/ansible.cfg inventory = /etc/ansible/hosts #主机列表配置文件 library = /usr/share/my_modules/ #库文件存放目录 remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录 local_tmp = ~/.ansible/tmp #本机的临时执行目录 forks = 5 #默认并发数 sudo_user = root #默认sudo用户 ask_sudo_pass = True #每次执行是否询问sudo的ssh密码 ask_pass = True #每次执行是否询问ssh密码 remote_port = 22 #远程主机端口 host_key_checking = False #跳过检查主机指纹 log_path = /var/log/ansible.log #ansible日志 [privilege_escalation] #如果是普通用户则需要配置提权 become=True become_method=sudo become_user=root become_ask_pass=False 生成密钥 生成密钥名字为dsa , 生成的时候会提示生成的密钥的路径以及密码,可以不输入,默认在 ~/.ssh/目录下 ssh-keygen -t dsa 将生成的公钥上传到指定的服务器中 ssh-copy-id -i ~/.ssh/id_dsa.pub user@192.168.0.201 创建工作目录 mkdir project1/ vim hosts [youto] 192.168.0.201 192.168.0.202 Ad-Hoc [ ping ] ansible youto -m ping -i hosts [查看磁盘信息] ansible youto -m shell -a "df -h" -i hosts command 不能支持管道符 playbook [][] 示例 检查yum语法 ansible-palaybook --syntax http.yml nfs.yaml nfs 的 配置文件 exports.j2 /data 192.168.0.201(rw) [共享文件夹] [允许访问主机] (权限) - hosts: 192.168.0.202 tasks: # yum 安装 nfs-utils - name: Install NFS Server yum: name=nfs-utils state=present # 分发 配置文件 - name: Configure NFS Server copy: src=./exports.j2 dest=/etc/exports backup=yes # 创建 组 - name: Create NFS Group group: name=nfss gid=666 # 创建 用户 - name: Create NFS User user: name=nfss uid=666 group=666 shell=/sbin/nologin create_home=no # 创建 共享文件夹 - name: Create NFS Data file: path=/data state=directory owner=nfss group=nfss recurse=yes # 开启 nfs 服务 - name: Service NFS Server service: name=nfs state=started enabled=yes - hosts: 192.168.0.201 tasks: # 创建 挂载目录 - name: Client Create NFS Data file: path=/nfs_tt state=directory # 挂载 - name: Client Mount NFS Server mount: src: 192.168.0.202:/data path: /nfs_tt fstype: nfs opts: defaults state: mounted 清空原来http软件 ansible youto -m yum -a "name=httpd state=absent" -i hosts http.yml tt.j2 (index.html 显示页面) httpd.conf.j2 (httpd 配置文件) - hosts: 192.168.0.202 tasks: yum install httpd # yum 安装 httpd - name: Install Httpd Server yum: name=httpd state=present # 修改 httd.conf 配置文件 - name: Configure Httpd Server copy: src=./httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf backup=yes # 设置 web 页面 - name: Configure Httpd WebSite copy: src=./tt.j2 dest=/var/www/html/tt.html owner=root group=root mode=644 # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started enabled=yes # 开启 firewalld - name: Service Firewalld Server service: name=firewalld state=started # 放行 9988 端口 - name: Configure Firewalld Server firewalld: zone=public port=9988/tcp permanent=yes immediate=yes state=enabled 卸载php71w yum list installed |grep php71w|awk '{print $1}'|xargs|sed -r 's#(.*)#yum remove -y \1#g'|bash lamp.yml wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip - hosts: 192.168.0.201 tasks: # yum 安装 httpd php - name: Install Httpd PHP firewalld yum: name=httpd,php,php-pdo,php-mbstring,php-gd,firewalld state=present # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started # 开启防火墙 - name: Service Firewalld Server service: name=firewalld state=started # 放行 80 端口 - name: Configure Firewalld firewalld: port=80/tcp immediate=yes state=enabled # 获取 tt.php - name: Get Url index.php get_url: url: http://fj.xuliangwei.com/public/index.php dest: /var/www/html/tt.php # 获取并解压 kodexplorer4.40 - name: Copy Kod Cloud Code unarchive: src=./kodexplorer4.40.zip dest=/var/www/html/ mode=0777 - name: Chown Directory file: path=/var/www/html owner=apache group=apache recurse=yes 变量 定义变量 playbook的yaml文件中定义变量赋值 - hosts: all vars: #定义变量 file_name: bgx_yaml_vars tasks: - name: # {{ file_name }}引用上面定义的变量 file: path=/tmp/{{ file_name }} state=touch #playbook执行,在/tmp目录创建bgx_yaml_vars文件 [root@manager ~]# ansible-playbook f1.yml --extra-vars执行参数赋给变量 - hosts: all tasks: - name: Create New File file: path=/tmp/{{ file_name }} state=touch #playbook执行时传入file_name变量的参数,在/tmp目录创建bgx_extra-vars文件 [root@manager ~]# ansible-playbook f2.yml --extra-vars "file_name=bgx_extra-vars" 在文件中定义变量 在/etc/ansible/hosts主机组中定义,然后使用palybook进行调度该变量 [root@manager ~]# cat /etc/ansible/hosts [nfs] 10.0.0.20 [nfs:vars] file_name=bgx_filename 变量优先级 1.extra-vars外置传参的优先级最高 [所有执行的主机都生效] 2.定义在yml文件中的优先级其次 [所有执行的主机都生效] 3.hosts文件中定义的变量优先级最低 [当前主机组定义会生效] 变量注册 register关键字可以存储指定命令的输出结果到一个自定义的变量中 [root@manager ~]# cat f5.yml - hosts: all tasks: - name: shell: netstat -lntp register: System_Status - name: Get System Status debug: msg={{System_Status.stdout_lines}} when ( 判断 ) - hosts: all tasks: #检查httpd服务是否是活动的 - name: Check Httpd Server command: systemctl is-active httpd ignore_errors: yes register: check_httpd #如果check_httpd变量中的rc结果等于0,则执行重启httpd,否则跳过 - name: Httpd Restart service: name=httpd state=restarted when: check_httpd.rc == 0 when with_items ( 循环 ) - hosts: webserver tasks: - name: Create User user: name={{ item.name }} groups={{ item.groups }} state=present with_items: - { name: 'www', groups: 'bin'} - { name: 'test', groups: 'root'} with_items item handlers ( 触发器 ) - hosts: webserver #1.定义变量,在配置文件中调用 vars: http_port: 8881 #2.安装httpd服务 tasks: - name: Install Httpd Server yum: name=httpd state=present #3.使用template模板,引用上面vars定义的变量至配置文件中 - name: Configure Httpd Server template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf notify: #调用名称为Restart Httpd Server的handlers(可以写多个) - Restart Httpd Server #4.启动Httpd服务 - name: Start Httpd Server service: name=httpd state=started enabled=yes #5.如果配置文件发生变化会调用该handlers下面的对应名称的task handlers: - name: Restart Httpd Server service: name=httpd state=restarted notify handlers include ( 包含) [root@ansible project1]# cat restart_httpd.yml #注意这是一个tasks所有没有play的任何信息 - name: Restart Httpd Server service: name=httpd state=restarted [root@ansible project1]# cat a_project.yml - hosts: webserver tasks: - name: A Project command command: echo "A" - name: Restart httpd include: restart_httpd.yml 导入一个完整的playbook文件 (play task) [root@m01 project1]# cat tasks_total.yml - import_playbook: ./tasks_1.yml - import_playbook: ./tasks_2.yml tags ( 标签) 指定执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml -t "test_user" 忽略执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml --skip-tags "test_user" igneore_errors ( 错误处理) 1.强制调用handlers - hosts: webserver force_handlers: yes #强制调用handlers tasks: - name: Touch File file: path=/tmp/bgx_handlers state=touch notify: Restart Httpd Server - name: Installed Packages yum: name=sb state=latest handlers: - name: Restart Httpd Server service: name=httpd state=restarted 2.关闭changed的状态(确定该tasks不会对被控端做任何的修改和变更.) - hosts: webserver tasks: - name: Installed Httpd Server yum: name=httpd state=present - name: Service Httpd Server service: name=httpd state=started - name: Check Httpd Server shell: ps aux|grep httpd register: check_httpd changed_when: false - name: OutPut Variables debug: msg: "{{ check_httpd.stdout_lines }}" 3.使用changed_when检查tasks任务返回的结果 - hosts: webserver tasks: - name: Installed Nginx Server yum: name=nginx state=present - name: Configure Nginx Server copy: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: Restart Nginx Server - name: Check Nginx Configure Status command: /usr/sbin/nginx -t register: check_nginx changed_when: - ( check_nginx.stdout.find('successful')) - false - name: Service Nginx Server service: name=nginx state=started handlers: - name: Restart Nginx Server service: name=nginx state=restarted jinja语法 {% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断 --------------------------------------判断语句 {% if ansible_fqdn == "web01" %} echo "123" {% elif ansible_fqdn == "web02" %} echo "456" {% else %} echo "789" {% endif %} --------------------------------------循环语句 {% for i in EXPR %}...{% endfor%} 作为循环表达式 {% for i in range(1,10) %} server 172.16.1.{{i}}; {% endfor %} {# COMMENT #} 表示注释 Roles Roles基于一个已知的文件结构 tasks handlers templates ..... Roles小技巧: 创建roles目录结构,手动或使用ansible-galaxy init test roles 编写roles的功能,也就是tasks。 最后playbook引用roles编写好的tasks [root@m01 project2]# mkdir memcached/{tasks,handlers,templates,vars,files} -pv mkdir: 已创建目录 "memcached" mkdir: 已创建目录 "memcached/tasks" mkdir: 已创建目录 "memcached/handlers" mkdir: 已创建目录 "memcached/templates" mkdir: 已创建目录 "memcached/vars" mkdir: 已创建目录 "memcached/files" [root@m01 project2]# mkdir {nginx,php-fpm}/{tasks,handlers,templates} -p galaxy /root/.ansible/roles 1.使用roles创建Rsync服务, 目录结构如下 [root@m01 roles]# tree /etc/ansible/roles/ /etc/ansible/roles/ ├── hosts ├── rsync │ ├── files │ │ ├── rsyncd.conf │ │ └── rsync.passwd │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars ├── site.yml 2.定义roles主机清单 [root@m01 roles]# cat /etc/ansible/roles/hosts [backup] 172.16.1.41 3.指定backup主机组,执行那个roles [root@m01 roles]# cat /etc/ansible/roles/site.yml - hosts: backup remote_user: root roles: - rsync 4.查看rsync角色的tasks任务 [root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml - name: Install Rsync Server yum: name=rsync state=present - name: Configure Rsync Server copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }} with_items: - {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"} - {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"} notify: Restart Rsync Server - name: Start Rsync Server service: name=rsyncd state=started enabled=yes 5.查看rsync角色的handlers [root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml - name: Restart Rsync Server service: name=rsyncd state=restarted 6.查看rsync角色的files目录 [root@m01 roles]# ll /etc/ansible/roles/rsync/files/ total 8 -rw-r--r-- 1 root root 322 Nov 16 18:49 rsyncd.conf -rw------- 1 root root 20 Nov 16 18:30 rsync.passwd 8.执行roles,使用-t指定执行测试rsync角色 [root@m01 roles]# ansible-playbook -i hosts -t rsync site.yml PLAY [backup] ******************************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [172.16.1.41] TASK [backup : Install Rsync Server] *********************************************************************** ok: [172.16.1.41] TASK [backup : Configure Rsync Server] ********************************************************************* ok: [172.16.1.41] TASK [backup : Start Rsync Server] ************************************************************************* ok: [172.16.1.41] PLAY RECAP ***********************************************************************************=0 failed=0
2021年03月16日
201 阅读
0 评论
0 点赞
1
2