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
安装源
官方源会安装在/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 配置
不建议使用用户名+密码的方式登陆,容易被人扫描暴力破解
可以同时开启密码认证和公钥认证
# 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
本地机器配置,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
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
使用 RPM 方式安装,比较方便,不推荐编译安装
安装
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
启动
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;
配置
配置编码为 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
# 编码设置
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
JAVA_HOME=/usr/local/java/jdk1.8.0_202
JRE_HOME=/usr/local/java/jdk1.8.0_202/jre
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME JRE_HOME PATH
Tomcat 安装
直接去官方下载 zip 包,装好 Java 环境后直接就启动了
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz
tar -zxvf apache-tomcat-8.5.41.tar.gz
mkdir -p /usr/local/tomcat
mv apache-tomcat-8.5.41 /usr/local/tomcat/
追加启动命令到/etc/rc.d/rc.local
,方便开机自启
/usr/local/tomcat/apache-tomcat-8.5.41/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://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
tar -zxvf go1.12.5.linux-amd64.tar.gz
mv go go_1.12.5
配置环境变量/etc/profile
后追加,然后source /etc/profile
# Golang 环境变量
GOROOT=/usr/local/go/go_1.11.10
GOPATH=/usr/local/go/gopath
GO111MODULE=on
GOPROXY=https://goproxy.cn
PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOROOT GOPATH GO111MODULE GOPROXY PATH
NodeJS
mkdir -p /usr/local/nodejs
cd /usr/local/nodejs
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
xz -d node-v10.16.0-linux-x64.tar.xz
tar -xvf node-v10.16.0-linux-x64.tar
配置环境变量/etc/profile
后追加,然后source /etc/profile
# NodeJS 环境变量
NODE_HOME=/usr/local/nodejs/node-v10.16.0-linux-x64
NODE_GLOBAL_MODEL=/usr/local/nodejs/node_global
PATH=$PATH:$NODE_HOME/bin:$NODE_GLOBAL_MODEL/bin
export NODE_HOME PATH
配置
npm config set prefix "/usr/local/nodejs/node_global"
npm config set cache "/usr/local/nodejs/node_cache"
# 全局装个软件试一下
npm install -g hexo-cli
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
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
升级 Git
CentOS 自带的 git 为 1.8.3.1,一些自动化工具需要 2.x 以上的版本,升级方法有二,重新编译安装或者添加其他源进行安装
yum remove git
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum install -y git2u
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-ruby26 rh-ruby26-ruby-devel
scl -l
scl enable rh-ruby26 bash # 关机/退出bash失效
ruby -v
gem -v
设置 gem
# 替换为国内源,不要用淘宝的,都不维护了
gem sources --add https://gems.ruby-china.com/
gem sources --remove https://rubygems.org/
gem sources --remove http://mirrors.aliyun.com/rubygems/
gem sources -l
gem update
gem install jekyll
gem install bundler
设置开机自启动脚本
开机启动后要执行的命令可以追加在rc.local
后面,如下
# 开机启动,auto-start.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
auto-start.sh
#!/bin/sh
# mysql
systemctl start mysqld
# nginx
/usr/local/nginx/sbin/nginx
# tomcat
/usr/local/tomcat/apache-tomcat-8.5.41/bin/startup.sh
# php
systemctl start php-fpm