gitlab docker容器 配置git hooks

一、官方文档

通常,Git钩子被放置在存储库或项目的hooks目录中。GitLab从每个项目的hooks目录创建一个符号链接到gitlab-shell hooks目录,以便于在gitlab-shell升级之间进行维护。因此,定制钩子的实现方式略有不同。一旦创建了钩子,行为就完全一样了。

按照以下步骤设置自定义挂钩:

  1. 选择一个需要定制Git钩子的项目。
  2. 在GitLab服务器上,进入到项目的存储库目录。对于从源安装,路径通常是/home/git/repositories/<group>/<project>.git。对于Omnibus安装路径通常/var/opt/gitlab/git-data/repositories/<group>/<project>.git
  3. 在此位置创建一个新的目录custom_hooks
  4. 在新custom_hooks目录中创建一个名称匹配钩子类型的文件。例如push后出发的post-receive 没有扩展名。
  5. 使钩子文件可执行,并确保它由git拥有。
  6. 编写代码,使Git hook功能按预期方式运行。钩子可以是任何语言。确保顶部的“shebang”正确反映了语言类型。例如,如果脚本在Ruby中,shebang可能会是 #!/usr/bin/env ruby

二 、开始配置

进入gitlab容器内创建钩子文件(mall-组名 new_mall-项目名)

[root@VM_204_108_centos /]# docker exec -it gitlab /bin/bash

root@git:/# cd /var/opt/gitlab/git-data/repositories/mall/new_mall.git/

root@git:/var/opt/gitlab/git-data/repositories/mall/new_mall.git# mkdir custom_hooks/

root@git:/var/opt/gitlab/git-data/repositories/mall/new_mall.git# cd custom_hooks/

root@git:/var/opt/gitlab/git-data/repositories/mall/new_mall.git/custom_hooks# vim post-receive



#!/bin/bash

# 172.19.0.1 这个为宿主的虚拟IP

#我在宿主上边/shell-script/new_mall/git-pull.sh 里边写了同步代码的逻辑

#此处需要生成git用户的id_rsa.pub并导入到宿主的root用户认证中去 这是里就不说了。百度很多 linux公私钥认证

ssh root@172.19.0.1 "sh /shell-script/new_mall/git-pull.sh"

centos7 下gitlab社区版更换数据库为mysql

第1章 系统准备

[root@test ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@test ~]# uname -r
3.10.0-327.el7.x86_64

1.1添加阿里云的镜像

cd /etc/yum.repos.d
#备份原镜像
mv CentOS-Base.repo CentOS-Base.repo.backup
#添加阿里云Base源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#添加阿里云epel源
wget https://mirrors.aliyun.com/repo/epel-7.repo
#清除缓存
yum clean all && yum makecache

第2章 yum安装最新版

2.1安装依赖软件

yum install curl policycoreutils openssh-serveropenssh-clients

2.2添加清华大学镜像

vi /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

2.3安装gitlab-ce

yum makecache
yum install gitlab-ce

2.4查看安装gitlab的版本

head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 9.1.2

2.5重新配置并启动Gitlab

# gitlab-ctl reconfigure会把一些过去的config还原,导致修改的端口以及域名等都没有了
gitlab-ctl reconfigure
#重启gitlab-ce
gitlab-ctl restart

第3章 安装mysql5.6.36

3.1添加mysql源

vi /etc/yum.repo.d/mysql.repo
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=0

3.2mysql配置

yum -y install mysql-server mysql-devel

#基本配置,新建密码等
mysql_secure_installation

#登录数据库
mysql -uroot -p$password

#查看用户情况
mysql> select user,host from mysql.user;
+------+-----------+
| user | host     |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1      |
| root | localhost |
| root | test     |
+------+-----------+
4 rows in set (0.03 sec)

#创建一个gitlab管理用户
mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

#创建gitlab数据库
mysql> CREATE DATABASE IF NOT EXISTS`gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_general_ci`;
Query OK, 1 row affected (0.00 sec)

