Aliyun 盘挂载/扩容

数据盘挂载

原文链接: 分区格式化数据盘(Linux)
适用系统:Linux(Redhat , CentOS,Debian,Ubuntu)
Linux 的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式化操作。下面的操作将会把数据盘划分为一个分区来使用。

1. 查看

查看数据盘在没有分区和格式化数据盘之前,使用 df –h 命令,是无法看到数据盘的,可以使用 fdisk -l 命令查看。如下图:

友情提示:若您执行 fdisk -l 命令,发现没有 /dev/xvdb 标明您的云服务无数据盘,那么您无需进行挂载,此时该教程对您不适用

2. 分区 / 格式化

运行以下命令对数据盘进行分区。

1
$ fdisk -u /dev/vdb

输入 p 查看数据盘的分区情况。
本示例中,数据盘没有分区。
输入 n 创建一个新分区。
输入 p 选择分区类型为主分区。

创建一个单分区数据盘可以只创建主分区。如果要创建四个以上分区,您应该至少选择一次 e(extended),创建至少一个扩展分区。

输入分区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值 1。
输入第一个可用的扇区编号,按回车键。
本示例中,直接按回车键,采用默认值 2048。
输入最后一个扇区编号,按回车键。
本示例中,仅创建一个分区,直接按回车键,采用默认值。
输入p 查看该数据盘的规划分区情况。
输入 w 开始分区,并在完成分区后退出。

查看新的分区运行以下命令。

1
$ fdisk -lu /dev/vdb

格式化新分区使用以下对新分区进行格式化,格式化的时间根据硬盘大小有所不同。

1
$ mkfs -t ext4 /dev/vdb1

3. 挂载

挂载到指定文件夹

1
2
# 创建文件夹
$ mkdir /webdata

如果需要把数据盘单独挂载到某个文件夹,比如单独用来存放网页, 需要先创建文件夹可以修改命令中的/mnt部分为文件夹目录

添加分区信息, 实现开机自动挂载使用如下命令写入新分区信息

1
$ echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /webdata ext4 defaults 0 0 >> /etc/fstab

然后使用 cat /etc/fstab 命令查看,出现以下信息就表示写入成功。

挂载新分区使用mount -a
命令挂载新分区,然后用 df -h 命令查看,出现以下信息就说明挂载成功,可以开始使用新的分区了。

在线扩容磁盘

1、您先登录服务器执行 yum install -y cloud-utils-growpart 安装扩容工具
2、运行以下命令扩容分区。

1
2
# /dev/vda和1之间需要空格分隔
$ growpart /dev/vda 1

3、执行以下命令

1
2
# /dev/vda和1之间不要带空格
$ resize2fs /dev/vda1

4、运行以下命令检查扩容后结果。

1
$ df -Th

常见问题

  1. unexpected output in sfdisk –version [sfdisk,来自 util-linux 2.23.2]
1
2
3
4
5
6
7
8
9
10
11
12
13
# 输出之前的 $LANG 命令
$ echo $LANG
zh_CN.UTF-8

# 切换语言
$ LANG=en_US.UTF-8

# or
$ export LC_ALL=en_US.UTF-8
# or
$ localectl set-locale LANG=en_US.UTF-8
# or
$ export LANGUAGE=en_US.UTF-8

当成功扩容之后需要切回到原来的语言包

1
$ LANG=zh_CN.UTF-8

切换语言前后对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 16G 0 16G 0% /dev/shm
tmpfs tmpfs 16G 8.6M 16G 1% /run
tmpfs tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/vda1 ext4 99G 29G 65G 31% /
/dev/vdb1 ext4 296G 201G 80G 72% /storage
tmpfs tmpfs 3.1G 0 3.1G 0% /run/user/1001
$ LANG=zh_CN.UTF-8
$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 8.6M 16G 1% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/vda1 99G 29G 65G 31% /
/dev/vdb1 296G 201G 80G 72% /storage
tmpfs 3.1G 0 3.1G 0% /run/user/1001

参考

[译] 在 CentOS 7 上安装和配置 Redis

原文地址 : How to Install and Configure Redis on CentOS 7

Redis 是一个开源的内存型数据库。它可以用作数据库,缓存或消息代理,并支持各种数据结构,例如字符串,哈希,列表,集合等。Redis 通过 Redis Sentinel 提供高可用性,包括监视,通知,自动故障转移。它还使用 Redis Cluster 在多个 Redis 节点之间提供自动分区。

