Update: 2020/02/05
系统版本 CentOS 7
服务器配置
安装常用软件
yum update
yum groupinstall -y "Development Tools"
yum install cmake wget openssl openssl-devel yum-utils
yum install bash-completion lrzsz scl-utils screen net-tools telnet
yum install curl libcurl libcurl-devel bzip2 bzip2-deve libffi-devel
yum install freetype freetype-devel libjpeg libjpeg-devel
yum install libpng libpng-devel sqlite sqlite-devel
yum install libxml2 libxml2-devel libxslt libxslt-devel
更新根证书
yum install ca-certificates
安装源
官方源会安装在/etc/yum.repos.d
# 一些官方yum比较低的软件可以使用这里的安装高级版本
# 使用scl命令共存多个版本
yum install centos-release-scl
yum 常用命令
yum list [all,installed,available,updates,extras]
yum install <packages> # 安装指定的包
yum deplist <packages> # 显示软件包的依赖信息
yum remove <packages> # 卸载指定的软件包
yum info <packages> # 查看软的信息
yum search <keywords> # 根据关键字查找,xx*以xx开头,想要支持正则可以使用yum list all | grep xxx
yum provides <keywords> # 反查包含特定文件名的包
yum clean all # 清除yum缓存
yum makecache # 建立索引
关闭不用的服务
-
关闭 SELinux
/usr/sbin/sestatus -v #查看SELinux状态 getenforce #也可以用这个命令检查 setenforce 0 #临时关闭(不用重启机器) 0为permissive模式 1为enforcing模式 vi /etc/selinux/config #永久关闭,将SELINUX=enforcing改为SELINUX=disabled
-
关闭防火墙
# CentOS6 systemctl stop iptables #停止服务 systemctl disable iptables #开机不再启动 # CentOS7 systemctl stop firewalld systemctl disable firewalld
SSH 配置
不建议使用用户名+密码的方式登陆,容易被人扫描暴力破解
可以同时开启密码认证和公钥认证
# /etc/ssh/sshd_config
# Port 22 sshd服务端口,建议改掉
# PubkeyAuthentication yes 允许公钥登陆,公钥配置到AuthorizedKeysFile指定的文件
# PermitRootLogin yes 允许root登陆
# PasswordAuthentication yes 密码登陆
vi /etc/ssh/sshd_config
# 重启服务
service sshd restart
在服务器 authorized_keys 文件中新添加一行公钥,方便一点可以使用ssh-copy-id
命令
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/keys/ -R
本地机器配置,C:\Users\xxx\.ssh\config
文件配置好后直接ssh aliyun
即可登陆
Host aliyun
HostName 106.xxx.xxx.xxx
User root
Port 22
IdentityFile C:/Users/xxx/.ssh/id_rsa_nopwd
PreferredAuthentications publickey
中文支持
# 查看系统拥有语言包,zh_CN.utf8是简体中文
locale -a
# 如果没有
yum install kde-l10n-Chinese
# 修改locale文件 LANG=zh_CN.utf8
# 重启生效
vi /etc/locale.conf
vim 配置 ~/.vimrc
,文件的换行符记得设置为 unix 风格的,不然会报错
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set encoding=utf-8
set termencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
Nginx
安装
configure 的过程如果有缺少依赖直接 yum 安装即可
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2/
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
make
make install
启动
# 启动
/usr/local/nginx/sbin/nginx
# 停止
/usr/local/nginx/sbin/nginx -s stop
# 更新配置
/usr/local/nginx/sbin/nginx -s reload
配置
配置文件/usr/local/nginx/conf/nginx.conf
# 禁止IP或其他域名直接访问
server {
listen 80 default;
server_name _;
types {
application/json *;
}
default_type application/json;
return 404 '{"status":404,"msg":"这里没有部署项目-_-|||"}';
}
# 静态内容
server {
listen 80;
server_name xxx.com;
location / {
root /www/xxx.com;
index index.html;
}
error_page 404 403 500 502 503 504 /404.html;
}
# 反向代理Tomcat
server {
listen 80;
server_name java.xxx.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
}
# 反向代理Tomcat单个应用
server {
listen 80;
server_name app1.xxx.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080/app1/;
}
location /app1 {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
}
# 反向代理PHP
server {
listen 80;
server_name php.xxx.com;
root /www/php.xxx.com/;
index index.html index.htm index.php;
# rewrite
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
# typecho 地址重写配置,显示不支持,强制开启就行了
location /typecho {
# 找不到时候重写成pathinfo
if (!-e $request_filename) {
rewrite ^/(.*)$ /typecho/index.php/$1 last;
break;
}
}
location ~ .*\.php(\/.*)*$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#设置PATH_INFO,注意fastcgi_split_path_info已经自动改写了fastcgi_script_name变量
#后面不需要再改写SCRIPT_FILENAME,SCRIPT_NAME环境变量,所以必须在加载fastcgi.conf之前设置
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
#加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;
}
}
Mysql
从 centos7 开始已经不在支持 mysql,官方推荐安装 mariadb
自己可以通过添加官方镜像源安装, 或者 rpm-bundle 方式安装,或者源码编译安装(不推荐)
安装
先删除 mariadb 相关的包
yum remove mariadb mysql mysql-libs
rpm -qa | grep mysql
官方源安装(速度极慢)
wget https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum install mysql-community-server
bundle 方式安装(推荐)
wget https://mirrors.cloud.tencent.com/mysql/downloads/MySQL-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar
# 解压出好多,只需要依次安装下面4个就够了,注意安装顺序
rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm
启动
systemctl start mysqld #启动 MySQL
systemctl stop mysqld #关闭 MySQL
systemctl restart mysqld #重启 MySQL
systemctl status mysqld #查看 MySQL 运行状态
systemctl enable mysqld #设置开机启动
systemctl disable mysqld #关闭开机启动
更改密码
启动后需要以 root 用户登入进去,然后更改密码,不然没有操作权限
# 获取默认的随机密码
grep 'temporary password' /var/log/mysqld.log
# 登陆
mysql -u root -p
# 允许设置简单密码,重启后该配置失效
set global validate_password_policy=0;
set global validate_password_length=4;
# 设置密码,由于安全策略,不要设置过于简单的密码
set password = password('Xxxxxxx');
# 新建root用户,允许远程访问,授予所有权限,完事后在mysql.user表把 Grant_priv改成Y,然后重启
grant all privileges on *.* to 'root'@'%' identified by '设置新用户密码';
# grant all privileges on *.* to 'root'@'%' identified by '设置新用户密码' WITH GRANT OPTION;
flush privileges;
有时候防火墙,安全组都放开了,远程登录也允许了,远程仍然无法访问的话可以看下 mysql 监听的网卡,如果是 127.0.0.1 的话要改成 0.0.0.0
netstat -nltp
配置
配置编码为 utf8mb4,从而支持 emoji 表情
关闭密码强度校验插件
内存优化,由于内存较小,适当调整相关资源,关闭不需要的功能
配置文件位于/etc/my.cnf
,追加如下内容
[client]
# 编码设置
default-character-set = utf8mb4
[mysql]
# 编码设置
default-character-set = utf8mb4
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
bind-address=0.0.0.0
# 编码设置
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 内存优化
performance_schema = OFF
performance_schema_max_table_instances = 600
table_definition_cache = 400
table_open_cache = 256
# 关闭密码校验插件
validate_password = OFF
配置信息查询
查看插件状态
show plugins;
查看启动后载入的配置信息
SHOW VARIABLES;
SHOW VARIABLES LIKE 'validate_password%';
JAVA
JDK 安装
先查询是否已经安装了 JDK 环境,如果需要安装其他版本的卸载即可
rpm -qa | grep jdk
rpm -qa | grep java
yum -y remove java*
推荐去华为镜像地址下载https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Oracle 官网不要去了,还要注册。另外 JDK8 之后,Oracle-JDK 就只支持商用了,但是 JDK 是开源的有其他的替代品,如 OpenJDK,Zulu,这里有个下载地址汇总的网站:https://www.injdk.cn/
可以使用 yum 直接安装 OpenJdk
yum list java* | grep 1.8.0
yum install java-1.8.0-openjdk-devel.x86_64
# 默认安装到
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64
安装完成后,还会在/usr/lib/jvm/
,/etc/alternatives/
创建多个链接
推荐直接绿色安装,然后配置下环境即可,好处是方便装多个版本进行切换,个人喜欢解压到/usr/local/java/
环境变量配置
修改/etc/profile
文件,后面追加如下内容,修改完后source /etc/profile;echo $JAVA_HOME
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export JRE_HOME=/usr/local/java/jdk1.8.0_202/jre
export PATH=$PATH:$JAVA_HOME/bin
Tomcat 安装
直接去官方下载 zip 包,配置好 Java 环境后就能直接启动了
mkdir -p /usr/local/tomcat
cd /usr/local/tomcat
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.59/bin/apache-tomcat-8.5.59.tar.gz
tar -zxvf apache-tomcat-8.5.59.tar.gz
启动脚本: /usr/local/tomcat/apache-tomcat-8.5.59/bin/startup.sh
如果在你的机器上运行dd if=/dev/random of=random.dat count=40960
非常慢的话,tomcat 启动超级超级慢。因为系统会收集运行状态如流量,CPU,键盘录入等信息,来产生的熵去生成真正的随机数。由于大部分的云主机熵值都不够,导致启动时卡在这里。可以用 urandom(伪随机) 来替代 random 来生成随机数即可
方法很简单,修改 Tomcat 的的启动参数,指定使用 urandom 或者修改 JDK 的配置指定使用 urandom
vim $JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/random
# 改为
securerandom.source=file:/dev/urandom
启动 manager-gui,调整tomcat-users.xml
添加访问用户,然后找到webapps/manager/META-INF/context.xml
中注释掉仅允许内部 IP 访问的设置
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="user01" password="123456xxx" roles="admin-gui,manager-gui"/>
PHP
配置 PHP7 的源
yum install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安装
yum install php70w php70w-common php70w-fpm php70w-opcache php70w-gd php70w-mysqlnd php70w-mbstring php70w-devel
CentOS 自带了 PHP5,安装 PHP7 的时候会遇到一些冲突,提示什么冲突就就删除什么,直到上面的命令可以执行
yum remove php-common-5.4.16-46.el7.x86_64
安装完毕后
# 查看版本
php -v
# 查看安装的模块
php -m
配置文件位于/etc/php.ini
和/etc/php-fpm.d/www.conf
,小内存建议调整下 php-fpm
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 10
#启动,restart-重启,stop-停止
systemctl start php-fpm
#开机启动
systemctl enable php-fpm
下面是一些常用的拓展,以后缺少什么就安装什么
# 安装包 提供的拓展
php70w mod_php php70w-zts php70w-bcmath php70w-cli php-cgi php-pcntl, php-readline
php70w-common php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-filter, php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml , php-sockets, php-spl, php-tokenizer, php-zend-abi, php-zip, php-zlib
php70w-dba
php70w-devel
php70w-embedded php-embedded-devel
php70w-enchant
php70w-fpm
php70w-gd
php70w-imap
php70w-interbase php_database, php-firebird
php70w-intl
php70w-ldap
php70w-mbstring
php70w-mcrypt
php70w-mysql php-mysqli, php_database
php70w-mysqlnd php-mysqli, php_database
php70w-odbc php-pdo_odbc, php_database
php70w-opcache php70w-pecl-zendopcache
php70w-pdo php70w-pdo_sqlite, php70w-sqlite3
php70w-pdo_dblib php70w-mssql
php70w-pear
php70w-pecl-apcu
php70w-pecl-imagick
php70w-pecl-memcached
php70w-pecl-mongodb
php70w-pecl-redis
php70w-pecl-xdebug
php70w-pgsql php-pdo_pgsql, php_database
php70w-phpdbg
php70w-process php-posix, php-sysvmsg, php-sysvsem, php-sysvshm
php70w-pspell
php70w-recode
php70w-snmp
php70w-soap
php70w-tidy
php70w-xml php-dom, php-domxml, php-wddx, php-xsl
php70w-xmlrpc
Golang
mkdir -p /usr/local/go
mkdir -p /usr/local/go/gopath
cd /usr/local/go
wget https://studygolang.com/dl/golang/go1.18.2.linux-amd64.tar.gz
mkdir go1.18 && tar -zxf go1.18.2.linux-amd64.tar.gz -C go1.18 --strip-components 1
ln -s go1.18 go
配置环境变量/etc/profile
后追加,然后source /etc/profile
export GOROOT=/usr/local/go/go
export GOPATH=/usr/local/go/gopath
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
NodeJS
mkdir -p /usr/local/nodejs
cd /usr/local/nodejs
wget https://nodejs.org/dist/v12.19.0/node-v12.19.0-linux-x64.tar.xz
xz -d node-v12.19.0-linux-x64.tar.xz
tar -xvf node-v12.19.0-linux-x64.tar
配置环境变量/etc/profile
后追加,然后source /etc/profile
export NODE_HOME=/usr/local/nodejs/node-v12.19.0-linux-x64
export NPM_GLOBAL=/usr/local/nodejs/npm_global
export YARN_GLOBAL=/usr/local/nodejs/yarn_global
export PATH=$PATH:$NODE_HOME/bin:$NPM_GLOBAL/bin:$YARN_GLOBAL/bin
配置 ~/.npmrc
、~/.yarnrc
npm config set cache "/usr/local/nodejs/npm_cache"
npm config set prefix "/usr/local/nodejs/npm_global"
npm config set registry "http://mirrors.cloud.tencent.com/npm/"
npm install -g yarn
yarn config set cache-folder "/usr/local/nodejs/yarn_cache"
yarn config set global-folder "/usr/local/nodejs/yarn_global"
yarn config set prefix "/usr/local/nodejs/yarn_global"
yarn config set ignore-engines true
查看 yarn 配置生效
yarn global bin
yarn global dir
yarn cache dir
Python3
centos7 默认自带 python2.x,同时 yum 依赖 2.x 版本的。所以想要使用 python3 可以通过起个新名字来使用,比如 py3。或者把 python 的软链接替换掉,但是要修改/usr/bin/yum
脚本中声明的运行环境
注意在/usr/bin/
目录下共有 6 个 python 相关命令
python # python2.7 的软链接
python2 # python2.7 的软链接
python2.7 # 二进制文件
pip # python脚本,指明使用python2
pip2 # python脚本,指明使用python2
pip2.7 # python脚本,指明使用python2
下面开始安装
wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz
tar -zxvf Python-3.7.7.tgz
cd Python-3.7.7
./configure --enable-optimizations
make altinstall # altinstall 不会只会向/usr/bin/写入python的符号链接
# 默认
安装后的一些目录
/usr/local/bin
/usr/local/lib/python3.7
为了系统不受影响,检查下 python 版本
python -V # Python 2.7.5
pip -V # python 2.7
创建 python3 的符号链接
ln -s /usr/local/bin/python3.7 /usr/bin/python3
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3
pip3 install pip -U
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
配置国内源,~/.pip/pip.conf
文件不存在新建即可
[global]
index-url = http://mirrors.cloud.tencent.com/pypi/simple
trusted-host = mirrors.cloud.tencent.com
Shadowsocks
推荐安装 SSR,图省事可以使用一键安装脚本
yum -y install epel-release
yum -y install python-pip
pip install --upgrade pip
pip install shadowsocks
编写配置文件
{
"server": "my_server_ip",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "mypassword",
"timeout": 300,
"method": "aes-256-cfb",
"fast_open": false
}
# 前台运行
ssserver -c shadowsocks.json
# 后台运行
ssserver -c shadowsocks.json -d start
ssserver -c shadowsocks.json -d stop
zsh
yum install -y zsh
chsh -s /bin/zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
在~/.zshrc
中改下主题
ZSH_THEME="bureau"
升级 Git
CentOS 自带的 git 为 1.8.3.1,一些自动化工具需要 2.x 以上的版本,升级方法有二,重新编译安装或者添加其他源进行安装
yum remove git
yum install -y https://repo.ius.io/ius-release-el7.rpm
yum install -y git224
git --version
升级 Ruby
一般系统都自带 ruby,但是太古老了,由于安装 Jekyll 要求 ruby 的版本在 2.1 以上
yum remove ruby ruby-devel
# 官方源的ruby太古老了
yum install centos-release-scl-rh
yum update
yum list | grep rh-ruby
yum install rh-ruby27 rh-ruby27-ruby-devel
scl -l
scl enable rh-ruby27 bash # 关机/退出bash失效
ruby -v
gem -v
设置 gem
gem sources --remove https://rubygems.org/
gem sources -a https://mirrors.tuna.tsinghua.edu.cn/rubygems/
gem sources -l
gem sources --clear-all
gem sources --update
gem update
gem install bundler
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
bundle config list
设置开机自启动脚本
编写 unit 配置tomcat.service
来做到开机自启,然后拷贝到/usr/lib/systemd/system/
目录后即可。
通过 systemctl [status|start|stop|restart|enable|disable] tomcat.service
来控制启动,通过journalctl -f -u tomcat.service
来查看日志
[Unit]
Description=Tomcat服务器
After=network-online.target mysqld.service
Wants=mysqld.service
[Service]
Type=forking
EnvironmentFile=/myapps/env # 读不到系统的环境变量需要写一个环境变量的配置文件指定 PATH JAVA_HOME JRE_HOME
ExecStart=/usr/local/tomcat/apache-tomcat-8.5.59/bin/catalina.sh start
ExecReload=/usr/local/tomcat/apache-tomcat-8.5.59/bin/catalina.sh restart
ExecStop=/usr/local/tomcat/apache-tomcat-8.5.59/bin/catalina.sh stop
[Install]
WantedBy=multi-user.target
另外图方便可以直接把开机启动后要执行的命令可以追加在rc.local
后面,若启动的是脚本记得给执行权限
/usr/local/tomcat/apache-tomcat-8.5.59/bin/startup.sh
# 或者可以写个独立的脚本追加在后面执行,避免频繁修改系统配置
# /server-apps/auto-start.sh >/server-apps/auto-start.log 2>&1
以后在/server-apps/auto-start.sh
中添加启动命令就成了。注意在 centos7 中,/etc/rc.d/rc.local
的权限被降低了,所以需要chmod +x /etc/rc.d/rc.local