您正在查看: CentOS 分类下的文章

CentOS7系统更换软件安装源

阿里云linux安装镜像源地址:http://mirrors.aliyun.com/ 。

第一步:备份你的原镜像文件,以免出错后可以恢复。

cp /etc/yum.repos.d/centos-Base.repo{,.backup}
# 或者
mv /etc/yum.repos.d/centos-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/

如果 wget 没有安装,运行下面命令安装 wget 软件。

yum -y install wget

安装完成更新下载源

# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

第三步:运行yum makecache生成缓存

yum clean all
yum makecache

163官方说明:

http://mirrors.163.com/
http://mirrors.163.com/.help/centos.html

中国开源镜像站点

  • 阿里云开源镜像站:http://mirrors.aliyun.com/
  • 网易开源镜像站:http://mirrors.163.com/
  • 搜狐开源镜像站:http://mirrors.sohu.com/
  • 北京交通大学:http://mirror.bjtu.edu.cn/cn/ <教育网荐>
  • 兰州大学:http://mirror.lzu.edu.cn/ <西北高校FTP搜索引擎>
  • 厦门大学:http://mirrors.xmu.edu.cn/
  • 上海交通大学:http://ftp.sjtu.edu.cn/
  • 清华大学:http://mirrors.tuna.tsinghua.edu.cn/
    • http://mirrors.6.tuna.tsinghua.edu.cn/
    • http://mirrors.4.tuna.tsinghua.edu.cn/
  • 天津大学:http://mirror.tju.edu.cn/
  • 中国科学技术大学:http://mirrors.ustc.edu.cn/
    • http://mirrors4.ustc.edu.cn/ <教育网、电信>
    • http://mirrors6.ustc.edu.cn/
  • 西南大学:http://linux.swu.edu.cn/swudownload/
  • 泰安移动:http://mirrors.ta139.com/
  • 东北大学:http://mirror.neu.edu.cn/
  • 浙江大学:http://mirrors.zju.edu.cn/
  • 东软信息学院:http://mirrors.neusoft.edu.cn/

CentOS7安装维护Nginx

nginx 安装

nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP)的协议链接。并且提供了负载均衡以及 HTTP 缓存。它的设计充分使用异步事件模型,削减上下文调度的开销,提高服务器并发能力。采用了模块化设计,提供了丰富模块的第三方模块。

所以关于 Nginx,有这些标签:「异步」「事件」「模块化」「高性能」「高并发」「反向代理」「负载均衡」

linux系统:centos 7 x64
Nginx版本:1.11.5

安装

安装依赖

prce(重定向支持)和openssl(https支持,如果不需要https可以不安装。)

yum -y install pcre*
yum -y install openssl*

centos 6.5 我安装的时候是选择的“基本服务器”,默认这两个包都没安装全,所以这两个都运行安装即可。

下载

wget http://nginx.org/download/nginx-1.11.5.tar.gz

# 如果没有安装wget
# 下载已编译版本
$ yum install wget

编译安装

然后进入目录编译安装,configure参数说明

cd nginx-1.7.8
./configure

安装报错误的话比如:“C compiler cc is not found”,这个就是缺少编译环境,安装一下就可以了 yum -y install gcc make gcc-c++ openssl-devel wget

如果没有error信息,就可以执行下边的安装了:

make
make install

nginx测试

运行下面命令会出现两个结果

./nginx -t

# nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

开机自启动

编辑 vi /lib/systemd/system/nginx.service 文件,没有创建一个 touch nginx.service 然后将如下内容根据具体情况进行修改后,添加到nginx.service文件中:

[Unit]
Description=nginx1.11.5
After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

设置开机启动,使配置生效:

systemctl enable nginx.service

运维

服务管理

# 启动
/usr/local/nginx/sbin/nginx

# 重启
/usr/local/nginx/sbin/nginx -s reload

# 关闭进程
/usr/local/nginx/sbin/nginx -s stop

# 平滑关闭nginx
/usr/local/nginx/sbin/nginx -s quit

# 查看nginx的安装状态,
/usr/local/nginx/sbin/nginx -V 

关闭防火墙,或者添加防火墙规则就可以测试了

service iptables stop

或者编辑配置文件:

vi /etc/sysconfig/iptables