本教程说明了如何在 CentOS 7 服务器上安装和配置 Redis。

先决条件

在开始本教程之前,请确保您以user with sudo privileges的身份登录。

在 CentOS 7 上安装 Redis

Redis 最新版软件包不包含在默认的 CentOS Repo 中。我们将从 Remi 源安装 Redis 5.x 版。

安装非常简单,只需执行以下步骤:

1). 首先在 SSH 终端中运行以下命令来启用 Remi 存储库:

1
2
3
$ yum install epel-release yum-utils
$ yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum-config-manager --enable remi

2). 通过键入以下命令安装 Redis 软件包:

1
2
3
4
5
# 安装
$ yum install redis

# 如果是需要升级, 在操作完成以上步骤之后运行
$ yum upgrade redis

3). 安装完成后,启动 Redis 服务并启用以下命令使其在启动时自动启动:

1
2
3
$ systemctl start redis
$ sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

要检查服务的状态,请输入以下命令:

1
$ systemctl status redis

应该看到类似以下的内容:

1
2
3
4
5
6
7
8
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Sat 2018-11-24 15:21:55 PST; 40s ago
Main PID: 2157 (redis-server)
CGroup: /system.slice/redis.service
└─2157 /usr/bin/redis-server 127.0.0.1:6379

如果服务器上禁用了 IPv6,则 Redis 服务将无法启动。

恭喜,这时已经在 CentOS 7 服务器上安装并运行了 Redis。

升级

如果存在之前的数据则需要在更新之前运行下 save 方法, 将数据存储到磁盘

1
2
3
127.0.0.1:6379> save
OK
(0.78s)

配置 Redis 远程访问

默认情况下,Redis 不允许远程连接。只能从运行 Redis 的计算机 127.0.0.1 (localhost) 连接到 Redis 服务器。

仅当你要从远程主机连接到 Redis 服务器时,才执行以下步骤。如果使用单个服务器设置,并且应用程序和 Redis 在同一台计算机上运行,​​ 则不应启用远程访问。

要将 Redis 配置为接受远程连接,请使用文本编辑器打开 Redis 配置文件:

1
$ vim /etc/redis.conf

找到以开头的行,bind 127.0.0.1 然后在后面添加服务器专用 IP 地址 127.0.0.1

/etc/redis.conf

1
2
3
4
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1 192.168.121.233

192.168.121.233 替换为你的地址。保存文件并关闭编辑器。

重新启动 Redis 服务以使更改生效:

1
$ systemctl restart redis

使用以下ss命令来验证 Redis 服务器正在 监听 的端口 6379

1
2
3
$ ss -an | grep 6379
tcp LISTEN 0 128 192.168.121.233:6379 *:*
tcp LISTEN 0 128 127.0.0.1:6379 *:*

接下来,需要添加防火墙规则,以启用来自远程计算机上 TCP 端口上的访问 6379

假设正在使用FirewallD 防火墙来管理防火墙,并且希望允许从192.168.121.0/24子网进行访问,则可以运行以下命令:

1
2
3
4
$ firewall-cmd --new-zone=redis --permanent
$ firewall-cmd --zone=redis --add-port=6379/tcp --permanent
$ firewall-cmd --zone=redis --add-source=192.168.121.0/24 --permanent
$ firewall-cmd --reload

上面的命令创建一个名为 redis 的新 zone,打开端口 6379 并允许从专用网络进行访问。

此时,Redis 服务器将接受 TCP 端口 6379 上的远程连接。

确保将防火墙配置为仅接受来自受信任 IP 范围的连接。

要验证所有设置是否正确,您可以尝试使用 redis-cli 实用程序向远程计算机 ping Redis 服务器,该实用程序为 Redis 服务器提供命令行界面:

1
redis-cli -h <REDIS_IP_ADDRESS> ping

该命令应返回以下响应PONG

1
PONG

结论

恭喜你已经在 CentOS 7 服务器上成功安装了 Redis。要了解有关如何使用 Redis 的更多信息,请访问其官方文档

[转] 如何在 CentOS 7 上修改主机名

在 CentOS 中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。静态主机名也称为内核主机名,是系统在启动时从/etc/hostname 自动初始化的主机名。瞬态主机名是在系统运行时临时分配的主机名,例如,通过 DHCP 或 mDNS 服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,灵活主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如 server-a)。
在 CentOS 7 中,有个叫 hostnamectl 的命令行工具,它允许你查看或修改与主机名相关的配置。

