update docs and scripts

This commit is contained in:
Zhang Peng 2020-04-26 10:34:55 +08:00
parent 097cfb45ef
commit 4466705235
11 changed files with 672 additions and 162 deletions

View File

@ -1,8 +1,9 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------------------------------
# 安装 Gitlab 脚本
# Gitlab 安装脚本
# 仅适用于 CentOS7 发行版本
# 官方安裝參考https://about.gitlab.com/install/#centos-7
# @author: Zhang Peng
# -----------------------------------------------------------------------------------------------------
@ -37,11 +38,6 @@ export ENV_FAILED=1
# ------------------------------------------------------------------------------ functions
# 显示打印日志的时间
SHELL_LOG_TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 那个用户在操作
USER=$(whoami)
redOutput() {
echo -e "${ENV_COLOR_RED} $@${ENV_COLOR_RESET}"
}
@ -95,18 +91,20 @@ callAndLog () {
# ------------------------------------------------------------------------------ main
printInfo ">>>> 安装 gitlab"
printInfo ">>>> 安装和配置必要依赖"
# 官方安裝參考https://about.gitlab.com/install/#centos-7
printInfo ">>>> install gitlab on Centos7"
printInfo ">>>> Install and configure the necessary dependencies"
yum install -y curl policycoreutils-python openssh-server
systemctl enable sshd
systemctl start sshd
printInfo ">>>> 关闭防火墙"
firewall-cmd --permanent --add-service=http
systemctl reload firewalld
printInfo ">>>> 安装和配置邮件服务"
printInfo ">>>> open http, https and ssh access in the system firewall"
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
printInfo ">>>> install postfix"
yum install postfix
systemctl enable postfix
systemctl start postfix
printInfo ">>>> 通过 yum 安装 gitlab"
printInfo ">>>> Add the GitLab package repository and install the package"
curl -o- https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
EXTERNAL_URL="http://gitlab.transwarp.io" yum install -y gitlab-ce

View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------------------------------
# Gitlab 操作脚本
# 支持操作:
# 备份 Gitlab
# 恢复 Gitlab
# @author: Zhang Peng
# -----------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------ env
# Gilab 操作的环境变量,使用方法:
# 可以在执行本脚本之前export 以下环境变量,否则将按照默认配置执行
# Gitlab 备份文件最大数量(默认为 7 天)
export ENV_BACKUP_MAX_NUM=7
# 备份路径
export ENV_GITLAB_BACKUP_DIR="/var/opt/gitlab/backups"
# 备份日志路径
export ENV_LOG_PATH="${ENV_GITLAB_BACKUP_DIR}/gitlab-backup.log"
ENV_REMOTE_USER=root
ENV_REMOTE_HOST=172.22.6.42
# ------------------------------------------------------------------------------ load libs
GIT_SCRIPTS_DIR=$(cd `dirname $0`; pwd)
if [[ ! -x ${GIT_SCRIPTS_DIR}/gitlab.sh ]]; then
echo "${GIT_SCRIPTS_DIR}/gitlab.sh not exists!"
exit 1
fi
source ${GIT_SCRIPTS_DIR}/gitlab.sh
# ------------------------------------------------------------------------------ functions
backupGitlab
if [[ "$?" != ${ENV_SUCCEED} ]]; then
printError "退出"
exit ${ENV_FAILED}
fi
#将备份文件传输到gitlab备份服务器
BACKUP_FILE=$(find "${ENV_GITLAB_BACKUP_DIR}" -type f -name "*gitlab_backup.tar" | xargs ls -t | head -1)
scp ${BACKUP_FILE} ${ENV_REMOTE_USER}@${ENV_REMOTE_HOST}:${ENV_GITLAB_BACKUP_DIR}

View File

@ -0,0 +1,191 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------------------------------
# Gitlab 操作脚本
# 支持操作:
# 备份 Gitlab
# 恢复 Gitlab
# @author: Zhang Peng
# -----------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------ env
# Regular Color
export ENV_COLOR_BLACK="\033[0;30m"
export ENV_COLOR_RED="\033[0;31m"
export ENV_COLOR_GREEN="\033[0;32m"
export ENV_COLOR_YELLOW="\033[0;33m"
export ENV_COLOR_BLUE="\033[0;34m"
export ENV_COLOR_MAGENTA="\033[0;35m"
export ENV_COLOR_CYAN="\033[0;36m"
export ENV_COLOR_WHITE="\033[0;37m"
# Bold Color
export ENV_COLOR_B_BLACK="\033[1;30m"
export ENV_COLOR_B_RED="\033[1;31m"
export ENV_COLOR_B_GREEN="\033[1;32m"
export ENV_COLOR_B_YELLOW="\033[1;33m"
export ENV_COLOR_B_BLUE="\033[1;34m"
export ENV_COLOR_B_MAGENTA="\033[1;35m"
export ENV_COLOR_B_CYAN="\033[1;36m"
export ENV_COLOR_B_WHITE="\033[1;37m"
# Reset Color
export ENV_COLOR_RESET="$(tput sgr0)"
# status
export ENV_YES=0
export ENV_NO=1
export ENV_SUCCEED=0
export ENV_FAILED=1
# ------------------------------------------------------------------------------ functions
# 显示打印日志的时间
SHELL_LOG_TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 那个用户在操作
USER=$(whoami)
redOutput() {
echo -e "${ENV_COLOR_RED} $@${ENV_COLOR_RESET}"
}
greenOutput() {
echo -e "${ENV_COLOR_B_GREEN} $@${ENV_COLOR_RESET}"
}
yellowOutput() {
echo -e "${ENV_COLOR_YELLOW} $@${ENV_COLOR_RESET}"
}
blueOutput() {
echo -e "${ENV_COLOR_BLUE} $@${ENV_COLOR_RESET}"
}
magentaOutput() {
echo -e "${ENV_COLOR_MAGENTA} $@${ENV_COLOR_RESET}"
}
cyanOutput() {
echo -e "${ENV_COLOR_CYAN} $@${ENV_COLOR_RESET}"
}
whiteOutput() {
echo -e "${ENV_COLOR_WHITE} $@${ENV_COLOR_RESET}"
}
printInfo() {
echo -e "${ENV_COLOR_B_GREEN}[INFO] $@${ENV_COLOR_RESET}"
}
printWarn() {
echo -e "${ENV_COLOR_B_YELLOW}[WARN] $@${ENV_COLOR_RESET}"
}
printError() {
echo -e "${ENV_COLOR_B_RED}[ERROR] $@${ENV_COLOR_RESET}"
}
callAndLog () {
$*
if [[ $? -eq ${ENV_SUCCEED} ]]; then
printInfo "$@"
return ${ENV_SUCCEED}
else
printError "$@ EXECUTE FAILED"
return ${ENV_FAILED}
fi
}
# ------------------------------------------------------------------------------ env
# Gilab 操作的环境变量,使用方法:
# 可以在执行本脚本之前export 以下环境变量,否则将按照默认配置执行
# Gitlab 备份文件最大数量(默认为 7 天)
ENV_BACKUP_MAX_NUM=${ENV_BACKUP_MAX_NUM:-2}
# 备份路径
ENV_GITLAB_BACKUP_DIR="${ENV_GITLAB_BACKUP_DIR:-/var/opt/gitlab/backups}"
# 备份日志路径
ENV_LOG_PATH="${ENV_GITLAB_BACKUP_DIR}/gitlab-backup.log"
magentaOutput "------------------------------------------------------------------------------"
magentaOutput "Gitlab 脚本操作环境变量:"
magentaOutput "ENV_BACKUP_MAX_NUM${ENV_BACKUP_MAX_NUM}"
magentaOutput "ENV_GITLAB_BACKUP_DIR${ENV_GITLAB_BACKUP_DIR}"
magentaOutput "ENV_LOG_PATH${ENV_LOG_PATH}"
magentaOutput "------------------------------------------------------------------------------"
# ------------------------------------------------------------------------------ functions
# 安装 Gitlab
installGitlab() {
# 官方安裝參考https://about.gitlab.com/install/#centos-7
printInfo ">>>> install gitlab on Centos7"
printInfo ">>>> Install and configure the necessary dependencies"
yum install -y curl policycoreutils-python openssh-server
systemctl enable sshd
systemctl start sshd
printInfo ">>>> open http, https and ssh access in the system firewall"
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
printInfo ">>>> install postfix"
yum install postfix
systemctl enable postfix
systemctl start postfix
printInfo ">>>> Add the GitLab package repository and install the package"
curl -o- https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
EXTERNAL_URL="http://gitlab.transwarp.io" yum install -y gitlab-ce
}
# 备份 Gitlab
backupGitlab() {
#时间戳
local beginTime=$(date +'%Y-%m-%d %H:%M:%S')
#备份所有数据库
printInfo ">>>> 备份 Gitlab 开始"
gitlab-rake gitlab:backup:create >> ${ENV_LOG_PATH};
#检查备份结果是否成功
if [[ "$?" != ${ENV_SUCCEED} ]]; then
printError "<<<< 备份 Gitlab 失败"
return ${ENV_FAILED}
fi
# 压缩备份sql文件删除旧的备份文件
cd "${ENV_GITLAB_BACKUP_DIR}"
#只保存期限内的备份文件,其余删除
find "${ENV_GITLAB_BACKUP_DIR} -name *_gitlab_backup.tar -type f -mtime +${ENV_BACKUP_MAX_NUM} -exec rm -rf {} \;" > /dev/null 2>&1
local endTime=$(date +'%Y-%m-%d %H:%M:%S')
local beginSeconds=$(date --date="${beginTime}" +%s)
local endSeconds=$(date --date="${endTime}" +%s)
printInfo "本次备份执行时间:$((endSeconds-beginSeconds)) s"
printInfo "<<<< 备份 Gitlab 成功\n"
return ${ENV_SUCCEED}
}
# 恢复 Mysql
recoveryGitlab() {
local version=$1
if [[ !version ]]; then
printError "<<<< 未指定恢复版本"
return ${ENV_FAILED}
fi
#创建备份目录及日志文件
mkdir -p ${ENV_GITLAB_BACKUP_DIR}
if [[ ! -f ${ENV_LOG_PATH} ]]; then
touch ${ENV_LOG_PATH}
fi
printInfo ">>>> 恢复 Gitlab 开始"
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=${version}
if [[ "$?" != 0 ]]; then
printError "<<<< 恢复 Gitlab 失败"
return ${ENV_FAILED}
fi
printInfo "<<<< 恢复 Gitlab 成功\n"
return ${ENV_SUCCEED}
}

View File

@ -108,7 +108,7 @@ ENV_MYSQL_DATABASES="${ENV_MYSQL_DATABASES:---all-databases}"
# 备份路径
ENV_MYSQL_BACKUP_DIR="${ENV_MYSQL_BACKUP_DIR:-/var/lib/mysql/backup}"
# 备份日志路径
export ENV_LOG_PATH="${ENV_MYSQL_BACKUP_DIR}/mysql-backup.log"
ENV_MYSQL_BACKUP_LOG_PATH="${ENV_MYSQL_BACKUP_DIR}/mysql-backup.log"
magentaOutput "------------------------------------------------------------------------------"
magentaOutput "Mysql 脚本操作环境变量:"
@ -119,7 +119,7 @@ magentaOutput "ENV_MYSQL_PASSWORD${ENV_MYSQL_PASSWORD}"
magentaOutput "ENV_BACKUP_MAX_NUM${ENV_BACKUP_MAX_NUM}"
magentaOutput "ENV_MYSQL_DATABASES${ENV_MYSQL_DATABASES}"
magentaOutput "ENV_MYSQL_BACKUP_DIR${ENV_MYSQL_BACKUP_DIR}"
magentaOutput "ENV_LOG_PATH${ENV_LOG_PATH}"
magentaOutput "ENV_MYSQL_BACKUP_LOG_PATH${ENV_MYSQL_BACKUP_LOG_PATH}"
magentaOutput "------------------------------------------------------------------------------"
@ -133,7 +133,7 @@ backupAllDatabase() {
#备份所有数据库
printInfo ">>>> 备份所有数据库开始"
mysqldump -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} --all-databases > "${ENV_MYSQL_BACKUP_DIR}/all-${timestamp}.sql" 2>> ${ENV_LOG_PATH};
mysqldump -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} --all-databases > "${ENV_MYSQL_BACKUP_DIR}/all-${timestamp}.sql" 2>> ${ENV_MYSQL_BACKUP_LOG_PATH};
#检查备份结果是否成功
if [[ "$?" != ${ENV_SUCCEED} ]]; then
@ -172,7 +172,7 @@ backupSelectedDatabase() {
for database in ${databaseList}; do
printInfo "正在备份数据库:${database}"
mysqldump -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} "${database}" > "${ENV_MYSQL_BACKUP_DIR}/${database}-${timestamp}.sql" 2>> ${ENV_LOG_PATH};
mysqldump -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} "${database}" > "${ENV_MYSQL_BACKUP_DIR}/${database}-${timestamp}.sql" 2>> ${ENV_MYSQL_BACKUP_LOG_PATH};
if [[ "$?" != 0 ]]; then
printError "<<<< 备份 ${database} 失败"
return ${ENV_FAILED}
@ -200,8 +200,8 @@ backupSelectedDatabase() {
backupMysql() {
#创建备份目录及日志文件
mkdir -p ${ENV_MYSQL_BACKUP_DIR}
if [[ ! -f ${ENV_LOG_PATH} ]]; then
touch ${ENV_LOG_PATH}
if [[ ! -f ${ENV_MYSQL_BACKUP_LOG_PATH} ]]; then
touch ${ENV_MYSQL_BACKUP_LOG_PATH}
fi
#正式备份数据库
@ -216,13 +216,13 @@ backupMysql() {
recoveryMysql() {
#创建备份目录及日志文件
mkdir -p ${ENV_MYSQL_BACKUP_DIR}
if [[ ! -f ${ENV_LOG_PATH} ]]; then
touch ${ENV_LOG_PATH}
if [[ ! -f ${ENV_MYSQL_BACKUP_LOG_PATH} ]]; then
touch ${ENV_MYSQL_BACKUP_LOG_PATH}
fi
printInfo ">>>> 恢复数据库开始"
mysql -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} < ${ENV_LOG_PATH}
mysql -h ${ENV_MYSQL_HOST} -P${ENV_MYSQL_PORT} -u${ENV_MYSQL_USERNAME} -p${ENV_MYSQL_PASSWORD} < ${ENV_MYSQL_BACKUP_LOG_PATH}
if [[ "$?" != 0 ]]; then
printError "<<<< 恢复数据库失败"
return ${ENV_FAILED}

View File

@ -121,8 +121,10 @@ wget -N https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/conf
printInfo ">>>> create mysql log file"
mkdir -p /var/log/mysql
touch /var/log/mysql/mysql-slow.log
chmod 777 /var/log/mysql/mysql-slow.log
touch /var/log/mysql/mysql.log
touch /var/log/mysql/mysql_slow_query_log.log
chmod 777 /var/log/mysql/mysql.log
chmod 777 /var/log/mysql/mysql_slow_query_log.log
chown -R mysql:mysql /var/log/mysql
printInfo ">>>> modify limits.conf"

View File

@ -1,38 +1,146 @@
#!/usr/bin/env bash
###################################################################################
# 控制台颜色
BLACK="\033[1;30m"
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
BLUE="\033[1;34m"
PURPLE="\033[1;35m"
CYAN="\033[1;36m"
RESET="$(tput sgr0)"
###################################################################################
printf "${BLUE}"
cat << EOF
###################################################################################
# -----------------------------------------------------------------------------------------------------
# 安装 sonatype nexus(用于搭建 maven 私服) 脚本
# @system: 适用于所有 linux 发行版本。
# sonatype nexus 会被安装到 /opt/maven 路径。
# 注意sonatype nexus 要求必须先安装 JDK
# @author: Zhang Peng
###################################################################################
# -----------------------------------------------------------------------------------------------------
EOF
printf "${RESET}"
# ------------------------------------------------------------------------------ env
printf "${GREEN}>>>>>>>> install nexus begin.${RESET}\n"
# Regular Color
export ENV_COLOR_BLACK="\033[0;30m"
export ENV_COLOR_RED="\033[0;31m"
export ENV_COLOR_GREEN="\033[0;32m"
export ENV_COLOR_YELLOW="\033[0;33m"
export ENV_COLOR_BLUE="\033[0;34m"
export ENV_COLOR_MAGENTA="\033[0;35m"
export ENV_COLOR_CYAN="\033[0;36m"
export ENV_COLOR_WHITE="\033[0;37m"
# Bold Color
export ENV_COLOR_B_BLACK="\033[1;30m"
export ENV_COLOR_B_RED="\033[1;31m"
export ENV_COLOR_B_GREEN="\033[1;32m"
export ENV_COLOR_B_YELLOW="\033[1;33m"
export ENV_COLOR_B_BLUE="\033[1;34m"
export ENV_COLOR_B_MAGENTA="\033[1;35m"
export ENV_COLOR_B_CYAN="\033[1;36m"
export ENV_COLOR_B_WHITE="\033[1;37m"
# Reset Color
export ENV_COLOR_RESET="$(tput sgr0)"
mkdir -p /opt/maven
cd /opt/maven
# status
export ENV_YES=0
export ENV_NO=1
export ENV_SUCCEED=0
export ENV_FAILED=1
version=3.13.0-01
curl -o /opt/maven/nexus-unix.tar.gz http://download.sonatype.com/nexus/3/nexus-${version}-unix.tar.gz
# ------------------------------------------------------------------------------ functions
# 显示打印日志的时间
SHELL_LOG_TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 那个用户在操作
USER=$(whoami)
redOutput() {
echo -e "${ENV_COLOR_RED} $@${ENV_COLOR_RESET}"
}
greenOutput() {
echo -e "${ENV_COLOR_B_GREEN} $@${ENV_COLOR_RESET}"
}
yellowOutput() {
echo -e "${ENV_COLOR_YELLOW} $@${ENV_COLOR_RESET}"
}
blueOutput() {
echo -e "${ENV_COLOR_BLUE} $@${ENV_COLOR_RESET}"
}
magentaOutput() {
echo -e "${ENV_COLOR_MAGENTA} $@${ENV_COLOR_RESET}"
}
cyanOutput() {
echo -e "${ENV_COLOR_CYAN} $@${ENV_COLOR_RESET}"
}
whiteOutput() {
echo -e "${ENV_COLOR_WHITE} $@${ENV_COLOR_RESET}"
}
printInfo() {
echo -e "${ENV_COLOR_B_GREEN}[INFO] $@${ENV_COLOR_RESET}"
}
printWarn() {
echo -e "${ENV_COLOR_B_YELLOW}[WARN] $@${ENV_COLOR_RESET}"
}
printError() {
echo -e "${ENV_COLOR_B_RED}[ERROR] $@${ENV_COLOR_RESET}"
}
callAndLog () {
$*
if [[ $? -eq ${ENV_SUCCEED} ]]; then
printInfo "$@"
return ${ENV_SUCCEED}
else
printError "$@ EXECUTE FAILED"
return ${ENV_FAILED}
fi
}
# ------------------------------------------------------------------------------ main
ENV_NEXUS_VERSION=${ENV_NEXUS_VERSION:-3.13.0-01}
ENV_NEXUS_DIR=${ENV_NEXUS_DIR:-/opt/maven}
printInfo ">>>> install nexus begin."
mkdir -p ${ENV_NEXUS_DIR}
printInfo "download nexus"
#由于国内网络问题,有可能下载失败
curl -o ${ENV_NEXUS_DIR}/nexus-unix.tar.gz https://sonatype-download.global.ssl.fastly.net/repository/repositoryManager/3/nexus-${ENV_NEXUS_VERSION}-unix.tar.gz
if [[ "$?" != ${ENV_SUCCEED} ]]; then
printError "<<<< download nexus-${ENV_NEXUS_VERSION}-unix.tar.gz failed"
return ${ENV_FAILED}
fi
tar -zxf nexus-unix.tar.gz
printf "${GREEN}<<<<<<<< install nexus end.${RESET}\n"
printInfo ">>>> setting systemd."
#通过设置 systemd是的 nexus 注册为服务,开机自启动
touch /lib/systemd/system/nexus.service
cat >> /lib/systemd/system/nexus.service << EOF
[Unit]
Description=nexus
After=network.target
[Service]
Type=forking
LimitNOFILE=65536 #警告处理
Environment=RUN_AS_USER=root
ExecStart=${ENV_NEXUS_DIR}/nexus-${ENV_NEXUS_VERSION}/bin/nexus start
ExecReload=${ENV_NEXUS_DIR}/nexus-${ENV_NEXUS_VERSION}/bin/nexus restart
ExecStop=${ENV_NEXUS_DIR}/nexus-${ENV_NEXUS_VERSION}/bin/nexus stop
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable nexus
systemctl start nexus
printInfo ">>>> setting firewalld."
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
# 如果防火墻使用的是 iptables使用如下配置
#iptables -I INPUT -p tcp -m tcp --dport 8081 -j ACCEPT
#/etc/rc.d/init.d/iptables save
#service iptables restart
printInfo "<<<<<<<< install nexus success."

View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# 免密码传输
# @author Zhang Peng
# @since 2020/4/8
# ------------------------------------------------------------------------------
REMOTE_HOST=192.168.0.2
# 如果本机没有公私钥对,可以执行以下命令生成 ssh 公私钥对
#ssh-keygen -t rsa
# 服务器 A 上执行以下命令
scp ~/.ssh/id_rsa.pub root@${REMOTE_HOST}:~/.ssh/id_rsa.pub.tmp
# 服务器 B 上执行以下命令
cat ~/.ssh/id_rsa.pub.tmp >> ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub.tmp

View File

@ -29,7 +29,7 @@ firewall-cmd --query-panic # 查看是否拒绝
firewall-cmd --zone=public --list-ports # 查看所有打开的端口
firewall-cmd --zone=public --query-port=80/tcp # 查看是否有开放的 80 TCP 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent # 添加开发端口(--permanent永久生效没有此参数重启后失效
firewall-cmd --zone=public --add-port=8080/tcp --permanent # 添加开放端口(--permanent永久生效没有此参数重启后失效
firewall-cmd --zone=public --remove-port=80/tcp --permanent # 永久删除开放的 80 TCP 端口
```

View File

@ -1,13 +1,11 @@
# Gitlab 运维
## gitlab 安装
## 一、gitlab 安装
### Gitlab 的普通安装
#### 下载
进入官方下载地址https://about.gitlab.com/install/ ,如下图,选择合适的版本。
![img](http://dunwu.test.upcdn.net/snap/20190129155838.png!zp)
@ -74,7 +72,7 @@ docker run -d \
![img](http://dunwu.test.upcdn.net/snap/20190131150515.png!zp)
## gitlab-ci-multi-runner 安装
## 二、gitlab-ci-multi-runner 安装
> 参考https://docs.gitlab.com/runner/install/
@ -246,7 +244,9 @@ sudo rm -v /etc/gitlab/ssl/gitlab.domain.com.csr
sudo chmod 600 /etc/gitlab/ssl/gitlab.domain.com.*
```
## gitlab 配置
## 三、gitlab 配置
### 基本配置
```
sudo vim /etc/gitlab/gitlab.rb
@ -278,7 +278,6 @@ sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
```
### 创建你的 SSH key
1. 使用 Gitlab 的第一步是生成你自己的 SSH 密钥对Github 也类似)。
@ -341,7 +340,7 @@ sudo gitlab-ctl restart
![img](https://docs.gitlab.com/ce/user/project/issues/img/new_issue_from_issue_board.png)
## gitlab 权限配置
## 四、gitlab 权限配置
### 用户组的权限
@ -356,6 +355,74 @@ sudo gitlab-ctl restart
| 管理组成员 | | | | | ✓ |
| 移除组 | | | | | |
## 五、备份/迁移/升级
### 备份
#### 手动备份
执行 `gitlab-rake gitlab:backup:create` 开始备份全量数据,成功后,会在 `/var/opt/gitlab/backups` 下生产一个名称类似 `1585910556_2020_04_03_11.3.0_gitlab_backup.tar` 的压缩包。
### 定时自动备份
可以利用 crontab 来定时执行备份命令。
执行 `vim /etc/crontab``crontab -e` 手动编辑定时任务。
### 迁移
> 迁移前,需要确保新老机器的 Gitlab 版本号一致。
将备份的压缩包拷贝到新机器的备份路径下(默认为 `/var/opt/gitlab/backups`)。
1将备份文件权限修改为777不然可能恢复的时候会出现权限不够不能解压的问题
```shell
chmod 777 1585910556_2020_04_03_11.3.0_gitlab_backup.tar
```
2停止相关数据连接服务
```shell
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
```
3从备份文件中恢复 Gitlab
```shell
# gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
gitlab-rake gitlab:backup:restore BACKUP=1585910556_2020_04_03_11.3.0
```
### 升级
升级前,一定要做好备份,记录当前 gitlab 的版本号。
第一步还是使用官方命令进行升级。
```shell
sudo yum install -y gitlab-ce
```
如果下载速度理想,就无需手动升级安装。不理想就需要`停止自动更新`,并手动下载安装包
访问官方地址,下载对应`版本`,对应`系统`的安装包。
注:可以根据`自动升级时下载的版本`,选择对应文件。
```http
https://packages.gitlab.com/gitlab/gitlab-ce
```
安装包手动上传至服务器,并`替换`下载未完成的安装包。下面是升级缓存地址:
```
/var/cache/yum/x86_64/7/gitlab_gitlab-ce/packages/
```
再次执行官方升级命令即可完成自动安装。
## 资料
- 官网https://about.gitlab.com/
@ -363,4 +430,4 @@ sudo gitlab-ctl restart
- 官网下载https://about.gitlab.com/downloads/
- 官网安装说明https://about.gitlab.com/installation/#centos-7
- [操作系统、运维部署总结系列](https://github.com/dunwu/OS)
- [操作系统、运维部署总结系列](https://github.com/dunwu/OS)

View File

@ -10,29 +10,51 @@
> - JDK 1.8
> - Maven 3.5.4
## 1. 安装 Nexus
## 一、Nexus 安装
进入[官方下载地址](https://www.sonatype.com/download-oss-sonatype),选择合适版本下载。
![img](http://dunwu.test.upcdn.net/snap/20181127203029.png!zp)
![img](http://dunwu.test.upcdn.net/snap/20181127203029.png)
本人将 Nexus 部署在 Linux 机器,所以选用的是 Unix 版本。
这里,如果想通过命令方式直接下载(比如用脚本安装),可以在[官方历史发布版本页面](https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3)中找到合适版本,然后执行以下命令:
```shell
# 个人习惯将 nexus 安装在 /opt/maven 目录下
wget -O /opt/maven/nexus-unix.tar.gz http://download.sonatype.com/nexus/3/nexus-3.13.0-01-unix.tar.gz
tar -zxf nexus-unix.tar.gz
```
解压后,有两个目录:
- 【解压】执行 `tar -zxf nexus-unix.tar.gz` 命令,会解压出两个目录:
- `nexus-<version>` - 程序目录。包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的。
- `nexus-<version>/etc` - 配置目录。
- `nexus-<version>/etc/nexus.properties` - nexus 核心配置文件(默认 etc 目录下有 `nexus-default.properties`,可以基于此修改)。
- `sonatype-work` - 仓库目录。包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可。
- [修改环境变量】执行 `vim /etc/profile`,在文件尾部添加以下内容:
- `nexus-3.13.0-01` - 包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的。
- `sonatype-work` - 包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可。
```
NEXUS_HOME=/usr/program/nexus2.11.4
export NEXUS_HOME
```
## 2. 启动/停止 Nexus
刷新环境变量:`source /etc/profile`
进入 nexus-3.13.0-01/bin 目录,有一个可执行脚本 nexus。
- 【检查安装是否成功】执行 `nexus -version` 查看是否安装成功。
- 【防火墙】
- iptabes
- 添加规则:`iptables -I INPUT -p tcp -m tcp --dport 8081 -j ACCEPT`
- 载入规则:`/etc/rc.d/init.d/iptables save`
- 重启 iptables`service iptables restart`
- firewalld
- 添加规则:`firewall-cmd --zone=public --add-port=8081/tcp --permanent`
- 载入规则:`firewall-cmd --reload`
## 二、Nexus 使用
### 启动/停止 Nexus
进入 `nexus-3.13.0-01/bin` 目录,有一个可执行脚本 nexus。
执行 `./nexus`,可以查看允许执行的参数,如下所示,含义可谓一目了然:
@ -45,15 +67,13 @@ Usage: ./nexus {start|stop|run|run-redirect|status|restart|force-reload}
- 停止 nexus - `./nexus stop`
- 重启 nexus - `./nexus restart`
启动成功后,在浏览器中访问 `http://<ip>:8081`,欢迎页面如下图所示:
Nexus 的默认启动端口为 `8081`启动成功后,在浏览器中访问 `http://<ip>:8081`,欢迎页面如下图所示:
![img](http://dunwu.test.upcdn.net/snap/20181127203131.png!zp)
![img](http://dunwu.test.upcdn.net/snap/20181127203131.png)
点击右上角 Sign in 登录,默认用户名/密码为admin/admin123。
点击右上角 Sign in 登录,默认用户名/密码为:`admin/admin123`
## 3. 搭建 Maven 私服
### 3.1. 配置仓库
### 配置 maven 仓库
Nexus 中的仓库有以下类型:
@ -62,26 +82,116 @@ Nexus 中的仓库有以下类型:
- `virtual` - 虚拟仓库。用于适配 Maven 1
- `group` - 仓库组。Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。
![img](http://dunwu.test.upcdn.net/cs/java/javalib/maven/nexus.png!zp)
![img](http://dunwu.test.upcdn.net/cs/java/javalib/maven/nexus.png)
> **最佳实践**
建议配置如下:
- **hosted 仓库**
- **maven-releases** - 存储私有仓库的发行版 jar 包
- **maven-snapshots** - 存储私有仓库的快照版(调试版本) jar 包
- **proxy 仓库**
- **maven-central-maven** - 中央库(如果没有配置 mirror默认就从这里下载 jar 包),从 https://repo1.maven.org/maven2/ 获取资源
- **maven-aliyun** - 国内 maven 仓库,提高访问速度。
- **group 仓库**
- **maven-public** - 私有仓库的公共空间,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 中使用。
![img](http://dunwu.test.upcdn.net/snap/20181127203156.png)
> 其中:
>
> 建议配置如下:
>
> - hosted 仓库
> - maven-releases - 存储私有仓库的发行版 jar 包
> - maven-snapshots - 存储私有仓库的快照版(调试版本) jar 包
> - proxy 仓库
> - maven-central - maven 中央库(如果没有配置 mirror默认就从这里下载 jar 包),从 https://repo1.maven.org/maven2/ 获取资源
> - maven-aliyun - 国内 maven 仓库,提高访问速度。
> - group 仓库
> - maven-public - 私有仓库的公共空间,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 中使用。
> **maven-central**、**maven-public**、**maven-release**、**maven-snapshot** 仓库是默认配置好的 maven 仓库。maven-central 配置的是 `https://repo1.maven.org/maven2/` 的代理仓库,即 maven 中央仓库地址。
![img](http://dunwu.test.upcdn.net/snap/20181127203156.png!zp)
参考配置如下:
### 3.2. 配置 settings.xml
![](http://dunwu.test.upcdn.net/snap/20200403165258.png)
如果要使用 Nexus还必须在 settings.xml 和 pom.xml 中配置认证信息。
推荐配置的代理仓库:
- OSS SNAPSHOT 仓库:`http://oss.jfrog.org/artifactory/oss-snapshot-local/`
- aliyun 仓库(受限于国内网络,可以通过它来加速):`http://maven.aliyun.com/nexus/content/groups/public/`
### 配置 yum 仓库
![](http://dunwu.test.upcdn.net/snap/20200403201609.png)
推荐配置的 yum 代理仓库:
- aliyun yum 仓库:`http://mirrors.aliyun.com/centos`
配置本地 yum
1新增 nexus.repo 文件,内容如下:
```ini
[base]
name=Nexus
baseurl= http://<nexus host>:<nexus port>/repository/yum-aliyun/$releasever/os/$basearch/
enabled=1
gpgcheck=0
priority=1
```
2更新 yum 缓存,执行以下命令:
```shell
yum clean all
yum makecache
```
### 定时任务
随着 jar 包越来越多,尤其是 SNAPSHOT 包由于不限制重复上传,尤其容易导致磁盘空间膨胀。所以,需要定期进行清理或修复。
Nexus 内置了多个定时任务,可以执行清理。
【示例】定期清理 SNAPSHOST
![](http://dunwu.test.upcdn.net/snap/20200403173030.png)
## 三、开机自启动
作为常用服务,有必要将 Nexus 设为 `systemd` 服务,以便在断电恢复后自动重启。
配置方法如下:
`/lib/systemd/system` 目录下创建 `nexus.service` 文件,内容如下:
```ini
[Unit]
Description=nexus
After=network.target
[Service]
Type=forking
LimitNOFILE=65536 #警告处理
Environment=RUN_AS_USER=root
ExecStart=/opt/maven/nexus-3.13.0-01/bin/nexus start
ExecReload=/opt/maven/nexus-3.13.0-01/bin/nexus restart
ExecStop=/opt/maven/nexus-3.13.0-01/bin/nexus stop
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
```
保存后,可以使用以下命令应用 nexus 服务:
- `systemctl enable nexus` - 启动 nexus 开机启动
- `systemctl disable nexus` - 关闭 nexus 开机启动
- `systemctl start nexus` - 启动 nexus 服务
- `systemctl stop nexus` - 停止 nexus 服务
- `systemctl restart nexus` - 重启 nexus 服务
> 执行 `systemctl enable nexus` 后,再执行 reboot 重启,重连后,可以检测是否成功开机自动重启。
## 四、Nexus 和 Maven
Nexus 是 maven 私服。现在Nexus 服务器已经部署好了,如何配合 maven 使用呢?
### 配置 settings.xml
如果要使用 Nexus还必须在 `settings.xml``pom.xml` 中配置认证信息。
一份完整的 `settings.xml`
@ -94,7 +204,10 @@ Nexus 中的仓库有以下类型:
<pluginGroup>org.sonatype.plugins</pluginGroup>
</pluginGroups>
<!-- Maven 私服账号信息 -->
<!--设置本地 maven 仓库-->
<localRepository>D:\Tools\maven\.m2</localRepository>
<!--Maven 私服账号信息-->
<servers>
<server>
<id>releases</id>
@ -108,11 +221,12 @@ Nexus 中的仓库有以下类型:
</server>
</servers>
<!-- jar 包下载地址 -->
<!--Maven 镜像地址-->
<mirrors>
<mirror>
<id>public</id>
<mirrorOf>*</mirrorOf>
<!--Nexus 服务器地址-->
<url>http://10.255.255.224:8081/repository/maven-public/</url>
</mirror>
</mirrors>
@ -154,9 +268,9 @@ Nexus 中的仓库有以下类型:
</settings>
```
### 3.3. 配置 pom.xml
### 配置 pom.xml
pom.xml 中添加如下配置:
`pom.xml` 中添加如下配置,这样就可以执行 `mvn deploy`,将本地构建的 jar、war 等包发布到私服上。
```xml
<distributionManagement>
@ -178,9 +292,9 @@ Nexus 中的仓库有以下类型:
> - `<repository>``<snapshotRepository>` 的 id 必须和 `settings.xml` 配置文件中的 `<server>` 标签中的 id 匹配。
> - `<url>` 标签的地址需要和 maven 私服的地址匹配。
### 3.4. 执行 maven 构建
### 执行 maven 构建
如果要使用 settings.xml 中的私服配置,必须通过指定 `-P zp` 来激活 profile。
如果要使用 `settings.xml` 中的私服配置,必须通过指定 `-P zp` 来激活 profile。
示例:
@ -192,40 +306,9 @@ $ mvn clean package -Dmaven.skip.test=true -P zp
$ mvn clean deploy -Dmaven.skip.test=true -P zp
```
## 4. 开机自启动
> 至此,已经可以正常向 Nexus 上传、下载 jar 包。
将 Nexus 设置为 systemd 服务,以便开机自启动。
`/lib/systemd/system` 目录下创建 `nexus.service` 文件,内容如下:
```ini
[Unit]
Description=nexus
After=network.target
[Service]
Type=forking
LimitNOFILE=65536 #警告处理
Environment=RUN_AS_USER=root
ExecStart=/opt/maven/nexus-3.13.0-01/bin/nexus start
ExecReload=/opt/maven/nexus-3.13.0-01/bin/nexus restart
ExecStop=/opt/maven/nexus-3.13.0-01/bin/nexus stop
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
```
保存后,可以使用以下命令应用 nexus 服务:
- `systemctl enable nexus` - 启动 nexus 开机启动
- `systemctl disable nexus` - 关闭 nexus 开机启动
- `systemctl start nexus` - 启动 nexus 服务
- `systemctl stop nexus` - 停止 nexus 服务
- `systemctl restart nexus` - 重启 nexus 服务
## 5. Nexus 备份和迁移
## 五、备份和迁移
Nexus 三个重要目录:
@ -235,17 +318,17 @@ Nexus 三个重要目录:
| sonatype-work 目录 | sonatype-work | nexus/conf/nexus.xml 里面有 storage 的地址 |
| storage 目录 | storage | 里面主要是各种程序的 jar 包等 |
### 5.1. 备份
### 备份
Nexus 的数据都存储在 sonatype-work 目录,备份 Nexus 数据只需要将其打包即可。
### 5.2. 迁移
### 迁移
将原 Nexus 服务器中的 sonatype-work 目录迁移到新 Nexus 服务器的 sonatype-work 目录下。
## 6. FAQ
## 六、FAQ
### 6.1. 配置 INSTALL4J_JAVA_HOME
### 配置 INSTALL4J_JAVA_HOME
我在工作中遇到 nexus systemctl 服务无法自启动的问题,通过查看状态,发现以下报错:
@ -255,7 +338,7 @@ Please define INSTALL4J_JAVA_HOME to point to a suitable JVM
通过排查,找到原因:即使环境上已安装 JDK且配置了 JAVA_HOME但 nexus 仍然无法正确找到 JDK需要在 `/bin/nexus` 中指定 `INSTALL4J_JAVA_HOME_OVERRIDE=<JDK安装路径>`
## 7. 参考资料
## 参考资料
- [maven 私库 nexus3 安装及使用](https://blog.csdn.net/clj198606061111/article/details/52200928)
- [Nexus 安装 使用说明](https://www.cnblogs.com/jtlgb/p/7473837.html)

View File

@ -4,30 +4,15 @@
>
> 本文目的在于记录 svn 的安装、配置、使用。
<!-- TOC depthFrom:2 depthTo:3 -->
## 安装
- [1. 安装配置](#1-安装配置)
- [1.1. 安装 svn](#11-安装-svn)
- [1.2. 创建 svn 仓库](#12-创建-svn-仓库)
- [1.3. 配置 svnserve.conf](#13-配置-svnserveconf)
- [1.4. 配置 passwd](#14-配置-passwd)
- [1.5. 配置 authz](#15-配置-authz)
- [1.6. 启动关闭 svn](#16-启动关闭-svn)
- [1.7. 开机自启动 svn 方法](#17-开机自启动-svn-方法)
- [1.8. svn 客户端访问](#18-svn-客户端访问)
- [2. 参考资料](#2-参考资料)
<!-- /TOC -->
## 1. 安装配置
### 1.1. 安装 svn
### 安装 svn
```bash
$ yum install -y subversion
```
### 1.2. 创建 svn 仓库
### 创建 svn 仓库
```bash
$ mkdir -p /share/svn
@ -38,11 +23,13 @@ conf db format hooks locks README.txt
在 conf 目录下有三个重要的配置文件
- authz - 是权限控制文件
- passwd - 是帐号密码文件
- svnserve.conf - 是 SVN 服务配置文件
- `authz` - 是权限控制文件
- `passwd` - 是帐号密码文件
- `svnserve.conf` - 是 SVN 服务配置文件
### 1.3. 配置 svnserve.conf
## 配置
### 配置 svnserve.conf
```bash
$ vim /share/svn/conf/svnserve.conf
@ -58,13 +45,13 @@ authz-db = authz #使用哪个文件作为权限文件
realm = /share/svn # 认证空间名,版本库所在目录
```
### 1.4. 配置 passwd
### 配置 passwd
```bash
$ vim /share/svn/conf/passwd
```
添加内容如下:
添加新用户的用户名/密码如下:
```ini
[users]
@ -73,13 +60,13 @@ user2 = 123456
user3 = 123456
```
### 1.5. 配置 authz
### 配置 authz
```bash
$ vim /share/svn/conf/authz
```
添加内容如下
指定用户的访问权限(`r` 为读权限;`w` 为写权限)
```ini
[/]
@ -89,14 +76,16 @@ user3 = rw
*=
```
### 1.6. 启动关闭 svn
## 服务器管理
### 启动关闭 svn
```bash
$ svnserve -d -r /share/svn # 启动 svn
$ killall svnserve # 关闭 svn
```
### 1.7. 开机自启动 svn 方法
### 开机自启动 svn 方法
安装好 svn 服务后,默认是没有随系统启动自动启动的,而一般我们有要求 svn 服务稳定持续的提供服务。所以,有必要配置开机自启动 svn 服务。
@ -137,7 +126,14 @@ $ vi /etc/sysconfig/svnserve
重启服务器后,执行 `ps -ef | grep svn` 应该可以看到 svn 服务的进程已经启动。
### 1.8. svn 客户端访问
- 启动一个服务 - systemctl start svnserve.service
- 关闭一个服务 - systemctl stop svnserve.service
- 重启一个服务 - systemctl restart svnserve.service
- 显示一个服务的状态 - systemctl status svnserve.service
- 在开机时启用一个服务 - systemctl enable svnserve.service
- 在开机时禁用一个服务 - systemctl disable svnserve.service
## 客户端使用
进入 [svn 官方下载地址](https://tortoisesvn.net/downloads.html),选择合适的版本,下载并安装。
@ -145,9 +141,9 @@ $ vi /etc/sysconfig/svnserve
在新的窗口,输入地址 `svn://<你的 IP>` 即可,不出意外输入用户名和密码就能连接成功了(这里的用户、密码必须在 passwd 配置文件的清单中)。默认端口 3690如果你修改了端口那么要记得加上端口号。如下图所示
![img](http://dunwu.test.upcdn.net/snap/20190129175443.png!zp)
![img](http://dunwu.test.upcdn.net/snap/20190129175443.png)
## 2. 参考资料
## 参考资料
- https://www.cnblogs.com/liuxianan/p/linux_install_svn_server.html
- https://blog.csdn.net/testcs_dn/article/details/45395645