添加这样一条开放80端口的规则后保存:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启服务即可:

service iptables restart

重启服务防火墙报错解决

service iptables restart
# Redirecting to /bin/systemctl restart  iptables.service
# Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.

在CentOS 7或RHEL 7或Fedora中防火墙由 firewalld 来管理,当然你可以还原传统的管理方式。或则使用新的命令进行管理。
假如采用传统请执行一下命令:

# 传统命令
systemctl stop firewalld
systemctl mask firewalld
# 安装命令
yum install iptables-services

systemctl enable iptables 
service iptables restart

nginx卸载

如果通过yum安装,使用下面命令安装。

yum remove nginx

编译安装,删除/usr/local/nginx目录即可
如果配置了自启动脚本,也需要删除。

参数说明

  • --prefix=<path> - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
  • --sbin-path=<path> - Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
  • --conf-path=<path> - 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。
  • --pid-path=<path> - 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。
  • --lock-path=<path> - nginx.lock文件的路径。
  • --error-log-path=<path> - 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 <prefix>/- logs/error.log。
  • --http-log-path=<path> - 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/- logs/access.log。
  • --user=<user> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
  • --group=<group> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
  • --builddir=DIR - 指定编译的目录
  • --with-rtsig_module - 启用 rtsig 模块
  • --with-select_module --without-select_module - Whether or not to enable the select module. This module is enabled - by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
  • //允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+), rtsig(- 实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式
  • --with-poll_module --without-poll_module - Whether or not to enable the poll module. This module is enabled by - default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
  • --with-http_ssl_module - Enable ngx_http_ssl_module. Enables SSL support and the ability to handle HTTPS requests. - Requires OpenSSL. On Debian, this is libssl-dev.
  • //开启HTTP SSL模块,使NGINX可以支持HTTPS请求。这个模块需要已经安装了OPENSSL,在DEBIAN上是libssl
  • --with-http_realip_module - 启用 ngx_http_realip_module
  • --with-http_addition_module - 启用 ngx_http_addition_module
  • --with-http_sub_module - 启用 ngx_http_sub_module
  • --with-http_dav_module - 启用 ngx_http_dav_module
  • --with-http_flv_module - 启用 ngx_http_flv_module
  • --with-http_stub_status_module - 启用 "server status" 页
  • --without-http_charset_module - 禁用 ngx_http_charset_module
  • --without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。
  • --without-http_ssi_module - 禁用 ngx_http_ssi_module
  • --without-http_userid_module - 禁用 ngx_http_userid_module
  • --without-http_access_module - 禁用 ngx_http_access_module
  • --without-http_auth_basic_module - 禁用 ngx_http_auth_basic_module
  • --without-http_autoindex_module - 禁用 ngx_http_autoindex_module
  • --without-http_geo_module - 禁用 ngx_http_geo_module
  • --without-http_map_module - 禁用 ngx_http_map_module
  • --without-http_referer_module - 禁用 ngx_http_referer_module
  • --without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。
  • --without-http_proxy_module - 禁用 ngx_http_proxy_module
  • --without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module
  • --without-http_memcached_module - 禁用 ngx_http_memcached_module
  • --without-http_limit_zone_module - 禁用 ngx_http_limit_zone_module
  • --without-http_empty_gif_module - 禁用 ngx_http_empty_gif_module
  • --without-http_browser_module - 禁用 ngx_http_browser_module
  • --without-http_upstream_ip_hash_module - 禁用 ngx_http_upstream_ip_hash_module
  • --with-http_perl_module - 启用 ngx_http_perl_module
  • --with-perl_modules_path=PATH - 指定 perl 模块的路径
  • --with-perl=PATH - 指定 perl 执行文件的路径
  • --http-log-path=PATH - Set path to the http access log
  • --http-client-body-temp-path=PATH - Set path to the http client request body temporary files
  • --http-proxy-temp-path=PATH - Set path to the http proxy temporary files
  • --http-fastcgi-temp-path=PATH - Set path to the http fastcgi temporary files
  • --without-http - 禁用 HTTP server
  • --with-mail - 启用 IMAP4/POP3/SMTP 代理模块
  • --with-mail_ssl_module - 启用 ngx_mail_ssl_module
  • --with-cc=PATH - 指定 C 编译器的路径
  • --with-cpp=PATH - 指定 C 预处理器的路径
  • --with-cc-opt=OPTIONS - Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: --with-cc-opt="-D FD_SETSIZE=2048".
  • --with-ld-opt=OPTIONS - Additional parameters passed to the linker. With the use of the system library PCRE in - FreeBSD, it is necessary to indicate --with-ld-opt="-L /usr/local/lib".
  • --with-cpu-opt=CPU - 为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, - sparc32, sparc64, ppc64
  • --without-pcre - 禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 "location" 配置指令中的正则表达式也需要 PCRE 。
  • --with-pcre=DIR - 指定 PCRE 库的源代码的路径。
  • --with-pcre-opt=OPTIONS - Set additional options for PCRE building.
  • --with-md5=DIR - Set path to md5 library sources.
  • --with-md5-opt=OPTIONS - Set additional options for md5 building.
  • --with-md5-asm - Use md5 assembler sources.
  • --with-sha1=DIR - Set path to sha1 library sources.
  • --with-sha1-opt=OPTIONS - Set additional options for sha1 building.
  • --with-sha1-asm - Use sha1 assembler sources.
  • --with-zlib=DIR - Set path to zlib library sources.
  • --with-zlib-opt=OPTIONS - Set additional options for zlib building.
  • --with-zlib-asm=CPU - Use zlib assembler sources optimized for specified CPU, valid values are: pentium, pentiumpro
  • --with-openssl=DIR - Set path to OpenSSL library sources
  • --with-openssl-opt=OPTIONS - Set additional options for OpenSSL building
  • --with-debug - 启用调试日志
  • --add-module=PATH - Add in a third-party module found in directory PATH

