精华内容
下载资源
问答
  • 上次简单说了搭建Git服务器,这次来聊聊自动同步部署到项目。这种方式会很方便,比如用在网站上,只需要点一下push,线上的网站就会同步。这个教程的前提是网站放在Git服务器上。 前提 这里以网站为例,你需要在Git...

    上次简单说了搭建Git服务器,这次来聊聊自动同步部署到项目。这种方式会很方便,比如用在网站上,只需要点一下push,线上的网站就会同步。这个教程的前提是网站放在Git服务器上。

    前言

    发现之前的文章有几处错误,又经过一大堆测试,直接登录git用户模拟了一遍操作等,终于找到比较完善的方法了。

    解决疑难杂症

    1. 查看项目目录下的.git,所属是否是git用户的,如果不是需要修改
    chown -R git:git .git
    
    1. git报错
    [git用户 g]$ git pull
    remote: Counting objects: 5, done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 3 (delta 2), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    From /git/g
       528b0d2..9b2e4c3  master     -> origin/master
    Updating 528b0d2..9b2e4c3
    error: unable to unlink old 'index.php' (Permission denied)
    

    没有权限更新,解决这个问题可以使用sudo命令,但这样又会引出一个新问题。

    1. sudo问题

    你需要先在/etc/sudoers文件夹中把执行sudo命令的用户加上,否则会报错

    vim /etc/sudoers
    

    把git用户加上,并且不需要密码

    git ALL=(ALL)NOPASSWD:ALL
    

    但sudo还有一个问题

    [git@用户 g]$ sudo git pull
    Updating 528b0d2..9b2e4c3
    Fast-forward
     index.php | 1 +
     1 file changed, 1 insertion(+)
     
    [git@用户 g]$ ll
    -rw-r--r-- 1 root root  5105 Aug 14 19:03 index.php
    

    就是用户和用户组变成了root,这样网页会打不开显示拒绝访问,就不得不使用chown来更换,所以Git钩子文件就得这样写。

    Git钩子

    在相应的Git项目目录中,进入hooks目录,新建或更改post-receive文件,用自己装的编辑器打开,使用命令。

    vim post-receive
    

    输入以下信息

    #!/bin/sh
    cd /www/wwwroot/myWebSite || exit
    unset GIT_DIR
    sudo git reset --hard
    sudo git pull origin master
    sudo chown -R www:www *
    

    sudo git reset --hard是解决报错Your local changes would be overwritten by merge. Commit, stash or revert them to proceed,这是因为拉取代码时发现本地代码有过修改,所以提示你提交一下项目目录代码,但我们并不要提交,于是使用sudo git reset --hard可以放弃项目目录修改(其实不是修改,只是跟git上的不同),让拉取的代码覆盖项目目录的代码,实现硬更新。

    sudo chown -R www:www *是把当前目录所有文件的所有者改为www用户和www用户组,这个用户是文件原本的用户,如果你的是其他的请自行更改,.git是隐藏目录所以不会被修改,但如果被修改需要你再改回来,在下面添加命令sudo chown -R git:git .git就可以。

    这样就完成了,下次push项目后就会被触发,自动在myWebSite目录下拉取相应分支的更新、更改用户和用户组。

    后言

    像这种更改git用户获取权限不用密码的方式,我不确定安全性怎么样,还请大佬指教。

    展开全文
  • dns主从同步部署

    千次阅读 2018-03-26 09:43:17
    DNS 主从同步原理 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 根据序列号的变化。 从DNS:从可以单独修改,主从不会报错。但从修改后,主端同步给从后 从端修改数据会丢失 ...

    DNS 主从同步原理

    • 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 根据序列号的变化。
    • 从DNS:从可以单独修改,主从不会报错。但从修改后,主端同步给从后 从端修改数据会丢失
    • 主从原理:从会监听主的 TCP 53 端口,它会隔一段时间去探测 主配置文件中的序列号,如果主端 序列号更新后 从端探测到会 将主端内容 同步到本地。
    • 同步模式:从主动探测时间比较缓慢,可以设置主端,每次变更序列号时主动将,数据信息,推送给从端。

    DNS实验环境

    master服务器:172.16.2.116

    slave1服务器: 172.16.2.225

    关闭selinux。

    关闭iptables或者正确设置。

    安装步骤

    1.安装软件

    yum install -y bind bind-utils bind-chroot

     说明:

    • bind是主程序
    • bind-utils是工具包,包括dig、nslookup等NDS命令
    • bind-chroot为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”文件夹作为BIND的根目录)
    • /etc/named.conf,/etc/named.rfc1912.zones是主配置文件
    • /var/named/named.ca是根区域解析库文件
    • /var/named/named.localhost, /var/named/named.loopback 是本机和环回地址的解析库文件
    • rndc---remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。

    2.修改主服务器配置文件

    2.1配置named.conf文件

    这个配置文件主要分3段内容,options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。

    只修改第二行和最后一行为any,(生产环境最好配置上转发?)

    options {
            listen-on port 53 { any; };  #修改为any
            listen-on-v6 port 53 { ::1; };
            directory       "/var/named";
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            allow-query     { any; };  #修改为any
         forwarders { 119.29.29.29; };

     

    2.2编辑/etc/named.rfc1912.zones在文件末尾添加一个正向解析区域和一个反向解析区域

     1 zone "hanli.com" IN {
     2         type master;          #定义区域类型,type可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
     3         file "hanli.com.zone";
     4         allow-transfer { 172.16.2.225; }; #指定允许转发的目标主机,即从服务器
     5 };
     6 zone "2.16.172.in-addr.arpa" IN {
     7         type master;          
     8         file "2.zone";
     9         allow-transfer { 172.16.2.225; };
    10 };

    修改后检查下:这个命令会同时检查named.conf和named.rfc1912.zones两个文件

    # named-checkconf
    没有任何输出表示 /etc/named.conf没有语法错误

     2.3 在/var/named目录下创建hanli.com.zone正向解析库文件和2.zone反向解析库文件

     

    [root@master] /var/named$ vim hanli.com.zone
    $TTL 1D
    @               IN      SOA     dns1.hanli.com. mail.hanli.com. (
                    2018030422
                    2H
                    10M
                    1W
                    1D
                    )
    @               IN  NS          dns1.hanli.com.
    @               IN  NS          dns2.hanli.com.
    @               IN  MX  10      mail.hanli.com.
    dns1            IN  A           172.16.2.116
    dns2            IN  A           172.16.2.225
    mail            IN  A           172.16.2.116
    www             IN  A           172.16.2.116

     

    检查正向解析库文件有没有错误

    [root@master] /var/named$ named-checkzone "hanli.com" hanli.com.zone
    zone hanli.com/IN: loaded serial 2018030422
    OK

     注意事项:

    • 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
    • $TTL表示宏定义,TTL(Time- To-Live),dns记录在本地DNS服务器上保留的时间
    • @符号可代表区域文件/etc/named.conf里面定义的区域名称,即:"hanli.com."。
    • 2018030422 ;标识序列号,十进制数字,不能超过10位,通常使用日期
    • 2H ;刷新时间,即每隔多久到主服务器检查一次,此处为2小时,实验环境可以设置小一点
    • 4M ;重试时间,应该小于刷新时间,此处为4分钟,实验环境可以设置小一点
    • 1D ;过期时间,此处为1天
    • 2D ;主服务器挂后,从服务器至多工作的时间,此处为2天)
    • 这个文件里所有的域名结尾的点号一定不能省略。
    • 区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,因此区域解析库文件的属组应设置为named。

    反向解析库文件

    [root@master] /var/named$ vim 2.zone
    $TTL 1d
    @    IN  SOA     dns1.hanli.com. mail.hanli.com. (
                2018030422;
                2H;
                10M;
                1W;
                1D;
                )
                    IN      NS  dns1.hanli.com.
                    IN      NS  dns2.hanli.com.
    116             IN      PTR www.hanli.com.
    116             IN      PTR mail.hanli.com.
    116             IN      PTR dns1.hanli.com.
    225             IN      PTR dns2.hanli.com.
    ~                                           

     

    注意事项

    • 反向解析数据文件里面只有SOA、NS、PTR资源记录,所有A记录都要改为PTR记录,名称为IP地址,IP地址可以写全也可以简写,如果写全则是IP地址反写加上.in-addr.arpa.例如:116.2.16.172.in-addr.arpa. PTR资源记录的值为域名。

    检测反向解析库配置有没有错误

    [root@master] /var/named$ named-checkzone "2.16.172.in-addr.arpa" 2.zone
    zone 2.16.172.in-addr.arpa/IN: loaded serial 2018030422
    OK


    正向解析区域检查没问题

     查看权限:目录下文件,属组应为named用户

    [root@master] /var/named$ ll
    total 24
    -rw-r--r--. 1 root  named  342 Mar  4 23:05 2.zone
    drwxr-x---. 7 root  named   61 Mar  4 18:26 chroot
    drwxrwx---. 2 named named   23 Mar  4 18:38 data
    drwxrwx---. 2 named named   31 Mar  4 18:46 dynamic
    -rw-r--r--. 1 root  named  643 Mar  4 23:05 hanli.com.zone
    -rw-r-----. 1 root  named 2281 May 22  2017 named.ca
    -rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
    -rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
    -rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
    drwxrwx---. 2 named named    6 Jan 22 21:30 slaves

      

    2.4 启动named服务,并测试

    # systemctl start named.service

    使用dig -t 测试正向解析

    [root@master] /var/named/chroot/etc/named$ dig -t A web.hanli.com @172.16.2.116
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.hanli.com @172.16.2.116
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36950
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;web.hanli.com.            IN    A
    
    ;; ANSWER SECTION:
    web.hanli.com.        86400    IN    CNAME    www.hanli.com.
    www.hanli.com.        86400    IN    A    172.16.2.116
    
    ;; AUTHORITY SECTION:
    hanli.com.        86400    IN    NS    ns1.hanli.com.
    hanli.com.        86400    IN    NS    ns2.hanli.com.
    
    ;; ADDITIONAL SECTION:
    ns1.hanli.com.        86400    IN    A    172.16.2.116
    ns2.hanli.com.        86400    IN    A    172.16.2.116
    
    ;; Query time: 1 msec
    ;; SERVER: 172.16.2.116#53(172.16.2.116)
    ;; WHEN: Sun Mar 04 22:16:52 CST 2018
    ;; MSG SIZE  rcvd: 144

    使用dig -x 测试反向解析

    [root@master] /var/named$ dig -x 172.16.2.225 @172.16.2.116
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -x 172.16.2.225 @172.16.2.116
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29042
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;225.2.16.172.in-addr.arpa.    IN    PTR
    
    ;; ANSWER SECTION:
    225.2.16.172.in-addr.arpa. 86400 IN    PTR    dns2.hanli.com.
    
    ;; AUTHORITY SECTION:
    2.16.172.in-addr.arpa.    86400    IN    NS    dns2.hanli.com.
    2.16.172.in-addr.arpa.    86400    IN    NS    dns1.hanli.com.
    
    ;; ADDITIONAL SECTION:
    dns1.hanli.com.        86400    IN    A    172.16.2.116
    dns2.hanli.com.        86400    IN    A    172.16.2.225
    
    ;; Query time: 1 msec
    ;; SERVER: 172.16.2.116#53(172.16.2.116)
    ;; WHEN: Mon Mar 05 13:19:37 CST 2018
    ;; MSG SIZE  rcvd: 147

     

    至此DNS主服务器已经配置完毕并能正常工作。

     

    说明:

    通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。

     

    3、从服务器配置172.16.2.225

    前提条件:

    • 两台主机可以不一定处在同一网段,但是两台主机之间必须要实现网络通信;
    • 辅助DNS服务器必须要有主DNS服务器的授权,才可以正常操作。

    3.1、安装bind

    3.2、编辑/etc/named.conf将监听IP地址改一下,其它不需要更改

    options {
            listen-on port 53 { 172.16.2.225;127.0.0.1; };

     

    3.3 编辑/etc/named.rfc1912.zones

    zone "hanli.com" IN {
            type slave;
            masters { 172.16.2.116; };
            file "slaves/hanli.com.zone";
    };
    zone "2.16.172.in-addr.arpa" IN {
            type slave;
            masters { 172.16.2.116; };
            file "slaves/2.zone";
    };

    3.4 注意事项:从服务器的区域解析库文件应当是从主服务器加载过来的,所以无需创建区域解析库文件。

    3.5 启动从named服务,

    # systemctl start named

    [root@slave1] /var/named/slaves$ systemctl status named
    ● named.service - Berkeley Internet Name Domain (DNS)
    Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
    Active: active (running) since 一 2018-03-05 14:16:04 CST; 11s ago
    Process: 3463 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
    Process: 3474 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
    Process: 3472 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
    Main PID: 3477 (named)
    CGroup: /system.slice/named.service
    └─3477 /usr/sbin/named -u named -c /etc/named.conf

    3月 05 14:16:04 slave1 named[3477]: zone 2.16.172.in-addr.arpa/IN: Transfer started.
    3月 05 14:16:04 slave1 named[3477]: transfer of '2.16.172.in-addr.arpa/IN' from 172.16.2.116#53: connected using 172.16.2.225#44740
    3月 05 14:16:04 slave1 named[3477]: zone 2.16.172.in-addr.arpa/IN: transferred serial 2018030425
    3月 05 14:16:04 slave1 named[3477]: transfer of '2.16.172.in-addr.arpa/IN' from 172.16.2.116#53: Transfer completed: 1 mes...es/sec)
    3月 05 14:16:04 slave1 named[3477]: zone 2.16.172.in-addr.arpa/IN: sending notifies (serial 2018030425)
    3月 05 14:16:04 slave1 named[3477]: zone hanli.com/IN: Transfer started.
    3月 05 14:16:04 slave1 named[3477]: transfer of 'hanli.com/IN' from 172.16.2.116#53: connected using 172.16.2.225#39337
    3月 05 14:16:04 slave1 named[3477]: zone hanli.com/IN: transferred serial 2018030425
    3月 05 14:16:04 slave1 named[3477]: transfer of 'hanli.com/IN' from 172.16.2.116#53: Transfer completed: 1 messages, 9 rec...es/sec)
    3月 05 14:16:04 slave1 named[3477]: zone hanli.com/IN: sending notifies (serial 2018030425)
    Hint: Some lines were ellipsized, use -l to show in full.

    从状态日志中发现,zone区域文件已同步到从服务器

    3.6 检查测试同步功能

    查看/var/named/slaves/目录,发现多了两个文件。

    [root@slave1] /var/named/slaves$ ll
    总用量 8
    -rw-r--r-- 1 named named 365 3月 5 14:16 2.zone
    -rw-r--r-- 1 named named 394 3月 5 14:16 hanli.com.zone

    查看文件内容,可以看到该文件和主DNS服务器上的文件内容是一样的。说明这2个文件是自动从主服务器同步过来的。

    以后添加DNS记录,只需修改正向解析文件/var/named/hanli.com.zone,和 反向解析文件/var/named/2.zone,并更新序列号,(需要重载named)。则主服务器会自动将zone区域文件推送至从服务器/var/named/slaves下。

    3.7 测试从DNS服务器。

    正向解析

    [root@slave1] /var/named/slaves$ dig -t A www.hanli.com @172.16.2.225
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A www.hanli.com @172.16.2.225
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7925
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.hanli.com.            IN    A
    
    ;; ANSWER SECTION:
    www.hanli.com.        86400    IN    A    172.16.2.116
    
    ;; AUTHORITY SECTION:
    hanli.com.        86400    IN    NS    dns1.hanli.com.
    hanli.com.        86400    IN    NS    dns2.hanli.com.
    
    ;; ADDITIONAL SECTION:
    dns1.hanli.com.        86400    IN    A    172.16.2.116
    dns2.hanli.com.        86400    IN    A    172.16.2.225
    
    ;; Query time: 0 msec
    ;; SERVER: 172.16.2.225#53(172.16.2.225)
    ;; WHEN: 一 3月 05 14:22:32 CST 2018
    ;; MSG SIZE  rcvd: 128

     

    反向解析

    [root@slave1] /var/named/slaves$ dig -x 172.16.2.116  @172.16.2.225
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -x 172.16.2.116 @172.16.2.225
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52076
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;116.2.16.172.in-addr.arpa.    IN    PTR
    
    ;; ANSWER SECTION:
    116.2.16.172.in-addr.arpa. 86400 IN    PTR    mail.hanli.com.
    116.2.16.172.in-addr.arpa. 86400 IN    PTR    www.hanli.com.
    116.2.16.172.in-addr.arpa. 86400 IN    PTR    dns1.hanli.com.
    
    ;; AUTHORITY SECTION:
    2.16.172.in-addr.arpa.    86400    IN    NS    dns2.hanli.com.
    2.16.172.in-addr.arpa.    86400    IN    NS    dns1.hanli.com.
    
    ;; ADDITIONAL SECTION:
    dns1.hanli.com.        86400    IN    A    172.16.2.116
    dns2.hanli.com.        86400    IN    A    172.16.2.225
    
    ;; Query time: 0 msec
    ;; SERVER: 172.16.2.225#53(172.16.2.225)
    ;; WHEN: 一 3月 05 14:25:12 CST 2018
    ;; MSG SIZE  rcvd: 184

     后续

    1、将生产环境机器主机名和ip地址记录到主dns正向解析区域文件中

    2、将生产环境的机器dns全部换成主dns服务器地址

    # Generated by NetworkManager
    nameserver 172.16.2.116

    3、就可以 ssh 主机名了,很方便

    [root@master] /var/named$ ssh slave1.hanli.com
    Last login: Mon Mar 5 15:41:02 2018 from mail.hanli.com

    [root@master] /var/named$ ssh slave2.hanli.com
    Last login: Mon Mar 5 15:41:13 2018 from mail.hanli.com

    错误排查

    1、主服务器zone文件无法同步到从服务器的slaves目录下

    查看日志

    [root@slave1] /var/named/slaves$ tail -f /var/log/messages
    Mar 5 13:48:36 slave1 named[3305]: command channel listening on 127.0.0.1#953
    Mar 5 13:48:36 slave1 named[3305]: command channel listening on ::1#953
    Mar 5 13:48:36 slave1 named[3305]: managed-keys-zone: loaded serial 2
    Mar 5 13:48:36 slave1 named[3305]: zone 0.in-addr.arpa/IN: loaded serial 0
    Mar 5 13:48:36 slave1 named[3305]: zone localhost.localdomain/IN: loaded serial 0
    Mar 5 13:48:36 slave1 named[3305]: zone localhost/IN: loaded serial 0
    Mar 5 13:48:36 slave1 named[3305]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
    Mar 5 13:48:36 slave1 named[3305]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
    Mar 5 13:48:36 slave1 named[3305]: all zones loaded
    Mar 5 13:48:36 slave1 named[3305]: running
    Mar 5 13:50:06 slave1 named[3305]: zone hanli.com/IN: refresh: retry limit for master 172.16.2.116#53 exceeded (source 0.0.0.0#0)
    Mar 5 13:50:06 slave1 named[3305]: zone hanli.com/IN: Transfer started.
    Mar 5 13:50:06 slave1 named[3305]: transfer of 'hanli.com/IN' from 172.16.2.116#53: failed to connect: host unreachable
    Mar 5 13:50:06 slave1 named[3305]: transfer of 'hanli.com/IN' from 172.16.2.116#53: Transfer completed: 0 messages, 0 records, 0 bytes, 0.001 secs (0 bytes/sec)
    Mar 5 13:50:06 slave1 named[3305]: zone 2.16.172.in-addr.arpa/IN: refresh: retry limit for master 172.16.2.116#53 exceeded (source 0.0.0.0#0)
    Mar 5 13:51:36 slave1 named[3305]: zone hanli.com/IN: refresh: retry limit for master 172.16.2.116#53 exceeded (source 0.0.0.0#0)
    Mar 5 13:51:37 slave1 named[3305]: zone 2.16.172.in-addr.arpa/IN: refresh: retry limit for master 172.16.2.116#53 exceeded (source 0.0.0.0#0)

     发现无法连接机器,考虑是iptables和seLinux的问题,检查下主服务器和从服务器是否已关闭,或正确设置。

    重新设置后,已正确同步。

    参考

    http://www.cnblogs.com/fatt/p/4494695.html

    http://www.cnblogs.com/mfyang/p/8467421.html

    http://www.cnblogs.com/feihongwuhen/archive/2009/12/08/7171038.html

    展开全文
  • unison+inotify实现文件实时双向同步部署步骤 一.编译安装unison unison各版本下载地址 http://www.seas.upenn.edu/~bcpierce/unison//download.html unison编译器下载地址 ...
    unison+inotify实现文件实时双向同步部署步骤


    一.编译安装unison

    unison各版本下载地址 http://www.seas.upenn.edu/~bcpierce/unison//download.html

    unison编译器下载地址 http://caml.inria.fr/pub/distrib (版本至少3.0.7)


    1.环境说明 (在其他地方部署时修改下IP与同步目录即可)

    host1    192.168.42.241    同步目录 /root/test

    host2    192.168.42.243    同步目录 /root/test


    2. 安装Objective Caml compiler(若安装的unison的是二进制程序,则不用安装。因二进制程序版本都太老,这里选择编译安装)

    [root@241 ~]# cd /usr/src/

    [root@241 src]# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.0.tar.gz

    [root@241 src]# tar xf ocaml-3.12.1+rc1.tar.gz

    [root@241 src]# tar xf ocaml-3.12.0.tar.gz

    [root@241 src]# cd ocaml-3.12.0

    [root@241 ocaml-3.12.0]# ./configure

    [root@241 ocaml-3.12.0]#  make world opt

    [root@241 ocaml-3.12.0]#  make install


    3.编译安装Unison

    [root@241 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz

    [root@241 src]# tar xf unison-2.40.102.tar.gz

    [root@241 src]# cd unison-2.40.102

    [root@241 unison-2.40.102]# make UISTYLE=text THREADS=true STATIC=true

    [root@241 unison-2.40.102]# cp unison /usr/local/bin/            #将生成的二进制程序复杂到系统的PATH路径里

    [root@241 unison-2.40.102]# scp unison root@192.168.42.243:/usr/local/bin/unison        #将unison二进制程序复制到host2


    二.配置双机ssh信任

    [root@241 ~]# ssh-keygen

    [root@243 ~]# ssh-keygen

    [root@243 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.42.241

    [root@241 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.42.243


    三.unison配置

    1.编辑unison配置文件

    [root@241 ~]# vim .unison/default.prf


    # Unison preferences file

    #root = /root/test                            #两个root表示要同步的文件夹(下面的同步脚本定义了同步目录,所以这里注释掉,否则会冲突)

    #root = ssh://192.168.42.243//root/test        

    #path = /root/test                            #两个path表示只同步指定的子目录及文件,而非整个目录

    #path = /root/test

    #ingnore = PATH test/txt                    #ingnore = Path 表示忽略/root/test 下面的test/txt

    batch = true                                #表示全自动模式,接受默认动作

    #maxthreads = 300

    #repeat = 1

    #retry = 3

    owner = true                                #owner group perms表示保持原来的属主 属组 权限

    group = true                                

    perms = -1

    fastcheck = true                            #true表示同步时通过文件的创建时间来比较两地文件 false表示比较两地文件的内容

    rsync = false

    #debug = verbose

    sshargs = -C                                #表示使用ssh的压缩方式传输

    xferbycopying = true                        

    confirmbigdel = false                        #true表示当需要同步的两个目录一个为空时,unison将停止 false表示同步的某个目录为空时不会停止运转

    log = true

    logfile = /root/.unison/unison.log



    #host2 配置文件一样

    四.安装inotify

    1.查看系统是否支持inotify

    [root@241 ~]# ls -l /proc/sys/fs/inotify

    total 0

    -rw-r--r-- 1 root root 0 Nov 11 11:25 max_queued_events

    -rw-r--r-- 1 root root 0 Nov 11 11:25 max_user_instances

    -rw-r--r-- 1 root root 0 Nov 11 11:25 max_user_watches


    2.安装inotify

    [root@241 src]# tar xf inotify-tools-3.14.tar.gz

    [root@241 src]# cd inotify-tools-3.14

    [root@241 inotify-tools-3.14]# ./configure

    [root@241 inotify-tools-3.14]# make && make install


    echo 30000000 > /proc/sys/fs/inotify/max_user_watches  (注意:重启机器后此设置会消失,如果监控的文件数目不是特别多,可以不设置)

    3.编写inotify实时监控脚本

    [root@241 ~]# vim unison.sh


    #!/bin/bash

    DESTHOST=192.168.42.243

    DESTHOSTDIR=/root/test

    SRCDIR=/root/test

    /usr/local/bin/inotifywait -mrq  --timefmt '%d/%m/%y %H:%M' --format '%T %w %f'  -e create,delete,modify,move $SRCDIR | while read line; do

    /usr/local/bin/unison $SRCDIR ssh://$DESTHOST/$DESTHOSTDIR

    done


    chmod +x unison.sh


    4.按同样方法在host2安装inotify和编写同步脚本


    5.分别在host1 host2 让脚本运行于后台

    [root@241 ~]# nohup ./unison.sh &

    [root@243 ~]# nohup ./unison.sh &
    展开全文
  • windows下利用svn钩子同步部署目录的方法我们希望利用svn管理代码,同时每次上传到svn服务器时,自动利用hooks把最新的代码pull到apache服务器目录下。软件web 服务器: VisualSVN 和 TortoiseSVN客户机: ...

    windows下利用svn钩子同步部署目录的方法

    我们希望利用svn管理代码,同时每次上传到svn服务器时,自动利用hooks把最新的代码pull到apache服务器目录下。

    软件

    web 服务器: VisualSVN 和 TortoiseSVN

    客户机: TortoiseSVN

    目录建立

    服务器目录
    apache服务器根目录下,建立queue目录,同时checkout一份;

    客户端目录
    客户端建立queue目录,我们在这里修改代码,同时把queue目录checkout到svn服务器,

    配置钩子

    将svn的路径加入path变量中,然后在 C:/Repositories/queue/hooks 下建立一个 post-commit.bat 的文件,内容如下:
    @echo off
    “svn update “c:\wamp\www\queue” –username uaername –password password

    注意事项

    文件被锁
    我们用钩子同步时,如果提示文件被锁,我们取消使用https协议连接,并重新checkout就可以了

    只读数据库
    如果提示只读数据库异常,我们在apache根目录下,增加everyone用户的完全控制权限即可

    展开全文
  • DNS BIND主辅同步部署

    千次阅读 2015-04-19 00:15:25
    为了提高DNS服务的可用性,我们通常会部署DNS主辅同步以实现数据备份,或用以实现读写分离,DNS主辅可以部署为一主多辅,同步可以控制到具体的zone。
  •   各位朋友,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是 https://qinyuanpei.github.io .在曾经的一篇博客:《持续集成在Hexo自动化部署上的实践》中,我为大家分享了在线持续集成服务 Travis CI ...
  • 得益于Hexo, jekyll这类轻量静态博客框架的流行与各大代码托管平台提供的Pages服务。...这篇文章主要指引您将Hexo同步(时)部署至Github与码云,如果可能,也试图帮助您在Github和码云上搭建一个Hexo个人博客。
  • /etc/rsync.passwd,进要设置这个文件的权限为600 # echo "rsync:123456lzz" >> /etc/rsync.pas # chmod 600 /etc/rsync.pas 4、 创建同步的目录:即上图中path配置选项中的目录 # mkdir /data/...
  • RubyMine scp远程同步部署代码

    千次阅读 2013-03-19 21:39:46
    tools->deployment->configuration 新建centos_drivelink_server connection  type: sftp sftp host:192.168.106.94 port:22 Root path: 使用auto detect User name:root Password:**** (Save password...ma
  • CentOS+Git+码云,WEB自动同步部署方案

    千次阅读 2018-03-15 01:56:12
    得到你的 public key,添加到码云, SSH key添加地址: 你的项目地址/deploy_keys (注意这里用的项目部署公钥,只读的,你也可以申请个人公钥,可写) 然后按如下命令验证是否生效: sudo -u www ssh -T ...
  • 区块链开发笔记一:以太坊自动化环境部署 docker 环境正常 详细操作请参考 区块链开发笔记五:以太坊源码编译及环境搭建 区块链开发笔记一:以太坊自动化环境部署 以太坊搭建 创建acco...
  • 一般情况下,不论是mysql进程突然终止还是正常关闭,双主机部署可以在重启mysql后正常同步关机期间另一台主机上执行的写操作。但某些情况例外,比如Linux主机非正常关闭。例如A,B两台服务器主主同步,A服务器因掉电...
  • Pycharm部署 项目同步

    千次阅读 2019-12-31 23:37:54
    Pycharm部署 我们在使用编程的时候,经常需要将项目上传到服务器上测试,Pycharm给我们提供了一个非常方便的方式。以下是操作过程, 打开pycharm,最上面的目录栏找到Tools -> Deployment -> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,127
精华内容 8,450
关键字:

同部署