阿里云linux服务器操作记录

  • 安装jemalloc
  • 安装nginx
  • 使用jemalloc优化Nginx
  • configure参数说明
  • 验证jemalloc优化Nginx是否生效
  • 阿里云修改安全组
  • 测试nginx主页
  • 安装ssl证书
  • 配置域名解析
  • 安装mysql
  • 配置mysql
  • 修改字符集
  • 使用jemalloc优化Nginx
  • 安装JDK
  • 安装node


安装jemalloc

jemalloc主要是优化nginx内容管理,如果不需要,可以跳过此步骤
jemalloc的github官网查找对应的版本https://github.com/jemalloc/jemalloc/releases

#安装依赖
yum -y install gcc gcc-c++
#下载jemalloc
mkdir /usr/local/src/jemalloc
cd /usr/local/src/jemalloc
wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
tar -xvf jemalloc-5.2.1.tar.bz2
cd jemalloc-5.2.1
#安装jemalloc
./configure
make && make install
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig

如果报错

tar xjf jemalloc-5.2.1.tar.bz2 
tar (child): bzip2:无法 exec: 没有那个文件或目录
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

说明确实缺少bzip2包,执行以下命令安装

yum install -y bzip2

安装nginx

nginx官网参考文档http://www.nginx.cn/install nginx官网查找稳定版Stable version的版本下载http://nginx.org/en/download.html

#安装依赖
#安装make
yum -y install gcc automake autoconf libtool make
#安装g++(安装jemalloc已经安装过)
yum install gcc gcc-c++
#安装pcre库;安装zlib库;安装ssl(某些vps默认没装ssl);gcc前面已经安装
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
#下载nginx
mkdir /usr/local/src/nginx
cd /usr/local/src/nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -xvf nginx-1.16.1.tar.gz
cd nginx-1.16.1
#安装
./configure
make && make install
#检查/usr/local/nginx是否创建成功
cd /usr/local/nginx

保留/usr/local/src/nginx文件,下次安装插件的时候可以用到,丢失也无关系,可以参考我的博客nginx安装插件

使用jemalloc优化Nginx

cd /usr/local/src/nginx
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-ld-opt="-ljemalloc" 
make && make install

configure参数说明

–user=name 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中使用的user指令。默认的用户名是nobody
–group=name 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中使用的 user指令。默认的为非特权用户

–with-http_stub_status_module nginx状态
–with-http_ssl_module 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
–with-http_flv_module 为Flash Video(FLV)文件 提供服务端伪流媒体支持。通过返回以请求偏移位置开始的文件内容,该模块专门处理 在查询串中有start参数的请求, 和有预先设置到FLV头部的请求
–with-http_gzip_static_module 对于静态文件先压缩再输出是再正常不过的事了,但是这种压缩都是动态的,在每次请求都会先压缩再输出,大大浪费了很多cpu。如果前端加了反向代理缓存, 那能减少这种浪费。但不是每个生产环境前端都有缓存的。而nginx有个模块Gzip Precompression,这个模块的作用是对于需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,对于不支持 gzip的请求则读取原文件。
–with-ld-opt="-ljemalloc" 使用jemalloc优化Nginx内存管理

验证jemalloc优化Nginx是否生效

yum install lsof
lsof -n | grep jemalloc

阿里云修改安全组

点击菜单云服务器 ECS/安全组

选择实例配置规则

云服务器装不了nginx_nginx


点击克隆复制原本的安全设置

云服务器装不了nginx_java_02


添加协议类型为HTTPHTTPS的安全组规则

云服务器装不了nginx_java_03

测试nginx主页

输入http:ip即可访问nginx主页

安装ssl证书

安装ssl证书文档主要参考阿里官方文档https://help.aliyun.com/knowledge_detail/95491.html

在证书控制台下载Nginx版本证书。下载到本地的压缩文件包解压后包含:

.crt文件:是证书文件,crt是pem文件的扩展名。
.key文件:证书的私钥文件(申请证书时如果没有选择自动创建CSR,则没有该文件)。
友情提示: .pem扩展名的证书文件采用Base64-encoded的PEM格式文本文件,可根据需要修改扩展名。

以Nginx标准配置为例,假如证书文件名是a.pem,私钥文件是a.key。

在Nginx的安装目录下conf文件夹下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;

打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:

#server {
#    listen       443 ssl;
#    server_name  localhost;
#
#    ssl_certificate      cert/a.pem;
#    ssl_certificate_key  cert/a.key;
#
#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;
#
#    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#    ssl_prefer_server_ciphers  on;
#
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) :

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      cert/a.pem;
    ssl_certificate_key  cert/a.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;

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

