CentOS7下LNMP环境搭建

  • 换源
    • 把最基本的源换为国内的163aliyun
    • 添加epel源
    • 添加remi源
    • 生成源的缓存
  • nginx
  • php
  • mysql
    • 修改mysql密码
  • composer
    • 安装
    • 配置环境变量
    • 配置镜像
  • redis
    • 安装redis
    • 修改配置文件
    • 启动redis
  • 防火墙
    • 查看selinux有没有关闭
    • 设置防火墙
    • 配置iptables
  • 修改linux文件最大打开数非必要设置
  • 添加用户
  • 修改php的配置
  • 修改nginx的配置文件
    • 添加一些文件
    • 修改nginxconf
    • 添加站点
    • 重启nginx
    • 配置etchosts
  • 配置文件汇总

换源

把最基本的源换为国内的(163,aliyun)

预先执行

yum install wget vim tree pstree telnet gcc cmake screen htop top lrzsz git -y

去yum的配置文件

cd /etc/yum.repos.d

根据不同的系统下不同的源
centos6的

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

或centos7的

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

首先备份yum原有源 /etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

添加epel源

epel的安装

yum install epel-release -y

添加remi源

去yum的配置文件

cd /etc/yum.repos.d

CentOS6:

wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm  
rpm -Uvh remi-release-6.rpm 

centos7:

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm

安装完成然后修改remi配置 :

vim /etc/yum.repos.d/remi.repo

将其中 [remi] 下的enabled=0改为1(11行左右),保存退出,配置完成

生成源的缓存

清理下

yum clean all

生成缓存

yum makecache

更新下系统

yum update -y

nginx

去源的配置文件

cd /etc/yum.repos.d

添加个文件

vim nginx.repo

添加这些

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

安装nginx

yum install nginx -y

nginx的一些命令

# 查看nginx的配置文件
nginx -t

# 查看nginx的版本
nginx -V

# 启动nginx(start/status/restart)(如果是centos6的话,把systemctl换为service)
systemctl start nginx

php

去源的配置文件

cd /etc/yum.repos.d

安装那个版本的php,就把那个版本的php的enable开启

安装php(cli和fpm都要安装)

yum install php php-fpm php-mysqlnd php-pear php-devel php-swoole php-mbstring php-mcrypt php-mongodb php-mysqli php-gd php-dom php-apc php-memcache php-redis php-zip

php的常见命令

# 查看安装的php模块(cli和fpm)
php -m
php-fpm -m

# 查看php的配置文件
php --ini

# 查看php的版本
php -v
php-fpm -v

# 启动php,也就是启动fpm,(cli是不需要启动的)(start/status/restart)(如果是centos6的话,把systemctl换为service)
systemctl start php-fpm

mysql

去源的配置文件

cd /etc/yum.repos.d

首先,下载rpm包

wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

安装rpm包

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

打开 mysql-community.repo 看关于mysql的内空,确定mysql57的enable是打开的

vim /etc/yum.repos.d/mysql-community.repo

安装mysql

yum install -y mysql-community-server

修改mysql密码

其实想要重置 5.7 的密码很简单:
修改 /etc/my.cnf,在 [mysqld]小节下添加一行:

skip-grant-tables=1

这一行配置让 mysqld 启动时不对密码进行验证

重启 mysqld 服务,没启动的话启动:

systemctl start mysqld
# 或
systemctl restart mysqld

切换到mysql数据库,更新 user 表:

# 运行这个命令直接回车
mysql -uroot -p

use mysql;

# password('root')单引号的换为自己的
update user set authentication_string = password('root'), password_expired = 'N', password_last_changed = now() where user = 'root';

修改 /etc/my.cnf,在 [mysqld]小节删除这一行:

skip-grant-tables=1

重启 mysqld 服务:

systemctl restart mysqld

composer

安装

命令行安装

# 下载安装脚本 - composer-setup.php - 到当前目录
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

# 执行安装过程
php composer-setup.php

# 删除安装脚本
php -r "unlink('composer-setup.php');"

执行第一条命令下载下来的 composer-setup.php 脚本将简单地检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;
然后下载最新版本的 composer.phar 文件到当前目录。

配置环境变量

将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了

sudo mv composer.phar /usr/local/bin/composer

配置镜像

修改 composer 的全局配置文件

