Ubuntu内网穿透和项目开机自启

肖卓2022年6月27日
大约 4 分钟

开机自启动配置

服务器环境搭建完成后,项目能正常运行,但是关机后项目需要手动启动,在一些特殊场景下手动启动一次很麻烦,必须要配置项目自启动,本教程主要介绍内网穿透配置和项目自启动配置

一.配置内网穿透

Linux安装方式

  • 手动安装方式:在官网下载open in new window下载适用于Linux平台的zip压缩包,解压后得到cpolar,然后通过命令行带参数运行即可。
  • 自动安装方式:一键自动安装脚本

一键自动安装脚本

环境需求:

该脚本适用于Ubuntu16.04/18.04/20.04及以后,Centos7/8及以后版本,树莓派最新官方镜像,及支持systemd的新式Linux操作系统,该脚本会自动判断CPU架构(i386/amd64/mips/arm/arm64等等),自动下载对应cpolar客户端,并自动部署安装。

1. cpolar 安装(国内使用)

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

或 cpolar短链接安装方式:(国外使用)

curl -sL https://git.io/cpolar | sudo bash

2. 查看版本号,显示3.2.88.22

cpolar version

3. token认证

登录后台open in new window,查看自己的认证token,之后将token贴在命令行里

cpolar authtoken xxxxxxx

4. 简单穿透测试

cpolar http 8080

按ctrl+c退出

5. 向系统添加服务

sudo systemctl enable cpolar

6. 启动cpolar服务

sudo systemctl start cpolar

7. 查看服务状态

sudo systemctl status cpolar

8. 登录后台,查看隧道在线状态

https://dashboard.cpolar.com/statusopen in new window

9. 安装完成

可以去入门指南open in new window进一步了解cpolar的使用方法。

注: cpolar 卸载方法

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash -s -- --remove

安装说明:

  • cpolar默认安装路径 /usr/local/bin/cpolar,
  • 安装脚本会自动配置systemd服务脚本,启动以后,可以开机自启动。
  • 如果第一次安装,会默认配置一个简单的样例配置文件,创建了两个样例隧道,一个web,一个ssh
  • cpolar配置文件路径: /usr/local/etc/cpolar/cpolar.yml

10. 配置cpolar.yml

authtoken: xxx
tunnels:
  ssh:
    proto: tcp
    addr: "22"
    remote_addr: 1.tcp.cpolar.cn:prot
    region: cn_vip
  ap:
    proto: http
    addr: "8080"
    region: cn_vip
    hostname: app.xiaozhuo.top
  gateway:
    proto: http
    addr: "80"
    region: cn_vip
    hostname: dev.xiaozhuo.top
  mysql:
    proto: tcp
    addr: "3306"
    remote_addr: 2.tcp.vip.cpolar.cn:prot
    region: cn_vip
~                     

11. 后台配置域名和tcp预留通道

image-20220908172259731

二.配置启动脚本

1.编写手动脚本

手动脚本支持启动项目,停止项目,查看项目状态,重启项目等功能

vim jeecg.sh
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=jeecg-boot-module-system-3.1.0.jar
APP_PATH=/home/whut/ap/jeecg-boot-module-system-3.1.0.jar
#使用说明,用来提示输入参数
usage() {
 echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
 exit 1
}
 
#检查程序是否在运行
is_exist(){
 pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
 #如果不存在返回1,存在返回0 
 if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}
 
#启动方法
start(){
 is_exist
 if [ $? -eq "0" ]; then
 echo "${APP_NAME} is already running. pid=${pid} ."
 else
 nohup java -jar $APP_PATH  2>&1 &
 echo "${APP_NAME} start success"
 fi
}
 
#停止方法
stop(){
 is_exist
 if [ $? -eq "0" ]; then
 kill -9 $pid
 else
 echo "${APP_NAME} is not running"
 fi 
}
 
#输出运行状态
status(){
 is_exist
 if [ $? -eq "0" ]; then
 echo "${APP_NAME} is running. Pid is ${pid}"
 else
 echo "${APP_NAME} is NOT running."
 fi
}
 
#重启
restart(){
 stop
 start
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
 "start")
 start
 ;;
 "stop")
 stop
 ;;
 "status")
 status
 ;;
 "restart")
 restart
 ;;
 *)
 usage
 ;;
esac

2.执行手动脚本

#启动项目
sh jeecg.sh start
#停止项目
sh jeecg.sh stop
#查看项目状态
sh jeecg.sh status
#重启项目
sh jeecg.sh restart

3.编写自动启动脚本

vim /usr/local/sbin/start.sh
#!/bin/bash
#项目文件存放路径
APP_PATH=/home/whut/ap/jeecg-boot-module-system-3.1.0.jar

#文件名称
APP_NAME=jeecg-boot-module-system-3.1.0.jar

#查询存在的进程
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#此处需要休息两秒,不然pid没有赋值成功
sleep 2

#杀掉存在的进程
if [ $pid ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
kill -9 $pid
echo "${pid} 进程终止成功"
sleep 2
fi

#启动项目
if test -e $APP_PATH 
then
echo '文件存在开始部署'
nohup java -jar $APP_PATH  2>&1 &

else
echo '$APP_NAME 文件不存在'
fi

#项目启动成功后启动nginx,直接设置nginx开启启动会因为代理域名没响应报错
sleep 60
service nginx start

4.注册开机启动服务

#切换到系统目录
cd /etc/systemd/system
#编辑注册服务脚本
vim data.service

编辑内容参考

[Unit]
Description=data server
# 依赖项,在这些程序之后启动
After=NetworkManager.service mysqld.service

[Service]
Type=forking
# 配置启动脚本
ExecStart=/usr/local/sbin/start.sh
# 配置重启脚本
ExecReload=/usr/local/sbin/restart.sh
# 配置停止脚本
ExecStop=/usr/local/sbin/stop.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

继续注册开机启动

#配置开机启动
systemctl enable data.service
#重新加载配置
systemctl daemon-reload
#查看启动配置
systemctl list-unit-files | grep data
#使用systemctl启动服务
systemctl start data.service
#使用systemctl停止服务
systemctl stop data.service
上次编辑于: 2023/9/23 20:40:17
贡献者: 肖桌
评论
Powered by Waline v2.5.1