acapp项目自动化运行
因为博主一直在服务器上折腾东西,acapp这个容器经常重启,而由于y总容器的特殊创建方式,每次重启容器后,都要登陆上去手动开启一堆东西,十分麻烦。
因此博主一直在想一个办法:能不能让这些服务开机自动运行,不用我们反复去配置
最近,终于想到了办法,有了此文
配置容器开机自启的思路
这里由于内容太长,单独成一文:关于服务器自动化配置的一些操作 - AcWing
配置acapp自动运行服务的一些困境
让我们来回忆一下想让整个项目正常运行需要开启哪些服务
各种环境启动命令
启动nginx
服务
sudo /etc/init.d/nginx start
启动thrift
服务
cd match_system/src/
chmod +x main.py
./main.py
启动Redis
服务
sudo redis-server /etc/redis/redis.conf
项目启动
启动uwsgi
服务(如果未部署过nginx,不要用此方法)
uwsgi --ini scripts/uwsgi.ini
启动django_channels
服务
daphne -b 0.0.0.0 -p 5015 acapp.asgi:application
启动前请确保服务器开放443
,80
和项目运行的
端口
启动django
项目:
python3 manage.py runserver 0.0.0.0:端口号
django后台操作redis
1.打开项目的django交互式后台
python3 manage.py shell
2.导入cache层相关的包
from django.core.cache import cache
3.操作redis的一些命令
列出redis中的所有key | cache.keys(‘*’) | cache.keys()中的表达式支持正则 |
向redis中插入一条数据 | cache.set(key,value,passtime) | |
查询某个key是否存在 | cache.has_key(‘’) | |
删除所有数据 | cache.clear() |
|
其中有两条阻塞式服务:
uwsgi –ini scripts/uwsgi.ini
daphne -b 0.0.0.0 -p 5015 acapp.asgi:application
需要一直开启
如果只是写一个脚本去逐行运行这些命令,阻塞式服务后,实测是无法运行任何命令的
所以常规的脚本无法实现该业务
解决方案
想想我们开发的时候,是在tmux
中运行这些命令的,如果能用代码来操作tmux
,就完美的解决了次问题
详细脚本
这里的脚本我每一句都写了注释,应该很方便理解,大家可以根据自己的服务器环境和项目结构,进行修改和扩充
#! /bin/bash
# 教程:https://blog.csdn.net/woswod/article/details/80353254
# tmux kill-session -t acapp_workspace
USER_PASSWORD=当前用户的密码
USERNAME=当前用户的用户名
#项目路径
WORKDIR=/home/$USERNAME/acapp
#tmux session的名字
TMUX_SESSION_NAME=acapp_workspace
#
cd $WORKDIR || exit
#su- $USERNAME
echo $USER_PASSWORD | sudo -S /etc/init.d/nginx start
echo $USER_PASSWORD | sudo -S redis-server /etc/redis/redis.conf
result=$(tmux ls | grep $TMUX_SESSION_NAME)
echo "$result"
#tmux每开一个窗口,相当于新开了一个bash,每新开一个bash,就会执行整个脚本
#所以每次执行脚本之前,应该判断一下这个脚本之前是否执行过,即判断tmux是否被创建出来
if [[ $result = "" ]]; then
#
cd $WORKDIR || exit
#su- $USERNAME
echo $USER_PASSWORD | sudo -S /etc/init.d/nginx start
echo $USER_PASSWORD | sudo -S redis-server /etc/redis/redis.conf
PROCESS=$(ps -ef | grep uwsgi)
for i in $PROCESS; do
case "$i" in
[1-9][0-9]*)
echo "Kill the process [ $i ]"
kill -9 $i
;;
*) ;;
esac
done
# 后台新建一个session
tmux new-session -d -s $TMUX_SESSION_NAME
#向选择的窗口发送指令
tmux send-keys -t $TMUX_SESSION_NAME "uwsgi --ini scripts/uwsgi.ini" C-m
#该命令会把当前工作区域分成左右两个小窗格,光标会移动到右面的窗口
tmux split-window -h
tmux send-keys -t $TMUX_SESSION_NAME "cd $WORKDIR/scripts" C-m
tmux send-keys -t $TMUX_SESSION_NAME "./compress_game_js.sh" C-m
#启动`django_channels`服务
#该命令 -t 后参数[session]:[window].[pane]; -v表示向右分割,-h表示向下分割
tmux split-window -t $TMUX_SESSION_NAME:0.0 -v
tmux send-keys -t $TMUX_SESSION_NAME "cd $WORKDIR" C-m
tmux send-keys -t $TMUX_SESSION_NAME "daphne -b 0.0.0.0 -p 5015 acapp.asgi:application" C-m
#多次切割后每个小窗口的编号会变化
#该命令会把当前工作区域分成左右两个小窗格,光标会移动到右面的窗口
tmux split-window -t $TMUX_SESSION_NAME:0.0 -v
tmux send-keys -t $TMUX_SESSION_NAME "cd match_system/src/" C-m
tmux send-keys -t $TMUX_SESSION_NAME "chmod +x main.py" C-m
tmux send-keys -t $TMUX_SESSION_NAME "./main.py" C-m
tmux split-window -t $TMUX_SESSION_NAME:0.0 -h
tmux send-keys -t $TMUX_SESSION_NAME "python3 manage.py shell" C-m
tmux send-keys -t $TMUX_SESSION_NAME "from django.core.cache import cache" C-m
tmux send-keys -t $TMUX_SESSION_NAME "cache.keys('*')" C-m
tmux send-keys -t $TMUX_SESSION_NAME "cache.clear()" C-m
tmux send-keys -t $TMUX_SESSION_NAME "cache.has_key('')" C-m
#tmux select-pane -t 2
#tmux send-keys "mysql -uroot -p123456 --host 192.168.1.221 --sigint-ignore --auto-vertical-output" C-m
#tmux send-keys "use data" C-m
#tmux -2 attach-session -t ssh //挂载到之前运行的session上
#tmux每开一个窗口,相当于新开了一个bash,每新开一个bash,就会执行整个脚本
echo "66666666"
fi
#tmux a -t $TMUX_SESSION_NAME
使用之前大家要改动如下地方:
我的项目结构
目录结构和y总不同的同学,可以根据我的注释进行自行改动
配置脚本开机自启
大家可以再看一眼关于服务器自动化配置的一些操作 - AcWing
按照这个思路,只需要把这个脚本写在.bashrc
中启动即可
设这个脚本叫
在用户家目录下的
.bashrc
的最后添加:
if [ -f 脚本的绝对路径 ]; then
bash 脚本的绝对路径
fi
示例:我的.bashrc
这样每次启动容器,就会自动运行这个脚本
脚本的实际运行效果
1.重启容器
ssh登陆
运行效果解释:
一旦ssh到脚本中的用户,脚本会自动运行,为大家创建了一个名为
acapp_workspace
的tmux session,当然这个名字可以在全局变量中自定义大家可以通过
tmux a
(因为此时只有一个session)或tmux a -t acapp_workspace
进入这个session在这个session ,我给大家开了5个pan
从左上角开始:第一个运行uwsgi,第二个是Django-redis的交互控制台,第三个是匹配系统的main.py,第四个是websocket的daphne
右半边运行了一次压缩js的脚本,大家可以在右半边操作
而且在每个窗口按下↑,都可以看到运行的命令
6
牛!
棒