从零开始配置LNMP环境


2018-05-17 17:07:11 by SiKOAY with 0 comments 1 Hits
Blog 1
配置一个新的服务器:
1. 登录之后先运行更新, apt update  && apt upgrade . (此时一般为root登录).
2. 使用 useradd -s /bin/bash -d /home/userName -m userName创建一个用户
3. 使用 passwd userName 修改用户密码
4. 将添加sudo权限给用户(可选):
          进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用)
添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。
编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存退出。
撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。
注:此时就可以使用你创建的账户登录了.

5. 配置ssh免密登录:
        1.在本地机下生成公钥/私钥对。
        chen@ubuntu:~$ ssh-keygen -t rsa -P ''
        它在/home/chenlb下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
       2.将本地的ssh密钥添加至服务器。
                    chen@ubuntu:~$ ssh-copy-id sikoay@sikoay.com
          此时可通过 ssh 'sikoay@sikoay.com' 登录了
6. 配置 ssh 修改端口号, 禁止密码登录
    1. 使用vim /etc/ssh/sshd_config , 打开ssh配置文件
    2. 找到Port , 将其改为需要监听的端口号 例如: 9688 (如果设置防火墙,请同步设置)
    3. 找到PermitRootLogin 将其改为 no (禁止root登录)
    4. 找到 PasswordAuthentication 将其改为 no (禁止密码认证登录)
    5. service sshd restart , 重启ssh服务.

二.    配置PHP环境
sudo apt-get update
sudo apt-get install -y language-pack-en-base
locale-gen en_US.UTF-8


sudo apt-get install software-properties-common
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update


sudo apt-get -y install php7.1
sudo apt-get -y install php7.1-mysql
sudo apt-get install php7.1-fpm

apt-get install php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring


sudo apt-get -y install nginx

sudo apt-get -y install mysql-server
这一步安装了php,nginx和mysql. 在安装nginx的时候会出现错误,因为此时apache占用了端口.
2.停止apache 服务并设置关闭apache    开机自启
先停止apache服务: sudo service apache2 stop
我们首先要设置apache将其不作为自启项, 此时我们可以借用一个工具: sysv-rc-conf
使用apt 下载:
sudo apt install sysv-rc-conf
打开:
sudo sysv-rc-conf
找到apache2 看到第2列, 空格将其反转即可. q退出.
3.设置mysql.
    1.使用create user 创建管理员用户.
    使用root 登录mysql后,使用:
    CREATE USER 'sikoay'@'localhost' IDENTIFIED BY 'mypass';
    再使用:
    GRANT ALL ON *.* TO 'sikoay'@'localhost';
    赋予管理员权限.
    2.设置字符集为utf8mb4
    使用sudo vim /etc/mysql/conf.d/mysql.cnf 修改 mysql.cnf
[client]  
default-character-set=utf8mb4  
 
[mysqld]  
character-set-server = utf8mb4  
collation-server = utf8mb4_unicode_ci  
init_connect='SET NAMES utf8mb4'  
skip-character-set-client-handshake = true  
 
[mysql]  
default-character-set = utf8mb4  

修改保存之后, 使用 sudo service mysql restart 重启数据库.
可进入数据库中,使用 show VARIABLES like '%char%'; 查看字符集设置是否完成.
三. 配置PHP-FPM
PHP-FPM(PHP FastCGI Process Manager的简称,意思是”PHP FastCGI进程管理器)是用于管理PHP进程池的软件,用于接收和处理来自Web服务器(例如nginx)的请求.
打开php-fpm.conf
ubuntu :    /etc/php/7.1/fpm/php-fpm.conf
下面是PHP-FPM最重要的全局配置, 我建议把默认值改为下面列出的值.默认情况下,这两个设置可能被注释掉了,如果需要,去掉注释. 这两个设置的作用是, 如果在指定的一段时间内有指定个子进程失效了,让PHP-FPM主进程重启.
emergency_restart_threshold = 10
    在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程就优雅重启.
emergency_restart_interval = 1m
    设定emergency_restart_threshold设置的时间跨度.

配置进程池:
配置默认的www PHP-FPM进程池,让它以deploy用户和用户组运行.
先创建deploy用户 并让其拥有sudo权限:
adduser deploy
usermod -a -G sudo deploy
打开/etc/php/7.1/fpm/pool.d/www.conf
user = deploy
group = deploy
listen = 127.0.0.1:9000
    PHP-FPM进程池监听的IP地址和端口号,nginx配置的时候我们会再讨论这个设置.
Listen.allowed_clients = 127.0.0.1
    可以向这个PHP-FPM进程池发送请求的IP地址(一个或多个).为了安全,这个设置为127.0.0.1
