CentOS8下安装、卸载、切换 PHP 版本

From: https://www.cnblogs.com/cinlap/p/12801076.html

主题

新购了一台 CentOS8 的云服务器,使用 yum install php 方式只能安装 7.2 版本的 PHP 且无 mysql 扩展,采取的方法是卸载已有 PHP + 重装更新版本的 PHP
本文参考文档在CentOS 8上安装PHP 7.2、PHP 7.3、PHP 7.4的方法

停止并卸载 PHP

本机已存在的 PHP 是通过 yum 安装的 7.2 版本,使用命令停止它

systemctl stop php-fpm

卸载它

# 输入
yum remove php

# 输出
Dependencies resolved.
=================================================================================================================
 Package                   Architecture  Version                                         Repository         Size
=================================================================================================================
Removing:
 php                       x86_64        7.2.11-2.module_el8.1.0+209+03b9a8ff            @AppStream        5.5 M
Removing unused dependencies:
 apr                       x86_64        1.6.3-9.el8                                     @AppStream        293 k
 apr-util                  x86_64        1.6.1-6.el8                                     @AppStream        231 k
 apr-util-bdb              x86_64        1.6.1-6.el8                                     @AppStream         12 k
 apr-util-openssl          x86_64        1.6.1-6.el8                                     @AppStream         20 k
 centos-logos-httpd        noarch        80.5-2.el8                                      @AppStream        1.9 k
 httpd                     x86_64        2.4.37-16.module_el8.1.0+256+ae790463           @AppStream        5.4 M
 httpd-filesystem          noarch        2.4.37-16.module_el8.1.0+256+ae790463           @AppStream        400  
 httpd-tools               x86_64        2.4.37-16.module_el8.1.0+256+ae790463           @AppStream        211 k
 mailcap                   noarch        2.1.48-3.el8                                    @BaseOS            71 k
 mod_http2                 x86_64        1.11.3-3.module_el8.1.0+213+acce2796            @AppStream        479 k
 php-cli                   x86_64        7.2.11-2.module_el8.1.0+209+03b9a8ff            @AppStream         11 M
 php-common                x86_64        7.2.11-2.module_el8.1.0+209+03b9a8ff            @AppStream        6.2 M
 php-fpm                   x86_64        7.2.11-2.module_el8.1.0+209+03b9a8ff            @AppStream        5.7 M

Transaction Summary
=================================================================================================================
Remove  14 Packages

Freed space: 35 M
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                         1/1 
  Running scriptlet: php-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                         1/1 
  Erasing          : php-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                        1/14 
  Running scriptlet: httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                     2/14 
  Erasing          : httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                     2/14 
  Running scriptlet: httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                     2/14 
  Running scriptlet: php-fpm-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                    3/14 
  Erasing          : php-fpm-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                    3/14 
warning: /etc/php-fpm.d/www.conf saved as /etc/php-fpm.d/www.conf.rpmsave

  Running scriptlet: php-fpm-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                    3/14 
  Erasing          : httpd-tools-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                               4/14 
  Erasing          : apr-util-1.6.1-6.el8.x86_64                                                            5/14 
  Running scriptlet: apr-util-1.6.1-6.el8.x86_64                                                            5/14 
  Erasing          : php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                    6/14 
  Erasing          : httpd-filesystem-2.4.37-16.module_el8.1.0+256+ae790463.noarch                          7/14 
  Running scriptlet: httpd-filesystem-2.4.37-16.module_el8.1.0+256+ae790463.noarch                          7/14 
  Erasing          : mailcap-2.1.48-3.el8.noarch                                                            8/14 
  Erasing          : centos-logos-httpd-80.5-2.el8.noarch                                                   9/14 
  Erasing          : php-common-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                10/14 
warning: /etc/php.ini saved as /etc/php.ini.rpmsave

  Erasing          : apr-1.6.3-9.el8.x86_64                                                                11/14 
  Running scriptlet: apr-1.6.3-9.el8.x86_64                                                                11/14 
  Erasing          : apr-util-bdb-1.6.1-6.el8.x86_64                                                       12/14 
  Erasing          : apr-util-openssl-1.6.1-6.el8.x86_64                                                   13/14 
  Erasing          : mod_http2-1.11.3-3.module_el8.1.0+213+acce2796.x86_64                                 14/14 
  Running scriptlet: mod_http2-1.11.3-3.module_el8.1.0+213+acce2796.x86_64                                 14/14 
  Verifying        : apr-1.6.3-9.el8.x86_64                                                                 1/14 
  Verifying        : apr-util-1.6.1-6.el8.x86_64                                                            2/14 
  Verifying        : apr-util-bdb-1.6.1-6.el8.x86_64                                                        3/14 
  Verifying        : apr-util-openssl-1.6.1-6.el8.x86_64                                                    4/14 
  Verifying        : centos-logos-httpd-80.5-2.el8.noarch                                                   5/14 
  Verifying        : httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                     6/14 
  Verifying        : httpd-filesystem-2.4.37-16.module_el8.1.0+256+ae790463.noarch                          7/14 
  Verifying        : httpd-tools-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                               8/14 
  Verifying        : mailcap-2.1.48-3.el8.noarch                                                            9/14 
  Verifying        : mod_http2-1.11.3-3.module_el8.1.0+213+acce2796.x86_64                                 10/14 
  Verifying        : php-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                       11/14 
  Verifying        : php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                   12/14 
  Verifying        : php-common-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                13/14 
  Verifying        : php-fpm-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                   14/14 

Removed:
  php-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                                                
  apr-1.6.3-9.el8.x86_64                                                                                         
  apr-util-1.6.1-6.el8.x86_64                                                                                    
  apr-util-bdb-1.6.1-6.el8.x86_64                                                                                
  apr-util-openssl-1.6.1-6.el8.x86_64                                                                            
  centos-logos-httpd-80.5-2.el8.noarch                                                                           
  httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                                             
  httpd-filesystem-2.4.37-16.module_el8.1.0+256+ae790463.noarch                                                  
  httpd-tools-2.4.37-16.module_el8.1.0+256+ae790463.x86_64                                                       
  mailcap-2.1.48-3.el8.noarch                                                                                    
  mod_http2-1.11.3-3.module_el8.1.0+213+acce2796.x86_64                                                          
  php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                                            
  php-common-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                                         
  php-fpm-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64                                                            

Complete!

通过 DNF 方式查看可安装的 PHP 版本列表

首先先启用 Remi 存储库,该命令将启用EPEL存储库,参考[在CentOS 8/RHEL 8上安装和启用REMI存储库的方法。][2]

[2]: https://ywnz.com/linuxjc/5922.html

输入

dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