配置

在Centos 默认配置文件在 /usr/local/nginx-1.5.1/conf/nginx.conf 我们要在这里配置一些文件。nginx.conf是主配置文件,由若干个部分组成,每个大括号{}表示一个部分。每一行指令都由分号结束;,标志着一行的结束。

配置文件

nginx 的配置系统由一个主配置文件和其他一些辅助的配置文件构成。这些配置文件均是纯文本文件,全部位于 nginx 安装目录下的 conf 目录下。

指令由 nginx 的各个模块提供,不同的模块会提供不同的指令来实现配置。
指令除了 Key-Value 的形式,还有作用域指令。

nginx.conf 中的配置信息,根据其逻辑上的意义,对它们进行了分类,也就是分成了多个作用域,或者称之为配置指令上下文。不同的作用域含有一个或者多个配置项。

下面的这些上下文指令是用的比较多:

| Directive | Description | Contains Directive |
| ---- | ---- | ---- |
| main | nginx 在运行时与具体业务功能(比如 http 服务或者 email 服务代理)无关的一些参数,比如工作进程数,运行的身份等。 | user, worker_processes, error_log, events, http, mail |
| http | 与提供 http 服务相关的一些配置参数。例如:是否使用 keepalive 啊,是否使用 gzip 进行压缩等。 | server |
| server | http 服务上支持若干虚拟主机。每个虚拟主机一个对应的 server 配置项,配置项里面包含该虚拟主机相关的配置。在提供 mail 服务的代理时,也可以建立若干 server. 每个 server 通过监听的地址来区分。| listen, server_name, access_log, location, protocol, proxy, smtp_auth, xclient |
| location | http 服务中,某些特定的 URL 对应的一系列配置项。 | index, root |
| mail | 实现 email 相关的 SMTP/IMAP/POP3 代理时,共享的一些配置项(因为可能实现多个代理,工作在多个监听地址上)。 | server, http, imap_capabilities |
| include | 以便增强配置文件的可读性,使得部分配置文件可以重新使用。 | - |
| valid_referers | 用来校验Http请求头Referer是否有效。 | - |
| try_files | 用在server部分,不过最常见的还是用在location部分,它会按照给定的参数顺序进行尝试,第一个被匹配到的将会被使用。 | - |
| if | 当在location块中使用if指令,在某些情况下它并不按照预期运行,一般来说避免使用if指令。 | - |

