1 云服务器已安装应用列表
- nginx_1.14.0
- docker
- docker-compose
- portainer.io (docker)
- mysql_5.7.30 (docker)
- redis_6.2.1 (docker)
- mongo_4.1.7 (docker)
- halo (docker)
- bark-server (docker)
- xxl-job-admin (docker)
- cloudreve_3.3.2
- aliyundriver (docker)
- simple-tool (docker)
- mysql-clinet
- davfs2
- automysqlbakup
2 linux应用
2.1 nginx_1.14.0
安装ngix
sudo apt update
sudo apt install nginx
配置反向代理(https)(以portainer.foraixh.xyz举例)
- 申请https证书
- 配置云解析(为域名portainer.foraixh.xyz配置解析到服务器公网IP)
- 证书解压到指定文件(如/etc/nginx/cert)
- 增加portainer.foraixh.xyz的解析配置(如下)
events {}
http {
client_max_body_size 20m;
# portainer配置
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
#需要将yourdomain.com替换成证书绑定的域名。
server_name portainer.foraixh.xyz;
if ($http_host ~* "^(.*?)\.foraixh\.xyz$") { #正则表达式
set $domain $1; #设置变量
}
root html;
index index.html index.htm;
ssl_certificate cert/portainer.foraixh.xyz.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称 。
ssl_certificate_key cert/portainer.foraixh.xyz.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
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; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
if ($domain ~* "portainer") {
# 将portainer.foraixh.xyz反向代理到对应服务
proxy_pass http://127.0.0.1:8080;
}
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
# 重启nginx服务即可生效
nginx service restart
2.2 docker
https://docs.docker.com/engine/install/ubuntu/
2.3 docker-compose
https://docs.docker.com/compose/install/
2.4 cloudreve_3.3.2
2.4.1 下载cloudreve
cd /home
mkdir cloudreve && cd
wget https://github.com/cloudreve/Cloudreve/releases/download/3.3.2/cloudreve_3.3.2_linux_amd64.tar.gz
2.4.2 创建数据库cloudreve
create user cloudreve identified by 'cloudreve';
CREATE database if NOT EXISTS `cloudreve` default character set utf8mb4 collate utf8mb4_unicode_ci;
grant all privileges on cloudreve.* to cloudreve@'%' identified by 'cloudreve';
flush privileges;
2.4.3 编写配置文件conf.ini
[System]
; 运行模式
Mode = master
; 监听端口
Listen = :25000
; 是否开启 Debug
Debug = false
; Session 密钥, 一般在首次启动时自动生成
SessionSecret =
; Hash 加盐, 一般在首次启动时自动生成
HashIDSalt =
; SSL 相关
;[SSL]
; SSL 监听端口
;Listen = :443
; 证书路径
;CertPath = C:\Users\i\Documents\fullchain.pem
; 私钥路径
;KeyPath = C:\Users\i\Documents\privkey.pem
; 启用 Unix Socket 监听
[UnixSocket]
;Listen = /run/cloudreve/cloudreve.sock
; 数据库相关,如果你只想使用内置的 SQLite数据库,这一部分直接删去即可
[Database]
; 数据库类型,目前支持 sqlite/mysql/mssql/postgres
Type = mysql
; MySQL 端口
Port = 3306
; 用户名
User = cloudreve
; 密码
Password = cloudreve
; 数据库地址
Host = 127.0.0.1
; 数据库名称
Name = cloudreve
; 数据表前缀
TablePrefix = cr_
; 字符集
Charset = utf8
; SQLite 数据库文件路径
;DBFile = cloudreve.db
; 从机模式下的配置
[Slave]
; 通信密钥
;Secret = 1234567891234567123456789123456712345678912345671234567891234567
; 回调请求超时时间 (s)
;CallbackTimeout = 20
; 签名有效期
;SignatureTTL = 60
; 跨域配置
[CORS]
AllowOrigins = *
AllowMethods = OPTIONS,GET,POST
AllowHeaders = *
AllowCredentials = false
; Redis 相关
[Redis]
Server = 127.0.0.1:6379
Password = cloudreve
DB = 0
; 从机模式缩略图
[Thumbnail]
;MaxWidth = 400
;MaxHeight = 300
;FileSuffix = ._thumb
2.4.4 进程守护配置
# 编辑配置文件
vim /usr/lib/systemd/system/cloudreve.service
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
Wants=network.target
[Service]
WorkingDirectory=/home/cloudreve
ExecStart=/home/cloudreve/cloudreve -c /home/cloudreve/conf.ini
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=/home/cloudreve/log/log.log
StandardError=syslog
[Install]
WantedBy=multi-user.target
# 更新配置
systemctl daemon-reload
# 启动服务
systemctl restart cloudreve
# 设置开机启动
systemctl enable cloudreve
#查看日志
journalctl -u cloudreve.service -f
2.4.5 登陆检查
登陆并修改管理员密码(管理员密码会在日志中打印输出)
2.5 mysql-clinet
sudo apt-get install mysql-client
2.6 davfs2
sudo apt-get install davfs2
2.7 automysqlbakup
https://www.cnblogs.com/tinywan/p/9891160.html
3 docker应用
3.1 portainer.io
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
3.2 mysql_5.7.30
配置docker-compose.yml文件
version: '3'
services:
#服务名称
mysql:
#容器名称
container_name: mysql-5.7.30
#镜像名称
image: mysql:5.7.30
#自动启动
restart: always
#端口映射
ports:
- "3306:3306"
#环境变量
environment:
- MYSQL_ROOT_PASSWORD=root-password
- MYSQL_USER=user
- MYSQL_PASS=password
#挂载
volumes:
- /home/ubuntu/docker-iamges/mysql-5.7.30/conf.d:/etc/mysql/conf.d
- /home/ubuntu/docker-iamges/mysql-5.7.30/logs:/logs
- /home/ubuntu/docker-iamges/mysql-5.7.30/data:/var/lib/mysql
启动容器,进入容器配置用户和数据库
docker-compose up -d
docker exec -it mysql-5.7.30 bash
create user username identified by 'password';
CREATE database if NOT EXISTS `database` default character set utf8mb4 collate utf8mb4_unicode_ci;
grant all privileges on database.* to username@'%' identified by 'password';
flush privileges;
3.3 redis_6.2.1
配置docker-compose.yml文件并启动容器
version: '3'
redis:
image: redis
#容器名称
container_name: redis
restart: always
ports:
- 6379:6379
volumes:
- /home/ubuntu/docker-iamges/redis:/home/docker/redis/data
# redis启动命令;并配置密码
command: redis-server --appendonly yes --requirepass "redis-password"
3.4 mongo_4.1.7
安装mongo并配置副本集模式
docker network create my-mongo-cluster
mongo:
image: mongo:4.1.7
container_name: "mongo"
net: "my-mongo-cluster"
ports:
- "27017:27017"
command: mongod --replSet mongoreplset --bind_ip_all --auth
启动容器并进入容易,登陆mongo配置副本集
db.createUser({user: 'root', pwd: 'password', roles: ['root']})
db.auth('root', 'password')
db.createUser({user:'dbuser',pwd:'dbpassword',roles: [{role:'readWrite',db:'db'}]})
config = {"_id" : "mongoreplset","protocolVersion" : 1,"members" : [{"_id" : 0,"host" : "ip:27017"}]}
rs.initiate(config)
rs.reconfig(config, {force:true})
rs.conf()
3.5 halo
https://docs.halo.run/getting-started/install/docker
3.6 xxl-job-admin
1 创建数据库
create user xxladmin identified by '123456';
CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
grant all privileges on xxl_job.* to xxladmin@'%' identified by '123456';
flush privileges;
2 运行初始化脚本
#
# XXL-JOB v2.3.0
# Copyright (c) 2015-present, xuxueli.
CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;
SET NAMES utf8mb4;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) NOT NULL,
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`author` varchar(64) DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
`trigger_code` int(11) NOT NULL COMMENT '调度-结果',
`trigger_msg` text COMMENT '调度-日志',
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
`handle_code` int(11) NOT NULL COMMENT '执行-状态',
`handle_msg` text COMMENT '执行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
`title` varchar(12) NOT NULL COMMENT '执行器名称',
`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(50) NOT NULL COMMENT '密码',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');
commit;
3 拉取docker镜像
docker pull xuxueli/xxl-job-admin:2.3.0
4 自定义配置文件
### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xxladmin
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.from=**@qq.com
spring.mail.username=**@qq.com
spring.mail.password=******
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### xxl-job, access token
xxl.job.accessToken=
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=20
xxl.job.triggerpool.slow.max=10
### xxl-job, log retention days
xxl.job.logretentiondays=30
5 创建容器并运行
docker run -p 8080:8080 -e JAVA_OPTS=-Xmx256m -v /home/xxl-job/application.properties:/application.properties -v /tmp:/data/applogs -e PARAMS='--spring.config.location=/application.properties' --restart always --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0
6 登陆后台并修改密码
http://127.0.0.1:8080/xxl-job-admin
3.7 aliyundriver
配置文件docker-compose.yml
# 部署阿里云盘dav
version: "3.0"
services:
webdav-aliyundriver:
image: zx5253/webdav-aliyundriver
container_name: aliyundriver
environment:
- TZ=Asia/Shanghai
- ALIYUNDRIVE_REFRESH_TOKEN=*******
- ALIYUNDRIVE_AUTH_USER-NAME=123456
- ALIYUNDRIVE_AUTH_PASSWORD=123456
- JAVA_OPTS=-Xmx128m
volumes:
- /home/ubuntu/docker-iamges/webdav-aliyundriver/:/etc/aliyun-driver/
- /etc/localtime:/etc/localtime
ports:
- 8080:8080
restart: always
启动容器,则对外暴露了阿里云盘的webdav服务
3.8 simple-tool_1.0.0
简单的工具应用,当前支持公交到站提醒
应用打成jar包上传到服务器,构建docker镜像,生成容器启动,配合xxl_job可实现定时公交到站提醒服务
使用jar包构建docker镜像
# 该镜像需要依赖的基础镜像
FROM openjdk:17
# 将当前目录下的jar包复制到docker容器的/目录下
ADD simple-tool-1.0.0.RELEASE.jar /simple-tool-1.0.0.RELEASE.jar
# 解决Docker容器时区问题
ENV TIME_ZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
# 运行过程中创建一个simple-tool-1.0.0.RELEASE.jar文件
RUN bash -c 'touch /simple-tool-1.0.0.RELEASE.jar'
# 声明服务运行在26666端口
EXPOSE 26666
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/simple-tool-1.0.0.RELEASE.jar"]
# 指定维护者的名字
MAINTAINER foraixh
docker build /home/simple-tool/ -t foraixh/simple-tool:1.0.0
生成容器启动
docker run -d -p 26666:26666 -v /etc/localtime:/etc/localtime --name simple-tool --restart always foraixh/simple-tool:1.0.0