查看主机名相关的设置

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 21ff9d4ebdd94e949b9fd6cbdb1926c0
Boot ID: 2a952e91c02841e3ae10de0d16dd3f01
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# hostnamectl status
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 21ff9d4ebdd94e949b9fd6cbdb1926c0
Boot ID: 2a952e91c02841e3ae10de0d16dd3f01
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64

查看静态、瞬态或灵活主机名

只查看静态、瞬态或灵活主机名,分别使用--static--transient--pretty选项。

1
2
3
4
5
[root@localhost ~]# hostnamectl --static
localhost.localdomain
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
[root@localhost ~]# hostnamectl --pretty

修改主机名

要同时修改所有三个主机名:静态、瞬态和灵活主机名:

1
2
3
4
5
6
[root@localhost ~]# hostnamectl set-hostname server-a
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# hostnamectl --static
server-a
[root@localhost ~]# hostnamectl --transient
server-a

就像上面展示的那样,在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。
一旦修改了静态主机名,/etc/hostname  将被自动更新。然而,/etc/hosts  不会更新以保存所做的修改,所以你每次在修改主机名后一定要手动更新/etc/hosts,之后再重启 CentOS 7。否则系统再启动时会很慢。

手动更新/etc/hosts

1
2
3
4
5
vim /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 server-a
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::1 server-a

重启 CentOS 7 之后(reboot -f )

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@server-a ~]# hostname
server-a
[root@server-a ~]# hostnamectl
Static hostname: server-a
Icon name: computer-vm
Chassis: vm
Machine ID: 21ff9d4ebdd94e949b9fd6cbdb1926c0
Boot ID: 2a952e91c02841e3ae10de0d16dd3f01
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64

如果你只想修改特定的主机名(静态,瞬态或灵活),你可以使用--static--transient--pretty选项。例如,要永久修改主机名,你可以修改静态主机名:

1
[root@localhost ~]# hostnamectl --static set-hostname server-a

重启 CentOS 7 之后(reboot -f),

1
2
3
4
5
6
7
8
[root@localhost ~]# hostnamectl --static
server-a
[root@localhost ~]# hostnamectl --transient
server-a
[root@localhost ~]# hostnamectl --pretty
server-a
[root@localhost ~]# hostname
server-a

其实,你不必重启机器以激活永久主机名修改。上面的命令会立即修改内核主机名。
注销并重新登入后在命令行提示来观察新的静态主机名

参考

[转+] CentOS 7 更新 curl 为最新版本

介绍

由于 CentOS 7 内置的 curl 和 libcurl 源为较旧的 7.29.0,不支持一些新特性且有安全性问题,所以需要更新一下, 这里使用 city-fan 的更新源来更新。

查看默认版本号

1
2
3
# curl -V
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp

更新 ca-bundle 证书

  1. 备份证书
1
# cp /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt.bak
  1. 更新并替换
1
# curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

新增 repo 源

新增 repo:

1
2
3
4
5
6
7
# rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rhel7.noarch.rpm

Retrieving http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rhel7.noarch.rpm
warning: /var/tmp/rpm-tmp.ttjkC5: Header V4 DSA/SHA1 Signature, key ID b56a8bac: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:city-fan.org-release-2-1.rhel7 ################################# [100%]

启用 city-fan.org repo:

1
2
# yum install -y yum-utils
# yum-config-manager --enable city-fan.org

更新 curl

直接使用如下命令进行更新:

1
# yum update curl --enablerepo=city-fan.org  -y

安装完成, 查看版本

1
2
# curl -V
curl 7.79.1 (x86_64-redhat-linux-gnu) libcurl/7.79.1 NSS/3.53.1 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.10.0 nghttp2/1.33.0 OpenLDAP/2.4.44

QA:

  1. 如果提示缺少依赖  libnghttp2.so.14()(64bit)

    错误:软件包:libcurl-7.75.0-1.1.cf.rhel7.x86_64 (city-fan.org)
              需要:libnghttp2.so.14()(64bit)

1
# rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libnghttp2-1.33.0-1.1.el7.x86_64.rpm

这里地址是 centos7 版本, 如果是其他系统, 可以在一下路径自己寻找 https://dl.fedoraproject.org/pub/epel/

参考地址