# 输出
Last metadata expiration check: 0:39:10 ago on Wed 29 Apr 2020 10:02:05 AM CST.
remi-release-8.rpm                                                                15 kB/s |  23 kB     00:01    
Dependencies resolved.
=================================================================================================================
 Package                     Architecture       Version                           Repository                Size
=================================================================================================================
Installing:
 yum-utils                   noarch             4.0.8-3.el8                       BaseOS                    64 k
 remi-release                noarch             8.1-2.el8.remi                    @commandline              23 k
Upgrading:
 centos-release              x86_64             8.1-1.1911.0.9.el8                BaseOS                    21 k
Installing dependencies:
 centos-gpg-keys             noarch             8.1-1.1911.0.9.el8                BaseOS                    12 k
 centos-repos                x86_64             8.1-1.1911.0.9.el8                BaseOS                    13 k

Transaction Summary
=================================================================================================================
Install  4 Packages
Upgrade  1 Package

Total size: 132 k
Total download size: 109 k
Is this ok [y/N]: y
Downloading Packages:
(1/4): centos-gpg-keys-8.1-1.1911.0.9.el8.noarch.rpm                             264 kB/s |  12 kB     00:00    
(2/4): centos-repos-8.1-1.1911.0.9.el8.x86_64.rpm                                288 kB/s |  13 kB     00:00    
(3/4): centos-release-8.1-1.1911.0.9.el8.x86_64.rpm                              1.5 MB/s |  21 kB     00:00    
(4/4): yum-utils-4.0.8-3.el8.noarch.rpm                                          236 kB/s |  64 kB     00:00    
-----------------------------------------------------------------------------------------------------------------
Total                                                                            128 kB/s | 109 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                         1/1 
  Running scriptlet: centos-gpg-keys-8.1-1.1911.0.9.el8.noarch                                               1/1 
  Installing       : centos-gpg-keys-8.1-1.1911.0.9.el8.noarch                                               1/6 
  Installing       : centos-repos-8.1-1.1911.0.9.el8.x86_64                                                  2/6 
  Upgrading        : centos-release-8.1-1.1911.0.9.el8.x86_64                                                3/6 
  Installing       : remi-release-8.1-2.el8.remi.noarch                                                      4/6 
  Installing       : yum-utils-4.0.8-3.el8.noarch                                                            5/6 
  Cleanup          : centos-release-8.0-0.1905.0.9.el8.x86_64                                                6/6 
  Running scriptlet: centos-release-8.0-0.1905.0.9.el8.x86_64                                                6/6 
  Verifying        : centos-gpg-keys-8.1-1.1911.0.9.el8.noarch                                               1/6 
  Verifying        : centos-repos-8.1-1.1911.0.9.el8.x86_64                                                  2/6 
  Verifying        : yum-utils-4.0.8-3.el8.noarch                                                            3/6 
  Verifying        : remi-release-8.1-2.el8.remi.noarch                                                      4/6 
  Verifying        : centos-release-8.1-1.1911.0.9.el8.x86_64                                                5/6 
  Verifying        : centos-release-8.0-0.1905.0.9.el8.x86_64                                                6/6 

Upgraded:
  centos-release-8.1-1.1911.0.9.el8.x86_64                                                                       

Installed:
  yum-utils-4.0.8-3.el8.noarch                             remi-release-8.1-2.el8.remi.noarch                   
  centos-gpg-keys-8.1-1.1911.0.9.el8.noarch                centos-repos-8.1-1.1911.0.9.el8.x86_64               

Complete!

运行命令获取所有可用 PHP 版本列表

# 输入
dnf module list php

# 输出
Remi's Modular repository for Enterprise Linux 8 - x86_64                                                                                              7.4 kB/s | 564 kB     01:15    
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64                                                                                             4.1 kB/s | 1.5 MB     06:25    
CentOS-8 - AppStream
Name                               Stream                                   Profiles                                                Summary                                            
php                                7.2 [d][e]                               common [d], devel, minimal                              PHP scripting language                             
php                                7.3                                      common, devel, minimal                                  PHP scripting language                             

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                               Stream                                   Profiles                                                Summary                                            
php                                remi-7.2                                 common [d], devel, minimal                              PHP scripting language                             
php                                remi-7.3                                 common [d], devel, minimal                              PHP scripting language                             
php                                remi-7.4                                 common [d], devel, minimal                              PHP scripting language                             

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

当前要安装 7.4 版本,要运行两个命令

# 输入
# 重置 PHP 的对标目标(个人理解)
dnf module reset php

# 输出
Last metadata expiration check: 0:07:34 ago on Wed 29 Apr 2020 10:43:54 AM CST.
Dependencies resolved.
=======================================================================================================================================================================================
 Package                                     Architecture                               Version                                      Repository                                   Size
=======================================================================================================================================================================================
Resetting modules:
 php                                                                                                                                                                                  

Transaction Summary
=======================================================================================================================================================================================

Is this ok [y/N]: y
Complete!



# 输入
# 将 PHP 的对标目标设置为新的目标版本(以前默认是7.2)
dnf module enable php:remi-7.4

# 输出
Last metadata expiration check: 0:07:43 ago on Wed 29 Apr 2020 10:43:54 AM CST.
Dependencies resolved.
=======================================================================================================================================================================================
 Package                                     Architecture                               Version                                      Repository                                   Size
=======================================================================================================================================================================================
Enabling module streams:
 php                                                                                    remi-7.4                                                                                      

Transaction Summary
=======================================================================================================================================================================================

Is this ok [y/N]: y
Complete!

安装目标版本 7.4

安装 PHP 和常用模块

# 输入
dnf module install php:remi-7.4
# 或者 dnf install php 或指定安装模块 dnf install php php-opcache php-gd php-curl php-mysqlnd
# 输出
挺长的

检查和配置

检查安装结果

# 输入
php -v

# 输出
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

设置 PHP-FPM 为系统开机启动

systemctl enable php-fpm

运行 PHP 和重启 Nginx

systemctl start php-fpm
systemctl reload nginx

使用 sudo yum install php-xxx 安装指定模块,或者 dnf search php74 指定 php74 查看相关信息,dnf search php 查看与 php 相关的软件包,php --modules 查看已安装的 php 模块

srs配置

From: https://awen.me/post/191485023.html

SRS 是一个开源的,国产的直播服务。可以去官网下载:
官网

环境

操作系统:centos 7
推流软件:obs 或 ffmpeg
拉流软件:ffplay 或 vlc

安装

如果是 centos 6 可以直接下载这个进行安装

# wget -c http://ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-2.0.239.zip

# unzip SRS-CentOS6-x86_64-2.0.239.zip
# cd SRS-CentOS6-x86_64-2.0.239
# chmod +x INSTALL
# ./INSTALL

安装在/usr/local/srs目录中,可以直接使用

