190212-linux线程数、进程查询

ssh登录远程服务,忽然提示su: failed to execute /bin/bash: 资源暂时不可用,然后通过root账号登录服务器没有问题,但是使用su切换用户时,依然失败,提示上面的错误,搜索一下可能原因是线程数沾满,杀掉一些占用大量线程的进程即可;然后记录下linux下线程数的相关操作

190127-Git项目代码行数统计

统计项目某个某个时间段的行数

1
git log --author="$(git config --get user.name)"  --before='2018-12-31 23:59:59' --after='2018-01-01 00:00:00' --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'

190124-查看进程tcp连接情况

如何查看一个进程的tcp连接情况?

1
lsof -p 进程号 -nP | grep TCP

190115-Shell目录下文件统计

文件夹下文件的统计,通常用的是wc来做,下面简单小结一下各种case

181222-Centos SSH免密登录配置不生效问题fix

centos添加ssh免密配置,结果发现登录时,依然要求设置密码,记录一下解决过程与最终的方案

181220-Shell-目录遍历获取指定的文件

遍历目录,获取需要的文件

直接贴对应的实现脚本

1
2
3
4
5
6
cd /home
for dir in $(ls)
do
# 如果是目录,则打印目录名
[[ -d ${dir} ]] && echo ${dir}
done

181219-centos配置开机后启动脚本

配置开机后执行脚本

配置相对简单,添加一个执行命令即可

1
2
3
4
vim /etc/rc.d/rc.local

# 在文件最后添加
sh /home/yihui/xxx.sh

执行脚本,添加上可执行的权限即可

181207-Centos使用docker构建ecs环境

I. java环境搭建

首先是jdk的安装,可以安装open-jdk,也可以从jdk官网下载jdk包进行配置,简单说明下两种使用方式

1. open-jdk安装

基本安装过程如下

1
2
3
4
5
# 切换root
su
# 首先查看当前支持的jdk版本
yum list | grep jdk
yum install java-11-openjdk-devel.x86_64 java-11-openjdk.x86_64 -y

2. jdk包安装

a. 获取包

官网下载

1
2
3
4
5
6
7
8
## 到官网找到对应的版本,获取下载地址
wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 解压
tar -zxvf jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 目录指定
mv jdk-8u171-linux-x64 /usr/local/java/

宿主机拷贝

1
2
3
4
# 拷贝
docker cp jdk1.8.0_131.tar.gz 0e118346222c:/home/soft
# 进入容器
docker exec -it 0e118346222c /bin/bash

b. 安装

1
2
3
4
5
cd /usr
mkdir java
cp /home/soft
tar -zxvf jdk1.8.0_131.tar.gz
rm jdk1.8.0_131.tar.gz

c. 配置

进入配置文件 vi /etc/profile

1
2
3
4
5
## 文件末尾添加
export JAVA_HOME=/home/soft/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

应用并查看是否配置ok

1
2
3
source /etc/profile
java
javac

3. 删除自带的openjdk

如果希望删除自带的jdk,可以执行下面的命令查看安装的版本

1
rpm -qa | grep java

然后执行

1
2
3
yum remove java-11-openjdk-headless-debug
# 或者执行
rpm -e --nodeps java-11-openjdk-headless-debug-11.0.1.13-3.el7_6.x86_64

II. Maven配置

maven的配置相对简单,下载好包之后,设置mvn的配置即可

1. 获取包

下载maven包,推荐到官网下载,我这里是从宿主机拷贝

1
docker cp maven-3.5.3.tar.gz 0e118346222c:/home/soft

2. 解压

到docker中,解压并配置

1
2
cd /home/soft
tar -zxvf maven-3.5.3.tar.gz

3. 配置

设置配置文件 vi /etc/profile

1
2
M2_HOME=/home/soft/maven-3.5.3
export PATH=${M2_HOME}/bin:${PATH}

配置生效 source /etc/profile 并查看

1
2
3
4
5
6
7
[root@0e118346222c maven-3.5.3]# mvn --version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /home/soft/maven-3.5.3
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_131/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-693.2.2.el7.x86_64", arch: "amd64", family: "unix"