composer config -g repo.packagist composer https://packagist.phpcomposer.com

执行之后会发现 Composer 全局的 ~/.config/composer/config.json 文件下增加了如下内容:

{
    "config": {},
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}

如果有上面的这个就表示源添加成功

redis

安装redis

yum install redis -y

修改配置文件

vim /etc/redis.conf

在vim的尾行模式下/后面跟你要查找的,就是vim的查找

先 `:set nu` 开启行数显示
查找 `protected-mode` 把他的值改为no,然后按ESC变为尾行模式
查找 `requirepass` 会有多个,有一个是单独一行的,找到那个,去掉注释,并在后面设置密码,我这边设置的是default
查找 `bind 127.0.0.1` 可能会有多个,如有没注释的,就把他们注释了

启动redis

# 启动
systemctl start redis

# 查看状态
systemctl status redis

redis的服务命令是redis-server还有客户端的redis-cli

防火墙

查看selinux有没有关闭

vim /etc/selinux/config

看这个SELINUX的值等不等于disabled

设置防火墙

centos7
先关闭firewall

#停止firewall
systemctl stop firewalld.service

#禁止firewall开机启动
systemctl disable firewalld.service

#查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --state

如果是虚拟机下面一步就不需要配置了,如果是线上需要配置下

配置iptables

安装iptables防火墙

yum install iptables-services -y

如果怕shell暴力破解,就安装这个

yum install fail2ban -y

然后修改防火墙的配置

vim /etc/sysconfig/iptables

修改为如下

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

主要是开启ssh的22,http的80,https的443,mysql的3306,redis的6379
如有需要再来添加,添加完了,需要重启iptables

# 启动iptables
systemctl start iptables

# 查看状态
systemctl status iptables

修改linux文件最大打开数(非必要设置)

进程打开文件数调优

echo "* soft nproc 65535"  >> /etc/security/limits.conf

echo "* hard nproc 65535"  >> /etc/security/limits.conf

上面是软限制
下面是硬限制

软限制突破会警告,硬限制是不能突破的

用户的最大进程数

cd /etc/security/limits.d/

看下面的那个文件

修改为

root hard nproc unlimited
root soft nproc unlimited

修改完需要重启服务器

reboot

添加用户

添加用户,默认会添加与用户同名的组
用户default

useradd default 
passwd 用户名

修改php的配置

vim /etc/php-fpm.d/www.conf

分别查找这2个user,group
把这边用户和组别设置为你添加的用户和组别

user = default
group = default

修改ini文件

vim /etc/php.ini

查找文件中display_error如果是off就改为display_error=On如果不改的话,他是代码写错了只报500服务器错误,不显示php代码错误,把错误报告开启下来

然后重启php

systemctl restart php-fpm

修改nginx的配置文件

cd /etc/nginx

添加一些文件

添加url重写文件

vim wordpress.conf

添加内容如下

location / {
     try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

添加nginx转发给php文件

vim enable-php-pathinfo.conf

添加内容如下

location ~ [^/]\.php(/|$)
{
    # 这边走的是端口转发,还有种转发给sock但是我的php-fp没有listen这个,可以自己配置,然后这边写unix:/tmp/php-cgi.sock;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
    include pathinfo.conf;
}

添加pathinfo文件

vim pathinfo

添加内容如下

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO       $path_info;
try_files $fastcgi_script_name =404;

修改nginx.conf

# 定义Nginx运行的用户和用户组,来指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行
user  default default;

#nginx进程数
worker_processes  auto;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ],其中debug输出日志最为最详细,而crit输出日志最少
error_log   /usr/local/log/nginx/error.log debug;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致,可以使用命令“ulimit -n 65535”来设置其他值。
worker_rlimit_nofile 65535;

# var/run这个文件夹包含描述系统启动以来系统信息的数据。
# 此文件夹下的文件必须在启动过程初期清除(删除或归零)。
# 程序可以在/var/run下有自己的子文件夹。原先放在/etc下的进程标识(PID)文件必须放
# 在/var/run里面。PID文件的命名惯例是.pid。所以,nginx的PID文件名为/var/run/nginx.pid。
# nginx.pid存放的是nginx的master进程的进程号。那么现在的openresty,就是openresty.pid
# 进程文件,用来指定进程id的存储文件位置
pid        /var/run/nginx.pid;