例如我们再 nginx.conf 里面引用两个配置 vhost/example.com.conf 和 vhost/gitlab.com.conf 它们都被放在一个我自己新建的目录 vhost 下面。nginx.conf 配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include  vhost/example.com.conf;
    include  vhost/gitlab.com.conf;
}

简单的配置: example.com.conf

server {
    #侦听的80端口
    listen       80;
    server_name  baidu.com app.baidu.com; # 这里指定域名
    index        index.html index.htm;    # 这里指定默认入口页面
    root /home/www/app.baidu.com;         # 这里指定目录
}

内置预定义变量

Nginx提供了许多预定义的变量,也可以通过使用set来设置变量。你可以在if中使用预定义变量,也可以将它们传递给代理服务器。以下是一些常见的预定义变量,[更多详见]http://nginx.org/en/docs/varindex.html

| 变量名称 | 值 |
| ---- | ---- |
| $args_name | 在请求中的name参数 |
| $args | 所有请求参数 |
| $query_string | $args的别名 |
| $content_length | 请求头Content-Length的值 |
| $content_type | 请求头Content-Type的值 |
| $host | 如果当前有Host,则为请求头Host的值;如果没有这个头,那么该值等于匹配该请求的server_name的值 |
| $remote_addr | 客户端的IP地址 |
| $request | 完整的请求,从客户端收到,包括Http请求方法、URI、Http协议、头、请求体 |
| $request_uri | 完整请求的URI,从客户端来的请求,包括参数 |
| $scheme | 当前请求的协议 |
| $uri | 当前请求的标准化URI |

反向代理

反向代理是一个Web服务器,它接受客户端的连接请求,然后将请求转发给上游服务器,并将从服务器得到的结果返回给连接的客户端。复杂的配置: gitlab.com.conf。

server {
    #侦听的80端口
    listen       80;
    server_name  git.example.cn;
    location / {
        proxy_pass   http://localhost:3000;
        #以下是一些反向代理的配置可删除
        proxy_redirect             off;
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header           Host $host;
        client_max_body_size       10m; #允许客户端请求的最大单文件字节数
        client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
        proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
    }
}

代理到上游服务器的配置中,最重要的是proxy_pass指令。以下是代理模块中的一些常用指令:

| 指令 | 说明 |
| ---- | ---- |
| proxy_connect_timeout | Nginx从接受请求至连接到上游服务器的最长等待时间 |
| proxy_send_timeout | 后端服务器数据回传时间(代理发送超时) |
| proxy_read_timeout | 连接成功后,后端服务器响应时间(代理接收超时) |
| proxy_cookie_domain | 替代从上游服务器来的Set-Cookie头的domain属性 |
| proxy_cookie_path | 替代从上游服务器来的Set-Cookie头的path属性 |
| proxy_buffer_size | 设置代理服务器(nginx)保存用户头信息的缓冲区大小 |
| proxy_buffers | proxy_buffers缓冲区,网页平均在多少k以下 |
| proxy_set_header | 重写发送到上游服务器头的内容,也可以通过将某个头部的值设置为空字符串,而不发送某个头部的方法实现 |
| proxy_ignore_headers | 这个指令禁止处理来自代理服务器的应答。 |
| proxy_intercept_errors | 使nginx阻止HTTP应答代码为400或者更高的应答。 |

模块upstream

upstream指令启用一个新的配置区段,在该区段定义一组上游服务器。这些服务器可能被设置不同的权重,也可能出于对服务器进行维护,标记为down。

upstream  gitlab {
    ip_hash;
    server 192.168.122.11:8081 ;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001 down;
    keepalive 32;
}
server {
    #侦听的80端口
    listen       80;
    server_name  git.example.cn;
    location / {
        proxy_pass   http://gitlab;    #在这里设置一个代理,和upstream的名字一样
        #以下是一些反向代理的配置可删除
        proxy_redirect             off;
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header           Host $host;
        proxy_set_header           X-Real-IP $remote_addr;
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size       10m; #允许客户端请求的最大单文件字节数
        client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
        proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    }
}

server指令可选参数:

  1. weight:设置一个服务器的访问权重,数值越高,收到的请求也越多;
  2. fail_timeout:在这个指定的时间内服务器必须提供响应,如果在这个时间内没有收到响应,那么服务器将会被标记为down状态;
  3. max_fails:设置在fail_timeout时间之内尝试对一个服务器连接的最大次数,如果超过这个次数,那么服务器将会被标记为down;
  4. down:标记一个服务器不再接受任何请求;
  5. backup:一旦其他服务器宕机,那么有该标记的机器将会接收请求。