III. tomcat安装

tomcat的安装基本上就是解压个包的事情了

1
2
3
4
docker cp tomcat.tar.gz 0e118346222c:/home/soft
docker exec -it 0e118346222c /bin/bash
cd /home/soft
tar -zxvf tomcat.tar.gz

IV. nginx安装

1. 直接使用 yum 安装

后面一个参数表示指定安装的位置

1
yum install nginx  --prefix=/home/soft/nginx

上面这种安装,在配置https时,会有问题,提示要安装ssl模块啥的,因此可以这么添加一下参数

1
yum install nginx --prefix=/home/soft/nginx --with-http_stub_status_module --with-http_ssl_module

如果你是先执行了上面的步骤,后面发现需要安装ssl模块,要怎么办 ?

操作如下:

1
2
3
4
5
6
7
1. 获取安装的nginx版本 `nginx -V`
2. 获取对应的源码包 `wget http://nginx.org/download/nginx-1.12.0.tar.gz`
3. 解压源码包 `tar -zxvf nginx-1.12.0.tar.gz`, 进入解压的目录
4. 编译 `./configure --prefix=/app/soft/nginx --with-http_stub_status_module --with-http_ssl_module`
5. `make`
6. 备份老的nginx `cp /app/soft/nginx/sbin/nginx cp /app/soft/nginx/sbin/nginx.bk`
7. 拷贝新的nginx `cp sbin/nginx /app/soft/nginx/sbin/nginx`

2. 源码安装

上面其实已经包含了源码安装的步骤,下面简单的列一下

1
2
3
4
5
6
7
8
9
10
安装之前,先安装依赖
- yum install -y zlib zlib-devel gcc
- yum install -y pcre pcre-devel
- yum install -y openssl openssl-devel

wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz; cd nginx-1.12.0
./configure --prefix=/home/soft/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install

3. 命令

nginx 命令

1
2
3
4
5
# 启动
/app/soft/nginx/sbin/nginx

# 停止
/app/soft/nginx/sbin/nginx -s stop

验证是否启动成功

1
curl 'http://locahost'

V. Redis安装

redis的安装,可以直接根据yum简单的进行安装,也可以下载安装包

1. yum安装方式

1
yum install redis

后台启动redis方式:

1
2
3
4
5
6
7
8
9
10
11
12
13

# 设置redis.conf文件,开启后台启动

vim /etc/redis.conf


## 找到 daemonize no 这一行
## 修改成yes,并保存
daemonize yes


## 启动redis
redis-server /etc/redis.conf

查看redis启动是否正常

1
2
# 查看进程号
ps -ef | grep redis

客户端连接测试

1
2
3
4
5
redis-cli

> set test 123
> get test
> expire test

关闭redis

1
redis-cli shutdown

2. 源码安装方式

下载源码并编译

1
2
3
4
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar -zxvf redis-5.0.2.tar.gz
cd redis-5.0.2
make

设置下redis的相关配置文件,假设我们约定将数据文件存放在 /home/data/redis 目录下,则配置需要如下修改

进入配置文件 redis.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修改默认的端口号
port 6868

# 修改密码
requirepass newPwd!

# 设置进程文件
pidfile /home/data/redis-6868/redis.pid

# 设置日志文件
logfile "/home/data/redis-6868/log/redis.log"

# 设置数据文件
dir /home/data/redis-6868/data

在启动redis之前,首先需要创建对应的目录

1
2
3
4
cd /home/data
mkdir redis-6868
cd redis-6868
mkdir data log

开始启动redis并测试

1
2
3
4
5
6
cd /home/soft/redis-5.0.2/
src/redis-server redis.conf

# 测试连接
src/redis-cli -p 6868
auth newPwd!

VI. Mysql环境安装

这里采用最简单的方式进行安装mysql,需要关注的是后面的默认配置的修改

1. 安装

1
2
3
4
5
# 添加源
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# 安装
yum install mysql mysql-server mysql-libs mysql-server

上面安装完毕之后,可以开始启动服务

1
systemctl start mysqld

上面的命令在docker中执行时,会报错