events {
    #网络工作模式有select、epoll、kqueue等。epoll和kqueue为高效模式、select为稳定模           式,只不过Linux使用epoll(首选),FreeBSD使用kqueue,传统apache使用select。
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能。
    # mac用kqueue,  linux用epoll, windows用iocp
    use epoll;

    #单个工作进程最大允许连接数
    worker_connections  65535;

    #告诉nginx收到一个新连接通知后接受尽可能多的连接。
    multi_accept on;
}

http {
    #来用设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识别文件类型
    include       mime.types;

    #默认文件类型
    default_type  application/octet-stream;

    #设定mime类型,文件传送类型由mime.type文件定义
    server_names_hash_bucket_size 128;  #保存服务器名字的hash表大小
    client_header_buffer_size 32k;      #客户端请求头部缓冲区大小
    large_client_header_buffers 4 32k;  #最大客户端头缓冲大小
    client_max_body_size 50m;           #客户端最大上传文件大小

    #开启目录列表访问,合适下载服务器,默认关闭
    autoindex off;

    #定义日志格式
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';

    #off隐藏Nginx版本号  (可用curl –I ip地址查看)
    server_tokens off;

    # 字符集
    charset UTF-8;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文             件,对于普通应用,必须设为 on。如果用来进行下载等应用磁盘IO重负载应用,可             设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;

    #这个是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的               传输出去,这样有助于解决网络堵塞。(只在sendfile on时有效)
    tcp_nopush     on;

    #防止网络阻塞
    tcp_nodelay on;

    #fastcgi设置php-fpm
    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;

    #开启gzip网络压缩
    gzip on;
    #最小压缩文件大小
    gzip_min_length  1k;
    #压缩缓冲区
    gzip_buffers     4 16k;
    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_http_version 1.1;
    #压缩等级
    gzip_comp_level 2;
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn
    gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
    gzip_vary on;
    gzip_proxied   expired no-cache no-store private auth;
    gzip_disable   "MSIE [1-6]\.";
    #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

    # 日志
    access_log  /usr/local/log/nginx/access.log  access;

    # 载入以前nginx的
    include /etc/nginx/conf.d/*;
}

创建日志文件

mkdir -p /usr/local/log/nginx

添加站点

cd /etc/nginx/conf.d

创建默认文件,以后添加站点就是把这个复制改下就行

server
    {
        # 监听端口
        listen 80;
        listen [::]:80;
        # 域名可以有多个,用空格隔开
        server_name localhost;
        index index.php index.html index.htm default.php default.htm;

        # 项目文件夹 /home/default
        root  /home/default/default/public/;

        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        # nginx转发给php
        include enable-php-pathinfo.conf;

        # url重写
        include wordpress.conf;

        # 图片缓存时间设置
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            # 过期时间1小时
            expires      1h;
        }

        # js和css缓存时间设置
        location ~ .*\.(js|css)?$
        {
            # 过期时间1小时
            expires      1h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        #设定查看Nginx状态的地址
        # location /NginxStatus {
        #    stub_status on;
        #    access_log on;
        #    auth_basic "NginxStatus";
        #    auth_basic_user_file confpasswd;
            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
        # }

        # /usr/local/var/log/nginx/
        access_log  /usr/local/log/nginx/default.log access;
    }

注意看注释,上面root和server_name,是有差异的,改为自己的

重启nginx

# 查看nginx的配置是否正确
nginx -t

# 重启nginx
systemctl restart nginx

配置/etc/hosts

如果是虚拟机,就需要配置这个,配置了这个他就他不请求外网了
如果是服务器就不要配置,自己买域名吧,做A解析吧

127.0.0.1  域名

配置文件汇总

# nginx的配置文件目录和站点配置文件目录
cd /etc/nginx/
cd /etc/nginx/conf.d/

# php的配置文件(可以用 php --ini 查看)
cd /etc/php.d/

# 查看php-fpm配置文件和子配置的目录
vim /etc/php-fpm.conf
cd /etc/php-fpm.d/

# mysql配置文件
cat /etc/my.cnf

# redis配置文件和哨兵配置文件
cat /etc/redis.conf
cat /etc/redis-sentinel.conf

# nginx的日志文件夹
cd /usr/local/log/nginx

你可能感兴趣的:(项目总结)