/centos7-configuration

Record the process and pit points of centOS 7.4

Record the process and pit points of centOS 7.4

记录自己配置centOS 7.4 过程及坑点

目录


mac连接服务器

// 切换到 root 权限下
sudo -i

// 连接
ssh root@xxx.xxx.xxx.xxx

修复wget漏洞

yum update wget

全局查找

whereis xxx

测试硬盘速度

// 写入速度
dd if=/dev/zero of=./largefile bs=1M count=500
// 清理内存(读取前必须进行,不然不准确)
sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
// 读取速度
dd if=./largefile of=/dev/null bs=4k

安装lnmp

wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz

tar zxf lnmp1.4.tar.gz

cd lnmp1.4

./install.sh lnmp

// 注意的是MySQL 5.6,5.7及MariaDB 10必须在1G以上内存的更高配置上才能选择!

配置CA证书

1. 从阿里云上申请免费的ca证书(有点隐秘,需要找到“一个域名”)

2. 阿里的ca证书有一个 pem 文件和 key 文件,解压后,分别把名字改为 'ssl.pem''ssl.key'

3. Mac将本地文件上传到服务器上(在服务器中新建 /home/ssl 文件夹)
	scp -P 22 /Users/Mr.peng/Downloads/214577254120798/ssl.key root@xxx.xxx.xxx.xxx:/home/ssl
	scp -P 22 /Users/Mr.peng/Downloads/214577254120798/ssl.pem root@xxx.xxx.xxx.xxx:/home/ssl

4. 当后期若需证书改名
	cd /home/ssl
	mv ssl.key ssl2.key
	mv ssl.pem ssl2.pem

lnmp新建站点

lnpm vhost add
//ssl文件放在 /home/ssl 目录下(ss.key、ssy.pem)

lnmp删除站点

lnpm vhost del
chattr -i 网站目录/.user.ini
rm -rf 网站目录

nginx基础配置

配置站点

// 查看配置文件位置信息
nginx -V

// 站点配置文件
lnmp 默认网站配置文件:/usr/local/nginx/conf/nginx.conf
lnmp 默认网站配置文件:/usr/local/nginx/conf/nginx.conf 和 /usr/local/apache/conf/extra/httpd-vhosts.conf
lnmp 默认网站配置文件:/usr/local/apache/conf/extra/httpd-vhosts.conf
新增站点配置文件:/usr/local/nginx/conf/vhost/域名.conf

// lnmp 管理页面
/home/wwwroot/default2(已关闭,防止被攻击)

重启nginx

lnmp nginx reload
//有时候报错:
Reload service nginx... nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) done

//解决:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看nginx状态

ps -ef | grep nginx

跨域问题

在工作中,有时候会遇到一些接口不支持跨域,这时候可以简单的添加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;    
  } 
}

nginx性能优化

内容缓存

允许浏览器基本上永久地缓存静态内容。 Nginx将为您设置Expires和Cache-Control头信息。

location /static {
    root /data;
    expires max;
}

如果要求浏览器永远不会缓存响应(例如用于跟踪请求),请使用-1。

location = /empty.gif {
    empty_gif;
    expires -1;
}

Gzip压缩

gzip  on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
gzip_disable  "msie6";

打开文件缓存

open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

SSL缓存

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

上游Keepalive