keepalive指令:

Nginx服务器将会为每一个worker进行保持同上游服务器的连接。

负载均衡:

upstream模块能够使用3种负载均衡算法:轮询、IP哈希、最少连接数。

轮询: 默认情况下使用轮询算法,不需要配置指令来激活它,它是基于在队列中谁是下一个的原理确保访问均匀地分布到每个上游服务器;
IP哈希: 通过ip_hash指令来激活,Nginx通过IPv4地址的前3个字节或者整个IPv6地址作为哈希键来实现,同一个IP地址总是能被映射到同一个上游服务器;
最少连接数: 通过least_conn指令来激活,该算法通过选择一个活跃数最少的上游服务器进行连接。如果上游服务器处理能力不同,可以通过给server配置weight权重来说明,该算法将考虑到不同服务器的加权最少连接数。

常见使用场景

跨域问题

在工作中,有时候会遇到一些接口不支持跨域,这时候可以简单的添加add_headers来支持cors跨域。配置如下:

server {
  listen 80;
  server_name api.xxx.com;
    
  add_header 'Access-Control-Allow-Origin' '*';
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Access-Control-Allow-Methods' 'GET,POST,HEAD';

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host  $http_host;    
  } 
}

ssl配置

超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。

HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是大型网站的专利,所有普通的个人站长和博客均可以自己动手搭建一个安全的加密的网站。

查看目前nginx编译选项

sbin/nginx -V

输出下面内容

nginx version: nginx/1.7.8
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.5.1 --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

如果依赖的模块不存在,可以输入下面命令重新编译安装。

./configure --user=www --group=www --prefix=/mt/server/nginx --with-http_stub_status_module --with-openssl=/home/nginx-1.8.0/openssl-1.0.0d --without-http-cache --with-http_ssl_module --with-http_gzip_static_module --with-...
# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate /usr/local/nginx/conf/vjjhd.crt;
    ssl_certificate_key /usr/local/nginx/conf/vjjhd.key;

    # 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 
    ssl_session_cache    shared:SSL:1m; 

    # 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
    ssl_session_timeout  5m; 
    
    # 选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
    # 这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
    ssl_ciphers  HIGH:!aNULL:!MD5;

    # 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

CentOS7安装维护Gitlab

官方安装

下面是官网复制过来的官方安装方法,最简单的安装,在我大天朝,只能望天兴叹,你可翻墙安装或者略过这里,看下面的。

  1. 安装并配置必要的依赖项

If you install Postfix to send email please select 'Internet Site' during setup. Instead of using Postfix you can also use Sendmail or configure a custom SMTP server and configure it as an SMTP server.

On centos 6 and 7, the commands below will also open HTTP and SSH access in the system firewall.

sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh
  1. 添加gitlab服务器包和安装包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

If you are not comfortable installing the repository through a piped script, you can find the entire script here and select and download the package manually and install using

curl -LJO https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-XXX.rpm/download
rpm -i gitlab-ce-XXX.rpm
  1. 配置并启动GitLab
sudo gitlab-ctl reconfigure
  1. 浏览器打开并登录

On your first visit, you'll be redirected to a password reset screen to provide the password for the initial administrator account. Enter your desired password and you'll be redirected back to the login screen.

The default account's username is root. Provide the password you created earlier and login. After login you can change the username if you wish.

第三方镜像安装

  • [Gitlab Community Edition 镜像使用帮助]https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
  • [在阿里云上通过Omnibus一键安装包安装Gitlab]https://github.com/hehongwei44/my-blog/issues/19

编辑源

新建 /etc/yum.repos.d/gitlab-ce.repo,内容为

[使用清华大学 TUNA 镜像源]https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/ 打开网址将内容复制到gitlab-ce.repo文件中,编辑路径vim /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

更新本地YUM缓存

sudo yum makecache

安装社区版

sudo yum install gitlab-ce #(自动安装最新版)
sudo yum install gitlab-ce-8.15.2-ce.0.el6 #(安装指定版本)