1
Failed to get D-Bus connection: Operation not permitted

可以如下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 首先设置下密码
passwd
> 输入密码 (yihui)

# 退出容器
exit

# 保存docker镜像
docker commit 0e118346222c yihui/centos

# 再次启动镜像
docker run --privileged -e "container=docker" -v /sys/fs/cgroup:/sys/fs/cgroup -ti yihui/centos /usr/sbin/init

# 输入账号和密码
4af0575c5181 login: root
Password: (yihui)

上面搞定之后,就可以继续启动mysql了

如果登录需要密码时,如下确定

1
2
3
4
grep "temporary password" /var/log/mysqld.log

## 输出如下
# A temporary password is generated for root@localhost: WClOFXUqF4&4

2. 配置修改

a. 端口号修改

默认的端口号为3306,如果需要修改端口号,则找到my.cnf文件,新加一个配置即可:

1
2
3
4
5
6
7
vim /etc/my.cnf

## 找到指定的位置,修改端口号
[mysqld]
port=3305
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

服务重启

1
service mysqld restart

2. 密码修改

使用set password

格式:

1
mysql> set password for 用户名@localhost = password('新密码');

例子:

1
mysql> set password for root@localhost = password('123');

update 方式

1
2
3
4
5
mysql> use mysql;  

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges;

添加用户

1
2
alter user 'root'@'localhost' identified by 'test';
create user 'test'@'%' IDENTIFIED BY 'test';

授予权限

1
2
3
# root 方式登录
grant all PRIVILEGES on test.* to 'yihui'@'%' IDENTIFIED by 'test';
flush privileges;

VIII. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180925-shell获取系统当前时间并格式化

shell命令获取当前系统时间并格式化的方式记录

1
2
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "${time}"

180917-Shell命令之xargs使用小结

Shell命令之xargs使用小结

常见用于管道的处理中,拿到前面的数据进行后续的处理;

xargs 以空白字符或换行作为分割,默认使用echo输出结果,且会忽略空白行,官方说明如下

xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by items read from standard input. Blank lines on the standard input are ignored.

180906-Centos网络带宽监控小结

Centos网络带宽监控小结

查看机器的网络流入流出带宽,一个简单的方式就是利用 iftop ,下面简单的记录下使用姿势

180826-mysql配置修改小记

修改默认的msyql配置

1. 端口号修改

默认的端口号为3306,如果需要修改端口号,则找到my.cnf文件,新加一个配置即可:

1
2
3
4
5
6
7
vim /etc/my.cnf

## 找到指定的位置,修改端口号
[mysqld]
port=3305
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

服务重启

1
service mysqld restart

2. 密码修改

使用set password

格式:

1
mysql> set password for 用户名@localhost = password('新密码');

例子:

1
mysql> set password for root@localhost = password('123');

update 方式

1
2
3
4
5
mysql> use mysql;  

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges;

添加用户

1
2
alter user 'root'@'localhost' identified by 'test';
create user 'test'@'%' IDENTIFIED BY 'test';

授予权限

1
2
3
# root 方式登录
grant all PRIVILEGES on test.* to 'finbtc'@'%' IDENTIFIED by 'test';
flush privileges;

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180717-借助Maven打包可项目执行的Jar小记

当我们希望项目打包为一个可执行的jar文件,丢到服务器上运行时,可以怎么做?借助maven。可以比较简单的实现这个

I. 使用小结

在pmo依赖文件中,添加下面的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.git.hui.task.AppLaunch</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

注意上面的mainClass标签中,指定的是main方法执行入口,上面这种打包方式,会将所有依赖的第三方包,也一同打包到最终生成的jar文件中

即,这个jar文件,包含了所有的依赖和业务代码,可以直接运行,执行方式

1
java -jar xxx.jar

源码验证case:

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

QrCode

180716-Centos时区设置

使用timedatectl命令同步时间并设置时区

I. timedatactl命令

1. 使用帮助

1
timedatectl -h

2. 命令示例

2.1 显示系统的当前时间和日期

1
2
3
timedatectl
# timedatectl status
# 两条命令效果等同