upstream backend {
    server 127.0.0.1:8080;
    keepalive 32;
}
server {
    ...
    location /api/ {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

监听端口

#监听全部
netstat -ntlp

#监听81端口
netstat -inp | grep 81

安装node环境

  • 首先安装 nvm
cd /usr/local/src

//下载安装包
wget https://github.com/cnpm/nvm/archive/v0.23.0.tar.gz

//解压
tar zxvf v0.23.0.tar.gz
rm -rf v0.23.0.tar.gz
cd nvm-0.23.0

//添加全局依赖
./install.sh
source ~/.bash_profile

//查看 nvm 是否安装成功
nvm
  • 安装 node
//查看 node 版本列表
nvm ls-remote

//安装,我这里选用 v8.9.0 版本
nvm install v8.9.0

//设置为默认版本
nvm use node
nvm alias default v8.9.0

//查看 node 是否安装成功
node --version
npm --version
  • 安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm --version

防火墙配置

//查看firewalld状态(dead为未开启)
systemctl status firewalld

//开启防火墙
systemctl start firewalld

//关闭防火墙
systemctl stop firewalld

部署gitlab

首先执行上面的开启防火墙

// 安装配置ssh,配置防火墙
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

// 安装配置postfix,用于邮件通知
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

// 安装 gitlab 包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

// 修改访问路径
vim /etc/gitlab/gitlab.rb
external_url 'http://ip_address:new-port'

// 重置配置
sudo gitlab-ctl reconfigure
//往往会出现:ruby_block[supervise_redis_sleep] action run,会一直卡无法往下进行!
1、按住CTRL+C强制结束;
2、运行:sudo systemctl restart gitlab-runsvdir;
3、再次执行:sudo gitlab-ctl reconfigure

//查看当前配置信息
vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

// 开启
sudo gitlab-ctl start

# 允许81端口访问
sudo firewall-cmd --permanent --zone=public --add-port=81/tcp

常用gitlab命令

# 重新应用gitlab的配置 
sudo gitlab-ctl reconfigure 

# 重启gitlab服务 
sudo gitlab-ctl restart 

# 查看gitlab运行状态 
sudo gitlab-ctl status 

#停止gitlab服务 
sudo gitlab-ctl stop 

# 查看gitlab运行日志 
sudo gitlab-ctl tail 

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

完全卸载gitlab

# 停止进程
sudo gitlab-ctl stop

# 卸载(卸载掉ce || ee, 看情况而定)
rpm -e gitlab-ce

# 查看gitlab进程
ps aux | grep gitlab

# 杀掉进程(后面很多个点的那个进程)
kill -9 18777

# 杀掉所有 gitlab 有关的文件
find / -name gitlab | xargs rm -rf

配置gitlab

#新建站点
lnmp vhost add (git.yipage.cn)

#修改站点配置
#1.注释 index 指向
#2.添加反向代理
location ~ / {
    proxy_pass http://127.0.0.1:81
}

#测试
nginx -t

#重启
lnmp nginx reload

监听服务器性能

#安装dstat
yum -y install detat

#全局监听
dstat -antp 3

#监听消耗cpu最高,内存消耗最大的进程,每3秒打印一次
dstat -antp --top-cpu --top-mem 3

#查看谁在占用内存资源
dstat -g -l -m -s --top-mem

#关于CPU资源损耗的数据
dstat -c -y -l -proc-count --top-cpu

排查TCP/IP错误

#首先在服务器端请求网站
curl http://xxx.xxx.xxx.xxx:81

#服务器没问题,在客户端发起请求
curl http://xxx.xxx.xxx.xxx:81

#监听81端口下的网络请求包
tcpdump 'tcp port 81'

#若没有动静,说明客户端的请求没有到达服务器端,这个时候就很有可能是防火墙的问题。

#解决1:如果是自配的服务器
#查看firewalld状态(dead为未开启)
systemctl status firewalld
#开启防火墙
systemctl start firewalld
#手动打开81端口的防火墙
sudo firewall-cmd --permanent --zone=public --add-port=81/tcp

#解决2:如果是阿里云或者腾讯云的服务器,需要登录上云平台,找到服务器下的安全组,添加安全组规则,如果不知道要配置的域名是什么,将授权对象设置为 0.0.0.0/0

#解决3:可以通过访问80端口,再通过nginx反向代理到81端口,这样子就可以绕过防火墙。

部署jenkins

  • 安装 jdk
yum -y list java*
yum -y install java-1.8.0-openjdk.x86_64
java
  • 安装jenkins
#下载jenkins包
wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.107.1-1.1.noarch.rpm
rpm -ivh jenkins-2.107.1-1.1.noarch.rpm

#修改配置文件,默认端口为8080,如果不冲突则不需要修改
vim /etc/sysconfig/jenkins

#启动jenkins服务
service jenkins start

#重启jenkins
service jenkins restart

#查看jenkins密码并复制
vim /var/lib/jenkins/secrets/initialAdminPassword
  • 部署站点
#部署ca证书
#Linux : 
cd /home & mkdir ssl-build
#Mac :  
scp -P 22 /Users/Mr.peng/Downloads/ca证书/ssl-build/ssl.pem root@39.104.92.85:/home/ssl-build
scp -P 22 /Users/Mr.peng/Downloads/ca证书/ssl-build/ssl.key root@39.104.92.85:/home/ssl-build

#新建站点
lnmp vhost add ( build.yipage.cn )

#修改站点配置
#1.注释 index 指向
#2.添加代理
location ~ / {
    proxy_pass http://127.0.0.1:8090
}

#测试
nginx -t

#重启
lnmp nginx reload
  • 完全卸载 jenkins
#停止服务
sudo service jenkins stop

#卸载jenkins包
sudo yum remove jenkins

#删除偏好设置
sudo rm -r /var/lib/jenkins

部署api文档管理系统

#添加域名解析
api.yipage.cn

#传输ca证书
scp -P 22 /Users/Mr.peng/Downloads/ca证书/ssl-api/ssl.pem root@39.104.92.85:/home/ssl-api
scp -P 22 /Users/Mr.peng/Downloads/ca证书/ssl-api/ssl.key root@39.104.92.85:/home/ssl-api

#新建站点
lnmp vhost add (api.yipage.cn)

#下载eolinker开源版
cd /home/wwwroot
git clone https://github.com/padipata/eoapi.git  (3.5.0版本)
cp -rf eoapi/. api.yipage.cn/

#设置权限
chmod 777 -R api.yipage.cn/

#重启nginx
nginx -t
lnmp nginx reload

#访问
https://api.yipage.cn

MySQL

mysql 基础

### 连接数据库
/usr/local/mysql/bin/mysql root -u p

### 显示所有数据库
show databases;

### 进入数据库
use api;(数据库名)

### 显示数据表
show tables;

### 进入数据表
describe user;(表名)

### 查询当前表名
select * from user;

### 删除某条数据
DELETE FROM user WHERE email='yipage@163.com';

mysql 找回密码

#启动服务
/etc/init.d/mysql start

#停止服务
/etc/init.d/mysql stop

#重启服务
/etc/init.d/mysql restart

#登录数据库
mysql -uroot -p

#绕过密码登录(需要先停止服务)
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

#连接数据库
> use mysql; 

#修改密码
> update user set password=password("123456") where user="root";

#刷新权限
> flush privileges;

#退出
> quit;

#查看mysql日志文件
/usr/local/mysql/var/
ll
vim mysql-bin.000001

#使用lnmp修改root密码
wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh;sh reset_mysql_root_password.sh

配置项目持续集成

前提

  • 环境

jenkins

gitlab

  • 安全组

阿里云配置jenkins的安全组规则(我这里是打开8089端口)

  • jenkins环境

安装Gitlab Hook Plugin、GitLab Plugin、GitLab插件

在全局安全配置里面关闭用户提交权限

关闭禁用跨域访问

配置前端项目CI/CL

  • jenkins 配置

  • gitlab配置 进入 webhooks 配置页面

配置 jenkins 项目构建路径

进行测试

  • 注意事项
  1. jenkins 可能出现找不到 GitLab Plugin 插件的情况,其实 GitLab 插件就是 GitLab Plugin ,安装即可。
  2. gitlab webhooks 测试的时候可能会出现 403 的情况:
    1. url 书写错误,没有指向服务器
    2. jenkins 中的禁止跨域访问没有关掉
    3. jenkins 中的用户操作权限没有关掉
    4. 如果等待时间过长没反应,一般都是因为防火墙没有开启该端口,自配服务器需要手动开启端口,阿里云用户需要到安全组里面配置安全组规则

配置java项目持续集成

因为java项目需要放置tomcat中才可以运行,因此需要对文件进行移动,Jenkins默认是什么读写权限的,因此首先需要修改Jenkins的权限。

修改Jenkins配置文件

  • 打开配置文件
vim /etc/sysconfig/jenkins
  • 修改$JENKINS_USER,并去掉当前行注释
$JENKINS_USER="root"
  • 修改Jenkins相关文件夹用户权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
  • 重启Jenkins服务并检查运行Jenkins的用户是否已经切换为root

  • 重启Jenkins(若是其他方式安装的jenkins则重启方式略不同)

service jenkins restart
  • 查看Jenkins进程所属用户
ps -ef | grep jenkins

若显示为root用户,则表示修改完成

部署Docker

部署idea激活服务

各系统的激活工具下载地址:http://idea.lanyus.com

开机启动

rc.local和init.d都可以操作开机启动项

rc.local

rc.local文件头部/bin/sh修改为/bin/bash, 注意: 一定要将命令添加在exit 0之前。里面可以直接写命令或者执行Shell脚本文件sh。

如果是执行sh文件,那么要赋予执行权限sudo chmod +x xxx.sh,然后启动时加上sudo sh xxx.sh

chmod +x /etc/rc.local

exec 2> /var/log/rc.local # send stderr from rc.local to a log file  
exec 1>&2 # send stdout to the same log file  
set -x # tell sh to display commands before execution
exec /root/IntelliJIDEALicenseServer_linux_amd64 &> /dev/null &

init.d

书写符合LSB-style规范的shell

vim /etc/init.d/active

#!/bin/bash
### BEGIN INIT INFO
# Provides: test.com
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: active service
# Description: active service daemon
### END INIT INFO
/root/IntelliJIDEALicenseServer_linux_amd64 &> /dev/null &

保存上述脚本

什么是LSB风格? man chkconfig 里面由例子说明,一下为摘录

chkconfig also supports LSB-style init stanzas, and will apply them in preference to "chkconfig:" lines where available. A LSB stanza looks like:

Ubuntu开机启动

update-rc.d active.sh enable
update-rc.d active.sh disable

CentOS

通过设置chkconfig操作服务启动

chkconfig --add active
chkconfig --list
active 0:off	1:off	2:on	3:on	4:on	5:on	6:off

chkconfig --del active