更改配置

vim /etc/gitlab/gitlab.rb
# 找到 external_url 'http://000.00.00.00:8081'
# 修改成你的地址

配置并启动GitLab

# 打开`/etc/gitlab/gitlab.rb`,
# 将`external_url = 'http://git.example.com'`修改为自己的IP地址:`http://xxx.xx.xxx.xx`,
# 然后执行下面的命令,对GitLab进行编译。
sudo gitlab-ctl reconfigure
# 清除缓存
sudo gitlab-rake cache:clear RAILS_ENV=production

登录GitLab

Username: root 
Password: 5iveL!fe

卸载

sudo gitlab-ctl uninstall

运维

# 修改默认的配置文件
sudo vim /etc/gitlab/gitlab.rb

# 查看版本
sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
# sysctl -p
# echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 检查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace

# 查看日志
sudo gitlab-ctl tail

# 数据库关系升级
sudo gitlab-rake db:migrate

# 清理缓存
sudo gitlab-rake cache:clear


sudo gitlab-rake gitlab:check
sudo gitlab-rake gitlab:check SANITIZE=true

# 升级gitlab
sudo yum install gitlab-ce

# 升级数据命令
sudo gitlab-ctl pg-upgrade

服务管理

# 启动所有 gitlab 组件:
sudo gitlab-ctl start

# 停止所有 gitlab 组件:
sudo gitlab-ctl stop

# 停止所有 gitlab postgresql 组件:
sudo gitlab-ctl stop postgresql

# 停止相关数据连接服务
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

# 重启所有 gitlab 组件:
sudo gitlab-ctl restart

# 重启所有 gitlab gitlab-workhorse 组件:
sudo gitlab-ctl restart  gitlab-workhorse

# 查看服务状态
sudo gitlab-ctl status

# 生成配置启动服务
sudo gitlab-ctl reconfigure

日志查看


# 查看日志
sudo gitlab-ctl tail

# 检查redis的日志
sudo gitlab-ctl tail redis
 
# 检查postgresql的日志
sudo gitlab-ctl tail postgresql
 
# 检查gitlab-workhorse的日志
sudo gitlab-ctl tail gitlab-workhorse
 
# 检查logrotate的日志
sudo gitlab-ctl tail logrotate
 
# 检查nginx的日志
sudo gitlab-ctl tail nginx
 
# 检查sidekiq的日志
sudo gitlab-ctl tail sidekiq
 
# 检查unicorn的日志
sudo gitlab-ctl tail unicorn

重置管理员密码

gitlab管理员密码忘记,怎么重置密码,Gitlab 修改root用户密码

使用rails工具打开终端

sudo gitlab-rails console production

查询用户的email,用户名,密码等信息,id:1 表示root账号

user = User.where(id: 1).first

重新设置密码

user.password = '新密码'
user.password_confirmation = '新密码' 

保存密码

user.save!

完整的操作ruby脚本

user = User.where(id: 1).first
user.password = '新密码'
user.password_confirmation = '新密码'
user.save!

备份恢复

使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单,用一条命令即可创建完整的Gitlab备份:

修改备份文件默认目录

修改/etc/gitlab/gitlab.rb来修改默认存放备份文件的目录:

gitlab_rails['backup_path'] = '/mnt/backups'  

创建备份

gitlab-rake gitlab:backup:create

以上命令将在/var/opt/gitlab/backups目录下创建一个名称类似为xxxxxxxx_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的xxxxxx是备份创建的时间戳。

修改后使用gitlab-ctl reconfigure命令重载配置文件。

开始备份

gitlab-rake gitlab:backup:create

这里放你的备份文件文件夹,和仓库源文件。

/var/opt/gitlab/backups                   # 备份文件文件夹
/var/opt/gitlab/git-data/repositories     # git仓库源文件

自动备份

通过crontab使用备份命令实现自动备份

crontab -e
# 每天2点备份gitlab数据
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

上面两行保存之后,重新载入配置

/sbin/service crond reload

备份保留七天

设置只保存最近7天的备份,编辑 /etc/gitlab/gitlab.rb 配置文件,找到如下代码,删除注释 # 保存