2.2 设置日期与时间

1
2
3
timedatectl set-time "YYYY-MM-DD HH:MM:SS"
timedatectl set-time "YYYY-MM-DD"
timedatectl set-time "HH:MM:SS"

2.3 查看所有可用的时区

1
2
3
timedatectl list-timezones
# 亚洲
timedatectl list-timezones | grep -E "Asia/S.*"

2.4.设置时区

1
timedatectl set-timezone Asia/Shanghai

2.5.设置硬件时间

1
2
3
4
# 硬件时间默认为UTC
timedatectl set-local-rtc 1
# hwclock --systohc --localtime
# 两条命令效果等同

2.6.启用时间同步

1
2
timedatectl set-ntp yes
# yes或no; 1或0也可以

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

QrCode

180707-ssh远程免密登录配置

logo

通过ssh免密方式登录远程服务器, 配置比较简单,就是讲自己的rsa公钥放在远端服务器的授权文件中

1
vim ~/.ssh/authorized_keys

180703-netstat常用命令学习小结

logo

平常工作中,经常会出现的一个case就是查询端口号占用情况,一般在linux下使用netstat,在mac下则使用lsof;本篇则记录下Linux之netstat命令的使用

最常用的一个查看端口号占用命令:

1
netstat -alnp | grep port

阿里云服务器基本环境配置

阿里云服务器基本环境配置

I. RabbitMQ安装

1. 安装

1
2
3
yum install erlang
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el6.noarch.rpm
yum install rabbitmq-server-3.6.15-1.el6.noarch.rpm

2. 插件开启

1
2
3
rabbitmq-plugins enable rabbitmq_management
# 启动
rabbitmq-server -detached

3. 权限设置

1
2
3
rabbitmqctl add_user admin xxx12345
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

4. 添加虚拟目录

1
2
3
4
5
6
7
8
9
10
## 添加虚拟目录
rabbitmqctl add_vhost test1
rabbitmqctl add_vhost test2
rabbitmqctl add_vhost test3
rabbitmqctl add_vhost test4
## 设置权限
rabbitmqctl set_permissions -p test1 admin '.*' '.*' '.*'
rabbitmqctl set_permissions -p test2 admin '.*' '.*' '.*'
rabbitmqctl set_permissions -p test3 admin '.*' '.*' '.*'
rabbitmqctl set_permissions -p test4 admin '.*' '.*' '.*'

5. rabbitmq服务启动关闭

1
2
3
4
5
6
## 关闭
rabbitmqctl stop
## 启动
rabbitmq-server -detached
## 状态
rabbitmqctl status

6. 说明

  • 在服务启动之后,再执行开启rabbitmq插件,新增virtual host等操作
  • 控制台默认端口号为:15672
  • 阿里云服务器查看控制台需要在安全组中添加端口号的访问

II. redis 安装

1. 安装

1
2
3
4
5
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make
make install

2. 配置

配置文件配置,实现单台机器上运行多个redis实例

1
2
3
4
5
6
mkdir rediscluster
cd rediscluster
mkdir one two
cd ..
cp redis-4.0.6/redis.con rediscluster/one/
cp redis-4.0.6/redis.con rediscluster/two/

修改redis.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
# 设置密码
requirepass xxx

# 修改端口号
port 6110

# 后台启动
daemonize yes

# 外网访问,注释bind
protected-mode yes
bind 127.0.0.1

3. 注意

  • 阿里云服务器,redis的外网访问,同样需要设置安全组
  • 请不要使用默认端口号,记得一定设置密码

III. mysql

1. 下载安装

1
2
3
4
5
6
7
8
9
10
11
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server

# 启动
service mysqld restart
# 查询密码
grep "password" /var/log/mysqld.log
# 修改密码
alter user 'root'@'localhost' identified by 'SubscribeXhhBlog!'
flush privileges ## 刷新权限

2. 添加用户

1
2
alter user 'root'@'localhost' identified by 'SubscribeXhhBlog!';
create user 'xhh'@'%' IDENTIFIED BY 'SubscribeXhhBlog!!';

授予权限