pm.max_childern = 200
    这个设置设定任何时间点PHP-FPM进程池最多能有多少个进程.没有绝对正确的值,应该测试你的PHP应用确定每个PHP进程需要多少内存,然后把这个设置为你设备可用内存能容纳的PHP进程总数.
pm.start_servers = 5
    PHP-FPM启动时PHP-FPM进程池中立即可用的进程数. 对于大多数中小应用建议 3~5.
pm.min_spare_servers = 5
    PHP应用空闲时PHP-FPM中可以存在的进程数量最小值. 这个设置一般与pm.start_servers一样.
pm.max_spare_servers = 6
    PHP应用空闲时PHP-FPM进程池中可以存在的进程数量最大值.这个设置的值一般比pm.start_servers设置的值大一点.
pm.max_requests = 1000
回收进程前,PHP-FPM进程池中欧给你各个进程最多能处理的HTTP请求数量.推荐为1000
slowlog = /phth/to/slowlog.log
    这个设置是一个日志文件在文件系统的绝对路径,请替换为真实路径.
request_slowlog_timeout = 5s
如果当前HTTP请求的处理时间超过指定的值, 就把请求的回溯信息新如slowlog设置的日志文件.
然后使用 sudo service php7.1-fpm restart 重启PHP-FPM主进程.
4. nginx
虚拟主机
有接下来要为PHP应用配置一个nginx虚拟主机. 虚拟主机是一系列设置, 用于告诉nginx应用的域名,PHP应用在文件系统的什么地方, 以及如何把HTTP请求转发给PHP-FPM进程池.
请创建 /etc/nginx/sites-available/example.conf 配置文件,然后打开
server {
    listen 80;
    server_name example.com;
    index index.php;
    client_max_body_size 50M;
    error_log /var/log/apps/example/example.error.log;
    access_log /var/log/apps/example/example.access.log;
    root /var/www/example.com/current/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php {
        try_files $uri = 404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}
记得修改server_name设置, 还要把error_log, access_log和root修改为适当的路径.下面简要说明每个虚拟主机设置:
listen : 设置nginx监听哪个端口进入的HTTP请求. 大多数情况下,HTTP流量从80端口进入,HTTPS流量从443端口进入.
server_name : 用于识别虚拟主机的域名. 这个设置要设为你的应用使用的域名, 而且域名要指向服务器的IP地址. 如果HTTP请求中的Host首部的值和虚拟主机中server_name值匹配, nginx就会把这个HTTP请求发给这个虚拟主机.
index : HTTP请求URI没指定文件伺服的默认文件.
client_max_body_size : 对这个虚拟主机来说, nginx接受HTTP请求主体长度的最大值. 如果请求主体超过这个值, nginx会返回HTTP 4XX响应.
Error_log : 这个虚拟主机错误日志文件在文件系统中的路径.
access_log : 这个虚拟主机访问日志文件在文件系统中的路径.
Root : 文档根目录.
除了上述设置外, server {} 块中还有两个location块. 这两个location块的作用是,告诉nginx如何处理匹配指定URL模式的HTTP请求. Location / {} 块使用try_files指令查找匹配所请求的URI的文件;如果未找到响应文件,再超找匹配所请求URI的目录;如果也未找到相应目录, 把HTTP请求的URI重写为/index.php, 如果有查询字符串的话,还会把查询字符串附加到URI的末尾. 这个重写的URL,以及所有以.php结尾的URI,都由location ~\.php {} 块管理.
Location ~\.php {} 块把HTTP请求转发给PHP-FPM进程池处理,在这个块中将PHP请求转发到端口9000.
在Ubuntu中,我们必须执行下面的命令,在/etc/nginx/sites-enabled/目录中创建虚拟主机配置文件的符号链接:
sudo ln -s /etc/nginx/sites-available/example.conf \
     /etc/nginx/sites-enabled/example.conf
再重启服务器:
sudo service nginx restart
5.php.ini文件
打开 sudo vim /etc/php/7.1/cli/php.ini .
修改如下值:
Date:
date.timezone = Asia/Shanghai
Zend Opcache:
Opcache.memory.consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_acclerated_files = 10000
opcache.validate_timestamps = 0
opcache.revalidate_freq = 0
opcache.fast_shutdown = 1
文件上传:
file_uploads = On
upload_max_filesize = 10M
max_file_uploads = 3
最长执行时间:
max_execution_time = 30
缓冲输出:
output_buffering = 4096
implicit_flush = Off
真实路径缓存:

realpath_cache_size = 4096k


到此配置已完成..


Tags:

回复 (0)

Leave a Comment