#授予git用户对gitlabhq_production数据库所有表的权限
mysql> GRANT SELECT, INSERT, UPDATE, DELETE,CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES, REFERENCES ON`gitlabhq_production`.* TO 'git'@'localhost';
Query OK, 0 rows affected (0.00 sec)

#使修改用户生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye

#测试新用户是否能连接新的数据库
sudo -u git -H mysql -u git -p -Dgitlabhq_production
Enter password:
Reading table information for completion of tableand column names
You can turn off this feature to get a quickerstartup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or itsaffiliates. All rights reserved.

Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.

Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.

mysql>

第4章 配置Gitlab连接mysql

4.1修改/etc/gitlab/gitlab.rb

postgresql['enable'] = false
gitlab_rails['db_adapter'] = 'mysql2'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = '3306'
gitlab_rails['db_username'] = 'git'
gitlab_rails['db_password'] = '123456'
按官方文档重新配置gitlab
gitlab-ctl reconfigure
迁移数据库时出现以下错误

第5章 排错步骤

5.1更换gem源

#查看gem源
/opt/gitlab/embedded/bin/gem source
*** CURRENT SOURCES ***

https://rubygems.org/

#更换开源中国的gem源,否则使用时会出现错误
/opt/gitlab/embedded/bin/gem sources --addhttps://gems.ruby-china.org/ --remove https://rubygems.org/

#查看更好后的gem源
/opt/gitlab/embedded/bin/gem sources
*** CURRENT SOURCES ***

https://gems.ruby-china.org/

#更改配置Gemfile文件的gem源
vi /opt/gitlab/embedded/service/gitlab-rails/ Gemfile
source 'https://gems.ruby-china.org'

5.2bundle install安装更新

#此命令会尝试更新系统中已存在的gem包
/opt/gitlab/embedded/bin/bundle install

#执行该命令需要切换到Gemfile上一级目录才可以运行
cd /opt/gitlab/embedded/service/gitlab-rails/
/opt/gitlab/embedded/bin/bundle install

5.3bundle禁止使用postgresql

vim /opt/gitlab/embedded/service/gitlab-rails/.bundle/config

5.4 安装mysql2 “0.3.20”

gitlab-rake gitlab:check

#安装mysql2 0.3.20版本
/opt/gitlab/embedded/bin/gem install mysql2 -v'0.3.20'

出错

查看文件后发现没有安装gcc软件,导致不能编译文件。
故需要yum安装gcc
yum install gcc –y

/opt/gitlab/embedded/bin/gem install mysql2 -v'0.3.20'
Building native extensions.  This could take a while...
Successfully installed mysql2-0.3.20
Parsing documentation for mysql2-0.3.20
Installing ri documentation for mysql2-0.3.20
Done installing documentation for mysql2 after 1seconds
1 gem installed

5.5重置检查

#重新配置
gitlab-ctl reconfigure
#检查
gitlab-rake gitlab:check

5.6客户端测试