保存退出。
重启 Nginx。

配置域名解析

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。

我们已经完成了服务器的配置,现需要把域名指定到我们到服务器上。

进入域名控制台,点击对应域名到解析

云服务器装不了nginx_云服务器装不了nginx_04


点击对应域名到解析设置

云服务器装不了nginx_云服务器装不了nginx_05


设置

记录类型为A

主机记录为www

记录值为服务器公网IP

TTL为10分钟

云服务器装不了nginx_云服务器装不了nginx_06


确定保存后,等待10分钟,访问域名地址,即可看到主机配置到nginx主页

安装mysql

当前操作系统版本为CentOS 7.6 64位

mkdir /usr/local/src/mysql
cd /usr/local/src/mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server
#权限设置
chown mysql:mysql -R /var/lib/mysql
#初始化 MySQL
mysqld --initialize
#启动 MySQL
systemctl start mysqld
#启动 MySQL(方法2)
service mysql start
#查看 MySQL 运行状态:
systemctl status mysqld
#查看 MySQL 版本
mysqladmin --version

配置mysql

#Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码
mysqladmin -u root password "new_password";
#通过命令来连接到Mysql服务器
mysql -u root -p
mysql> Enter password:new_password
#允许远程访问
#MySql-Server 出于安全方面考虑默认只允许本机(localhost, 127.0.0.1)来连接访问.
#所以必须给root修改可以远程访问的权限
mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'new_password' WITH GRANT OPTION;
#因为%不包括本地localhost,所以需要再赋权localhost
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY "new_password";
#检查是否有host为%的记录
mysql> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| %         | root |
#从mysql数据库的grant表中重新加载权限数据
#因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。
mysql> flush privileges;           
#检查mysql字符集
mysql> show variables where variable_name like 'character_set_%' or variable_name like 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | latin1_swedish_ci          |
| collation_server         | latin1_swedish_ci          |
+--------------------------+----------------------------+
#ok 退出MySQL 重启服务
quit;

修改字符集

由于字符集是utf8而不是utf8mb4,会存在表情字符的编码与解码问题,可参考https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4后期修改配置,也可以安装完mysql参考下面配置

修改MySQL配置文件
修改mysql配置文件etc/my.cnf
找到后请在以下三部分里添加如下内容:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

重启使字符集配置生效

#重启mysql
service mysql restart
mysql -u root -p

重新查询字符集是否改变

mysql> Enter password:new_password
mysql> show variables where variable_name like 'character_set_%' or variable_name like 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8mb4_unicode_ci         |
| collation_database       | utf8mb4_unicode_ci         |
| collation_server         | utf8mb4_unicode_ci         |
+--------------------------+----------------------------+
#ok 字符集已经改为utf8mb4,退出MySQL
quit;

系统变量

描述

character_set_client

客户端来源数据使用的字符集

character_set_connection

连接层字符集

character_set_database

当前选中数据库的默认字符集

character_set_results

查询结果字符集

character_set_server

默认的内部操作字符集

使用jemalloc优化Nginx

修改/usr/bin/mysqld_safe脚本,在脚本中添加了export LD_PRELOAD=/usr/local/lib/libjemalloc.so这一行,参考下面命令

#使用jemalloc优化MySQL
sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/bin/mysqld_safe
#重启mysql
service mysql restart
#验证jemalloc优化
lsof -n | grep jemalloc

安装JDK

#查看可以安装版本
yum -y list java*
#安装
yum install -y java-1.8.0-openjdk-devel.x86_64
java -version

通过yum安装,环境变量已经配置好,不需要再配置,可通过下面命令了解详细java程序位置

#查询java位置,yum安装一般会输出/usr/bin/java
which java
#查询真实路径,yum安装一般会输出/usr/bin/java -> /etc/alternatives/java
ls -lrt /usr/bin/java
#查询真实路径,yum安装一般会输出/etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java
ls -lrt /etc/alternatives/java

结果参考下图

云服务器装不了nginx_云服务器装不了nginx_07

安装node

#安装依赖
mkdir /usr/local/src/node
cd /usr/local/src/node
wget https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.gz
tar -zvxf node-v12.13.1-linux-x64.tar.gz
mkdir /usr/local/nodejs
cp -r /usr/local/src/node/node-v12.13.1-linux-x64/* /usr/local/nodejs
ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
ln -s /usr/local/bin/node /usr/bin/node
ln -s /usr/local/bin/npm /usr/bin/npm
#检查版本
node -v
npm -v

由于国内网络环境原因,需要配置镜像

npm config set registry https://registry.npm.taobao.org
#查看配置
npm config get registry

默认的地址如下

https://registry.npmjs.org/