06 saltstack生产实例-需求
https://github.com/unixhot/saltbook-code
.Cobbler
1.15 统一网卡名 .Zabbix 系统已经安装好了!
base .手动实现 .需要使用salt的什么状态模块 .编写sls .系统初始化
1.1 关闭SELinux - file.managed - /etc/selinux/config
1.2 关闭默认iptables - service.disabled firewalld
1.3 时间同步(配置ntp) - pkg.installed cron
1.4 文件描述符(必备 /etc/security/limits.conf) file.managed
1.5 内核优化(必备 tcp 内存) sysctl
1.6 SSH服务优化(关闭DNS解析,修改端口) file.managed service
1.7 精简开机系统服务(只开启SSHD服务) service.disabled
1.8 DNS解析(必备) file.managed /etc/resolv.conf
1.9 历史记录优化histroy(记录时间,用户)file.managed /etc/profile
1.10 设置终端超时时间(安全考虑) file.managed /etc/profile
1.11 配置yum源(必备) file.managed
1.12 安装各种agent(必备) pkg file service jinja模板
1.13 基础用户(应用用户 user group),用户登录提醒,sudo权限设置(必备)
1.14 常用基础命令,命令别名(必备 screen lrzsz tree openssl telnet iftop iotop sysstat wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed pkgs
1.15 用户登录提示、PS1的修改 file.managed file.append .服务部署 抽象:功能模块
redis 安装、配置、启动
mysql 安装、配置(my.cnf可以统一 目录默认配置可以统一)
master: server_id
slave: server_id .redis 主从 (已经实现)
.mysql 主从
2.1 mysql-install.sls 安装 配置 初始化
2.2 my.cnf配置不同-server id
2.3 创建主从同步用户
2.4 master上获取binlog 和 pos值
2.5 slave上,change master && start slave
2.6 检查主从状态 GRANT replication slave on .apache+php
.haproxy+keepalived .监控 .业务 .其它
1.系统初始化
1.需求梳理
.Cobbler
1.15 统一网卡名 .Zabbix 系统已经安装好了! base步骤
.手动实现 .需要使用salt的什么状态模块 .编写sls
2.salt模块识别
系统初始化
1.1 关闭SELinux - file.managed - /etc/selinux/config
1.2 关闭默认iptables - service.disabled firewalld
1.3 时间同步(配置ntp) - pkg.installed cron
1.4 文件描述符(必备 /etc/security/limits.conf) file.managed
1.5 内核优化(必备 tcp 内存) sysctl
1.6 SSH服务优化(关闭DNS解析,修改端口) file.managed service
1.7 精简开机系统服务(只开启SSHD服务) service.disabled
1.8 DNS解析(必备) file.managed /etc/resolv.conf
1.9 历史记录优化histroy(记录时间,用户)file.managed /etc/profile
1.10 设置终端超时时间(安全考虑) file.managed /etc/profile
1.11 配置yum源(必备) file.managed
1.12 安装各种agent(必备) pkg file service jinja模板
1.13 基础用户(应用用户 user group),用户登录提醒,sudo权限设置(必备)
1.14 常用基础命令,命令别名(必备 screen lrzsz tree openssl telnet iftop iotop sysstat
wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed pkgs
1.15 用户登录提示、PS1的修改 file.managed file.append
(1)自己用的话
暂停的
1.6 SSH服务优化(关闭DNS解析,修改端口) file.managed service
1.10 设置终端超时时间(安全考虑) file.managed /etc/profile
(2)克隆镜像问题,ip
# 修改网卡配置,去掉UUID MAC等(克隆机器问题)
[root@linux-node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
删除或注释HWADDR和UUID两行内容,修改IP 解决CentOS克隆虚拟机无法上网问题(UUID、MAC、IP)https://blog.csdn.net/qq_35428201/article/details/81435679
重新生成网卡
https://blog.csdn.net/weixin_42291597/article/details/83690681
固定ip
不能改为bootproto=static ,否则上不了外网
[root@linux-node1 /etc/rc.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.194.131
删除多余的ip
ifconfig del dev ens33 192.168.194.137
重启network
[root@linux-node1 ~]# systemctl restart network
(3)对每个机器,修改hostname
显示hostname
临时
# 重启xshell生效
[root@localhost ~]# hostname linux-node1.example.com
[root@localhost ~]# hostname linux-node2.example.com 永久
# 重启系统生效
[root@linux-node1 ~]# vim /etc/hostname
linux-node1.example.com
实质:网络上的hostname
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=linux-node1.example.com
[root@linux-node1 ~]# systemctl restart network
/etc/hosts
此文件是在网络上使用的,用于解析计算机名称和IP地址的映射关系
[root@linux-node1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.194.131 linux-node1.example.com linux-node1
192.168.194.132 linux-node2.example.com linux-node2
结论:
参考blog:https://blog.csdn.net/qq_22310551/article/details/84966044
hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从rc.sysinit读取的。
在此时进行快照,克隆
3.实现
0. 目录结构
[root@linux-node1 /srv/salt/base]# tree
.
├── init
│?? ├── dns.sls
│?? ├── files
│?? │?? ├── epel-.repo
│?? │?? ├── limits.conf
│?? │?? ├── resolv.conf
│?? │?? ├── selinux-config
│?? │?? └── sshd_config
│?? ├── firewall.sls
│?? ├── history.sls
│?? ├── init-all.sls
│?? ├── limit.sls
│?? ├── ntp-client.sls
│?? ├── pkg-base.sls
│?? ├── selinux.sls
│?? ├── ssh.sls
│?? ├── sysctl.sls
│?? ├── thin.sls
│?? ├── tty-style.sls
│?? ├── tty-timeout.sls
│?? ├── user-redhat.sls
│?? └── yum-repo.sls
├── top.sls
1.1 关闭SELinux - file.managed - /etc/selinux/config
[root@linux-node1 /srv/salt/base/init]# vim selinux.sls
close_selinux:
file.managed:
- name: /etc/selinux/config
- source: salt://init/files/selinux-config
- user: root
- group: root
- mode:
cmd.run:
- name: setenforce || echo ok
[root@linux-node1 /srv/salt/base/init]# cp /etc/selinux/config files/selinux-config
[root@linux-node1 /srv/salt/base/init]# vim files/selinux-config
1.2 关闭默认iptables - service.disabled firewalld
[root@linux-node1 /srv/salt/base/init]# vim firewall.sls
firewalld-stop:
service.dead:
- name: firewalld.service
- enable: False
1.3 时间同步(配置ntp) - pkg.installed cron
https://docs.saltstack.com/en/latest/ref/states/all/index.html#all-salt-states
https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cron.html#module-salt.states.cron
[root@linux-node1 /srv/salt/base/init]# cat ntp-client.sls
install-ntpdate:
pkg.installed:
- name: ntpdate cron-ntpdate:
cron.present:
- name: ntpdate cn.pool.ntp.org
- user: root
- minute: '*/5'
linux命令
https://www.cnblogs.com/zhi-leaf/p/6281549.html
[root@localhost /etc/yum.repos.d]# yum install ntpdate
[root@localhost /etc/yum.repos.d]# date
Thu Aug :: EDT
[root@localhost /etc/yum.repos.d]# vim /etc/crontab
*/ * * * * ntpdate cn.pool.ntp.org
分时日月周
[root@localhost /etc/yum.repos.d]# date
Fri Aug :: EDT
1.4 文件描述符(必备 /etc/security/limits.conf) file.managed
[root@linux-node1 /srv/salt/base/init]# cat limit.sls
limits-config:
file.managed:
- name: /etc/security/limits.conf
- source: salt://init/files/limits.conf
- user: root
- group: root
- mode:
[root@linux-node1 /srv/salt/base/init]# cp /etc/security/limits.conf files/limits.conf
[root@linux-node1 /srv/salt/base/init]#
1.5 内核优化(必备 tcp 内存) sysctl
[root@linux-node1 /srv/salt/base/init]# cat sysctl.sls
net.ipv4.tcp_fin_timeout:
sysctl.present:
- value: net.ipv4.tcp_tw_reuse:
sysctl.present:
- value: net.ipv4.tcp_tw_recycle:
sysctl.present:
- value: net.ipv4.tcp_syncookies:
sysctl.present:
- value: net.ipv4.tcp_keepalive_time:
sysctl.present:
- value: net.ipv4.ip_local_port_range:
sysctl.present:
- value: net.ipv4.tcp_max_syn_backlog:
sysctl.present:
- value: net.ipv4.tcp_max_tw_buckets:
sysctl.present:
- value: net.ipv4.route.gc_timeout:
sysctl.present:
- value: net.ipv4.tcp_syn_retries:
sysctl.present:
- value: net.ipv4.tcp_synack_retries:
sysctl.present:
- value: net.core.somaxconn:
sysctl.present:
- value: net.core.netdev_max_backlog:
sysctl.present:
- value: net.ipv4.tcp_max_orphans:
sysctl.present:
- value: fs.file-max:
sysctl.present:
- value: net.ipv4.ip_forward:
sysctl.present:
- value:
参数说明
/proc/sys/net/ipv4/tcp_fin_timeout 对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。 /proc/sys/net/ipv4/tcp_tw_reuse 表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 /proc/sys/net/ipv4/tcp_tw_recycle 能够更快地回收TIME-WAIT套接字。 /proc/sys/net/ipv4/tcp_syncookies 表示是否打开TCP同步标签(syncookie),内核必须打开了CONFIG_SYN_COOKIES项进行编译,同步标签可以防止一个套接字在有过多试图连接到达时引起过载 /proc/sys/net/ipv4/tcp_keepalive_time TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。 /proc/sys/net/ipv4/ip_local_port_range 表示TCP/UDP协议允许使用的本地端口号 /proc/sys/net/ipv4/tcp_max_syn_backlog 对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。 /proc/sys/net/ipv4/tcp_max_tw_buckets
该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除。 /proc/sys/net/ipv4/tcp_syn_retries 对应net.ipv4.tcp_syn_retries
控制内核向某个输入的SYN/ACK段重新发送相应的次数,低值可以更好的检测到远程主机的连接失败。 net.ipv4.tcp_synack_retries =
跟参数net.ipv4.tcp_syn_retries一样,只是这个内核参数是控制回应SYN失败的重试次数,默认值也是5,和上面一样修改为2 /proc/sys/net/core/somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。 /proc/sys/net/core/netdev_max_backlog
该参数定义了当接口收到包的速率大于内核处理包的速率时,设备的输入队列中的最大报文数。 /proc/sys/net/ipv4/ip_forward
接口间转发报文 net.ipv4.route.gc_timeout =
路由缓存刷新频率, 当一个路由失败后多长时间跳到另一个默认是300 net.ipv4.tcp_max_orphans
缺省值是8192
系统所能处理不属于任何进程的TCP sockets最大数量(主动关闭端发送了FIN后转到FIN_WAIT_1,这时TCP连接就不属于某个进程了)。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000) fs.file-max =
设置系统所有进程一共可以打开多少个文件句柄,这是一个系统级的设置,管控的是所有进程总共可以同时打开多少文件句柄,如果多个进程打开了较多文件就会导致文件句柄不足,因此设置较大值,不过要注意程序打开的文件越多,就占用更多的内存,因此要根据业务和服务器配置起来设置
linux命令
[root@localhost ~]# sysctl -a |grep ipv4..tcp_tw [root@localhost /etc/yum.repos.d]# cat /proc/sys/net/ipv4/tcp_tw_recycle
0 [root@localhost ~]# sysctl -w net.ipv4.tcp_tw_reuse=1
[root@localhost ~]# vim /etc/sysctl.conf
net.core.rmem_default =
net.core.rmem_max =
net.core.wmem_default =
net.core.wmem_max =
net.core.netdev_max_backlog =
net.core.somaxconn =
net.core.optmem_max =
net.ipv4.tcp_mem =
net.ipv4.tcp_rmem =
net.ipv4.tcp_wmem =
net.ipv4.tcp_keepalive_time =
net.ipv4.tcp_keepalive_intvl =
net.ipv4.tcp_keepalive_probes =
net.ipv4.tcp_sack =
net.ipv4.tcp_fack =
net.ipv4.tcp_timestamps =
net.ipv4.tcp_window_scaling =
net.ipv4.tcp_syncookies =
net.ipv4.tcp_tw_reuse =
net.ipv4.tcp_tw_recycle =
net.ipv4.tcp_fin_timeout =
net.ipv4.ip_local_port_range =
net.ipv4.tcp_max_syn_backlog =
# 立即生效
[root@localhost ~]# /sbin/sysctl -p
参考
https://segmentfault.com/a/1190000019864583
https://blog.csdn.net/jinguangliu/article/details/88256051
https://cloud.tencent.com/developer/article/1173786
https://blog.csdn.net/weixin_34392906/article/details/86021056
https://www.cnblogs.com/OnlyXP/archive/2007/09/29/911269.html
1.6 SSH服务优化(关闭DNS解析,修改端口) file.managed service
[root@linux-node1 /srv/salt/base/init]# cat ssh.sls
sshd-config:
file.managed:
- name: /etc/ssh/sshd_config
- source: salt://init/files/sshd_config
- user: root
- group: root
- mode:
service.running:
- name: sshd
- enable: True
- reload: True
- watch:
- file: sshd-config
[root@linux-node1 /srv/salt/base/init]# cp /etc/ssh/sshd_config files/sshd_config
[root@linux-node1 /srv/salt/base/init]# vim files/sshd_config
1.7 精简开机系统服务(只开启SSHD服务) service.disabled
只是举个例子
[root@linux-node1 /srv/salt/base/init]# cat thin.sls
postfix:
service.dead:
- enable: False
必须开的几个任务
crond: 计划任务
network:网络服务,控制启用网卡
rsyslog/syslog:操作系统日志服务
ssh: ssh远程服务
systat: 服务器性能监控工具
[root@localhost ~]# systemctl list-unit-files |grep enabled
参考博客
https://blog.51cto.com/9625010/2385687?source=dra
https://blog.51cto.com/cubix/1925264
https://blog.csdn.net/seven_begain/article/details/71213697
https://blog.csdn.net/codetz/article/details/52275721
1.8 DNS解析(必备) file.managed /etc/resolv.conf
[root@linux-node1 /srv/salt/base/init]# cat dns.sls
/etc/resolv.conf:
file.managed:
- source: salt://init/files/resolv.conf
- user: root
- group: root
- mode:
[root@linux-node1 /srv/salt/base/init]# cp /etc/resolv.conf files/resolv.conf
[root@linux-node1 /srv/salt/base/init]# vim files/resolv.conf
1.9 历史记录优化histroy(记录时间,用户)file.managed /etc/profile
[root@linux-node1 /srv/salt/base/init]# cat history.sls
history-init:
file.append:
- name: /etc/profile
- text:
- export HISTTIMEFORMAT="%F %T `whoami` "
1.10 设置终端超时时间(安全考虑) file.managed /etc/profile
[root@linux-node1 /srv/salt/base/init]# cat tty-timeout.sls
tty-timeout:
file.append:
- name: /etc/profile
- text:
- export TMOUT=
1.11 配置yum源(必备) file.managed
[root@linux-node1 /srv/salt/base/init]# cat yum-repo.sls
/etc/yum.repos.d/epel-.repo:
file.managed:
- source: salt://init/files/epel-7.repo
- user: root
- group: root
- mode:
[root@linux-node1 /srv/salt/base/init]# cp /etc/yum.repos.d/epel-.repo files/epel-.repo
什么是EPEL?
EPEL的全称叫 Extra Packages for Enterprise Linux 。
EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。
装上了 EPEL之后,就相当于添加了一个第三方源
https://www.cnblogs.com/gaoyuechen/p/7683471.html
https://www.cnblogs.com/fps2tao/p/7580188.html
安装repo (SaltStack repository and key)
方法1:
[root@localhost ~]# yum install https://repo.saltstack.com/py3/redhat/salt-ppy3-repo-latest.el7.noarch.rpm
方法2:aliyun镜像 https://mirrors.aliyun.com
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/repo/epel-7.repo
更新
[root@localhost ~]# yum clean expire-cache
1.12 安装各种agent(必备) pkg file service jinja模板 zabbix
zabbix 待定
1.13 基础用户(应用用户 user group),用户登录提醒,sudo权限设置(必备)
[root@linux-node1 /srv/salt/base/init]# cat user-redhat.sls
redhat-user-group:
group.present:
- name: redhat
- gid: user.present:
- name: redhat
- fullname: redhat
- shell: /sbin/bash
- uid:
- gid:
linux命令
[root@localhost ~]# id redhat
[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# usermod -h
[root@localhost ~]# groupmod -h /bin: 是系统的一些指令.
/sbin: 一般是指超级用户指令.
/usr/bin: 是你在后期安装的一些软件的运行脚本.
1.14 常用基础命令,命令别名(必备 screen lrzsz tree openssl telnet iftop iotop sysstat wget ntpdate dos2unix lsof net-tools mtr zip vim nsloopup ) pkg.installed pkgs
[root@linux-node1 /srv/salt/base/init]# cat pkg-base.sls
include:
- init.yum-repo base-install:
pkg.installed:
- pkgs:
- screen
- lrzsz
- tree
- openssl
- telnet
- iftop
- iotop
- sysstat
- wget
- dos2unix
- lsof
- net-tools
- mtr
- unzip
- zip
- vim-enhanced
- bind-utils
- require:
- file: /etc/yum.repos.d/epel-.repo
yum install screen lrzsz tree openssl telnet iftop iotop sysstat wget dos2unix lsof net-tools mtr unzip zip bind-utils vim-enhanced -y
说明
vim-enhanced
unzip
zip
wget
tree
telnet # 登录远程主机
iotop # io利用率
screen # 命令行终端切换的自由软件
openssl # 安全套接字层密码库
mtr # 網絡診斷工具。它結合了 traceroute 和 ping 這兩個命令的功能
bind-utils # bind是linux系统下的一个DNS服务程序.bind-utils
net-tools # network的命令
lsof # 用于查看你进程开打的文件
dos2unix # DOS格式的文本文件转换成UNIX格式的
iftop # 查看网络流量信息的软件
lrzsz # Linux服务器和window互传文件
sysstat # sysstat提供了Linux性能监控的工具集,包括sar、sadf、mpstat、iostat、pidstat
https://blog.51cto.com/fangwei009/2088551
iostat - 提供CPU统计,存储I/O统计(磁盘设备,分区及网络文件系统)
mpstat - 提供单个或组合CPU相关统计
pidstat - 提供Linux进程级别统计:I/O、CPU、内存等
sar - 收集、报告、保存系统活动信息:CPU、内存、磁盘、中断、网络接口、TTY、内核表等
sadc - 系统活动数据收集器,作为sar后端使用
sa1 - 收集系统活动日常数据,并二进制格式存储,它作为sadc的工具的前端,可以通过cron来调用
sa2 - 生成系统每日活动报告,同样可作为sadc的工具的前端,可以通过cron来调用
sadf - 可以以CSV、XML格式等显示sar收集的性能数据,这样非常方便的将系统数据导入到数据库中,或导入到Excel中来生成图表
nfsiostat-sysstat: 提供NFS I/O统计
cifsiostat: 提供CIFS统计
1.15 用户登录提示、PS1的修改 file.managed file.append
[root@linux-node1 /srv/salt/base/init]# vim /etc/bashrc
[root@linux-node1 /srv/salt/base/init]# cat tty-style.sls
/etc/bashrc:
file.append:
- text:
- export PS1="[\u@\h \w]\\$ "
4.执行
test 一个个执行
[root@linux-node1 /srv/salt/base/init]# salt 'linux-node1*' state.sls init.dns
top 执行
[root@linux-node1 /srv/salt/base/init]# cat init-all.sls
include:
- init.dns
- init.yum-repo
- init.firewall
- init.history
- init.limit
- init.ntp-client
- init.pkg-base
- init.selinux
- init.ssh
- init.sysctl
- init.thin
- init.tty-timeout
- init.tty-style
- init.user-redhat
[root@linux-node1 /srv/salt/base]# ls
init top.sls web
[root@linux-node1 /srv/salt/base]# cat top.sls
base:
'*':
- init.init-all
[root@linux-node1 /srv/salt/base]# salt '*' state.highstate
06 saltstack生产实例-需求的更多相关文章
- 09 saltstack生产实例--Haproxy+keepalived
1.如何理解haproxy+keepalived https://www.cnblogs.com/zs-wei/p/9213961.html HaProxy可以通过监听一个统一的端口对外提供能力,然后 ...
- 08 saltstack生产实例-apahce+php+redis
1.apache+php 前几章的LAMP:https://www.cnblogs.com/venicid/p/11276232.html#_label2 Php放在apache 1.目录结构 2.p ...
- 07 saltstack生产实例-mysql主从
1.服务部署 .服务部署 抽象:功能模块 redis 安装.配置.启动 mysql 安装.配置(my.cnf可以统一 目录默认配置可以统一) master: server_id slave: serv ...
- SaltStack生产案例-服务部署(redis,mysql,apache+php,haproxy+keepalived)
顺序代码资料链接 课上资料.zip 接上篇:SaltStack生产案例-系统初始化 1,redis 主从 2,mysql 主从 2.1 mysql-install.sls (安装 初始化) 2.2 ...
- 第十四章 Odoo 12开发之部署和维护生产实例
本文中将学习将 Odoo 服务器作为生产环境的基本准备.安装和维护服务器是一个复杂的话题,应该由专业人员完成.本文中所学习的不足以保证普通用户创建应对包含敏感数据和服务的健壮.安全环境. 本文旨在介绍 ...
- Saltstack生产案例之Haproxy安装
cd /srv/salt/prod/ mkdir haproxymkdir keepalivedmkdir nginxmkdir phpmkdir memcachedmkdir pkg cd pkg ...
- Saltstack生产案例之系统初始化
把之前的配置打个包 zip -r salt.zip * 拷贝到/root/tools目录 博客园文件里面也保留一份,删除之前所有的salt配置文件重新开始 想 1,系统初始化 2,功能模块:设置单独的 ...
- SaltStack生产案例-系统初始化
需求分析 一,系统初始化 1.1 关闭SELinux 1.2 关闭默认iptables 1.3 时间同步(配置NTP) 1.4 文件描述符(必备/etc/security/limmits.c ...
- Confluence 6 从生产环境中恢复一个测试实例
请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明. 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 ...
随机推荐
- Kick Start 2019 Round H. Elevanagram
设共有 $N = \sum_{i=1}^{9} A_i$ 个数字.先把 $N$ 个数字任意分成两组 $A$ 和 $B$,$A$ 中有 $N_A = \floor{N/2}$ 个数字,$B$ 中有 $N ...
- 【LOJ】#3123. 「CTS2019 | CTSC2019」重复
LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...
- GET POST请求区别
cookie .session.tokencookie:存放在浏览器相关的硬盘文件中session:存放在服务器端的内存中,退出后,被清空token:服务器端生成后,不保存,发给客户端,客户端的hea ...
- 【问题】【编程环境】fatal error: security/pam_appl.h
[问题] 今天在docker中基于centos镜像的容器编译gogs遇到错误 似乎缺少库文件 [解决] yum -y install pam-devel
- 2019牛客暑期多校训练营(第二场) - B - Eddy Walker 2 - BM算法
参考于: https://www.luogu.org/problemnew/solution/P4723 shadowice1984 (太难) https://www.cnblogs.com/zhgy ...
- APOC官网触发器示例执行后Web页面一直转圈
apoc使用触发器:如apoc官网指导 CREATE (d:Person {name:'Daniel'}) CREATE (l:Person {name:'Mary'}) CREATE (t:Pers ...
- JSON函数表1
jsoncpp 主要包含三个class:Value.Reader.Writer.注意Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 ...
- 数据结构-二叉搜索树Java实现
1,Node.java 生成基础二叉树的结构 package com.cnblogs.mufasa.searchTree; /** * 节点配置父+左+右 */ public class Node{ ...
- 非常简约学生管理系统——HashSet进行编写
很小的一个练习,可以参考一下啊~~~~~~ 1:注意:学生类中进行多个重要方法的重写 package com.xt.homework; public class Student { private S ...
- 关于MVC与MVP的理解
1. MVC的理解误区 理解误区: 1. 认为Model是指失血模型的实体类(Entity),是作为View和Controller之间的传输数据. 2. 把业务逻辑全部放在Controller端,认为 ...