1
2
3
# root 方式登录
grant all PRIVILEGES on xhh.* to 'xhh'@'%' IDENTIFIED by 'SubscribeXhhBlog!';
flush privileges;

IV. java环境

1. 安装

1
2
3
4
5
6
7
8
## 到官网找到对应的版本,获取下载地址
wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 解压
tar -zxvf jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 目录指定
mv jdk-8u171-linux-x64 /usr/local/java/

2. 配置

进入配置文件 : vi /etc/profile

1
2
3
4
5
## 文件末尾添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

应用 source /etc/profile

测试 java | javac

V. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

QrCode

180608-Git工具之Stash

git stash 暂存

背景:

实际开发过程中,经常可能遇到的一个问题,当你在dev分支上正开发得happy的时候;突然来了个线上bug,得赶紧从release分支上切一个bugfix分支来解决线上问题,这个时候,正在开发的东西,就得暂存了

之前对于Git只是简单的了解了下,只处于入门的会用级别,遇到上面这个问题,采取的是一个比较笨的方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 将当前改动保存,并提交一个tmp commit
git add .
git commit -m 'tmp save'

## 注意上面只是提交到本地,没有推送到远端仓库


# 2. 开始bugfix

## 然后切换到release 分支,并获取最新代码
git checkout release
git pull origin release

## 新建bugfix分支
git checkout -b bugfix
... # 开始干活

# 3. 回到原来分支,继续干活
git checkout dev
git log
git reset --soft commit号

180605-Linux下Crontab实现定时任务

Linux下Crontab实现定时任务

基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不能每天2点,自动的build一下,然后上传

linux的Crontab正好可以支持,下面简单的记录下相关知识点

180602-nginx多域名配置

nginx多域名配置

原来的域名过期了,重新买了一个hhui.top,正好重新的配置一下,针对之前写过的几个不同的东西,通过不同的子域名来进行区分,因此简单记录一下nginx的多域名配置

I. 域名配置

1. 背景

因为资金有限,只有一台服务器,但是这个服务器上干的事情却不止一件,当前的状况是有下面几个

  • zweb : 一个多媒体工具网站,前端ReactJS写的,独立打包;后端为java部署在Tomcat中的应用media
  • mweb : 古诗词wap网,每天推荐12首经典古诗词;前端ReactJS编写,独立打包;后端Java部署在Tomcat中的应用Story
  • media:多媒体处理应用,Git开源,实现图片编辑, 二维码, markdown,svg渲染,html渲染,音频编辑等功能
  • Story: 古诗词的后端,提供古诗词查询,检索推荐和订阅等基本功能,未开源
  • 一灰灰Blog 基于Hexblog搭建的个人博客

所以这台服务器上,从应用角度出发,有五个不同的功能的服务,主要区分为两类:

  1. 静态的html前端页面
  2. 部署在Tomcat上的Java应用

2. 域名配置

五个服务,会配置五个不同的子域名:

  • 将前端静态页面,在服务器上放在不同的目录下,不通的域名,映射到不同的目录
  • Tomcat暴露8080端口,不同的应用放在webapps下不同的目录

a. 域名与文件映射

拿简单的 zweb 和 mweb 来设置,直接映射即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server {
listen 443 ssl;
server_name zweb.hhui.top;

# https 证书配置
ssl_certificate zwebcert/1529370953598.pem;
ssl_certificate_key zwebcert/1529370953598.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_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/zweb;
}

server {
listen 443 ssl;
server_name mweb.hhui.top;

# https 证书配置
ssl_certificate zwebcert/1529370953598.pem;
ssl_certificate_key zwebcert/1529370953598.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_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/mweb;
}

简单来讲,一个子域名对应一个配置项,设置其中的server_name为目标域名

然后就是设置root,映射到不同的前端地址即可

b. 博客配置映射

个人博客虽然也是静态页面,但是不太一样的是博客的源码托管在git上,并借助了github的page服务,因此实际访问的域名会多一个后缀,如

1
https://liuyueyi.github.io/hexblog/

