介绍
- 基于centos7介绍
- 如果服务器磁盘未挂载,最好先挂载后再进行软件安装
- 软件安装和项目代码最好不要放到home的用户目录,项目迁移时可能出现目录不一致问题
- CentOS7安装:http://blog.aezo.cn/2016/11/20/linux/ubuntu/
- 阿里云常用镜像
新服务器初始化
- 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
- 决定能否访问到服务器,或服务器能否访问其他服务,取决于
服务器防火墙
和云服务器后台管理的安全组
- 云服务器一般有进站出站规则,端口开放除了系统的防火墙也要考虑进出站规则
- Centos7默认防火墙为
firewalld
,代替了原来的iptables
。更多参考network.md
- 永久关闭
SELinux
sudo vi /etc/selinux/config
将SELINUX=enforcing
改为SELINUX=disabled
后reboot重启(如:yum安装keepalived通过systemctl启动无法绑定虚拟ip,但是直接脚本启动可以绑定。关闭可systemctl启动正常绑定)- 快速修改命令
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
,并重启
- 查看磁盘分区和挂载,项目建议放到数据盘(阿里云单独购买的数据盘需要格式化才可使用)。linux系统:http://blog.aezo.cn/2016/07/21/linux/linux/
- Swap交换分区
- 校验系统时间,参考时间同步,或使用下文配置脚本.
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
设置亚洲时区 - 设置服务器编码
1 | # 增加设置成 `export LANG=en_US.UTF-8` 而不是 `export LANG=zh_CN.UTF-8`(容易中文乱码) |
- 添加用户、修改密码、设置sudo权限、su免密码:linux系统:http://blog.aezo.cn/2016/07/21/linux/linux/
1 | ## 创建常用用户,如www/nginx/mysql |
- 设置用户umask值为0022(包括root用户):linux系统:http://blog.aezo.cn/2016/07/21/linux/linux/
- 证书登录、禁用root(内部集群一般不建议,因为经常需要ssh远程登录)及密码登录、修改ssh的22端口:linux系统:http://blog.aezo.cn/2016/07/21/linux/linux/
- 修改hostname:
hostnamectl --static set-hostname aezocn
修改主机名并重启 - 更换镜像,见下文
- 内核升级(Centos7 默认使用内核版本为
3.10
,目前内核长期支持版为4.4
) yum update -y
更新软件版本和内核次版本。初始化机器可执行,生成环境不建议重复更新内核版本yum upgrade
只更新软件版本,不更新内核版本
- 常用软件安装
低配置服务器优化
内核升级
- Centos7 默认使用内核版本为
3.10
,目前内核长期支持版为4.4
,主线稳定版为5.2
^7 - 内核版本的定义
- 版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)
- 版本命名格式为 “A.B.C”
- A 是内核版本号:第一次是1994年的 1.0 版,第二次是1996年的 2.0 版,第三次是2011年的 3.0 版发布
- B 是内核主版本号:奇数为开发版,偶数为稳定版
- C 是内核次版本号
- 查看内核版本
uname -a
查看当前内核版本、指令集- 如果输出是 x86_64,那么你的系统是 64 位的 x86 架构(通常我们称之为 x64)。如果输出是 armv7l 或者以 arm 开头的其他值,那么你的系统是 ARM 架构
rpm -qa | grep kernel
查看安装的内核版本(或者查看启动器:awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
)yum remove 3.10.0-1062.1.2.el7.x86_64
删除内核版本
- Centos7升级内核
bash <(curl -L https://raw.githubusercontent.com/oldinaction/scripts/master/shell/prod/centos7-update-kernel.sh) 2>&1 | tee kernel.log
- 会直接升级成目前最新的稳定版,如
5.4
(ThinkPadE480 也可正常升级到5.4) - 需使用root用户执行,如果下载rpm失败,可尝试重新执行
常用配置脚本
1 | # 升级内核(root用户执行),见上文。无法下载脚本时,可参考下文使用sourcegraph |
新服务器常见问题
- centos7无法使用
ifconfig
命令解决方案- 确保有
/sbin/ifconfg
文件,否则安装net-tools(yum -y install net-tools
),即可使用netstat、ifconfig等命令 - 有则此文件则在
vi /etc/profile
中加export PATH=$PATH:/usr/sbin
,并执行source /etc/profile
使之生效
- 确保有
- xshell卡死在
To escape to local shell, press 'Ctrl+Alt+]'.
- 关闭防火墙
vi /etc/ssh/sshd_config
修改# UseDNS yes
为UseDNS no
,并重启sshd
常用软件安装
1 | yum -y install net-tools # netstat、ifconfig命令 |
安装方式说明 ^2
镜像管理
- 更换镜像源
1 | # 查看yum的配置文件,其中`CentOS-Base.repo`为镜像列表配置。**可更换镜像列表** [^3] |
- 安装
EPEL
(Extra Packages for Enterprise Linux)。epel它是RHEL 的 Fedora 软件仓库,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。如nginx可通过epel安装- 方式一:使用上述阿里云镜像
- 方式二:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- 下载epel源
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
(http://fedoraproject.org/wiki/EPEL) - 安装epel
rpm -ivh epel-release-latest-7.noarch.rpm
- 下载epel源
- Centos8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
- 手动新增镜像源
1 | ## 直接下载镜像源文件新增 |
rpm安装(软件包管理器)
rpm
格式文件安装(redhat package manage。有依赖关系,安装和卸载也有先后顺序)- rpm包的命名规范:
name-version-release.os.arch.rpm
- os:即说明RPM包支持的操作系统版本。如el6(即rhel6)、centos6、el5、suse11
- arch:主机平台。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依赖平台)
- 有的rpm包需要.asc的秘钥。镜像源可认为是rpm包的公有仓库,一般也会配置.gpg秘钥
- 命令
1 | rpm <option> xxx |
yum安装(软件包管理器的前端工具)
1 | # 基于包管理工具安装,可以更好的解决包依赖关系。-y 安装时回答全部问题为是 |
tar.gz安装包安装
tar.gz
等绿色安装包:解压tar -xvf xxx_0.0.1_linux_amd64.tar.gz
, 会在当前目录生成一个xxx_0.0.1_linux_amd64
的文件夹- 部分直接是绿色文件,解压后可运行
- 部分需要在运行一些安装程序,进入文件加运行相应的二进制文件即可
.bin安装
.bin
等可执行文件安装:./xxx.bin
(可能需要设置权限成可执行,本质是rpm安装)
源码安装
- 前提:准备开发环境(编译环境),安装”Development Tools”和”Development Libraries”
yum groupinstall Development Tools Development Libraries
- 源码安装完成后可删除源码文件夹
示例如
1
2
3
4
5
6
7
8解压源码包
tar -zxvf tengine-1.4.2.tar.gz
cd tegnine-1.4.2
configure配置,`--prefix`为安装位置
./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
make test 测试编译
编译安装
make && make install
防止误删除
1 | ## 参考: https://codeantenna.com/a/F53w2MhbG6 |
宝塔面板
- 宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。启动约占60M内存
1 | ## 直接使用官网脚本安装。会自动选择国内国外最快下载节点 |
- 目录说明
- 软件安装目录 /www/server
- data 数据目录(mysql)
- nginx/conf nginx主配置文件
- panel/vhost/nginx 项目的nginx配置目录
- 备份目录 /www/backup
- 网站根目录 /www/wwwroot
- 软件安装目录 /www/server
- 使用说明
- 面板设置
- 设置面板别名如
SH-01
,设置登录用户名如sh01
- 面板安全告警,微信公众号
- 面板SSL - 开启 - 自签名。常见问题参考下文
- 绑定域名,绑定后只能通过域名访问
- 设置面板别名如
- 软件商店
- 进程守护管理器:可启动守护进程
- 七牛云存储:可配置数据库和网站到七牛云;在七牛云个人信息找到授权Key,存储空间aezo,加速域名cdn70.aezo.cn,设置为私有空间
- Mysql8安装需要至少3700M内存(正常4G的内存机器可能无法安装)
- 计划任务
- 备份网站和数据到七牛云并本地保存;续签Let’s Encrypt证书为自动加的
- 网站
- 域名管理: 会自动开放对应端口
- SSL: Let’s Encrypt证书 - 服务器文件验证(无需手动操作) - 会自动续签,会自动设置到nginx中并开放对应端口
- 面板设置
- 面板SSL证书过期导致无法登录
rm -f /www/server/panel/data/domain.conf
删除绑定域名- 用ip和端口访问(端口可通过/www/server/panel/vhost/nginx/proxy中的配置文件查看)
- 自签名面板SSL证书问题参考:https://www.bt.cn/bbs/thread-105443-1-1.html
- MAC下载根证书后,双击安装,输入密码提示密码错误
openssl pkcs12 -in /Users/test/Downloads/baota_root.pfx -clcerts -nokeys -out certificate.crt
并输入密码(一般为www.bt.cn,会提示MAC verified OK)- 然后将certificate.crt文件拖拽到钥匙串访问程序中 - 右键显示简介 - 信任 - 始终信任
- 下载根证书处界面,不显示证书密码
- 参考上文,在使用openssl pkcs12命令后,密码不用输入直接回车即可
- MAC下载根证书后,双击安装,输入密码提示密码错误
- Let’s Encrypt证书无法自动更新问题(主要针对springboot项目)
1 | # 点击springboot项目配置 - 配置文件(修改nginx配置) |
安装jdk
下载/上传jdk文件
默认登录时候在 root 目录,直接下载和解压,软件包和解压目录都默认在 root 目录,可以切换到 hoom 目录进行下载
- 通过ftp上传jdk对应tar压缩包到对应目录并进行解压. JDK镜像地址:https://repo.huaweicloud.com/java/jdk/
- 基于tar格式安装(推荐)
1 | # JDK7: https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz |
- 基于rpm格式安装
- 获取rpm链接(下载到本地后上传到服务器): oracle -> Downloads -> Java SE -> Java Archive -> Java SE 8 -> Java SE Development Kit 8u202 -> Accept License Agreement -> jdk-8u202-linux-x64.rpm
rmp -ivh jdk-8u202-linux-x64.rpm
安装rpm文件,可执行文件保存在/usr/java/jdk1.8.0_202-amd64/jre/bin/java
- 设置环境变量。可设置
JAVA_HOME=/usr/java/default
配置环境变量
vi /etc/profile
使用vi打开profile文件(也可在.bash_profile
中设置单个用户的环境变量)- 在末尾输入并保存(注意JAVA_HOME需要按照实际路径)
1 | export JAVA_HOME=/opt/jdk1.8.0_202 |
- 运行命令
. /etc/profile
使profile立即生效(注意 . 和 / 之间有空格) java -version
打印版本号
安装maven
ftp服务器安装
参考:http://blog.aezo.cn/2019/03/19/arch/ftp/
mysql安装
- tar安装(推荐) ^5
1 | ## 5.7、8.0均可正常安装 |
- 修改
/etc/init.d/mysqld
文件
1 | # 修改 |
- yum安装(安装时无法自定义文件存储路径,但是安装完成后可手动移动数据文件到新目录)
1 | # 下载mysql源安装包 |
- 配置文件默认路径
/etc/my.cnf
(修改配置后需要重启服务)
1 | # !includedir /etc/my.cnf.d # 导入目录配置 |
- 卸载
1 | yum remove mysql # 卸载 |
- 其他
show variables like '%dir%';
sql命令查看mysql相关文件(数据/日志)存放位置- 数据文件默认位置:
/var/lib/mysql
- 数据文件默认位置:
- mysql-jdbc驱动下载
- 5.7对应5.1的驱动
wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.49.tar.gz
(mysql-connector-java-5.1.49.jar)
- 5.7对应5.1的驱动
- 常见问题
- 报错
cd: /usr/local/mysql: No such file or directory
。建议检查是否修改了/etc/init.d/mysqld
文件中的basedir和datadir。^6 - 重新启动服务会报错
ERROR! The server quit without updating PID file .
。同上
- 报错
安装oracle客户端 ^4
- 下载
rpm
(地址:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html,此地址为64位包下载) - 如安装
oracle11.2.0.4客户端
,下载oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
和oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
,并上传到服务器 - 安装运行
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
、rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
环境变量配置
vi ~/.bash_profile
1
2
3
4export ORACLE_BASE=/usr/lib/oracle/11.2
export ORACLE_HOME=$ORACLE_BASE/client64 #尤其注意这里要正确
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8source ~/.bash_profile
使配置生效
- sqlplus连接:
sqlplus smalle/smalle@192.168.1.1:1521/orcl
- 配置了环境变量仍然不生效,报错
bash: sqlplus: command not found
。解决办法创建符号链接:ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
- 配置了环境变量仍然不生效,报错
- 配置TNS,在
/usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora
中加入TNS配置(可能需要自行创建network/admin/tnsnames.ora
的目录和文件)sqlplus smalle/smalle@my_dbtest
tomcat安装
tar -zxvf apache-tomcat-7.0.61.tar.gz
解压./opt/apache-tomcat-7.0.61/bin/startup.sh
运行(需要先安装好JDK)- 访问http://192.168.6.133:8080/
nginx安装
参考《nginx.md》(基于编译安装tengine) (nginx同理)
python3安装
linux一般都是python2,如果要使用python3最好不要动之前python2的环境
安装步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 下载 Python-3.6.4.tar.xz
curl -O https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar xvf Python-3.6.4.tar.xz -C /opt
cd Python-3.6.4
# 切换root用户
su - root
## 编译和安装(可重复执行)
# --enable-optimizations性能优化;--with-ssl开启ssl模块,否则pip3某些包无法安装;--enable-loadable-sqlite-extensions表示开启sqlite3
./configure --enable-optimizations --with-ssl --enable-loadable-sqlite-extensions
# 第一次需要大概15分钟。需要使用root运行。使用sudo运行也会报错`cannot create regular file ‘/usr/local/bin/python3.6m’: Permission denied`
make && make install
## 查看
python3
pip3No module named '_sqlite3'
无法使用sqlite3模块问题yum -y install sqlite-devel
./configure --enable-loadable-sqlite-extensions
进入python3安装目录make && make install
重新编译python,如果之前编译成功,这次编译会很快python3
-import sqlite3
不报错则表示成功
php安装
htop安装
- htop是比top功能更多的进程管理工具
yum install htop
安装htop
查看进程信息(命令行上显示的界面可直接鼠标点击操作)- 小技巧
- 点击Tree/Sorted可切换视图
- 选中一行,按下键可查看更多进程
- Nice:指的是nice值,这样就可以提高/降低对应进程的优先级
邮件发送服务配置
- 使用外部邮件发送服务
1 | yum install -y mailx |
- 安装postfix(centos7已内置安装并启动)或者sendmail等邮件发送服务(此方法发送的邮件容易进入垃圾箱)
1 | # yum install -y postfix |
时间同步
校验时区:如
Tue Jul 2 21:26:09 CST 2019
和Tue Jul 2 21:26:09 EDT 2019
,其中北京时间的时区为CST
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改成功后之前的日志是无法同步修改的date
获取当前时间(精确到秒)1
2# 获取毫秒
echo `expr \`date +%s%N\` / 1000000`
校验时间
date
查看时间date -s "2019-04-07 10:00:00"
设置时间hwclock -w
将时间写入bios固件避免重启失效
NTP网络时间同步
- NTP(Network Time Protocol)
- 使用脚本自动配置时间同步
bash <(curl -L https://sourcegraph.com/github.com/oldinaction/scripts@master/-/raw/shell/prod/conf-ntp-sync.sh) 2>&1 | tee conf-ntp-sync.log
- 使用 ^8
1 | ## ntpd是步进式的逐渐调整时间(慢慢调整到正确时间),而ntpdate是断点更新(直接重写时间为正确时间) |
- 配置文件说明
- restrict控制权限,参数如下
- ignore:关闭所有的 NTP 联机服务
- nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时
- notrust:客户端除非通过认证,否则该客户端来源将被视为不信任子网
- noquery:不提供客户端的时间查询。用户端不能使用ntpq,ntpc等命令来查询ntp服务器
- notrap:不提供trap远端登陆。拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序
- nopeer:用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
- kod:访问违规时发送 KoD 包
- restrict控制权限,参数如下
- ntp服务默认使用
udp:123
进行传输 - 相关命令
1 | # 查看ntp服务器有无和上层ntp连通 |
NFS
1 | ## 服务端 |
- 配置说明
ro
:只读权限rw
:读写权限root_squash
(默认):登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份no_root_squash
:登入NFS主机,使用该共享目录时相当于该目录的拥有者。如果是root的话,那么对于这个共享的目录来说,他就具有root的权限。这个参数极不安全,k8s集群使用建议设置此参数,否则如基于Chart安装mysql会失败(无法修改文件所属者)all_squash
:不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobodyno_all_squash
(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组sync
(默认):同步模式,内存中数据时时写入磁盘async
:不同步模式subtree_check
(默认):若输出目录是一个子目录,则nfs服务器将检查其父目录的权限no_subtree_check
:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
yum直接安装
yum -y install memcached
安装memcached(默认端口11211)yum -y install git
安装gityum install jq
shell读取json数据jq .subjects[0].casts[0] douban.json
curl -s https://douban.uieee.com/v2/movie/top250?count=1 | jq .subjects[0].casts[0]
参考文章