# centos7安装网站环境问题

# 最近在centos7上安装了nginx+php+mysql的环境,由于抛弃了一键脚本,自己踩了一些坑,特此记录一下。

# 说明:这些问题很多都是在启用selinux下才会出现的,如果直接关闭selinux,这些问题就都不是问题了,但是为了安全,还是不建议关闭selinux。

# 1、安装

nginx和mysql都可以直接使用yum安装,php需要添加自定义的源才行,推荐使用remi源,但是remi源默认安装的是最新版本,如果需要安装历史版本就需要使用其他方法

sudo yum install epel-release //安装 EPEL 软件包
sudo yum install yum-utils //安装 yum 扩展包

sudo yum install nginx //安装nginx

sudo yum install mariadb-client mariadb-server //安装mariadb

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm //安装 remi 源
sudo yum-config-manager --enable remi-php72 //启用 remi 仓库
sudo yum update //启用 remi 仓库
sudo yum install php72 //安装 PHP7.2
sudo yum install php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache //安装 php-fpm 和一些其他模块

安装完毕,可以使用php72 -v查看安装结果

设置php-fpm服务

sudo systemctl enable/start/stop/status php-fpm

安装php低版本: 升级yum源

CentOS 6.x

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

CentOS 7.x

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

CentOS 8.x

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

如果想删除上面安装的包,重新安装

rpm -qa | grep webstatic
rpm -e  上面搜索到的包即可

运行 yum install 安装PHP:

PHP5.5

yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 php55w-pdo.x86_64

PHP5.6

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

PHP7.0

yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64

安装PHP FPM,分别对应为PHP5.5、PHP5.6、PHP7.0

yum install php55w-fpm
yum install php56w-fpm
yum install php70w-fpm
#CentOS 8
dnf module install php:remi-7.x

启动 php-fpm

php-fpm

重启 php-fpm

kill -INT `cat /var/run/php-fpm/php-fpm.pid`

# 2、nginx自定义根目录后403

开启selinux后,nginx如果自定义了目录,那么不管怎么设置权限访问都是403,需要在自定义的根目录执行一下命令

chcon -R -u system_u /xxx/
chcon -R -t usr_t /xxx/

# 3、php无法访问

php安装完成后无法访问,需要修改nginx默认配置文件nginx.conf里面的内容,

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
修改为
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

# 4、php无法写文件

同上一条,自定义目录之后可以访问了,但是php写文件失败,需要执行以下命令

semanage fcontext -a -t public_content_rw_t "/var/www/html/test_dir(/.*)?"
restorecon -F -R -v /var/www/html/test_dir
setsebool -P allow_httpd_anon_write 1
补:2020-04-22
如果php无法使用curl请求外部地址,设置:
setsebool httpd_can_network_connect 1
补:2020-04-28
如果挂载了nfs卷,需要设置:
setsebool httpd_use_nfs=1

# 5、mysql允许外部访问

进入mysql后执行以下命令

grant all privileges on *.* to [email protected]'%' identified by "password";
flush privileges;

命令行修改mysql用户密码

update user set password=password(‘111111’) where user=’root';
flush privileges;

# 6、mariadb编码问题

yum安装mariadb后默认编码不是utf8,需要修改 首先查看目前的字符集

show variables like "%character%"

修改server编码

vi /etc/my.cnf.d/server.cnf
在server.cnf中[mysqld]添加如下代码

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

修改client编码

vi /etc/my.cnf.d/mysql-clients.cnf

mysql-clients.cnf中[mysql]中添加如下代码

[mysql]
default-character-set=utf8

# 7、修改ssh默认端口

以前的直接修改sshd_config文件里面端口的方法已经不行了,需要打开selinux端口

首先安装semanage工具,一般默认已经安装

yum provides semanage
yum -y install policycoreutils-python

添加新端口

semanage port -a -t ssh_port_t -p tcp 2048

查看是否添加成功

semanage port -l | grep ssh

在防火墙上允许新添加的端口

firewall-cmd --permanent --zone=public --add-port=2048/tcp
firewall-cmd --reload

修改ssh的config,设置为新的端口

注释掉默认的22端口,改为新端口
vi /etc/ssh/sshd_config
#Port 22
Port 2048
PermitRootLogin no //禁止root登陆
重启ssh服务
systemctl restart sshd

普通用户加入sudo组

vi /etc/sudoers
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码)
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码)
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码

# 8、mysql其他问题

把默认编码设置为 utf8mb4

更改 /etc/mysql/my.cnf
[client]
default-character-set = utf8mb4

[mysqld]
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4

[mysql]
default-character-set = utf8mb4

创建用户,授权

> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
> GRANT ALL PRIVILEGES ON mydb.* TO 'monty'@'localhost';
> FLUSH PRIVILEGES;
> quit

删除用户

> DROP USER dbadmin@localhost;

查看授权

> SHOW GRANTS FOR rfc@localhost;

删除授权

> REVOKE INSERT, UPDATE ON classicmodels.* FROM rfc@localhost;

更改密码

> ALTER USER 'user-name'@'localhost' IDENTIFIED BY 'NEW_USER_PASSWORD';
> FLUSH PRIVILEGES;

设置root密码

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';