所以如果直接用上面的方法,会导致js和css文件404,主要是因为借助hexo搭建博客时,指定了path路径,所以要做一个简单的域名匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 443 ssl;
server_name blog.hhui.top;

ssl_certificate blogcert/1529816324478.pem;
ssl_certificate_key blogcert/1529816324478.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_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/blog;

location = / {
index index.html;
rewrite ^(.*)$ /hexblog/ break;
}
location / {
root /tmp/html/blog;
}
}

上面的配置,相比较前面的,主要就是拦截了下默认的首页,强制跳转到指定的目录下

c. Tomcat代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443 ssl;
server_name media.hhui.top;

ssl_certificate mediacert/1528000080078.pem;
ssl_certificate_key mediacert/1528000080078.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_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/media/;
location / {
proxy_pass http://media.hhui.top:8080/media/;
proxy_redirect default;
}
}

常见的代理转发配置了,nginx作为代理,将请求转发到Tomcat,也就那么一个简单的配置,主要利用的是 proxy_redirect

II. 小结

主要记录一个简单的配置,关于nginx详细的配置相关,之前写过一个博文,加上友情链接

上面配置体验:

III. 其他

一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

扫描关注

QrCode

redis安装

I. redis安装

centos安装并后台启动redis记录过程

借助GitHub搭建属于自己的maven仓库教程

I. 背景

在Github上也写了不少的项目了,然后经常遇到的一个问题就是,很多自己写的项目,希望在另外一个项目中使用时,只能把这个项目下载下来,相当之不方便

因为大多数的java后端项目都是基于maven管理依赖的,所以就希望能有一个公共的maven仓库,可以把自己的项目扔进去,然后再应用就方便很多了

基于此,就有了本文这个教程了

II. 实现步骤

1. github仓库建立

新建一个repository的前提是有github帐号,默认看到本文的是有帐号的

首先是在github上新建一个仓库,命令随意,如我新建项目为

2. 配置本地仓库

本地指定一个目录,新建文件夹 maven-repository, 如我的本地配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 进入目录
cd /Users/yihui/GitHub

## 新建目录
mkdir maven-repository; cd maven-repository

## 新建repository目录
# 这个目录下面就是存放我们deploy的项目相关信息
# 也就是说我们项目deploy指定的目录,就是这里
mkdir repository

## 新增一个readme文档
# 保持良好的习惯,每个项目都有一个说明文档
touch README.md

这个目录结构为什么是这样的?

我们直接看maven配置中默认的目录结构,同样拷贝一份出来而已

3. 仓库关联

将本地的仓库和远程的github仓库关联起来,执行的命令也比较简单了

1
2
3
4
git add .
git commit -m 'first comit'
git remote add origin https://github.com/liuyueyi/maven-repository.git
git push -u origin master

接着就是进行分支管理了

  • 约定将项目中的snapshot版,deploy到仓库的 snapshot分支上
  • 约定将项目中的release版,deploy到仓库的 release分支上
  • master分支管理所有的版本

所以需要新创建两个分支

1
2
3
4
5
6
7
8
## 创建snapshot分支
git checkout -b snapshot
git push origin snapshot
# 也可以使用 git branch snapshot , 我通常用上面哪个,创建并切换分支

## 创建release分支
git checkout -b release
git push origin release

4. 项目deploy

项目的deploy,就需要主动的指定一下deploy的地址了,所以我们的deploy命令如下

1
2
## deploy项目到本地仓库
mvn clean deploy -Dmaven.test.skip -DaltDeploymentRepository=self-mvn-repo::default::file:/Users/yihui/GitHub/maven-repository/repository

上面的命令就比较常见了,主要需要注意的是file后面的参数,根据自己前面设置的本地仓库目录来进行替换

5. deploy脚本

每次进行上面一大串的命令,不太好记,特别是不同的版本deploy到不同的分支上,主动去切换分支并上传,也挺麻烦,所以就有必要写一个deploy的脚本了

由于shell实在是不太会写,所以下面的脚本只能以凑合能用来说了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash

