1. 程式人生 > >CentOS7下LNMP環境搭建

CentOS7下LNMP環境搭建

換源

把最基本的源換為國內的(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檔案的命名慣例是<program-name>.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