CentOS 安装 Python

安装 pyenv

安装

1
$ curl https://pyenv.run | bash

添加到环境变量到 .bashrc

1
2
3
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

启用

1
$ source ~/.bashrc

更新

1
$ pyenv update

安装编译支持

开发工具

1
$ yum groupinstall -y "Development Tools"

openssl

如果没有安装可能会报如下错误
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
原因是 python3.7 的 ssl 模块依赖 openssl 1.0.2 或者 1.1 以上版本,如果 openssl 版本低于以上版本,将无法正常安装 python3.7 的 ssl 模块

这里我们安装最新版的 openssl 模块, 下载地址 : https://www.openssl.org/source/

1
2
3
4
5
6
$ sudo wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz
$ sudo tar -xzvf openssl-1.1.1l.tar.gz
$ cd openssl-1.1.1l
$ sudo ./config --prefix=/usr --openssldir=/usr/openssl shared
$ sudo make
$ sudo make install

开发包

用于编译的时候对这些功能进行支持

1
$ yum install readline-devel zlib-devel sqlite-devel libffi-devel

使用 pyenv 安装 最新版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ pyenv install --list
...
3.9.7
3.9.8
3.10.0
3.10-dev
3.11.0a2
...

$ pyenv install 3.10.0 -vvv
$ pyenv global 3.10.0

$ python3
Python 3.10.0 (default, Nov 8 2021, 08:25:47) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

安装成功

FAQ

ModuleNotFoundError: No module named ‘_ctypes’

Python3 中有个内置模块叫 ctypes,它是 Python3 的外部函数库模块,它提供兼容 C 语言的数据类型,并通过它调用 Linux 系统下的共享库(Shared library),此模块需要使用 CentOS7 系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。
由于在 CentOS7 系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装 pip 的时候就报了”ModuleNotFoundError: No module named ‘_ctypes’”的错误

1
$  yum install libffi-devel -y

然后再重新安装 python3

参考

CentOS 进行服务器完善和升级

系统软件安装以及升级

基础工具安装

1
2
3
4
5
6
# normal tools
$ yum install wget vim yum-utils gcc
# autojump
$ yum install autojump
# zip
$ yum install zip unzip

升级 curl 为最新版本

查看文章 : CentOS 7 更新 curl 为最新版本

源添加和更换

CentOS 镜像
CentOS,是基于 Red Hat Linux 提供的可自由使用源代码的企业级 Linux 发行版本;是一个稳定,可预测,可管理和可复制的免费企业级计算平台。

1
2
# 更换为 aliyun 提高下载速度, 设置aliyun库
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

Remi 镜像

Remi repository 是包含最新版本 PHP 和 MySQL 包的 Linux 源,由 Remi 提供维护
官方源 : https://rpms.remirepo.net/
Aliyun : https://developer.aliyun.com/mirror/remi

1
2
3
4
5
# 设置 remi 库 , 二选一
# official
$ yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# aliyun mirror
$ yum install https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm

系统升级

1
2
3
4
5
6
# 更新元数据
$ yum makecache

# 更新和升级
$ yum update
$ yum upgrade

关闭 Seliunx

这里遇到一个坑, 如果不关闭 SELinux, 可能会遇到开发的坑.
检查 SELinux 是否在运行:

1
$ getenforce

下次重启前禁用 SELinux:

1
$ setenforce Permissive

重新启动 Nginx,看看问题是否仍然存在。如果您想永久更改 Selinux 设置,可以编辑 /etc/sysconfig/selinux

其他参考

Centos 使用 pip3 安装/升级 supervisor

安装的时候, 因为国内外访问环境不同, 可能会出现国内访问速度慢情况, 可以考虑更换源 : 更换镜像源 , 加速 python 安装

安装 Python3

1
2
$ yum install vim git yum-utils python3 python3-devel
$ pip3 install --upgrade pip

安装 Supervisor

安装 Supervisor

1
$ pip3 install supervisor

这里安装完成之后, 执行文件在 /usr/local/bin/ 目录下, 这个目录下存在三个文件

1
2
3
echo_supervisord_conf    # 输出配置文件
supervisorctl # supervisor 控制
supervisord # supervisor 守护进程

如果使用 sudo pip3 install --user supervisor 进行安装,则安装的目录会在 ~/.local/bin 目录下, 这里我们选择使用 root 用户来安装, 然后运行.