if [ $# != 1 ];then
echo 'deploy argument [snapshot(s for short) | release(r for short) ] needed!'
exit 0
fi

## deploy参数,snapshot 表示快照包,简写为s, release表示正式包,简写为r
arg=$1

DEPLOY_PATH=/Users/yihui/GitHub/maven-repository/
CURRENT_PATH=`pwd`

deployFunc(){
br=$1
## 快照包发布
cd $DEPLOY_PATH
## 切换对应分支
git checkout $br
cd $CURRENT_PATH
# 开始deploy
mvn clean deploy -Dmaven.test.skip -DaltDeploymentRepository=self-mvn-repo::default::file:/Users/yihui/GitHub/maven-repository/repository

# deploy 完成,提交
cd $DEPLOY_PATH
git add -am 'deploy'
git push origin $br

# 合并master分支
git checkout master
git merge $br
git commit -am 'merge'
git push origin master
cd $CURRENT_PATH
}

if [ $arg = 'snapshot' ] || [ $arg = 's' ];then
## 快照包发布
deployFunc snapshot
elif [ $arg = 'release' ] || [ $arg = 'r' ];then
## 正式包发布
deployFunc release
else
echo 'argument should be snapshot(s for short) or release(r for short). like: `sh deploy.sh snapshot` or `sh deploy.sh s`'
fi

将上面的脚本,考本到项目的根目录下,然后执行

1
2
3
4
5
6
7
8
chmod +x deploy.sh

## 发布快照包
./deploy.sh s
# sh deploy.sh snapshot 也可以

## 发布正式包
./deploy.sh r

基于此,整个步骤完成

III. 使用

上面仓库的基本搭建算是ok了,然后就是使用了,maven的pom文件应该怎么配置呢?

首先是添加仓库地址

添加仓库

如果要区分snapshot和release的话,如下配置

1
2
3
4
5
6
7
8
9
10
<repositories>
<repository>
<id>yihui-maven-repo-snap</id>
<url>https://raw.githubusercontent.com/liuyueyi/maven-repository/snapshot/repository</url>
</repository>
<repository>
<id>yihui-maven-repo-release</id>
<url>https://raw.githubusercontent.com/liuyueyi/maven-repository/release/repository</url>
</repository>
</repositories>

如果不care的话,直接添加下面的即可

1
2
3
4
5
6
<repositories>
<repository>
<id>yihui-maven-repo</id>
<url>https://raw.githubusercontent.com/liuyueyi/maven-repository/master/repository</url>
</repository>
</repositories>

仓库配置完毕之后,直接引入依赖即可,如依赖我的Quick-Alarm包,就可以添加下面的依赖配置

1
2
3
4
5
<dependency>
<groupId>com.hust.hui.alarm</groupId>
<artifactId>core</artifactId>
<version>0.1</version>
</dependency>

IV. 其他

个人博客: Z+|blog

基于hexo + github pages搭建的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

声明

尽信书则不如,已上内容,纯属一家之言,因本人能力一般,见识有限,如发现bug或者有更好的建议,随时欢迎批评指正,我的微博地址: 小灰灰Blog

扫描关注

QrCode

Centos 安装hexo博客

Centos安装hexo博客

根据官网来安装: hexo

why hexo

支持markdown,简单,主题可选

Nginx 路由转发配置笔记

Nginx 路由转发配置笔记

由于预算有限,只有一台服务器,想要玩的东西不少,所以这个台服务器上会提供多重服务,因此涉及到的nginx转发就必有重要了

由nginx做请求代理,提供多种服务

  1. php搭建的网站
  2. hexo创建的博客系统
  3. spring-boot & tomcat搭建的后台
  4. 静态网页

本片配置笔记中,主要集中以下几个内容

  • location的匹配规则是怎样的
  • 如何实现路由转发(反向代理)
  • 如何修改请求的路径(如请求的是 a/index.html 改为 a/public/index.html)

Centos 安装gitbook

Gibook安装说明

主要记录在centos环境下如何搭建一个gitbook的服务

ffmpeg安装

I. 音频转码服务支持

机器扩容时,需要手动安装ffmpeg,以支持音频转码

imagemagic安装

ImageMagic 安装

ImageMagic/GraphicMagic 使用for java(im4java)

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×