本篇主要讲述开发过程中常见的组件的部署与配置
Node安装
Node.js是一个基于Chrome V8引擎的JavaScript运行环境; 是运行在服务端的 JavaScript.
1 | [root@icloud-store export]# curl -sL https://rpm.nodesource.com/setup_9.x | bash - |
Hexo安装
Hexo是一个简单地、轻量地、基于Node的一个静态博客框架,可以方便的生成静态网页托管(Hexo依赖NodeJs)
Hexo安装实例
1 | localhost:~ elson$ sudo npm install -g npm |
Hexo插件安装
1 | localhost:~ elson$ npm install hexo-generator-index --save |
Hexo创建项目
在工程目录下(手动创建)执行hexo init
即可完成工程初始化
1 | localhost:wuyu-platform elson$ mkdir -p /Users/elson/wuyu-platform/wuyu-platform-hexo |
Hexo启动项目
Hexo启动使用命令hexo s
, 也可以使用hexo s -o
启动并直接打开应用页面1
2
3localhost:wuyu-platform-hexo elson$ hexo s -o
INFO Start processing
INFO Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.
Hexo静态化项目
Hexo静态化使用命令hexo g
, 静态化后的文件在工程的public目录下
1 | localhost:wuyu-platform-hexo elson$ hexo g |
Hexo主题扩展
推荐主题
- https://github.com/iissnan/hexo-theme-next
- https://github.com/tufu9441/maupassant-hexo
- https://github.com/Haojen/hexo-theme-Anisina
主题扩展
- 在
工程目录
下执行git clone 主题地址
或者下载到工程目录下的themes下 - 修改工程目录下的_config.yml文件, 配置节点
theme: landscape
为要扩展的主题
1 | localhost:wuyu-platform-hexo elson$ git clone https://github.com/iissnan/hexo-theme-next themes/next |
Hexo推送Git
Git推送配置(修改工程目录下的_config.yml文件,配置节点deploy:
)
1 | deploy: |
GIT推送命令部署
1 | localhost:wuyu-platform-hexo elson$ hexo deploy |
Hexo安装问题
安装过程遇到的问题解决,问题列表.
JDK 安装
JDK(Java Development Kit)是Java语言的软件开发工具包.它包含了JAVA的运行环境(JVM + Java系统类库)和JAVA工具.
移除自带的OpenJDK
CentOs默认可能安装了openjdk,这里我们采用oracle官网的jdk,所以需要移除openjdk.
1 | [root@localhost ~]# rpm -qa | grep jdk |
安装Oracle官方JDK
下载最新版本的JDK,解压到特定目录,笔者解压到/usr/local/jdk1.8.0_121
, 然后配置环境变量(修改/etc/profile文件,在文件末尾追加java环境变量设置信息)
1 | [root@localhost jdk1.8.0_121]# java -version |
/etc/profile
配置文件末尾追加内容如下(追加完source /etc/profile
使配置生效)
1 | # set java environment |
Nginx安装
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器; 官网地址:http://nginx.org/
Nginx安装示例
1 | [root@localhost data]# yum install zlib zlib-devel openssl openssl-devel pcre-devel gcc gcc-c++ autoconf automake pcre-devel gd-devel GeoI GeoIP-data GeoIP-devel |
Nginx安装验证
1 | [root@localhost data]# /usr/local/nginx/sbin/nginx -V |
Nginx启停脚本
1 | [root@localhost init.d]# service nginx |
Nginx配置说明
相关文档: https://blog.52itstyle.com/archives/557/
Nginx平滑升级
相关文档: https://www.centos.bz/2017/07/nginx-upgrade-latest-version/
Mysql安装
MySQL是最流行的关系型数据库管理系统.
Yum安装MysSQL
1 | [root@localhost local]# yum list | grep mysql |
使用官方仓库安装
Yum安装的版本可能比较低,要安装最新版的话,可以采用MySQL官方仓库,仓库地址: http://repo.mysql.com/
安装启动后,会随机生成一个默认密码,该密码在首次登录后,会强制提示用户更新;默认密码可以在mysql的日志文件中查看.
1 | [[root@localhost ~]# wget http://repo.mysql.com/mysql80-community-release-el7.rpm |
MySQL开机启动
通过chkconfig
配置MySQL开机启动.
1 | [root@localhost local]# chkconfig --add mysqld |
MySQL授权访问
示例: 授权dennisit
以rmsqlpwd
从任意远程端连接到mysql,特定ip限制讲%设置为限制的ip地址即可.
1 | mysql> CREATE USER 'user1'@'%' IDENTIFIED BY 'user1pwd'; |
授权后,远程端访问
1 | [root@localhost ~]# mysql -h172.28.224.34 -uuser1 -puser1pwd |
Elastic安装
Elastic是一个开源的分布式全文索引组件
1 | [root@localhost local]$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz |
X-Pack生成授权账号
交互创建
1 | [root@localhost local]$ elasticsearch-6.3.0/bin/elasticsearch-setup-passwords auto |
自动生成
1 | [root@localhost local]$ elasticsearch-6.3.0/bin/elasticsearch-setup-passwords auto |
Redis安装
Redis是一个高性能的key-value数据库.
Redis安装
1 | [root@localhost download]# wget http://download.redis.io/releases/redis-stable.tar.gz |
Redis配置
修改/usr/local/redis/redis.conf
配置文件:
1 | # IP绑定模式 |
Redis启停脚本
1 | [root@localhost document]# vim /etc/init.d/redis |
Redis开机启动
1 | [root@localhost redis-stable]# chkconfig --list | grep redis |
Redis授权访问
1 | [root@localhost redis-stable]# /usr/local/redis/bin/redis-cli -a '111' |
Mongo安装
Mongo是一个基于分布式文件存储的数据库.
Mongo安装
1 | [root@localhost cloud]# wget 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.2.tgz' |
Mongo配置
1 | [root@localhost mongo]# cat mongo.conf |
说明: dbpath和logpath自己创建
Mongo验证
1 | [root@localhost mongo]# pwd |
命令行教程 : http://www.runoob.com/mongodb/mongodb-tutorial.html
Mongo权限
开启权限认证
mongo启动配置中设置auth=true
1 | [root@localhost mongo]# cat mongo.conf |
添加管理员账号
1 | [root@localhost mongo]# pwd |
说明
- 这里所说的管理员账号不是像linux里面无所不能的root,而是一个能分配账号的账号。
- 这样就创建了一个账号,user为admin,密码为123456,他能在admin库中管理任何库的用户。
添加数据操作账号
一旦开启的权限管理,接下来所有的操作都必须用合适的账号去做,我们创建的admin账号只能管理用户,而我们真正需要的账号是要能用来读写数据的,那就需要创建一个可读写数据的账号。
1 | > use admin |
示例给stream库添加了一个账号为”test”,密码为”testpwd”, 权限为”readWrite”的用户.
DaemonTools安装
Daemontools是一个守护进程工具,用来监视一个进程以免其意外退出; 它包含了很多管理Unix服务的工具的软件包,其中最核心的工具是supervise,它的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可; 官网地址: http://cr.yp.to/daemontools.html
DaemonTools安装示例
1 | [root@localhost daemontools]# pwd |
说明: 安装完会在根目录/下创建两个目录:/service和/command目录.
- /service目录: 存放被daemontools管理的进程,注意在/service目录下存放的只能是连接。
- /command目录: 存放的是daemontools的一些常用命令。
1 | [root@localhost daemontools]# cd ~ |
DaemonTools开机启动
在/etc/init/
下增添加svscan.conf
文件, 文件内容如下:
1 | [root@localhost ~]# cat /etc/init/svscan.conf |
注释掉安装,在/etc/inittab
中自动配置的一行(不使用该方法开机启动,会存在不同系统失效的问题)
1 | [root@localhost ~]# cat /etc/inittab |
添加完启动配置后, 执行以下指令是配置重新加载
1 | [root@localhost ~]# initctl reload-configuration |
DaemonTools状态检测
1 | [root@localhost ~]# ps -ef | grep svscan |
DaemonTools目录规范
在需要被supervise监控的目录下建立可执行的 run 脚本文件
将这个目录软链到/service下,svscan检测到这是个新目录,会自动执行 svc -u
关于run脚本:切记,要用 exec 执行最终执行服务的程序,否则运行 run 脚本的shell收到 svc -d 的 TERM 信号退出之后,实际执行服务的那个程序不会跟着退出。
因为supervise是通过监控run退出时产生的SIGCHLD信号来识别服务已经终止,并重启服务的。
如果这里没exec,则会导致fork+exec效果,在svc -d终止服务时,只给run脚本发送TERM命令,而run脚本fork出来的子进程不会收到信号,从而变成孤儿进程继续运行,占据文件锁、TCP端口等资源
对于不便exec的程序,可以在后面加&符号后台运行,并在调用命令之后用 waitpid %1 命令等待,从而阻止run脚本退出;run脚本开头处应该用trap命令捕获TERM信号,信号处理过程中给%1发送TERM信号,即可实现整体退出的效果
一个受监控的配置示例结构应当如下图:
1 | myservice |
DaemonTools监控示例
创建监控测试进程
1 | [root@localhost ~]# cd /service/ |
说明: 要监控的监控必须对应一个run脚本(名字必须是run而且权限是755)
尝试kill掉测试进程
1 | [root@localhost test.daemontools]# jps |
DaemonTools常用指令
启动被管理的进程
1 | [root@localhost ~]# svc -u /service/test.daemontools/ |
查看被管理的进程状态
1 | [root@localhost ~]# svstat /service/test.daemontools/ |
重启被管理的服务
1 | # 重启服务(向当前进程发一个TERM信号,退出后,svc会自动将其启动) |
关闭被管理的进程
1 | [root@localhost ~]# svc -d /service/test.daemontools/ |
问题处理
问题1: could not read symbols: Bad value
错误:
1 | /usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o |
解决: 编辑src/conf-cc, 在gcc开头的一行最后加上-include /usr/include/errno.h
问题2: 应用程序的错误输出需要重定向到STDOUT去
应用程序的错误输出需要 重定向 到 STDOUT 去,不然 daemontools 会认为你的程序出错导致一起重启。通常很多 java 程序是直接把错误输出在 标准错误输出的,需要注意。
1 | exec java xxx.jar 2>&1 |
CentOs7防火墙
1 | [root@localhost opt]# systemctl start firewalld.service |
firewall命令说明
- firewall-cmd –state ##查看防火墙状态,是否是running
- firewall-cmd –reload ##重新载入配置,比如添加规则之后,需要执行此命令
- firewall-cmd –get-zones ##列出支持的zone
- firewall-cmd –get-services ##列出支持的服务,在列表中的服务是放行的
- firewall-cmd –query-service ftp ##查看ftp服务是否支持,返回yes或者no
- firewall-cmd –add-service=ftp ##临时开放ftp服务
- firewall-cmd –add-service=ftp –permanent ##永久开放ftp服务
- firewall-cmd –remove-service=ftp –permanent ##永久移除ftp服务
- firewall-cmd –add-port=80/tcp –permanent ##永久添加80端口(–zone #作用域, –permanent #永久生效,没有此参数重启后失效)
- iptables -L -n ##查看规则,这个命令是和iptables的相同的
- man firewall-cmd ##查看帮助