使用之前版本或者是 yum 安装的版本安装的位置一般会在 /usr/bin 目录下, 如果是多版本 supervisor 可以通过路径来进行区分

增加配置文件

1
2
# 生成配置文件
$ echo_supervisord_conf > /etc/supervisord.conf

增加服务管理

使用 systemctl 来启动 supervisor,文件内容

文件地址: initscripts/centos-systemd-etcs

1
$ vim /usr/lib/systemd/system/supervisord.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

启动 Supervisord

1
2
3
# 如果对 supervisord.service 中更改了路径, 则需要重新加载内容
$ systemctl daemon-reload
$ systemctl start supervisord

参考

常用的命令

1
2
3
4
5
supervisorctl stop program
supervisorctl start program
supervisorctl restart program
supervisorctl status
supervisorctl reload

升级

升级的逻辑是安装新的版本, 然后删除旧版本

如果是通过 yum 安装或者 pip(2.x) 版本安装的, 则可以对老板板进行删除

1
2
3
4
$ yum remove supervisor

# 移除 python2 版本的, 如果 pip 链接到 pip3 , 则无法使用这个进行卸载
$ pip uninstall supervisor

使用非 root 用户来管理supervisor

由于默认使用非 root 用户启动服务,所以需要单独配置允许其使用。官方这个 Issue 中提到了解决方法:

Permession denied error when use supervisorctl · Issue #173 · Supervisor/supervisor · GitHub

1
2
3
4
5
$ groupadd supervisor
$ usermod -aG supervisor doraemon

$ sed -i "s/;chmod=0700/chmod=0770/" /etc/supervisord.conf
$ sed -i "s/;chown=nobody:nogroup/chown=root:supervisor/" /etc/supervisord.conf

CentOS 7 安装 nginx, php, mysql, redis, supervisor 套件

初始化系统

这里设置的用户是 duoli

在此之前现需要对 CentOS 进行服务器完善和升级

设置软件源

  • mysql
1
2
# 由于mysql 版权方面的限制, centos 7 没有内置mysql 服务器, 必须从mysql 官方进行安装
$ yum install http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
  • 设置 nginx 源

方式一:(安装 rpm:推荐)

1
$ yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

方式二:(手动创建)

源地址: nginx: Linux packages
创建 vim /etc/yum.repos.d/nginx.repo , 并且填充以下内容来安装 yum repository 库

1
2
3
4
5
6
7
8
9
10
11
12
13
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

默认情况下,使用稳定 nginx 仓库包。如果您想使用 mainline nginx 包,运行以下命令

1
$ sudo yum-config-manager --enable nginx-mainline

安装基础软件

1
2
3
# 安装常用软件
$ yum install vim git yum-utils
$ yum install redis --enablerepo=remi

安装软件以及配置

安装并配置 Mysql 数据库

1
2
# 安装 mysql server
$ yum install mysql-server

启动 mysql 并且获取密码

1
2
3
4
5
6
$ systemctl start mysqld

# mysql 5.7 在安装完成的时候会生成一个临时密码, 我们需要找到错误日志 `/var/log/mysqld.log`来获取这个临时密码
# use below command to see the password:
$ grep 'temporary password' /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: m#mMbdga&9Zn

初始化 mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: ******

New password: ******

Re-enter new password: ******

The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : *

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N


... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N

... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Success.

All done!

设置密码的方法

1
2
3
$ mysql -uroot -p******
mysql> set password for 'root'@'localhost' = password('markzhao123456');
mysql> exit

配置数据库用户

1
2
3
4
CREATE USER 'remote'@'%' IDENTIFIED WITH mysql_native_password AS 'U*OSy)iKk$XO9dMB';
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `1dailian\_v2`.* TO 'remote'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES

让用户可以远程访问
在 my.conf 中 [mysqld] 部分增加以下行并重启 mysqld

1
bind-address=0.0.0.0

开机自启动

1
$ systemctl enable mysqld

安装并配置 nginx

安装 Nginx

1
2
# 安装 nginx
$ yum install nginx --enablerepo=nginx

配置 nginx 时候的运行组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/nginx/nginx.conf
user duoli;

# max upload setting
http {
# http level
client_max_body_size 20m;

server{
# server level
client_max_body_size 20m;
}

}

这里需要注意 nginx 缓存目录的权限需要和运行用户一致

1
2
3
4
# 目录位置
/var/cache/nginx
/var/lib/nginx
/var/log/nginx