/etc/init.d/srs start

启动

centos 7 需要编译

[root@adsl-172-10-100-120 opt]# wget -c https://github.com/ossrs/srs/archive/v2.0-r1.tar.gz
[root@adsl-172-10-100-120 opt]# tar zxvf v2.0-r1.tar.gz
[root@adsl-172-10-100-120 opt]# cd srs-2.0-r1/

然后进入到 trunk 目录

[root@adsl-172-10-100-120 srs-2.0-r1]# cd trunk/
[root@adsl-172-10-100-120 trunk]# ls
3rdparty  auto  conf  configure  doc  etc  ide  modules  research  scripts  src

使用 help 可以查看编译帮助文档

[root@adsl-172-10-100-120 trunk]# ./configure --help

比如我这里编译全部的模块安装到/usr/local/srs目录

[root@adsl-172-10-100-120 trunk]# ./configure --full --prefix=/usr/local/srs

然后

make && make install

进入 /usr/local/srs

[root@adsl-172-10-100-120 srs]# pwd
/usr/local/srs
[root@adsl-172-10-100-120 srs]# ./objs/
nginx/ srs
[root@adsl-172-10-100-120 srs]# ./objs/srs -c ./conf/srs.conf
[2017-05-02 17:22:56.900][trace][1949][0] XCORE-SRS/2.0.239(ZhouGuowen)
[2017-05-02 17:22:56.900][trace][1949][0] config parse complete
[2017-05-02 17:22:56.900][trace][1949][0] write log to file ./objs/srs.log
[2017-05-02 17:22:56.900][trace][1949][0] you can: tailf ./objs/srs.log
[2017-05-02 17:22:56.900][trace][1949][0] @see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLog

##推流

➜  Downloads ffmpeg -i gopro.mp4 -vcodec libx264 -acodec aac -f flv rtmp://172.10.100.120/live/lol

拉流

然后 ffplay 播放

➜  ~ ffplay rtmp://172.10.100.120/live/lol
ffplay version 3.3 Copyright (c) 2003-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, flv, from 'rtmp://172.10.100.120/live/lol':    0B f=0/0
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
    server          : SRS/2.0.239(ZhouGuowen)
    srs_primary     : SRS/1.0release
    srs_authors     : winlin,wenjie.zhao
    server_version  : 2.0.239
  Duration: N/A, start: 0.023000, bitrate: N/A
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
    Stream #0:1: Video: h264 (High), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc
   3.96 A-V:  0.082 fd=  22 aq=    0KB vq=    0KB sq=    0B f=0/0

srs 配置

[root@adsl-172-10-100-120 srs]# ls
conf  etc  objs
[root@adsl-172-10-100-120 srs]# cd conf/
[root@adsl-172-10-100-120 conf]# ls
bandwidth.conf    edge.conf                 hls.conf                  http.hooks.callback.conf  push.flv.conf               transcode2hls.audio.only.conf
console.conf      edge.token.traverse.conf  http.aac.live.conf        http.mp3.live.conf        push.mpegts.over.udp.conf   transform.edge.conf
demo.19350.conf   ffmpeg.transcode.conf     http.flv.live.conf        http.server.conf          push.rtsp.conf
demo.conf         forward.master.conf       http.flv.live.edge1.conf  http.ts.live.conf         realtime.conf
dvr.path.conf     forward.slave.conf        http.flv.live.edge2.conf  ingest.conf               rtmp.conf
dvr.segment.conf  full.conf                 http.heartbeat.conf       mac.dev.conf              security.deny.publish.conf
dvr.session.conf  hds.conf                  http.hls.conf             origin.conf               srs.conf

默认的配置文件是 srs.conf

[root@adsl-172-10-100-120 conf]# cat srs.conf
# main config for srs.
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
http_api {
    enabled         on;
    listen          1985; #默认端口1985
}
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
stats {
    network         0;
    disk            sda sdb xvda xvdb;
}
vhost __defaultVhost__ { #虚拟主机
}

如果你希望将推流的内容转换成 hls,可以参考

[root@adsl-172-10-100-120 conf]# cat hls.conf
# the config for srs to delivery hls
# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_fragment    10;
        hls_window      60;
        hls_path        ./objs/nginx/html;
        hls_m3u8_file   [app]/[stream].m3u8;
        hls_ts_file     [app]/[stream]-[seq].ts;
    }
}