[root@test chen]# touch README.md
[root@test chen]# git add README.md
[root@test chen]# git commit -m "addREADME"
[master(根提交) bed61ad] addREADME
1 filechanged, 0 insertions(+), 0 deletions(-)
create mode100644 README.md
[root@test chen]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 216 bytes | 0 bytes/s,done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.0.0.10:root/chen.git
* [newbranch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

成功
参考文档:
https://docs.gitlab.com/ce/install/database_mysql.html
https://docs.gitlab.com/omnibus/settings/database.html#seed-the-database-fresh-installs-only
http://shaonian.blog.51cto.com/2975261/1894664

本文出自 “11659719” 博客

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用
启动: systemctl start firewalld

查看状态: systemctl status firewalld 

停止: systemctl disable firewalld

禁用: systemctl stop firewalld
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed

3.配置firewalld-cmd

查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息:  firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
那怎么开启一个端口呢
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

centos7 firewalld firewalld.service: Unit is masked

之前用的 iptables 来管理的防火墙,后来发现 CentOS 7.0 中已经用 firewalld 取代
iptables 了,于是与时俱进,停用了
iptables。

systemctl stop iptables.service

然后来启动 firewalld 吧

systemctl start firewalld.service

给我报了这个错

Failed to start firewalld.service: Unit firewalld.service is masked.

查了很久没找到解决办法,于是试着输入了下面这行命令,解决了。

systemctl unmask firewalld.service

启动 firewalld.service

systemctl start firewalld.service

把 80 端口添加到防火墙开放端口中

firewall-cmd --permanent --zone=public --add-port=80/tcp

重启一遍 firewalld 服务使其生效

systemctl restart firewalld.service

检查更改是否生效

firewall-cmd --zone=public --query-port=80/tcp

centos7安装chrome谷歌浏览器

wget http://chrome.richardlloyd.org.uk/install_chrome.sh
chmod u+x install_chrome.sh
./install_chrome.sh -s(stable稳定版本)
启动chrome google-chrome or ./install_chrome.sh
更新chrome yum update google-chrome-stable
删除chrome yum remove google-chrome-stable or ./install_chrome.sh -u
遇到下载超时,失败修改需要修改下载地址请编辑install_chrome.sh
其中的http://omahaproxy.appspot.com改为https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
如果dl.google.com不同,可以通过修改/etc/hosts文件夹添加
xxx.xxx.xxx.xxx dl.google.com
用非root用户运行google-chrome

Linux bind服务

bind安装

yum -y install bin bind-chroot

#启动

service named start

配置文件

  1. options {} -整个BIND使用的全局选项
  2. logging {} – 服务日志选项
  3. zone DNS域解析

注:

严格注意语法书写,其格式非常严格

@是DNS记录中保留字,表示当前域名

记录不准许折行书写

单行记录开头不准许空格或tab开头

 

iptables 规则原理和组成

netfilter和iptables

  • 什么是Netfilter?

Netfilter 是Linux操作系统核心层内部的一个数据包处理模块。

  • 什么是Hook point?

数据包在Netfilter中的挂载点

(PRE_ROUTING、INOOUT、OUTPUT、FORWAED、POST_ROUTING)

iptables 的4张表和5条链

  • 四张表

filter表、nat表、mangle表、raw表

  • 五条链

INPUT、OUTPUT’、FORWARD、PREROUTING\POSTROUTING

数据包在4张表和5条链的流向

iptables规则组成

  • 数据包访问控制

ACCEPT、DROP\REJECT

  • 数据包改写

SNAT、DNAT

  • 信息记录

LOG

 

Linux SYN 攻击预防介绍

利用TCP协议缺陷进行,导致系统服务停止响应,网络宽带跑满或者响应缓慢

原理

预防

  • 方式一
减少发送syn+ack包时重试次数

sysctl -w net:ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3
  • 方式二
SYN cookies 技术

sysctl -w net.ipv4.tcp_syncookies=1
  • 方式三
增加backlog队列

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

linux下其他预防策略

  • 策略一
关闭ICMP协议请求

sysctl -w net.ipv4.icmp_echo_ignore_all=1
  • 策略2
通过iptables防止扫描

iptables -A FORWARD -p tcp -syn -m limit -limit 1/s -limit-burst 5 -j ACCEPT

iptables -A FORWARD -p tcp -tcp-flags SYN,ACK,FIN,RST RST -m limit -limit 1/s -j ACCEPT

iptables -A FORWARD -p icmp -icmp-type echo-request -m limit -limit 1/s -j ACCEPT

 

Linux 批量主机服务扫描

目的

  1. 批量主机存活扫描
  2. 针对主机服务扫描

作用

  1. 能更方便快捷获取网络中主机的存货状态
  2. 更加细致、只能获取主机服务侦查情况

典型命令

  • nmap

  • ncat
-w 设置的超时时间

-z 一个输入输出模型

-v 显示命令执行过程

tcp协议

nc -v -z -w2 10.10.250.254 1-50

u UDP协议

nc -v -u -z -w2 10.10.250.254 1-50

Linux 路由扫描

作用

查询一个主机到另一个主机的经过的路由跳数,及数据延迟情况。

常用工具

  • tancertoute

默认使用的UDP协议(30000以上的端口)

-T -p 使用TCP协议

-I 使用ICMP协议

  • mtr

能测试出主机到每一个路由间的连通性