自动部署脚本-bash
!/bin/bash
Check if user is root
if [ $(id -u) != "0" ]; then
Echo_Red "Error: You must be root to run this script"
exit 1
fi
. common.sh
. basic_soft.sh
. config_soft.sh
paths config
current_path=pwd
config_path=$current_path/config
include_path=$current_path/include
package_path=$current_path/package
env_path=/etc/profile.d/env.sh
安装准备工作
所有的ssh-keygen命令的输入,都直接回车
Prepare_Install
安装 Nginx
Insert_Nginx
安装 PHP
Insert_PHP
安装数据库
Insert_MariaDB
安装 Redis
Insert_Redis
-------------- 以下属于 mynote 应用紧密相关,经常变动部分
cd ~/init
. app.sh
. config.sh
for file in $include_path/*.sh
do
. $file
done
Prepare_Deploy
安装 Gogs
Insert_Gogs
Deploy_Mynote
Deploy_Front
Deploy_Addi
Deploy_Fastadmin
Deploy_Phpadmin
最后再进行必要的手动操作
Deploy_End
最后安装、启动es,因为需要手动回车
Insert_ES
Echo_Blue "安装完成!enjoy uninote 😃"
!/bin/bash
mynote 等应用部署前的准备工作
Prepare_Deploy()
{
# 写入git server的key,避免询问
echo git.uninote.com.cn,47.110.125.97 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApV+odcYgu2NvjNnHURxjx3as7/cBjS7u9rGuOy1ZQIGz/9NJJFJ70YeRok9oc5ANINtpZcvKTG0UFWUofXX0nmZpDa78+SgDMR5aHxSyiH6ABxqdhOzpzqqNJHGdXtqe1fwTN17Ub3rbT5pVjnJmET//IpIOgv/8XuJe9IJiodAzLc9A+ijecLyJt5rBGy0tyiArQ8YGqv9LXvisQjZf3Al9hcu2kpI50ry6EysIguFIcilzZ3KS6Php9gFMtqH5QZwRoRVL435TfGKShmYVx22IFyd7TAH0epav6tswUB8IP/3GrRV+gn7psmyfvtIpKzIwc5I0LiYS96c1fEd5AQ== >> ~/.ssh/known_hosts
cd $current_path
mkdir /home/www/.ssh
/bin/cp config/ssh-www/id_rsa /home/www/.ssh/
/bin/cp config/ssh-www/id_rsa.pub /home/www/.ssh/
chown -R www:www /home/www/.ssh
chmod 600 /home/www/.ssh/id_rsa
# git config for article update
git config --system core.quotepath false
}
启动 Gogs
Start_Gogs()
{
# 因为权限问题,就重定向到当前目录下
su - git -c '
cd /home/git/gogs
nohup ./gogs web >& gogslog &
'
}
安装 Gogs
Insert_Gogs()
{
# copy 内置的 www's pub key 到 git's authorized_key
cd $current_path
/bin/cp config/ssh-git/authorized_keys /home/git/.ssh/
chmod 600 /home/git/.ssh/authorized_keys
chown git:git /home/git/.ssh/authorized_keys
cd $package_path
tar -zxf gogs_0.11.86_linux_amd64.tar.gz -C /home/git/
mkdir -p /home/git/gogs/custom/conf
mkdir -p /home/git/gogs-repositories
echo "[repository]" >> app.ini
echo "ROOT = /home/git/gogs-repositories" >> app.ini
chown git:git -R /home/git/gogs-repositories
chown git:git -R /home/git/gogs
cp /home/git/gogs/scripts/init/centos/gogs /etc/init.d/gogs
chmod +x /etc/init.d/gogs
mysql -u root -p$db_passwd <<ENDTAG
create database gogs;
ENDTAG
Start_Gogs
等待 gogs 启动,重试10次(10秒)
try_count=0
while (($try_count < 10)); do :
curl "http://127.0.0.1:3000/install" --data "db_type=MySQL&db_host=127.0.0.1%3A3306&db_user=root&db_passwd=$db_passwd&db_name=gogs&ssl_mode=disable&db_path=data%2Fgogs.db&app_name=Gogs&repo_root_path=%2Fhome%2Fgit%2Fgogs-repositories&run_user=git&domain=localhost&ssh_port=22&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fhome%2Fgit%2Fgogs%2Flog&smtp_host=&smtp_from=&smtp_user=&smtp_passwd=&enable_captcha=on&admin_name=&admin_passwd=&admin_confirm_passwd=&admin_email=" --compressed --insecure
a=$?
if [ "$a" == "0" ]
then
echo "Gogs installed!"
break;
fi
((try_count++))
sleep 1
done
if (($try_count >= 10))
then
echo "Gogs install error!"
fi
}
安装es
Insert_ES()
{
cd $package_path
rpm -i jdk-8u181-linux-x64.rpm
# 添加 es 账号
useradd es
# 修改用户资源限制
echo "
es soft nofile 65536
es hard nofile 131072
es soft nproc 2048
es hard nproc 4096
" >> /etc/security/limits.conf
# 修改用户资源限制2
echo "es soft nproc 4096" >> /etc/security/limits.d/90-nproc.conf
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
# 生效配置
sysctl -p
# 解压es并需改配置
tar xf elasticsearch-6.7.1.tar.gz -C /home/es
cd /home/es
chown -R es:es elasticsearch-6.7.1
cd elasticsearch-6.7.1
echo "
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
" >> config/elasticsearch.yml
# 安装es的插件
cd $package_path
mkdir /home/es/elasticsearch-6.7.1/plugins/ik
mkdir /home/es/elasticsearch-6.7.1/plugins/pinyin
unzip elasticsearch-analysis-ik-6.7.1.zip -d /home/es/elasticsearch-6.7.1/plugins/ik
unzip elasticsearch-analysis-pinyin-6.7.1.zip -d /home/es/elasticsearch-6.7.1/plugins/pinyin
cd /home/es
chown -R es:es elasticsearch-6.7.1
# 启动es
# 因为权限问题,就重定向到当前目录下
su - es -c 'cd elasticsearch-6.7.1 && nohup bin/elasticsearch >& eslog &'
}
Deploy_Mynote()
{
echo 'root:$apr1$VEnSRa9p$OTFyusoZY9NOD85k2.XAs0' > /usr/local/nginx/passwd.db
mkdir -p /usr/local/nginx/conf/vhost
cat $config_path/mynote.conf > /usr/local/nginx/conf/vhost/mynote.conf
cat $config_path/enable-php.conf > /usr/local/nginx/conf/enable-php.conf
cat $config_path/nuxt.conf > /usr/local/nginx/conf/vhost/nuxt.conf
sed -i "s/__front_host/$front_host/" /usr/local/nginx/conf/vhost/nuxt.conf
mkdir -p /home/www/wwwlogs
chown -R www:www /home/www/wwwlogs
cd /home/www
# git clone git@git.uninote.com.cn:eson/mynote.git
unzip -q $package_path/mynote.git.zip -d ./mynote
unzip -q $package_path/mynote_composer.zip -d ./mynote/vendor
cd mynote
git remote set-url origin git@git.uninote.com.cn:eson/mynote.git
git fetch origin
git reset --hard $mynote_commit
# 等待所有文件就绪了再chown
cd /home/www
chown -R www:www mynote
tmp_path=/tmp/mynote_init.sql
cat /home/www/mynote/sql/*.sql > $tmp_path
sed -i "s/CREATE DATABASE*/-- /" $tmp_path
mysql -u root -p$db_passwd <<ENDTAG
CREATE DATABASE mynote DEFAULT charset=utf8;
use mynote
source $tmp_path
ENDTAG
echo "
'mysql:host=127.0.0.1;dbname=mynote',
'password' => '$db_passwd'
];
" > /home/www/mynote/basic/config/local_db.php
cp $config_path/local_params.php /home/www/mynote/basic/config/local_params.php
chown www:www /home/www/mynote/basic/config/local_params.php
cd /home/www
cp $package_path/composer.phar /bin/composer
source $env_path
# composer config -g repo.packagist composer https://packagist.phpcomposer.com
# su - www -c '
# cd /home/www/mynote/
# composer install
# '
nginx -s reload
}
Deploy_Front()
{
# node 安装
# 需要先安装 xz,再解压:
yum install xz -y
tar -xf $package_path/node-v10.16.3-linux-x64.tar.xz
# 安装到 /usr/node10
mv node-v10.16.3-linux-x64 /usr/node10
# 写入 profile.d,打开 shell 自动执行:
echo 'export PATH=/usr/node10/bin:$PATH' >> $env_path
source $env_path
cd /home/www
unzip -q $package_path/mynote-front-dist.git.zip -d ./front
cd front
git remote set-url origin git@git.uninote.com.cn:cyb/mynote-front-dist.git
git fetch origin
git reset --hard $mynote_front_dist_commit
# pm2 install
tar -xf $package_path/pm2.tar.gz
mv pm2 /usr/node10/lib/node_modules/
cd /usr/node10/bin
ln -s ../lib/node_modules/pm2/bin/pm2 pm2
# start front using pm2
cd /home/www/front
pm2 start node -- node_modules/nuxt/bin/nuxt.js start
# for 头像 & 编辑器图片
ln -s /home/www/mynote/basic/web/docs/__pic /home/www/front/static/__pic
ln -s /home/www/mynote/basic/web/upload_pic /home/www/front/static/upload_pic
# favicon,如果不配置,则拷贝默认版本
/bin/cp ~/init/config/favicon/$deployment/favicon.ico /home/www/front/static/
}
# 需要先部署 mynote
Deploy_Addi()
{
cd /home/www
# git clone git@git.uninote.com.cn:collin/mynote-env-init-v2.git
unzip -q $package_path/additional_item.git.zip -d ./additional_item
cd additional_item
git remote set-url origin git@git.uninote.com.cn:eson/additional_item.git
git fetch origin
git reset --hard $addi_commit
# configs
cat $config_path/additional_item_82.conf > /usr/local/nginx/conf/vhost/additional_item_82.conf
cat $config_path/additional_item_config.php > /home/www/additional_item/config_my.php
sed -i "s/__db_passwd/$db_passwd/" /home/www/additional_item/config_my.php
# 等待所有文件就绪了再chown
cd /home/www
chown -R www:www additional_item
tmp_path=/tmp/additional_item_init.sql
cat /home/www/additional_item/log_storage/sql/mynote*.sql > $tmp_path
mysql -u root -p$db_passwd <