一、场景
为了实现项目部署简化,尽量都由脚本来完成,需要将许多手动处理过程进行脚本化处理。
二、环境
1、VMware 虚拟机
Download VMware Workstation Pro
2、获取CentOs 镜像
3、使用镜像在虚拟机中安装
4、配置网卡信息,重启网络
三、执行
1、docker 相关
离线下载安装
https://download.docker.com/linux/static/stable/
#!/bin/sh
echo '解压tar包...'
tar -xvf $1
echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/
echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
echo 'docker安装成功...'
docker -v
在linux系统中需要将一个服务设置成开机自启动,一般可以配置一个脚本service文件,放入到
/usr/lib/systemd/system 目录下面。 例如docker服务:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target
然后使用systemctl enable xxx.service 命令开启即可。
docker ps -a 可以查看启动的容器
2、neo4j 相关
使用同样方式将服务设置成开机启动
#!/bin/bash
currentDir=$(cd `dirname $0`; pwd)
targetDir=/opt/prov
source /etc/profile##检查用户是否为root用户,只允许root用户执行此脚本
if [ $(id -u) != "0" ]; then
echo "Error: You must be root to run this script, please use root to install"
exit 1
fi
##检查JDK环境
if [ -z $JAVA_HOME ];then
echo "JAVA_HOME not exists"
exit 1
fi##检查安装环境
if [ ! -d "$targetDir" ];then
mkdir -p $targetDir
chmod 755 -R $targetDir
if [ ! -d "$targetDir" ];then
echo "$targetDir does not exist and cannot be created";
exit 1
fi
fitar -zxf $1 -C $targetDir
cat > /lib/systemd/system/neo4j.service <<EOF
[Unit]
Description=neo4j
After=network.target[Service]
Type=forking
Environment="JAVA_HOME=$JAVA_HOME"
ExecStart=$targetDir/neo4j-community-3.4.5/bin/neo4j-start.sh
ExecStop=$targetDir/neo4j-community-3.4.5/bin/neo4j-stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable neo4j.service
systemctl start neo4j.serviceexit 0
注意在官方提供的压缩文件中,需要将启动命令写入shell脚本中作为一个sh文件执行,另外就是Neoj 的默认账号密码是在data目录下得dbms auth 文件中,如果忘记密码了,可以删除这个文件重新启动,会生成默认账号密码。
另外neo4j 注意配置允许远程访问
将 54 行的【# dbms.connectors.default_listen_address=0.0.0.0】注释 【#】去掉
3、数据库处理
对于需要使用脚本导入数据的时候,可以直接连接,用命令导入数据,例如:
#!/bin/bash
currentDir=$(cd `dirname $0`; pwd)
mysql -u账号 -p密码 -P端口 -h地址 <<EOF
use 数据库名称;
source $currentDir/数据库数据.sql;EOF
exit 0
批量修改数据库中某些表的某个字段数据,可以先根据元数据中找出这些数据,然后用concat拼接sql 语句,最后分组返回一个字符串。
select GROUP_CONCAT(p.execSql SEPARATOR '; ' )
from
(
SELECT
CONCAT( 'UPDATE ', table_name, ' SET 修改字段 = 修改值' ) AS `execSql`,
'1' AS id
from
(
SELECT TABLE_NAME FROM
information_schema.COLUMNS
WHERE
COLUMN_NAME='修改字段'
and table_name in
(
select table_name from information_schema.TABLES where TABLE_SCHEMA='数据库名称'
)
)
T
)
P
GROUP BY P.id
需要注意group_concat 最大限制修改:
show global VARIABLES like 'group_concat_max_len'
set global group_concat_max_len=1024000
navicat 导入数据注意设置最大传输包大小限制:
show global variables like 'max_allowed_packet'
set global max_allowed_packet=1024*1024*32