更多使用方法,参考[官方维基](https://github.com/ossrs/srs/wiki/v3_CN_Home)

mp4视频播放不渐进播放的问题

mp4视频文件头中,包含一些元数据。元数据包含:视频的宽度高度、视频时长、编码格式等。mp4元数据通常在视频文件的头部,这样播放器在读取文件时会最先读取视频的元数据,然后开始播放视频。

当然也存在这样一种情况:mp4视频的元数据处于视频文件最后,这样播放器在加载视频文件时,一直读取到最后,才读取到视频信息,然后开始播放。如果缺少元数据,也是这样的情况。这就出现了mp4视频不支持边加载、边播放的问题, 当然 现在很多浏览器h5 等 都会自动处理这个问题,并自动查找到后面的元数据信息, 然后可以渐进播放, 但是flash 确无法做到,
我们 mp4info.exe, 查看这些信息

如图

moov 信息得在mdat 前面 才行
如果不是那就得处理下视频, 可以用ffmpeg 处理 自行google 很简单,
在深入说下: 应该可行方法,
1 像现在的浏览器一样 去自动查询, flash 中做 感觉没意思,都快死了,
2 服务端去检查处理, 然后返回给flash
这两个方案都比较艰巨,投入和回收不成正比, 最好还是直接转换文件简单明了 速度快,资源消耗也少.

怎样增大 Linux 系统的 open file(s) 上限

#
From: http://www.chengweiyang.cn/2015/11/14/how-to-enlarge-linux-open-files-upper-cell/

最近在工作中遇到一个问题,尝试直接将服务运行在高配(40core, 192GB;相比虚拟机来说) 的物理机上,但是发现服务打开的文件句柄达到 80 万左右就不能再开更多了。

80 万已经是一个不小的值了,通常情况下,Linux 默认的值都很小,例如:Debian 8(jessie) 给普通用户设置的 open file(s) 限制为 65536, 可以通过下面的命令查看当前限制。

$ ulimit -n
$ ulimit -Sn
$ ulimit -Hn

ulimit 是一个 shell(这里使用的是 bash) 内置命令,可以通过 type ulimit 验证。

-n 即表示查看或者设置 open file(s) 的限制,在 ulimit 中,每个限制都有两种类型:

  • -S, soft limit, 软限制,用户可以上调软限制到硬限制
  • -H, hard limit, 硬限制,非 root 用户不能修改

如果没有指明,则同时修改软限制和硬限制。

修改 ulimit

修改分为临时修改和永久修改,临时修改只对当前 session 有效,登出和重启后都恢复系统设置。

临时修改使用 ulimit 命令,以修改 open file(s) 为例。

# ulimit -n 1024000
# ulimit -n
1024000

永久修改需要修改 /etc/security/limits.conf 或者在 /etc/security/limits.d/ 目录下添加一个文件。具体格式参考 /etc/security/limits.conf,里面有详细说明。
注 新增

1
2
3
" * " 代表所有用户
* soft nofile 102400
* hard nofile 102400

open file(s) 上限

回到遇到的问题中来:服务打开 80 万个左右的文件句柄就不能再打开了。所以, 尝试将 ulimit 设置为 1000 万,结果提示出错:

# ulimit -n 10000000
-bash: ulimit: open files: cannot modify limit: Operation not permitted

注意,使用的可以 root 用户,居然没有权限,然后尝试降低到:

  • 500 万,依然错误
  • 300 万,依然错误
  • 200 万,依然错误
  • 100 万,成功了

显然,这里有一个上限,大概在 100-200 万之间。

所以,解决问题的办法,在于怎样提高这个上限!

通过一番搜索,发现 open file(s) kernel 级别有 2 个配置,分别是:

fs.nr_open,进程级别
fs.file-max,系统级别

fs.nr_open 默认设置的上限是 1048576,所以用户的 open file(s) 不可能超过这个上限。

# sysctl -w fs.nr_open=10000000
# ulimit -n 10000000
# ulimit -n
10000000

修改后即可设置更大的 open file(s) 了。

同样,对于 kernel 参数的修改,sysctl 命令修改的是当前运行时,如果需要永久修改, 则将配置添加到 /etc/sysctl.conf 中,例如:

# echo "fs.nr_open = 10000000" >> /etc/sysctl.conf
# echo "fs.file-max = 11000000" >> /etc/sysctl.conf

注意:fs.nr_open 总是应该小于等于 fs.file-max

如果要查看当前打开的文件数,使用下面的命令:

# sysctl fs.file-nr
fs.file-nr = 1760       0       11000000

不过,增大这些值意味着能够打开更多的文件(在 Linux 中,everything is file,包括 socket),但是同时也意味着消耗更多的资源,所以基本上在物理机上才会遇到这种问题。

Aria2 安装

From: https://www.hi-linux.com/posts/49089.html

关于Aria2

Aria2是一个基于命令行的开源下载工具,支持多协议、多来源(HTTP/HTTPS、FTP、BitTorrent、Metalink协议等)、多线程的下载。它比axel优秀的地方在于完全支持BitTorrent协议,同时可以作为BitTorrent客户端来下载种子文件,支持Metalink协议,远程控制(通过web端)下载进程。

主要优势如下

高速,自动多线程下载;
断点续传;
轻量占用内存非常少,通常情况平均4~9MB内存占用(官方介绍);
多平台。支援 Win/Linux/OSX/Android 等操作系统下的部署;
模块化。分段下载引擎,文件整合速度快;
支持RPC界面远程;
全面支持BitTorrent协议;

Aria2官方项目页面:https://aria2.github.io/

安装Aria2

包安装

CentOS

默认Repo里没有Aria2,我们需要添加第三方的yum源。

安装rpmforge源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
$ rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
安装Aria2
1
$ yum -y install aria2
:rpmforge源中的版本是1.16.4,版本相对是比较低!
Ubuntu
$ sudo apt-get install aria2
MAC OS
$ brew install aria2

编译安装Aria2

依赖环境

Aria2 1.17.1以上版本要求gcc >= 4.8.3 or clang >= 3.4

安装clang

$ yum install clang #epel源

安装GCC

通过SCL安装GCC

CentOS 6

https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/

1
2
3
4
5
6
7
$ wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/rhscl-devtoolset-3-epel-6.repo
$ yum install devtoolset-3-gcc devtoolset-3-gcc-c++ devtoolset-3-binutils devtoolset-3-gcc-gfortran
$ scl enable devtoolset-3 bash #启用SCL环境中新版本GCC
$ gcc --version

编译Aria2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ wget https://github.com/aria2/aria2/releases/download/release-1.22.0/aria2-1.22.0.tar.gz
$ tar xzvf aria2-1.22.0.tar.gz
$ cd aria2-1.22.0
$ ./configure
$ make
$ make install
$ man aria2c //查看aria2c manual
验证Aria2版本
$ aria2c --version
aria2 版本 1.22.0
Copyright (C) 2006, 2015 Tatsuhiro Tsujikawa

本程序为自由软件;您可自由再版或修改它,惟须遵守 GNU 通用公共许可证,

第 2 版或更新版本(依您所愿)的条款,以自由软件基金会发布的版本为准。

我们本着希望有用的态度发行此软件,但 从未做出任何保证,甚至不暗示对

于适销性或对某一特定用途的适用性的保证。参见 GNU 通用公共许可证以获取

更多信息。

配置

已开启的特性: BitTorrent, Firefox3 Cookie, GZip, HTTPS, Message Digest, Metalink, XML-RPC

哈希算法: sha-1, sha-224, sha-256, sha-384, sha-512, md5, adler32

库: zlib/1.2.3 libxml2/2.7.6 sqlite3/3.6.20 OpenSSL/1.0.1e

编译器: gcc 4.9.2 20150212 (Red Hat 4.9.2-6)

built by x86_64-pc-linux-gnu

on May 6 2016 14:31:52

系统: Linux 2.6.32-573.12.1.el6.x86_64 #1 SMP Tue Dec 15 21:19:08 UTC 2015 x86_64

配置Aria2

创建配置文件

1
2
3
$ mkdir /etc/aria2/
$ vim /etc/aria2/aria2.conf
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#用户名
#rpc-user=user
#密码
#rpc-passwd=passwd
#上面的认证方式不建议使用,建议使用下面的token方式
#设置加密的密钥
#rpc-secret=token
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许外部访问,false的话只监听本地端口
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
rpc-listen-port=6800
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#断开速度过慢的连接
#lowest-speed-limit=0
#验证用,需要1.16.1之后的release版本
#referer=*
#文件保存路径, 默认为当前启动位置
dir=/root/downloads
#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=prealloc

注意将配置表中保存路径一项dir=/root/downloads替换为自己的保存位置。(Windows下类似这样dir=F:\SoftWare)

Aria2的使用

配置完成后,就可以开始使用了。

Aria2有两种模式

命令直接调用

直接在命令行下载$ aria2c "download.url", 下载完成后自动退出,就和wget 的工作方式一样。

Aria2命令行使用

使用Aria2下载文件,只需在命令后附加地址即可。如

$ aria2c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

分段下载

利用Aria2的分段下载功能可以加快文件的下载速度,对于下载大文件时特别有用。为了使用aria2的分段下载功能,你需要在命令中指定-s选项。如

$ aria2c -s 2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

这将使用2连接来下载该文件。-s后面的参数值介于1~5之间,你可以根据实际情况选择。

断点续传

在命令中使用-c选项可以断点续传文件。如

$ aria2c -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

下载torrent文件

你也可以使用Aria2下载BitTorrent文件。如

$ aria2c -o gutsy.torrent http://cdimage.ubuntu.com/daily-live/current/gutsy-desktop-i386.iso.torrent

后台下载

1
2
3
$ aria2c -D url
$ aria2c --deamon=true url

验证文件

$ aria2c --checksum=md5=别人提供的md5

BT下载

1
2
3
4
$ aria2c /tmp/CentOS-6.3-i386-bin-DVD1to2.torrent
$ aria2c http://mirrors.163.com/centos/6.6/isos/x86_64/CentOS-6.6-x86_64-minimal.torrent

列出种子内容

$ aria2c -S .torrent

下载种子内特定编号的文件

$ aria2c --select-file=1,4-7 .torrent

此处下载编号为1,4,5,6,7的文件

设置bt端口

$ aria2c --listen-port=1234 .torrent

设置dht端口

$ aria2c --dht-listen-port=1234 .torrent

下载需要引用页的文件

$ aria2c --referer=referurl url

限速下载

$ aria2c --max-download-limit=500k url //单个文件

$ aria2c --max-overall-download-limit=500k url //全局

下载需要Cookie验证的文件

$ aria2c --header='Cookie:cookie名称=cookie内容' url

$ aria2c --load-cookies=cookie文件 url

Metalink

$ aria2c http://example.org/mylinux.metalink

批量下载文本中所有URL

$ aria2c -i uris.txt

注意:当源地址存在诸如&,*等shell的特殊字符,请使用单引号或双引号把URI包含起来。

RPC Server模式(推荐)

Aria2作为后台常驻程序,监测rpc端口的活动情况,添加并下载文件。完成后继续在后台运行。

涉及到命令输入,力求简化,第二种模式明显更省事。

启动Aria2 RPC模式

命令行启动

$ aria2c --enable-rpc --rpc-listen-all --rpc-allow-origin-all -c --dir /root/downloads -D (-D daemon模式,用于后台执行)

配置文件启动(推荐)

$ aria2c --conf-path=<Path>

是指配置文件所在的绝对路径。默认位置是:$HOME/.aria2/aria2.conf

依照上述配置一路下来,具体是

$ aria2c --conf-path="/etc/aria2.conf" -D #(-D daemon模式,用于后台执行)

这时正确无误的话,Aria2就启动了。

启动脚本

为方便管理,创建一个管理脚本。

$ vi /etc/init.d/aria2

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash
#
# aria2 - this script starts and stops the aria2 daemon
#
# chkconfig: - 85 15
# description: Aria2 - Download Manager
# processname: aria2c
# config: /etc/aria2/aria2.conf
# pidfile:
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
aria2c="/usr/bin/aria2c"
ARIA2C_CONF_FILE="/etc/aria2/aria2.conf"
options=" --conf-path=$ARIA2C_CONF_FILE -D "
RETVAL=0
start() {
# code here to start the program
echo -n "Starting aria2c daemon."
${aria2c} ${options}
RETVAL=$?
echo
}
stop() {
echo -n "Shutting down aria2c daemon."
/usr/bin/killall aria2c
RETVAL=$?
echo
}
status() {
ID=$(/bin/ps -ef | grep 'aria2c' | grep -v 'grep' | awk '{print $2}')
if [[ "x$ID" != "x" ]]; then
echo "Aria2 is running."
else
echo "Aria2 is not running."
fi
}
restart() {
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "Usage: service aria2c {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL

添加可执行权限

$ chmod +x /etc/init.d/aria2

启动Aria2

$ /etc/init.d/aria2 start

搭配Aria2 Web UI

Aria2不带GUI界面。了解下载进度会有不便,日常使用需搭配Web UI工具方便查看。

webui-aria2

$ git clone https://github.com/ziahamza/webui-aria2

$ python -m SimpleHTTPServer 9999

访问这台机器的9999端口就可以了,这里为了方便用python做为WEB服务器,其它任意一种WEB服务器都是可以的。

如果你不想搭建可使用http://ziahamza.github.io/webui-aria2/,配置数据是存在本地浏览器的,不需要注册。

注意:需要根据情况设置一下Aria2 RPC的地址,一般为Aria2后台进程运行的ip:port,例如192.168.119.100:6800。

YAAW

$ git clone https://github.com/binux/yaaw

$ python -m SimpleHTTPServer 9999 #也可以使用Apache

访问这台机器的9999端口就可以了,这里为了方便用python做为WEB服务器,其它任意一种WEB服务器都是可以的。

YAAW也有线版本

http://aria2c.com/
http://binux.github.io/yaaw/demo/

注意:需要根据情况设置一下Aria2 RPC的地址,一般为Aria2后台进程运行的ip:port,例如192.168.119.100:6800。

Windows下图形版本

Aria2c Remote Control

http://sourceforge.net/projects/aria2cremote/

给jsonrpc加上验证

使用token验证(建议使用)

需要1.18.4以上版本,帐号密码方式将在后续版本中停用!

配置文件

token验证

rpc-secret=secret

命令行

使用--rpc-secret=xxxxxx选项

启用验证后,使用http://token:secret@hostname:port/jsonrpc的地址格式设置secret。

使用密码验证

需要1.15.2以上,1.18.6以下版本
1.18.4新增了--rpc-secret ,设置的RPC授权令牌, 取代--rpc-user--rpc-passwd选项

配置文件

#用户名

rpc-user=username

#密码

rpc-passwd=passwd

命令行

使用--rpc-user=user --rpc-passwd=pwd选项

启用验证后,使用http://username:passwd@hostname:port/jsonrpc的地址格式设置密码。

对于RPC模式来说, 界面和后端是分离的, 只要给后端设置密码即可. 前端认证什么的是毫无意义的。

其它相关

YAAW搭配脚本

迅雷离线(需会员账号)

Chrome Extension: ThunderLixianAssistant
UserScript: ThunderLixianExporter

旋风离线

UserScript: XuanFengEx
UserScript: LixianExporter

百度网盘

Chrome Extension: BaiduExporter
Firefox Addons: BaiduExporter
UserScript: BaiduPanDownloadHelper

115网盘

Chrome Extension: 115exporter

其他脚本

Chrome Extension

添加到aria2
Chrome Download Helper

参考文档

http://www.google.com
http://scateu.me/2015/02/12/aria2c-flashgot-firefox-jsonrpc.html
http://skypegnu1.blog.51cto.com/8991766/1637168
http://aria2c.com/usage.html
http://azeril.me/blog/Aria2.html


Linux ./configure && make && make install 编译安装和卸载

正常的编译安装/卸载:

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。

configure文件是一个可执行的脚本文件,它有很多选项,在待安装的源码目录下使用命令./configure –help可以输出详细的选项列表。

其中–prefix选项是配置安装目录,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。

如果配置了–prefix,如:
$ ./configure –prefix=/usr/local/test

安装后的所有资源文件都会被放在/usr/local/test目录中,不会分散到其他目录。

使用–prefix选项的另一个好处是方便卸载软件或移植软件;当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;而移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统下)。

当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是Makefile文件有uninstall命令(nodejs的源码包里有uninstall命令,测试版本v0.10.35)。

关于卸载:

如果没有配置–prefix选项,源码包也没有提供make uninstall,则可以通过以下方式可以完整卸载:

找一个临时目录重新安装一遍,如:
$ ./configure –prefix=/tmp/to_remove && make install

然后遍历/tmp/to_remove的文件,删除对应安装位置的文件即可(因为/tmp/to_remove里的目录结构就是没有配置–prefix选项时的目录结构)。

原文地址:
http://www.cnblogs.com/zhangbo127/p/4556008.html

在CentOS 7上搭建LNMP环境

From: https://www.mtyun.com/library/18/how-to-install-lnmp-on-centos7/

LNMP是Linux、Nginx、MySQL(MariaDB)和PHP的缩写,这个组合是最常见的WEB服务器的运行环境之一。本文将带领大家在CentOS 7操作系统上搭建一套LNMP环境。

本教程适用于CentOS 7.x版本。

在安装LNMP环境之前,您需要先对CentOS操作系统做一些初始化的工作,可以参考CentOS系统初始化设置


美团云的CentOS系统模板中配置了内网源,下载速度较快,推荐使用yum安装Nginx:

sudo yum install nginx

按照提示,输入yes后开始安装。安装完毕后,Nginx的配置文件在/etc/nginx目录下。使用以下命令启动Nginx:

sudo systemctl start nginx

检查系统中firewalld防火墙服务是否开启,如果已开启,我们需要修改防火墙配置,开启Nginx外网端口访问。

sudo systemctl status firewalld

如果显示active (running),则需要调整防火墙规则的配置。

修改/etc/firewalld/zones/public.xml文件,在zone一节中增加:

<zone>
    ...
    <service name="nginx"/>
<zone>

保存后重新加载firewalld服务:

sudo systemctl reload firewalld

您可以通过浏览器访问 http://<外网IP地址> 来确定Nginx是否已经启动。

最后将Nginx设置为开机启动:

sudo systemctl enable nginx.service

MariaDB是MySQL的一个分支,主要由开源社区进行维护和升级,而MySQL被Oracle收购以后,发展较慢。在CentOS 7的软件仓库中,将MySQL更替为了MariaDB。

我们可以使用yum直接安装MariaDB:

sudo yum install mariadb-server

安装完成之后,执行以下命令重启MariaDB服务:

sudo systemctl start mariadb

MariaDB默认root密码为空,我们需要设置一下,执行脚本:

sudo /usr/bin/mysql_secure_installation

这个脚本会经过一些列的交互问答来进行MariaDB的安全设置。

首先提示输入当前的root密码:

Enter current password for root (enter for none):

初始root密码为空,我们直接敲回车进行下一步。

Set root password? [Y/n]

设置root密码,默认选项为Yes,我们直接回车,提示输入密码,在这里设置您的MariaDB的root账户密码。

Remove anonymous users? [Y/n]

是否移除匿名用户,默认选项为Yes,建议按默认设置,回车继续。

Disallow root login remotely? [Y/n]

是否禁止root用户远程登录?如果您只在本机内访问MariaDB,建议按默认设置,回车继续。 如果您还有其他云主机需要使用root账号访问该数据库,则需要选择n

Remove test database and access to it? [Y/n]

是否删除测试用的数据库和权限? 建议按照默认设置,回车继续。

Reload privilege tables now? [Y/n]

是否重新加载权限表?因为我们上面更新了root的密码,这里需要重新加载,回车。

完成后你会看到Success!的提示,MariaDB的安全设置已经完成。我们可以使用以下命令登录MariaDB:

mysql -uroot -p

按提示输入root密码,就会进入MariaDB的交互界面,说明已经安装成功。

最后我们将MariaDB设置为开机启动。

sudo systemctl enable mariadb

我们可以直接使用yum安装PHP:

sudo yum install php-fpm php-mysql

安装完成后我们将php-fpm启动:

sudo systemctl start php-fpm

将php-fpm设置为开机启动:

sudo systemctl enable php-fpm

php安装完成之后,需要设置一下php session的目录:

sudo mkdir /var/lib/php/session/
sudo chown -R apache:apache /var/lib/php/session/

这时php-fpm已经安装完毕,但是现在需要配置一下Nginx,在/etc/nginx/conf.d目录中新建一个名为php.conf的文件,其内容为:

server {
    listen 8000;
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/php;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

然后执行以下命令使我们的配置生效:

sudo systemctl reload nginx

以上我们配置了Nginx的8000端口用来测试,如果您在美团云控制台创建机器时选择了绑定防火墙,需要检查该防火墙是否允许8000端口,如果不允许的话,您可以在防火墙设置中新增防火墙,并关联到该主机。

我们在/usr/share/php目录下新建一个名为phpinfo.php的文件用来展示phpinfo信息,文件内容为:

<?php echo phpinfo(); ?>

我们从浏览器打开 http://<外网IP地址>:8000/phpinfo.php,您就能看到phpinfo信息了,说明我们php环境已经部署成功:

验证PHP安装成功后,需要将此phpinfo.php文件删除,线上环境尽量不要暴漏使用的软件版本及路径信息,以防被入侵者利用。


使用美团云内置的yum源,我们可以快速的搭建起LNMP的环境,经过简单的安全设置,就可以达到线上服务部署的要求。

OS X终端使用配置socks5 代理

OS X终端使用配置socks5 代理

在终端环境下科学上网,本来是想用proxychains4的,可是不知道什么问题,在我的电脑osx 10.11.1下没有代理效果。
如果已经启用shadowsocks 本地代理为 socks5://127.0.0.1:1080
在终端下使用

1
export ALL_PROXY=socks5://127.0.0.1:1080

清除代理

1
unset ALL_PROXY

为了方便呢,可以在.bash_profile中加上这个

1
2
3
4
5
6
7
8
9
function setproxy() {
# export {HTTP,HTTPS,FTP}_PROXY="http://127.0.0.1:3128" 也可以设置http代理
export ALL_PROXY=socks5://127.0.0.1:1080
}
function unsetproxy() {
# unset {HTTP,HTTPS,FTP}_PROXY
unset ALL_PROXY
}

原文链接:http://www.jianshu.com/p/16d7275ec736

在 CentOS 7 下安装配置 shadowsocks

CentOS 7 开始默认使用Systemd作为开启启动脚本的管理工具,Shadowsocks则是当前比较受欢迎的科学上网工具,本文将介绍如何在 CentOS 下安装和配置 Shadowsocks 服务。


安装 pip

pip是 python 的包管理工具。在本文中将使用 python 版本的 shadowsocks,此版本的 shadowsocks 已发布到 pip 上,因此我们需要通过 pip 命令来安装。

在控制台执行以下命令安装 pip:

1
2
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python get-pip.py

安装配置 shadowsocks


在控制台执行以下命令安装 shadowsocks

1
2
$ pip install --upgrade pip
$ pip install shadowsocks

安装完成后,需要创建配置文件/etc/shadowsocks.json,内容如下:

1
2
3
4
5
6
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "uzon57jd0v869t7w",
"method": "aes-256-cfb"
}

说明:

method为加密方法,可选aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb, cast5-cfb, des-cfb, rc4-md5, chacha20, salsa20, rc4, table
server_port为服务监听端口
password为密码,可使用密码生成工具生成一个随机密码
以上三项信息在配置 shadowsocks 客户端时需要配置一致,具体说明可查看 shadowsocks 的帮助文档。

###配置自启动


新建启动脚本文件/etc/systemd/system/shadowsocks.service,内容如下:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
[Install]
WantedBy=multi-user.target

执行以下命令启动 shadowsocks 服务:

1
2
$ systemctl enable shadowsocks
$ systemctl start shadowsocks

为了检查 shadowsocks 服务是否已成功启动,可以执行以下命令查看服务的状态:

1
$ systemctl status shadowsocks -l

如果服务启动成功,则控制台显示的信息可能类似这样:

1
2
3
4
5
6
7
8
9
10
11
12
shadowsocks.service - Shadowsocks
Loaded: loaded (/etc/systemd/system/shadowsocks.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-21 23:51:48 CST; 11min ago
Main PID: 19334 (ssserver)
CGroup: /system.slice/shadowsocks.service
└─19334 /usr/bin/python /usr/bin/ssserver -c /etc/shadowsocks.json
Dec 21 23:51:48 morning.work systemd[1]: Started Shadowsocks.
Dec 21 23:51:48 morning.work systemd[1]: Starting Shadowsocks...
Dec 21 23:51:48 morning.work ssserver[19334]: INFO: loading config from /etc/shadowsocks.json
Dec 21 23:51:48 morning.work ssserver[19334]: 2015-12-21 23:51:48 INFO loading libcrypto from libcrypto.so.10
Dec 21 23:51:48 morning.work ssserver[19334]: 2015-12-21 23:51:48 INFO starting server at 0.0.0.0:8388

一键安装脚本


新建文件install-shadowsocks.sh,内容如下:

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
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
# Install Shadowsocks on CentOS 7
echo "Installing Shadowsocks..."
random-string()
{
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-32} | head -n 1
}
CONFIG_FILE=/etc/shadowsocks.json
SERVICE_FILE=/etc/systemd/system/shadowsocks.service
SS_PASSWORD=$(random-string 32)
SS_PORT=8388
SS_METHOD=aes-256-cfb
SS_IP=`ip route get 1 | awk '{print $NF;exit}'`
GET_PIP_FILE=/tmp/get-pip.py
# install pip
curl "https://bootstrap.pypa.io/get-pip.py" -o "${GET_PIP_FILE}"
python ${GET_PIP_FILE}
# install shadowsocks
pip install --upgrade pip
pip install shadowsocks
# create shadowsocls config
cat <<EOF | sudo tee ${CONFIG_FILE}
{
"server": "0.0.0.0",
"server_port": ${SS_PORT},
"password": "${SS_PASSWORD}",
"method": "${SS_METHOD}"
}
EOF
# create service
cat <<EOF | sudo tee ${SERVICE_FILE}
[Unit]
Description=Shadowsocks
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c ${CONFIG_FILE}
[Install]
WantedBy=multi-user.target
EOF
# start service
systemctl enable shadowsocks
systemctl start shadowsocks
# view service status
sleep 5
systemctl status shadowsocks -l
echo "================================"
echo ""
echo "Congratulations! Shadowsocks has been installed on your system."
echo "You shadowsocks connection info:"
echo "--------------------------------"
echo "server: ${SS_IP}"
echo "server_port: ${SS_PORT}"
echo "password: ${SS_PASSWORD}"
echo "method: ${SS_METHOD}"
echo "--------------------------------"

执行以下命令一键安装:

1
2
$ chmod +x install-shadowsocks.sh
$ ./install-shadowsocks.sh

也可以直接执行以下命令从 GitHub 下载安装脚本并执行:

1
$ bash <(curl -s http://morning.work/examples/2015-12/install-shadowsocks.sh)

安装完成后会自动打印出 Shadowsocks 的连接配置信息。比如:

1
2
3
4
5
6
7
8
Congratulations! Shadowsocks has been installed on your system.
You shadowsocks connection info:
--------------------------------
server: 10.0.2.15
server_port: 8388
password: RaskAAcW0IQrVcA7n0QLCEphhng7K4Yc
method: aes-256-cfb
--------------------------------

转自:
http://morning.work/page/2015-12/install-shadowsocks-on-centos-7.html

Centos7服务器安装nginx,mysql,php环境教程

Centos7服务器安装nginx,mysql,php环境教程

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Centos7版本的linux已经发布到7.0了,本文我们来看看在Centos7的服务器上如何安装nginx+mysql+php环境。
一、概述
项目的需要,今天在虚拟机上基于Centos安装配置了服务器运行环境,web服务用 nginx,数据库存储在mysql(使用MariaDB),动态脚本语言是php。
二、步骤
首页保证Centos7已经安装完毕,正常运行。如果没有安装,请到官网下载(http://www.centos.org/download/ )。如何安装就不在这里赘述了。接下来分5步介绍nginx,mysql,php的安装和配置。
1.第一步:安装nginx
添加centos yum源。
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装nginx
sudo yum install nginx
启动nginx服务
sudo systemctl start nginx.service
访问ip地址,如出现Nginx欢迎页面,则说明nginx已经安装并正常运行。
设置开机自动启动Nginx
sudo systemctl enable nginx.service
2.第二步:安装mysql(用MariaDB)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
安装MariaDB
sudo yum install mariadb-server mariadb
开启MariaDB
sudo systemctl start mariadb
在成功启动 MariaDB/MySQL 服务后,执行在 MariaDB/MySQL 服务包中的脚本。这一次的运行会为为数据库服务器进行一些安全强化措施,如设置(非空)的 root 密码、删除匿名用户、锁定远程访问。
sudo mysql_secure_installation
接下来在命令行会提示设置mysql用户名和密码,全选yes。
设置开机自动重启mysql
sudo systemctl enable mariadb.service
3.第三步,安装PHP
安装Php和php 扩展
sudo yum install php php-mysql php-fpm php-mbstring php-gd php-pear php-mcrypt php-mhash php-eaccelerator php-cli php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mssql php-snmp php-soap php-tidy php-common php-devel php-pecl-xdebug -y
编辑php配置文件
sudo vi /etc/php.ini
cgi.fix_pathinfo=0
设置php-fpm配置文件
sudo vi /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock
启动php-fpm服务
sudo systemctl start php-fpm
设置开机自动重启php-fpm
sudo systemctl enable php-fpm.service
4.第四步:配置nginx站点
编辑站点配置文件
sudo vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name drupaluser.org;
root /opt/data;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启nginx
sudo systemctl restart nginx
5.第五步:测试php脚本web服务
编辑测试文件
sudo vi /opt/data/info.php
访问页面,能看到php各种配置信息的话说明配置成功。
http://drupaluser.org/info.php
删除测试文件
sudo rm /opt/data/info.php
到此CentOS 7下nginx,mysql,php安装配置全部完成,可以做为web平台的应用环境使用。

转:
http://www.111cn.net/sys/CentOS/87521.htm

免费SSL证书Let's Encrypt(certbot)安装使用

Let’s Encrypt https 证书
使用

##安装方法:
如果是CentOS 6,先执行: yum install epel-release

1
2
3
4
cd /root/
wget https://dl.eff.org/certbot-auto --no-check-certificate
chmod +x ./certbot-auto
./certbot-auto -n

单域名生成证书:

1
2
./certbot-auto certonly --email 邮箱地址 --agree-tos --webroot -w /home/www/网站目录 -d www.chenzhao.date

多域名单目录生成单证书: (即一个网站多个域名使用同一个证书)

1
./certbot-auto certonly --email 邮箱地址 --agree-tos --webroot -w /home/www/网站目录 -d www.chenzhao.date -d chenzhao.date

注: 多个就-d 跟域名 加后面

多域名多目录生成多个证书: (即一次生成多个域名的多个证书)

1
./certbot-auto certonly --email 邮箱地址 --agree-tos --webroot -w /home/www/网站目录 -d www.chenzhao.date -d chenzhao.date -w /home/www/新网站文件地址 -d chenzhao.pro -d www.chenzhao.pro
1
./certbot-auto certonly --email czboosj@gmail.com --agree-tos --webroot -w /var/www/chenzhao.date -d www.chenzhao.date -d chenzhao.date

提示:
IMPORTANT NOTES:

  • Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/www.chenzhao.date/fullchain.pem. Your cert will
    expire on 2016-10-01. To obtain a new or tweaked version of this
    certificate in the future, simply run certbot-auto again. To
    non-interactively renew all of your certificates, run
    “certbot-auto renew”
  • If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
N多确定啥的一路下来 大致就这些就是ok 的
证书在
/etc/letsencrypt/live/根据你的域名生成的地址/

##证书续期
cerrbot的续期比原来的更加简单,因为证书只有90天,所以建议使用 crontab 进行自动续期:

crontab 里加上如下规则:

1
0 3 */5 * * /root/certbot-auto renew

下面的是在用规则

* */1 * * * /root/certbot-auto renew --quiet --renew-hook "systemctl restart nginx.service"

这样每5天就会执行一次续期操作。当然时间也可以自行进行调整,建议别太频繁,因为他们都有请求次数的限制。

一、Crontab的安装
1、CentOS下面安装Crontab

1
2
3
4
yum install vixie-cron crontabs //安装Crontab
chkconfig crond on //设为开机自启动
service crond start //启动

7 上面

1
2
3
4
1. 查看cron的状态,设为开机启动
$ systemctl status crond (查看状态)
$ systemctl enable crond (设为开机启动)
$ systemctl start crond (启动crond服务)

说明:vixie-cron软件包是cron的主程序;crontabs软件包是用来安装、卸装、 或列举用来驱动 cron 守护进程的表格的程序

二、Crontab使用方法

1、查看crontab定时执行任务列表

crontab -l

2、添加crontab定时执行任务

crontab -e
在里面写上命令
具体命令搜索下以后

我遇到问题是Nginx 证书配置问题

https://mozilla.github.io/server-side-tls/ssl-config-generator/ 一个配置生成地址

生成后主要修改的地方

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 443 ssl http2;
....
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/root_ca_cert_plus_intermediates;
resolver <IP DNS resolver>;
....
}

这6行中,部分文件还不存在,逐个说明。

首先是第一行 listen 443 ssl http2; 作用是启用 Nginx 的 ngxhttpv2_module 模块 支持 HTTP2,Nginx 版本需要高于 1.9.5,且编译时需要设置 –with-http_v2_module 。Arch Linux 的 Nginx 安装包中已经编译了这个模块,可以直接使用。如果你的 Linux 发行版本中的 Nginx 并不支持这个模块,可以自行 Google 如何加上。

ssl_certificate 和 ssl_certificate_key ,分别对应 fullchain.pem 和 privkey.pem,这2个文件是之前就生成好的证书和密钥。

ssl_dhparam 通过下面命令生成:

1
2
$ sudo mkdir /etc/nginx/ssl
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

(可选 反正我没弄)ssl_trusted_certificate 需要下载 Let’s Encrypt 的 Root Certificates,不过根据 Nginx 官方文档 所说,ssl_certificate 如果已经包含了 intermediates 就不再需要提供 ssltrustedcertificate 了。这一步可以省略:

1
2
3
4
$ cd /etc/letsencrypt/live/example.com
$ sudo wget https://letsencrypt.org/certs/isrgrootx1.pem
$ sudo mv isrgrootx1.pem root.pem
$ sudo cat root.pem chain.pem > root_ca_cert_plus_intermediates

resolver 的作用是 “resolve names of upstream servers into addresses”, 在這個配置中,resolver 是用來解析 OCSP 服務器的域名的,建议填写你的 VPS 提供商的 DNS 服务器,例如我的 VPN 在 Linode,DNS服务器填写:

resolver 106.187.90.5 106.187.93.5;
ip 和分析出来的dns 地址 VPS 服务商的 当时差点忘记
重启nginx
centos 7 重启命令
sudo systemctl restart nginx

在加上上面的自动获取证书应该ok了, 还有待考验