helen 2019-11-08
最近世道动荡,在前往高级的路上走出了车到山前必有路,睁眼一看是绝路的感觉。所以就索性瞎折腾一下。领了一个服务器,开启了一个伪全栈的运维之路,各种服务线上部署。
腾讯免费七天,阿里要钱,山里娃就在亚马逊AWS申请了一个可免费使用一年的EC2云服务器,申请链接,步骤很简单,跟着提示一步一步整就是,唯一要提醒的就是,需要准备一张信用卡,一张能支持外汇($)结算的最好。
申请到资格后,选择你的云服务,选择对应的区域,你需要给服务实例选择一个操作系统,linux,windows常用的都可选(注意观察,我们只选免费的,很重要,很重要, 很重要)。然后配置安全组,bla,bla,....,然后启动实例。保存好你的密钥,然后打开ssh终端连接实例。操作步骤可以打开管理面板,选择实例-》选择实例-》连接-》根据面板提示连接。
登录进服务后,就可以开启一段服务器配置之旅了。如果你和我一样,对Linux常用的命令行还不熟悉,你可能需要这样一份手册:Linux常用命令大全。我选择的镜像是Ubuntu,如果你和我选择的一样,那么下面的命令你可以直接用,如果是redhat或者centos,有些命令,你需要自己去探索。先把一些常用的工具安装上:
sudo apt-get install unzip // 解压工具 sudo apt-get install git // git工具 sudo apt-get install wget // 下载工具 sudo apt-get install nginx // 下载nginx
node安装是一个相对简单的过程,你可以直接查看官网,然后按照提示一步一步进行。非常重要的一步就,你需要建立你命令的软链接。在这里我列出自己的操作步骤:
-下载:sudo wget https://nodejs.org/download/r...
centos可参考链接,同时也适用于ubuntu,现在使用wget下载jdk有点麻烦(需要鉴权),所以我是本地下载,然后scp上传上去的,以下是我的操作:
mysql的安装复杂一点,折腾了自己大量时间,在redhat8上没有安装成功mysql5,也迫使我把镜像换成了ubuntu,曲折的路就不多说了,直接说顺利的。如果直接使用apt-get install mysql安装,默认是安装mysql8,所以在开启安装前,需要借助mysql-apt-config增加一段配置,具体安装步骤,请查考前人栽下的树:Ubuntu 16.04安装MySQL:通过APT方式安装。
安装好之后,开启mysql,并登录
至此,本地链接已经ok,但是mysql远程链接数据库仍然报无发连接。原因很多,这里提及两个我遇到的。
第一种很简单,去EC2面板上修改你正在用的安全策略,加入3306端口,并启用。
第二种稍微麻烦一点,你需要如下操作:
关于sql批量导入
安装nginx,无非就想解决静态资源访问,反向代理,gzip,负载均衡问题,由于我这是初级使用,没有涉及到负载均衡的情形。
前面已经安装了nginx,看是否安装成功,可使用命令运行:
sudo nginx -s start // 其他常用命令 sudo nginx -s stop // 暂停 sudo nginx -s reload // 重启 sudo nginx -s status // 检查运行状态 sudo nginx -t // 检测配置是否正确
然后通过ip访问80端口,如果顺利可以看到,但是一般都是不顺利,显示403。
可参考连接:nginx权限不足造成的访问问题,我遇到的是第四项,即SELinux。
我要代理的静态资源是一个react框架打包的网站,话不多说,直接列出我的配置:
server { listen 80; listen [::]:80; server_name h5.closertb.site; index index.html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { root /home/static; autoindex on; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
我的后端服务是基于tomcat,端口为8080。
server { listen 80; listen [::]:80; server_name server.closertb.site; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
门户网站是一个基于nextJs的ssr渲染,所以需要代理一个node服务,这个服务运行在8500端口
server { listen 80; listen [::]:80; server_name client.closertb.site; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://127.0.0.1:8500; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
关于nginx代理的一些常识,从上面三段配置,我们可以看到,我们都是对80端口进行了代理,但可以设置不同类别,指向不同资源,区分点就在于server_name,通过此来决定返回代理的内容。代理上面也列出了两种,静态资源的代理(root)和服务的代理(proxy_pass)。
为什么都要用80端口?
为什么要开启gzip?因为虽然前端框架的不断侵蚀和资源的丰富,虽然网络更快了,打包压缩策略也用了,但100K以上的资源加载确实很慢,所以我们还得借助gzip来加快资源的获取。话不多说,上图自己感受:
开启gzip前
开启gzip后
看完上面两幅图,你就会觉得这是肉眼可见的差别,提速增效太明显了
# Gzip Settings gzip on; gzip_disable "msie6"; gzip_min_length 10k; gzip_vary on; # gzip_proxied any; gzip_comp_level 3; gzip_buffers 16 8k; # gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
location ^~/static/ { root /site/; } location ^~/static/ { alias /site/; } // 当访问closertb.site/static/admin/a.html时; // root 指向的是 /site/static/admin/a.html // alias指向的是 /site/admin/a.html
至此,一个纯前端服务,纯后端服务,SSR渲染服务就启动完成,访问相应的域名即可查看。
其实,这整篇都是一些个人杂七杂八的知识整理,做个笔记,方便以后翻阅。但下面的碎片知识,才是真的杂,包括一些不常用的命令
从2019-10-23起,我的AWS实例不断的重启,或者连接不上,但控制台显示running。通过查看dump文件,发现是各种 PV Drivers的错误。如果网络驱动升级不成功,这个实例将不可访问。