配置 nginx 虚拟主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server{
listen 80;
# 如果这里是 IP, 则才会允许访问, 否则, 扯破牛蛋也访问不到
server_name www.domain.com ;
index index.php index.html;
root /webdata/www/domain/public;

# 这里注意和服务器自带不同的是
# fastcgi_param SCRIPT_FILENAME /scripts/$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 会导致 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ .*\.(js|css)?$ {
expires 12h;
}


access_log /webdata/logs/domain.access.log main;
error_log /webdata/logs/domain.error.log;
}

安装并配置 php

1
2
3
# 安装 php 基于 remi , 所以需要安装 remi 源
# 如果需要安装其他版本, 则需要将 repo=remi-php7x
$ yum install --enablerepo=remi-php74 php php-pdo php-fpm php-mbstring php-pecl-mcrypt php-gd php-mysqli php-zip php-bcmath php-xml

配置 php-fpm 权限

1
2
3
# /etc/php-fpm.d/www.conf
user = duoli
group = duoli

配置 php.ini

1
2
3
4
5
# 时区
date.timezone = Asia/Shanghai
# upload
post_max_size = 20M
upload_max_filesize = 20M

配置 session 是可写状态

1
$ chown -R duoli:duoli /var/lib/php/

配置系统端口允许访问并加入自启动

配置的端口有 9023/9024/80/3306 等

1
2
3
4
5
6
7
8
9
10
11
# 配置 http
$ firewall-cmd --permanent --zone=public --add-service=http
# 配置 3306
$ firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重启 防火墙
$ firewall-cmd --reload

# 如未启动服务, 可启动服务
$ systemctl start php-fpm mysqld nginx supervisord redis
# 开机启动
$ systemctl enable php-fpm mysqld nginx supervisord redis

补充

下载安装 mysql

获取最新下载地址:
http://dev.mysql.com/downloads/mysql/

1
2
3
4
5
6
7
# 下载
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.*-1.el7.i686.rpm
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.*-1.el7.i686.rpm

# 安装
yum localinstall mysql-community-client**.rpm
yum localinstall mysql-community-server**.rpm

mysql 更换安装目录

默认位置在:

1
/var/lib/mysql

新建目标位置并移动数据

1
2
3
4
5
6
# new dir
$ mkdir /webdata/db/
# move data
$ mv -R /var/lib/mysql /webdata/db
# permission
$ chown -R mysql.mysql /webdata/db

编辑配置文件

1
2
3
4
# vi config
$ vi /etc/my.cnf
datadir=/webdata/db/mysql
socket=/webdata/db/mysql/mysql.sock

更改 mysql 链接 socket, 否则 mysql 客户端无法使用默认配置连接

1
2
3
[client]
port=3306
socket=/webdata/db/mysql/mysql.sock

重启服务

1
2
# restart mysql
$ systemctl restart mysqld

Centos 进行 Php 升级(使用 remi-php 源)

安装启用 remi 的工具包

1
2
3
4
5
# 安装 util 工具
$ yum install yum-utils

# 启用相应的源
$ yum-config-manager --enable remi-php74

进行 PHP 升级

1
$ yum upgrade php

升级之后权限会进行重置

/var/lib/php/

1
2
3
drwxrwx--- 2 root apache 4096 10月 20 14:03 opcache
drwxrwx--- 2 root apache 4096 10月 20 14:03 session
drwxrwx--- 2 root apache 4096 10月 20 14:03 wsdlcache

更改目录权限

1
2
3
4
5
6
$ chown -R userxxx.userxxx /var/lib/php/

# 更改文件执行权限(一般升级不用)
$ vim /etc/php-fpm.d/www.conf
# user=...
# group=xxx

FAQ

File not found

nginx/apache 网页文件的 selinux 上下文需要配置, 如果未配置则日志中返回的错误是 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, 暴力解决方法: 关闭

1
$ vim /etc/sysconfig/selinux

设置为禁用

1
2
3
4
5
6
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled

补充附录

变更记录

2021-10-28

  • 增加权限改动示例

2019-09-20

  • pip 更新为 pip3, 不使用 python2
  • 加入 redis

2019-04-03

  • redis 使用 remi 安装最新版
  • supervisor 使用 pip 安装最新版, 系统自带的版本较低
  • supervisor 启动加入自己写入配置文件

2016-10-05

  • 第一版版本

参考文章