# /etc/gitlab/gitlab.rb 配置文件 修改下面这一行
gitlab_rails['backup_keep_time'] = 604800  

重新加载gitlab配置文件

sudo gitlab-ctl reconfigure  

开始恢复

迁移如同备份与恢复的步骤一样, 只需要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups即可(如果你没修改过默认备份目录的话)。 然后执行恢复命令。
如果修改了,首先进入备份 gitlab 的目录,这个目录是配置文件中的 gitlab_rails['backup_path'] ,默认为 /var/opt/gitlab/backups

然后停止 unicorn 和 sidekiq ,保证数据库没有新的连接,不会有写数据情况。

# 停止相关数据连接服务
gitlab-ctl stop unicorn
# ok: down: unicorn: 0s, normally up
gitlab-ctl stop sidekiq
# ok: down: sidekiq: 0s, normally up

# 从xxxxx编号备份中恢复
# 然后恢复数据,1406691018为备份文件的时间戳
gitlab-rake gitlab:backup:restore BACKUP=1406691018

# 新版本 1483533591_2017_01_04_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1483533591_2017_01_04_gitlab_backup.tar

# 启动Gitlab
sudo gitlab-ctl start  

判断是执行实际操作的gitlab相关用户:git,没有得到足够的权限。依次执行命令:

# 恢复过程中没有权限
mkdir /var/opt/gitlab/backups
chown git /var/opt/gitlab/backups
chmod 700 /var/opt/gitlab/backups

# 恢复成功页面报没有权限的错误
sudo chown -R git:git /var/opt/gitlab/git-data/repositories
sudo chmod -R ug+rwX,o-rwx /var/opt/gitlab/git-data/repositories
sudo chmod -R ug-s /var/opt/gitlab/git-data/repositories
sudo find /var/opt/gitlab/git-data/repositories -type d -print0 | sudo xargs -0 chmod g+s

暴力升级

直接编辑源 /etc/yum.repos.d/gitlab-ce.repo,安装 GitLab 社区版

sudo yum install gitlab-ce #(自动安装最新版)
sudo yum install gitlab-ce-8.15.2-ce.0.el6 #(安装指定版本)

安装过程会报错

gitlab preinstall: Automatically backing up only the GitLab SQL database (excluding everything else!)
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... pg_dump: [archiver (db)] connection to database "gitlabhq_production" failed: could not connect to server: 没有那个文件或目录
    Is the server running locally and accepting
    connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
Backup failed
[FAILED]
gitlab preinstall:
gitlab preinstall: Backup failed! If you want to skip this backup, run the following command and
gitlab preinstall: try again:
gitlab preinstall:
gitlab preinstall:   sudo touch /etc/gitlab/skip-auto-migrations
gitlab preinstall:
error: %pre(gitlab-ce-8.15.2-ce.0.el6.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package gitlab-ce-8.15.2-ce.0.el6.x86_64
error:   install: %pre scriptlet failed (2), skipping gitlab-ce-8.15.2-ce.0.el6
gitlab-ce-8.11.5-ce.0.el6.x86_64 was supposed to be removed but is not!
  Verifying  : gitlab-ce-8.11.5-ce.0.el6.x86_64                                                                                                                                                             1/2
  Verifying  : gitlab-ce-8.15.2-ce.0.el6.x86_64                                                                                                                                                             2/2

Failed:
  gitlab-ce.x86_64 0:8.11.5-ce.0.el6

看上面一堆错误,瞬间就懵逼了,看到一条救星命令让我尝试运行 sudo touch /etc/gitlab/skip-auto-migrations 于是我二逼的运行了,结果真的安装成功了,

CentOS7安装配置vsftp搭建FTP

安装配置vsftpd做FTP服务,我们的项目应用使用git管理进行迭代,公共文件软件存储使用开源网盘Seafile来管理,基本够用。想不到FTP的使用的场景,感觉它好像老去了,虽然现在基本没有用到这个工具,刚好公司公司刷一个硬件需要使用FTP来配置下载文件,于是研究使用了一下,记录了一下使用过程。

Centos7安装pip工具

下载

wget --no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz
# wget获取https的时候要加上:--no-check-certificate

安装解压

tar -zvxf 1.5.5.tar.gz    #解压文件
cd pip-1.5.5/
python setup.py install