Jekyll2017-12-20T13:33:01+08:00http://blog.2the.top/2 The TopAn interesting blog siteEasyFunnyInstall Fastlane on macos 132017-12-02T00:00:00+08:002017-12-02T00:00:00+08:00http://blog.2the.top/2017/12/02/Install-Fastlane-on-macos-13<h1 id="macos-安装fastlane">macos 安装fastlane</h1>
<ol>
<li>切换源 https://ruby.taobao.org</li>
</ol>
<p>2.执行</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo gem install -n /usr/local/bin fastlane
xcode-select --install
fastlane --version
</code></pre></div></div>EasyFunnymacos 安装fastlaneDocker建立内部办公集成环境2017-11-27T00:00:00+08:002017-11-27T00:00:00+08:00http://blog.2the.top/2017/11/27/Setup-Soho-Envirment-With-Docker<h1 id="使用docker建立内部办公集成环境">使用Docker建立内部办公集成环境</h1>
<p><strong>2017-11-30</strong></p>
<blockquote>
<p>主要介绍使用Docker建立内部办公集成环境,基于CentOS 7系统,主要是用了Mysql作为数据库,ApacheDS作为单点登录,Redmine作为项目管理软件,Jenkins做CI,SonarQube做代码检查。
<strong>未来会增加GitLab、TestLink等。</strong></p>
</blockquote>
<h2 id="安装docker">安装Docker</h2>
<p>使用以下语句安装Docker</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo yum install docker
</code></pre></div></div>
<h2 id="下载docker镜像">下载Docker镜像</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo docker pull mysql:5.6
sudo docker pull openmicroscopy/apacheds
sudo docker pull sameersbn/redmine
sudo docker pull jenkins/jenkins
sudo docker pull sonarqube
sudo docker pull nextcloud
</code></pre></div></div>
<h2 id="定义并运行容器">定义并运行容器</h2>
<blockquote>
<p><strong>注意</strong>,–link 参数,表明不同容器间的调用关系。不写会导致无法通信。</p>
<p>-v 属性用来控制存储空间。</p>
<p>修改下面的邮箱地址、邮箱密码。</p>
</blockquote>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo docker run -d --name mysql.qmzb.local -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.6
sleep 10
sudo docker run -d --name apacheds.qmzb.local -p 10389:10389 openmicroscopy/apacheds
sleep 10
sudo docker run -d --name redmine.qmzb.local -p 8080:80 -e DOCKER_HOST=192.168.2.239 -e DB_HOST=mysql.qmzb.local -e DB_TYPE=mysql -e DB_NAME=redmine -e DB_USER=redmine -e DB_PASS=redmine -e TZ=Asia/Kolkata -e REDMINE_PORT=8080 -e SMTP_ENABLED=true -e SMTP_DOMAIN=www.126.com -e SMTP_HOST=smtp.126.com -e SMTP_PORT=25 -e SMTP_USER=邮箱地址 -e SMTP_PASS=邮箱密码 -e SMTP_STARTTLS=false -e SMTP_AUTHENTICATION=:login -e IMAP_ENABLED=false -e IMAP_USER=mailer@example.com -e IMAP_PASS=password -e IMAP_HOST=imap.gmail.com -e IMAP_PORT=993 -e IMAP_SSL=true -e IMAP_INTERVAL=30 --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local sameersbn/redmine
sudo docker run -d --name sonarqube.qmzb.local -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e DB_ADAPTER=mysql -e SONARQUBE_JDBC_URL="jdbc:mysql://mysql.qmzb.local:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" -v sonarqubedata:/opt/sonarqube/data --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local --link redmine.qmzb.local:redmine.qmzb.local sonarqube
sudo docker run -d --name nextcloud.qmzb.local -v nextcloud:/var/www/html -v nextcloudapps:/var/www/html/custom_apps -v nextcloudconfig:/var/www/html/config -v nextclouddata:/var/www/html/data -e MYSQL_DATABASE=nextcloud -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=nextcloud -e MYSQL_HOST=mysql.qmzb.local -p 8000:80 --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local nextcloud
sudo docker run -d -p 8100:80 --name testlink.qmzb.local -v testlink:/bitnami -e MARIADB_USER=root -e MARIADB_PASSWORD=123456 -e MARIADB_HOST=mysql.qmzb.local -e TESTLINK_USERNAME=admin123 -e TESTLINK_PASSWORD=123456 --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local --link redmine.qmzb.local:redmine.qmzb.local bitnami/testlink
sudo docker run -d --hostname gitlab.qmzb.local -p 80:80 --publish 8222:22 --name gitlab.qmzb.local --restart always --volume gitlabconfig:/etc/gitlab:Z --volume gitlablogs:/var/log/gitlab:Z --volume gitlabdata:/var/opt/gitlab:Z --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local --link redmine.qmzb.local:redmine.qmzb.local gitlab/gitlab-ce
sudo docker run -d --name jenkins.qmzb.local -p 8090:8080 -v jenkinsdata:/var/jenkins_home --link mysql.qmzb.local:mysql.qmzb.local --link apacheds.qmzb.local:apacheds.qmzb.local --link sonarqube.qmzb.local:sonarqube.qmzb.local --link gitlab.qmzb.local:gitlab.qmzb.local jenkins/jenkins
</code></pre></div></div>
<h2 id="执行数据库脚本">执行数据库脚本</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
CREATE DATABASE redmine CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'redmine' IDENTIFIED BY 'redmine';
GRANT ALL ON redmine.* TO 'redmine'@'%' IDENTIFIED BY 'redmine';
GRANT ALL ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'redmine';
FLUSH PRIVILEGES;
CREATE DATABASE nextcloud CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'nextcloud' IDENTIFIED BY 'nextcloud';
GRANT ALL ON nextcloud.* TO 'nextcloud'@'%' IDENTIFIED BY 'nextcloud';
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud';
FLUSH PRIVILEGES;
/* 不需要了
CREATE DATABASE testlink CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'testlink' IDENTIFIED BY 'testlink';
GRANT ALL ON testlink.* TO 'testlink'@'%' IDENTIFIED BY 'testlink';
GRANT ALL ON testlink.* TO 'testlink'@'localhost' IDENTIFIED BY 'testlink';
FLUSH PRIVILEGES;
*/
</code></pre></div></div>
<h2 id="停止容器">停止容器</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo docker stop jenkins.qmzb.local
sudo docker stop gitlab.qmzb.local
sudo docker stop testlink.qmzb.local
sudo docker stop redmine.qmzb.local
sudo docker stop sonarqube.qmzb.local
sudo docker stop nextcloud.qmzb.local
sudo docker stop mysql.qmzb.local
sudo docker stop apacheds.qmzb.local
</code></pre></div></div>
<h2 id="启动容器">启动容器</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo docker start mysql.qmzb.local
sudo docker start apacheds.qmzb.local
sleep 5
sudo docker start redmine.qmzb.local
sudo docker start sonarqube.qmzb.local
sudo docker start nextcloud.qmzb.local
sudo docker start testlink.qmzb.local
sleep 5
sudo docker start gitlab.qmzb.local
sleep 15
sudo docker start jenkins.qmzb.local
</code></pre></div></div>
<h2 id="数据存储位置用于定期备份">数据存储位置,用于定期备份</h2>
<p>有些已经起了别名,有些不可以用别名,为随机数。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/var/lib/docker/volumes/
</code></pre></div></div>
<h2 id="配置gitlab使用ldap认证">配置gitlab,使用ldap认证</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo docker exec -it gitlab.qmzb.local nano /etc/gitlab/gitlab.rb
</code></pre></div></div>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'ldap-team'
host: 'apacheds.qmzb.local'
port: 10389
uid: 'uid'
method: 'plain'
bind_dn: 'uid=admin,ou=system'
password: 'secret'
active_directory: true
allow_username_or_email_login: false
base: 'ou=employees,dc=geekdana,dc=com'
EOS
</code></pre></div></div>
<h2 id="已知问题">已知问题</h2>
<ol>
<li>偶尔apacheds启动后自动关闭,原因不明。重复启动多次后可正常,建议apacheds多次执行启动脚本。</li>
<li>容器间通信,使用别名访问,不能以ip方式访问。</li>
</ol>
<h2 id="下一步">下一步</h2>
<ol>
<li>安装Nexus等。</li>
<li>配置ApacheDS的用户。</li>
<li>将Jenkins、SonarQube、 Redmine、nextCloud、GitLab、TestLink都连接到ApacheDS上以实现单点登录。</li>
</ol>EasyFunny使用Docker建立内部办公集成环境 2017-11-30 主要介绍使用Docker建立内部办公集成环境,基于CentOS 7系统,主要是用了Mysql作为数据库,ApacheDS作为单点登录,Redmine作为项目管理软件,Jenkins做CI,SonarQube做代码检查。 未来会增加GitLab、TestLink等。Jenkins+Sonarqube 做java代码质量检查2017-11-27T00:00:00+08:002017-11-27T00:00:00+08:00http://blog.2the.top/2017/11/27/Setup-Jenkins-SonarQube<h1 id="step1-安装sonarqube-scanner-for-jenkins">Step1. 安装SonarQube Scanner for Jenkins</h1>
<ol>
<li>进入Jenkins->插件管理->可选插件</li>
<li>右侧Filter输入sonar</li>
<li>安装SonarQube Scanner for Jenkins</li>
<li>重启Jenkins</li>
</ol>
<h1 id="step2-配置sonarqube">Step2. 配置SonarQube</h1>
<ol>
<li>进入Jenkins->配置</li>
<li>滚动到 <strong>SonarQube servers</strong>,点击<strong>Add SonarQube</strong>按钮</li>
<li>添加一个Server,如下:
* Name输入Sonar
* Server URL输入SonarQube的访问地址,如<em>http://192.168.1.240:9000</em>
* Server version 为 <em>5.3 or higher</em>
* Server authentication token 填写 SonarQube中自动生成的token</li>
<li>点击保存</li>
</ol>
<h1 id="step3-新建一个jenkins任务">Step3. 新建一个Jenkins任务</h1>
<ol>
<li>进入Jenkins</li>
<li>点击“<strong>新建</strong>”按钮</li>
<li>Enter an item name 里输入项目名称,如 <strong>代码检查-后端代码</strong></li>
<li>选择<strong>构建一个自由风格的软件项目</strong></li>
<li>点击<strong>OK</strong>按钮</li>
<li><strong>源码管理</strong>章节选择<strong>Git</strong></li>
<li><strong>Repository URL</strong>输入git地址</li>
<li><strong>Credentials</strong>选择或者新建一个访问凭证</li>
<li><strong>构建触发器</strong>选择<strong>Poll SCM</strong>,<strong>日程表</strong>输入Cron表达式,如
<code class="highlighter-rouge">H/5 * * * *</code>
是每5分钟一次</li>
<li><strong>构建</strong>选择<strong>Execute SonarQube Scanner</strong></li>
<li><strong>Analysis properties</strong>输入以下脚本</li>
</ol>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>```
# must be unique in a given SonarQube instance
sonar.projectKey=qmzb-server-1
# this is the name displayed in the SonarQube UI
sonar.projectName= qmzb-server
sonar.projectVersion=1.0-${BUILD_NUMBER}
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.modules= java-module,xml-module
sonar.java.binaries= APIUtils/libs/
sonar.java.libraries= APIUtils/libs/
java-module.sonar.projectName=Java Module
java-module.sonar.language=java
java-module.sonar.sources=APIController/src/main/java/,APIEntity/src/main/java/,APIService/src/main/java/,APIServiceImpl/src/main/java/,APIUtils/src/main/java/
java-module.sonar.projectBaseDir=./
sonar.exclusions=**/com/alibaba/**
xml-module.sonar.projectName=Xml Module
xml-module.sonar.language=xml
xml-module.sonar.sources=APIServiceImpl/src/main/resources/mapper/
xml-module.sonar.projectBaseDir=./
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
```
</code></pre></div></div>
<ol>
<li>点击<strong>保存</strong>按钮</li>
</ol>
<h1 id="step4-立即构建任务">Step4. 立即构建任务</h1>
<h1 id="step5-在sonarqube中查看结果">Step5. 在SonarQube中查看结果</h1>EasyFunnyStep1. 安装SonarQube Scanner for Jenkins 进入Jenkins->插件管理->可选插件 右侧Filter输入sonar 安装SonarQube Scanner for Jenkins 重启Jenkins Step2. 配置SonarQube 进入Jenkins->配置 滚动到 SonarQube servers,点击Add SonarQube按钮 添加一个Server,如下: * Name输入Sonar * Server URL输入SonarQube的访问地址,如http://192.168.1.240:9000 * Server version 为 5.3 or higher * Server authentication token 填写 SonarQube中自动生成的token 点击保存Jenkins+Sonarqube 做Android代码质量检查2017-11-27T00:00:00+08:002017-11-27T00:00:00+08:00http://blog.2the.top/2017/11/27/Setup-Jenkins-SonarQube-Android<h1 id="step1-安装sonarqube-scanner-for-jenkins">Step1. 安装SonarQube Scanner for Jenkins</h1>
<ol>
<li>进入Jenkins->插件管理->可选插件</li>
<li>右侧Filter输入sonar</li>
<li>安装SonarQube Scanner for Jenkins</li>
<li>重启Jenkins</li>
</ol>
<h1 id="step2-配置sonarqube">Step2. 配置SonarQube</h1>
<ol>
<li>进入Jenkins->配置</li>
<li>滚动到 <strong>SonarQube servers</strong>,点击<strong>Add SonarQube</strong>按钮</li>
<li>添加一个Server,如下:
* Name输入Sonar
* Server URL输入SonarQube的访问地址,如<em>http://192.168.1.240:9000</em>
* Server version 为 <em>5.3 or higher</em>
* Server authentication token 填写 SonarQube中自动生成的token</li>
<li>点击保存</li>
</ol>
<h1 id="step3-新建一个jenkins任务">Step3. 新建一个Jenkins任务</h1>
<ol>
<li>进入Jenkins</li>
<li>点击“<strong>新建</strong>”按钮</li>
<li>Enter an item name 里输入项目名称,如 <strong>代码检查-安卓代码</strong></li>
<li>选择<strong>构建一个自由风格的软件项目</strong></li>
<li>点击<strong>OK</strong>按钮</li>
<li><strong>源码管理</strong>章节选择<strong>Git</strong></li>
<li><strong>Repository URL</strong>输入git地址</li>
<li><strong>Credentials</strong>选择或者新建一个访问凭证</li>
<li><strong>构建触发器</strong>选择<strong>Poll SCM</strong>,<strong>日程表</strong>输入Cron表达式,如
<code class="highlighter-rouge">H/5 * * * *</code>
是每5分钟一次</li>
<li><strong>构建</strong>选择<strong>Execute SonarQube Scanner</strong></li>
<li><strong>Analysis properties</strong>输入以下脚本</li>
</ol>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>```
sonar.projectKey=qmzb-android-1
sonar.projectName=qmzb-android
sonar.projectVersion=1.0-${BUILD_NUMBER}
sonar.sources=app/src/main/java
sonar.binaries=app/build/intermediates/classes/
sonar.java.binaries=app/build/intermediates/classes/
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.exclusions=app/src/main/java/com/gele/mryan/quanminzhibo/a_app/authpack.java
#sonar.profile= SonarAndroidLint
```
</code></pre></div></div>
<ol>
<li>点击<strong>保存</strong>按钮</li>
</ol>
<h1 id="step4-立即构建任务">Step4. 立即构建任务</h1>
<h1 id="step5-在sonarqube中查看结果">Step5. 在SonarQube中查看结果</h1>EasyFunnyStep1. 安装SonarQube Scanner for Jenkins 进入Jenkins->插件管理->可选插件 右侧Filter输入sonar 安装SonarQube Scanner for Jenkins 重启Jenkins Step2. 配置SonarQube 进入Jenkins->配置 滚动到 SonarQube servers,点击Add SonarQube按钮 添加一个Server,如下: * Name输入Sonar * Server URL输入SonarQube的访问地址,如http://192.168.1.240:9000 * Server version 为 5.3 or higher * Server authentication token 填写 SonarQube中自动生成的token 点击保存软件开发管理环境配置-中小团队2017-11-17T00:00:00+08:002017-11-17T00:00:00+08:00http://blog.2the.top/2017/11/17/setup-gitlab-server-and-redmine-for-small-team<h1 id="一概述">一.概述</h1>
<p>=======</p>
<ul>
<li>用户管理使用LDAP管理, 选用产品ApacheDS,安装在ServerLDAP</li>
<li>文档和代码管理使用Git, 选用产品GitLAB, 安装在MiniServer, 并和LDAP集成</li>
<li>项目管理和Bug管理使用Redmine, 安装在MiniServer,并和LDAP集成</li>
<li>项目中使用FTP管理大型文件</li>
</ul>
<h1 id="二具体安装配置">二.具体安装配置</h1>
<p>=============</p>
<h2 id="21-ldap配置">2.1 LDAP配置</h2>
<hr />
<ol>
<li>安装JRE</li>
</ol>
<p><code class="highlighter-rouge">sudo apt-get install -y openjdk-8-jdk</code></p>
<ol>
<li>
<p>下载 ApacheDS-2.0.0-M24, 并安装</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> wget http://mirrors.tuna.tsinghua.edu.cn/apache/directory/apacheds/dist/2.0.0-M24/apacheds-2.0.0-M24-amd64.deb
chmod +x apacheds-2.0.0-M24-amd64.deb
sudo dpkg -i apacheds-2.0.0-M24-amd64.deb
sudo service apacheds-2.0.0-M24-default restart
ldapsearch -h localhost -p 10389 -x -D "uid=admin,ou=system" -W
</code></pre></div> </div>
<ul>
<li>缺省端口:10389</li>
<li>管理员信息:uid=admin,ou=system, 密码:secret (ApacheDS缺省设置)</li>
<li>也可以另外添加一个管理员帐号: uid=useradmin,ou=system, 密码:xxxxxx (自己随意指定)</li>
</ul>
</li>
<li>
<p>下载 Apache Directory Studio,
<code class="highlighter-rouge">http://directory.apache.org/studio/downloads.html</code></p>
<ul>
<li>切换到Eclipse的LDAP视图,新建连接
<ul>
<li>hostname: MiniServer.IP</li>
<li>port:<strong>10389</strong></li>
<li>encryption method: <strong>nocryption</strong> (不同加密算法端口注意)</li>
<li>authentication method: simple</li>
<li>user:<strong>uid=admin,ou=system</strong> passwd:secret (默认的最高权限用户)</li>
<li><strong>OpenConfiguration</strong>启用<strong>Access Control</strong>,禁用<strong>匿名登录</strong></li>
<li>系统默认<strong>example</strong>分区,我们删除之,并新建,本次创建<strong>dc=hello.com</strong></li>
<li>修改<strong>uid=admin,ou=system</strong>的密码</li>
<li>重启apacheds服务生效</li>
</ul>
</li>
<li>添加用户:</li>
</ul>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> ou=employees,dc=hello,dc=com
uid=test1,ou=employees,dc=hello,dc=com
uid=test2,ou=employees,dc=hello,dc=com
</code></pre></div> </div>
<ul>
<li>添加用户的ldif文件:</li>
</ul>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> dn: uid=xxxx.li,ou=employees,dc=hello,dc=com
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
cn: 李XXXX
uid: xxxx.li
description: 李XXXX
sn: 李
givenname: XXXX
displayname: 李XXXX
mail: xxxx.li@hello.com
userpassword: 123123
</code></pre></div> </div>
</li>
</ol>
<h2 id="22-gitlab-配置">2.2 GitLAB 配置</h2>
<hr />
<ol>
<li>
<p>安装GitLab</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install git ldap-utils curl openssh-server ca-certificates postfix
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main' |sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install gitlab-ce
sudo service postfix start
sudo gitlab-ctl reconfigure
sudo gitlab-ctl status
</code></pre></div> </div>
</li>
<li>
<p>检查是否可以登陆</p>
<ul>
<li>运行环境: http://MiniServer.IP</li>
<li>记住Gitlab 超级管理员密码: root/password (默认密码)</li>
</ul>
</li>
<li>
<p>配置 /etc/gitlab/gitlab.rb, 使用 ldap accounts:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>```
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'ldap-team'
host: 'ServerLDAP'
port: 10389
uid: 'uid'
method: 'plain'
bind_dn: 'uid=admin,ou=system'
password: 'xxxxxx'
active_directory: true
allow_username_or_email_login: false
base: 'ou=employees,dc=hello,dc=com'
```
</code></pre></div> </div>
</li>
<li>
<p>配置 /etc/gitlab/gitlab.rb 使用 SMTP 发送通知 email</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtpserver.com.cn" #修改成所需SMTP环境
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "aaaaaa@hello.com"
gitlab_rails['smtp_password'] = "xxxxxxx"
gitlab_rails['smtp_domain'] = "hello.com"
gitlab_rails['smtp_authentication'] = "login"
</code></pre></div> </div>
</li>
</ol>
<h2 id="23-redmine-配置">2.3 Redmine 配置</h2>
<hr />
<blockquote>
<p>http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Ubuntu_step_by_step</p>
</blockquote>
<ol>
<li>
<p>安装 apache2 mysql</p>
<p><code class="highlighter-rouge">sudo apt-get install -y apache2 libapache2-mod-passenger mysql-server mysql-client</code>
修改root密码, 并创建redmine用户(mysql用户) –>The user is for redmine web application.</p>
</li>
<li>
<p>Deployment redmine to /opt/redmine3</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>记住redmine admin用户密码
</code></pre></div> </div>
</li>
<li>
<p>Install unicorn and nginx to power redmine (也可使用Passenger等其他Server)</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>运行环境: http://MiniServer:3000 , --> 具体配置请参见Unicorn和Nginx集成文档
</code></pre></div> </div>
</li>
<li>
<p>配置LDAP, 利用admin用户登录Redmine的页面,进行配置即可</p>
</li>
</ol>
<h2 id="24-ldap-account-manager配置">2.4 LDAP-Account-Manager配置</h2>
<hr />
<p>为了方便团队成员添加用户(例如新员工加入等), 使用ldap-account-manager管理ApacheDS的员工帐号</p>
<ol>
<li>安装ldap-account-manager,lam to manage LDAP accounts
<ul>
<li>install php</li>
<li>download lam tar.bz 包, 解压缩到/opt/lam</li>
</ul>
</li>
<li>在 nginx 添加一个Site,监听在 3300端口
<ul>
<li>直接在lam页面上添加一个LDAP Profile,在页面上配置即可</li>
</ul>
</li>
</ol>
<h2 id="25-self-ldap-change-password">2.5 Self LDAP Change Password</h2>
<hr />
<p>为了方便员工自己修改密码,部署LTB - Self Service Prassword</p>
<ol>
<li>
<p>选择LTB - Self Service Prassword, 部署到Nginx, 和LAM 使用同一个文件, /passwd Location</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> location /lam {
index index.html;
alias /opt/lam;
autoindex off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /lam/(tmp/internal|sess|config|lib|help|locale) {
deny all;
return 403;
}
}
location /passwd {
index index.php;
alias /opt/self_ldap_passwd;
autoindex off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
</code></pre></div> </div>
</li>
<li>
<p>编辑/opt/self_ldap_passwd/conf/confic.inc.php 中的 LDAP 连接信息</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ldap_url = "ldap://ServerLDAP:10389";
$ldap_binddn = "uid=useradmin,ou=system";
$ldap_bindpw = "xxxxxx";
$ldap_base = "dc=hello,dc=com";
$ldap_login_attribute = "uid";
</code></pre></div> </div>
</li>
</ol>
<h2 id="26-ftp配置">2.6 FTP配置</h2>
<hr />
<p>项目中的大文件签入Git会造成git速度下降, 所以大的二进制文件使用FTP管理</p>
<ol>
<li>下载FileZilla Server, 安装</li>
<li>
<p>配置FTP Server</p>
<p>可以下载FileZilla Server Inferface(GUI Tool)来配置FileZilla FTP Server
连接信息: 127.0.0.1 端口:14147, 密码:xxxxx (自己指定)</p>
<p>[<em>Troubleshooting</em>]</p>
<p>使用FileZilla Server 作为FTP服务器, 刚开始login和list非常慢,
我的尝试解决办法:</p>
<ol>
<li>首先使用服务器管理器的“windows高级安全防火墙”添加端口, 没有解决问题</li>
<li>使用控制面板中的windows防火墙吧“FileZilla Server”和“FileZilla Admin Server 都加进去, 然后全部启用,就好了, 记录一下, 以后备查。</li>
</ol>
</li>
</ol>
<p>ftp的根目录 d:\ftp_home</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> 权限配置为: 所有人匿名可读可上传, 可匿名上传到临时目录, 由文档管理人员整理到正式目录
临时目录:uploadings, -->供用户零时上传的目录,
正式目录:projects, dept_documents, tools, softwares
</code></pre></div></div>
<h2 id="27-其他">2.7 其他</h2>
<hr />
<p>其他可以配置, Code Review (To be done)</p>EasyFunny一.概述 ======= 用户管理使用LDAP管理, 选用产品ApacheDS,安装在ServerLDAP 文档和代码管理使用Git, 选用产品GitLAB, 安装在MiniServer, 并和LDAP集成 项目管理和Bug管理使用Redmine, 安装在MiniServer,并和LDAP集成 项目中使用FTP管理大型文件How To Install Subversion Server On Ubuntu2017-11-14T00:00:00+08:002017-11-14T00:00:00+08:00http://blog.2the.top/2017/11/14/how-to-install-subversion-server-on-ubuntu<hr />
<p>layout: post
title: 如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server
categories: [ubuntu, svn, Subversion Server]
description: 如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server
keywords: ubuntu, OpenLDAP, phpLDAPadmin
—</p>
<h1 id="如何在ubuntu-1604和1404-lts上安装subversion-server">如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server</h1>
<blockquote>
<p>如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server。</p>
</blockquote>
<h2 id="介绍">介绍</h2>
<p>Subversion是一个开源版本控制系统。它可以帮助您跟踪文件和文件夹的集合。任何时候更改,添加或删除您使用Subversion管理的文件或文件夹,都会将这些更改提交到Subversion存储库,这会在存储库中创建一个反映这些更改的新版本。你可以随时回去,看看并获得以前版本的内容。 本文将帮助您在Ubuntu 16.04和14.04 LTS系统上逐步设置Subversion(svn)服务器。</p>
<h2 id="步骤">步骤</h2>
<h3 id="1-安装apache">1. 安装Apache</h3>
<p>首先,您需要安装Apache Web服务器以使用http网址访问svn服务器。如果您的系统上已有Apache Web服务器,请跳过此步骤。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get update
sudo apt-get install apache2
</code></pre></div></div>
<h4 id="11-打开ssl">1.1 打开SSL</h4>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo a2enmod ssl
sudo nano /etc/apache2/ports.conf
sudo a2ensite default-ssl
sudo a2dissite 000-default
</code></pre></div></div>
<h3 id="2-安装subversion">2. 安装Subversion</h3>
<p>使用以下命令安装Subversion软件包和依赖关系。还在您的系统上安装Apache libapache2-mod-svn软件包的svn模块。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install subversion libapache2-mod-svn libapache2-svn libsvn-dev
sudo a2enmod dav
sudo a2enmod dav_svn
sudo service apache2 restart
</code></pre></div></div>
<h3 id="3创建第一个svn存储库">3.创建第一个SVN存储库</h3>
<p>使用下面的命令来创建一个名为<strong>myrepo</strong>你的第一个svn存储库。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo mkdir -p /home/mduser/svndata
sudo svnadmin create /home/mduser/svndata/myrepo
sudo chown -R www-data:www-data /home/mduser/svndata
sudo chmod -R 775 /home/mduser/svndata
</code></pre></div></div>
<h3 id="4为subversion创建用户">4.为Subversion创建用户</h3>
<p>现在,在创建文件<strong>/etc/apache2/dav_svn.passwd</strong>第一SVN用户。这些用户将使用svn存储库的认证进行检出,提交进程。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo htpasswd -cm /etc/apache2/dav_svn.passwd admin
</code></pre></div></div>
<p>要创建其他用户,请使用以下命令。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo htpasswd -m /etc/apache2/dav_svn.passwd user1
sudo htpasswd -m /etc/apache2/dav_svn.passwd user2
</code></pre></div></div>
<h3 id="5-配置apache-for-subversion">5. 配置Apache for Subversion</h3>
<p>Subversion的Apache模块包创建一个配置文件<strong>/etc/apache2/mods-enabled/dav_svn.conf</strong>。你只需要对其进行必要的更改。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Alias /svn /home/mduser/svndata
<Location /svn>
DAV svn
SVNParentPath /home/mduser/svndata
AuthType Basic
AuthName "My FUCKING Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
SSLRequireSSL
</Location>
</code></pre></div></div>
<h3 id="6-在浏览器中访问存储库">6. 在浏览器中访问存储库</h3>
<p>使用http网址在浏览器中访问您的存储库。它将提示进行身份验证。使用在步骤5中创建的登录凭据。使用系统主机名,域名或IP地址更改example.com。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>http://example.com/svn/myrepo/
</code></pre></div></div>EasyFunnylayout: post title: 如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server categories: [ubuntu, svn, Subversion Server] description: 如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server keywords: ubuntu, OpenLDAP, phpLDAPadmin — 如何在Ubuntu 16.04和14.04 LTS上安装Subversion Server如何在Ubuntu 16.04上安装和配置OpenLDAP和phpLDAPadmin2017-11-14T00:00:00+08:002017-11-14T00:00:00+08:00http://blog.2the.top/2017/11/14/how-to-install-and-configure-openldap-and-phpldapadmin-on-ubuntu-16-04<h1 id="如何在ubuntu-1604上安装和配置openldap和phpldapadmin">如何在Ubuntu 16.04上安装和配置OpenLDAP和phpLDAPadmin</h1>
<blockquote>
<p>在本指南中,我们将讨论如何在Ubuntu 16.04上安装和配置OpenLDAP服务器。然后,我们将安装phpLDAPadmin,一个用于查看和操作LDAP信息的Web界面。我们将使用免费和自动化证书提供商Let’s Encrypt来保护Web界面和LDAP服务的SSL证书。</p>
</blockquote>
<p>##介绍
轻量级目录访问协议(LDAP)是用于通过网络管理和访问分层目录信息的标准协议。 它可以用于存储任何类型的信息,尽管它通常用作集中式身份验证系统或公司电子邮件和电话目录。</p>
<p>在本指南中,我们将讨论如何在Ubuntu 16.04上安装和配置OpenLDAP服务器。 然后,我们将安装phpLDAPadmin,一个用于查看和操作LDAP信息的Web界面。 我们将使用免费和自动化证书提供商Let’s Encrypt来保护Web界面和LDAP服务的SSL证书。</p>
<p>##先决条件
在开始本教程之前,您应该使用Apache和PHP设置Ubuntu 16.04服务器。 您可以按照我们的教程如何在Ubuntu 16.04上安装Linux,Apache,MySQL,PHP(LAMP) ,跳过第2步,因为我们不需要MySQL数据库服务器。</p>
<p>另外,由于我们将在Web界面中输入密码,所以我们应该使用SSL加密保护Apache。 阅读如何保护Apache,让我们在Ubuntu 16.04上加密下载和配置免费的SSL证书。 您将需要一个域名来完成此步骤。 我们将使用这些相同的证书来提供安全的LDAP连接。</p>
<p><strong>注意</strong>:我们的加密教程假设您的服务器可以访问公共互联网。 如果不是这种情况,您将不得不使用不同的证书提供商或者组织自己的证书颁发机构。 无论哪种方式,您应该能够以最少的更改完成教程,主要是关于证书的路径或文件名。</p>
<p>###第1步 - 安装和配置LDAP服务器
我们的第一步是安装LDAP服务器和一些相关的实用程序。 幸运的是,我们需要的软件包都可以在Ubuntu的默认存储库中使用。</p>
<p>登录到您的服务器。 由于这是我们第一次在本次会议中使用apt-get ,所以我们将刷新本地软件包索引,然后安装我们想要的软件包:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get update
sudo apt-get install slapd ldap-utils
</code></pre></div></div>
<p>在安装过程中,将要求您选择并确认LDAP的管理员密码。 您可以在这里输入任何内容,因为您将有机会在短时间内进行更新。</p>
<p>即使我们刚刚安装了这个软件包,我们也要进行重新配置。 slapd软件包有能力提出很多重要的配置问题,但默认情况下,它们将在安装过程中跳过。 通过告诉我们的系统重新配置包,我们可以访问所有提示:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo dpkg-reconfigure slapd
</code></pre></div></div>
<p>在这个过程中有很多新的问题需要回答。 我们将接受大部分违约。 我们来回答一下问题:</p>
<ul>
<li>省略了OpenLDAP服务器配置? 没有</li>
<li>DNS域名?
<ul>
<li>此选项将确定目录路径的基本结构。 阅读消息以了解这将如何实现。 即使您不拥有实际的网域,您也可以选择所需的任何值。 但是,本教程假设您具有适当的服务器域名,因此您应该使用它。 我们将在整个教程中使用<strong>example.com</strong> 。</li>
</ul>
</li>
<li>机构名称?
<ul>
<li>对于本指南,我们将使用示例作为我们组织的名称。 你可以选择任何你觉得合适的东西。</li>
</ul>
</li>
<li>管理员密码? 输入两次安全密码</li>
<li>数据库后端? MDB</li>
<li>清除slapd时删除数据库? 没有</li>
<li>移动旧数据库? 是</li>
<li>允许LDAPv2协议? 没有</li>
</ul>
<p>此时,您的LDAP服务器已配置并运行。 打开防火墙上的LDAP端口,以便外部客户端可以连接:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo ufw allow ldap
</code></pre></div></div>
<p>我们来测试我们与ldapwhoami的LDAP连接,该连接应该返回我们连接的用户名:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ldapwhoami -H ldap:// -x
</code></pre></div></div>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Output
anonymous
</code></pre></div></div>
<p>anonymous是我们anonymous的结果,因为我们运行ldapwhoami而不登录到LDAP服务器。 这意味着服务器正在运行并应答查询。 接下来,我们将设置一个Web界面来管理LDAP数据。</p>
<h3 id="第2步---安装和配置phpldapadmin-web界面">第2步 - 安装和配置phpLDAPadmin Web界面</h3>
<p>尽管很可能通过命令行管理LDAP,但大多数用户会发现使用Web界面更为容易。 我们将安装phpLDAPadmin,这是一个提供此功能的PHP应用程序。</p>
<p>Ubuntu存储库包含一个phpLDAPadmin软件包。 您可以使用apt-get安装它:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install phpldapadmin
</code></pre></div></div>
<p>这将安装应用程序,启用必要的Apache配置,并重新加载Apache。</p>
<p>Web服务器现在配置为提供应用程序,但我们需要进行一些其他更改。 我们需要将phpLDAPadmin配置为使用我们的域,而不是自动填充LDAP登录信息。</p>
<p>首先在文本编辑器中打开具有root权限的主配置文件:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/phpldapadmin/config.php
</code></pre></div></div>
<p>寻找以<strong>$servers->setValue(‘server’,’name’</strong>开头的行,在<strong>nano</strong>您可以通过键入<strong>CTRL-W</strong> ,然后输入字符串然后<strong>ENTER</strong>来搜索字符串,您的光标将被放置在正确的线。</p>
<p>该行是您的LDAP服务器的显示名称,Web界面用于有关服务器的标题和消息。 在这里选择适当的选择:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$servers->setValue('server','name','Example LDAP');
</code></pre></div></div>
<p>接下来,向下移动到<strong>$servers->setValue(‘server’,’base’</strong>行,该配置告诉phpLDAPadmin LDAP层次结构的根目录,这是基于我们在重新配置slapd包时输入的值。我们的示例我们选择了example.com ,我们需要将每个域组件(不是一个点)放入dc= notation中将其转换为LDAP语法:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$servers->setValue('server','base', array('dc=example,dc=com'));
</code></pre></div></div>
<p>现在找到登录bind_id配置行,并bind_id开头注释#</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
</code></pre></div></div>
<p>此选项预先填充Web界面中的管理员登录详细信息。 这是我们不能共享的信息,如果我们的phpLDAPadmin页面是可公开访问的。</p>
<p>我们需要调整的最后一件事是控制一些phpLDAPadmin警告消息的可见性的设置。 默认情况下,应用程序将显示相当多的关于模板文件的警告消息。 这些对我们目前使用的软件没有影响。 我们可以通过搜索hide_template_warning参数来隐藏它们,取消注释包含它的行,并将其设置为<strong>true</strong> :</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$config->custom->appearance['hide_template_warning'] = true;
</code></pre></div></div>
<p>这是我们需要调整的最后一件事。 保存并关闭文件以完成。 我们不需要重新启动任何更改才能生效。</p>
<p>接下来我们将登录到phpLDAPadmin。</p>
<p>###第3步 - 登录到phpLDAPadmin Web界面
将必要的配置更改为phpLDAPadmin后,我们现在可以开始使用它了。 浏览您的网页浏览器中的应用程序。 请务必将您的域替换为以下突出显示的区域:</p>
<p><code class="highlighter-rouge">https://example.com/phpldapadmin</code></p>
<p>phpLDAPadmin着陆页将加载。 点击页面左侧菜单中的登录链接。 将提供登录表单:</p>
<p>phpLDAPadmin登录页面</p>
<p>登录DN是您将要使用的用户名。 它包含帐户名称作为cn=部分,您为服务器选择的域名分为dc=部分,如上述步骤所述。 我们在安装过程中设置的默认管理员帐户称为admin ,因此在我们的示例中,我们将键入以下内容:</p>
<p><code class="highlighter-rouge">cn=admin,dc=example,dc=com</code></p>
<p>为您的域输入适当的字符串后,键入您在配置期间创建的管理员密码,然后单击验证按钮。</p>
<p>您将被带到主界面:</p>
<p>phpLDAPadmin主页</p>
<p>此时,您将登录到phpLDAPadmin界面。 您可以添加用户,组织单位,组和关系。</p>
<p>LDAP如何构建数据和目录层次结构是灵活的。 您可以创建任何类型的结构,并创建如何交互的规则。</p>
<p>由于Ubuntu 16.04上的过程与以前的版本相同,因此您可以按照Ubuntu 12.04的LDAP安装文章的 “ 添加组织单位,组和用户”部分中的步骤进行操作。</p>
<p>这些步骤将在此安装phpLDAPadmin上运行良好,因此请遵循以下操作,以了解如何使用界面并学习如何构建数据。</p>
<p>现在我们已经登录并熟悉了Web界面,让我们花点时间为LDAP服务器提供更多的安全性。</p>
<h2 id="结论">结论</h2>
<p>在本教程中,我们安装并配置了OpenLDAP slapd服务器和LDAP Web界面phpLDAPadmin。</p>
<p>我们设置的系统非常灵活,您可以根据需要设计自己的组织架构并管理资源组。 有关管理LDAP的更多信息,包括更多的命令行工具和技术,请阅读我们的教程如何使用OpenLDAP实用程序管理和使用LDAP服务器。</p>EasyFunny如何在Ubuntu 16.04上安装和配置OpenLDAP和phpLDAPadmin使用阿里云的DDNS动态更新DNS记录2017-08-25T00:00:00+08:002017-08-25T00:00:00+08:00http://blog.2the.top/2017/08/25/aliyun-ddns-update-python<h1 id="使用阿里云的ddns动态更新dns记录">使用阿里云的DDNS动态更新DNS记录</h1>
<ol>
<li>
<p>注册阿里云账号,买一个域名</p>
</li>
<li>安装pip
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get update
<span class="nb">sudo </span>apt-get install python-pip
</code></pre></div> </div>
</li>
<li>安装aliyun-python-sdk-alidns:
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>pip install aliyun-python-sdk-alidns
</code></pre></div> </div>
</li>
<li>
<p>创建脚本
```python</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c">#!/usr/bin/python</span>
<span class="c"># -*- coding: UTF-8 -*-</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
<span class="kn">from</span> <span class="nn">aliyunsdkalidns.request.v20150109</span> <span class="kn">import</span> <span class="n">UpdateDomainRecordRequest</span><span class="p">,</span> <span class="n">DescribeDomainRecordsRequest</span><span class="p">,</span> <span class="n">DescribeDomainRecordInfoRequest</span>
<span class="kn">from</span> <span class="nn">aliyunsdkcore</span> <span class="kn">import</span> <span class="n">client</span>
<span class="c">#请填写你的Access Key ID</span>
<span class="n">access_key_id</span> <span class="o">=</span> <span class="s">""</span>
<span class="c">#请填写你的Access Key Secret</span>
<span class="n">access_Key_secret</span> <span class="o">=</span> <span class="s">""</span>
<span class="c">#请填写你的账号ID</span>
<span class="n">account_id</span> <span class="o">=</span> <span class="s">""</span>
<span class="c">#如果选择yes,则运行程序后仅现实域名信息,并不会更新记录,用于获取解析记录ID。</span>
<span class="c">#如果选择NO,则运行程序后不显示域名信息,仅更新记录</span>
<span class="n">i_dont_know_record_id</span> <span class="o">=</span> <span class="s">'yes'</span>
<span class="c">#请填写你的一级域名</span>
<span class="n">rc_domain</span> <span class="o">=</span> <span class="s">''</span>
<span class="c">#请填写你的解析记录</span>
<span class="n">rc_rr</span> <span class="o">=</span> <span class="s">''</span>
<span class="c">#请填写你的记录类型,DDNS请填写A,表示A记录</span>
<span class="n">rc_type</span> <span class="o">=</span> <span class="s">'A'</span>
<span class="c">#请填写解析记录ID</span>
<span class="n">rc_record_id</span> <span class="o">=</span> <span class="s">''</span>
<span class="c">#请填写解析有效生存时间TTL,单位:秒</span>
<span class="n">rc_ttl</span> <span class="o">=</span> <span class="s">'600'</span>
<span class="c">#请填写返还内容格式,json,xml</span>
<span class="n">rc_format</span> <span class="o">=</span> <span class="s">'json'</span>
<span class="k">def</span> <span class="nf">my_ip</span><span class="p">():</span>
<span class="n">get_ip_method</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">popen</span><span class="p">(</span><span class="s">'curl -s http://ip.3322.org'</span><span class="p">)</span>
<span class="n">get_ip_responses</span> <span class="o">=</span> <span class="n">get_ip_method</span><span class="o">.</span><span class="n">readlines</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">get_ip_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="nb">compile</span><span class="p">(</span><span class="s">r'\d+\.\d+\.\d+\.\d+'</span><span class="p">)</span>
<span class="n">get_ip_value</span> <span class="o">=</span> <span class="n">get_ip_pattern</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">get_ip_responses</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">get_ip_value</span>
<span class="k">def</span> <span class="nf">check_records</span><span class="p">(</span><span class="n">dns_domain</span><span class="p">):</span>
<span class="n">clt</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">AcsClient</span><span class="p">(</span><span class="n">access_key_id</span><span class="p">,</span> <span class="n">access_Key_secret</span><span class="p">,</span> <span class="s">'cn-hangzhou'</span><span class="p">)</span>
<span class="n">request</span> <span class="o">=</span> <span class="n">DescribeDomainRecordsRequest</span><span class="o">.</span><span class="n">DescribeDomainRecordsRequest</span><span class="p">()</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_DomainName</span><span class="p">(</span><span class="n">dns_domain</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_accept_format</span><span class="p">(</span><span class="n">rc_format</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">clt</span><span class="o">.</span><span class="n">do_action</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">old_ip</span><span class="p">():</span>
<span class="n">clt</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">AcsClient</span><span class="p">(</span><span class="n">access_key_id</span><span class="p">,</span> <span class="n">access_Key_secret</span><span class="p">,</span> <span class="s">'cn-hangzhou'</span><span class="p">)</span>
<span class="n">request</span> <span class="o">=</span> <span class="n">DescribeDomainRecordInfoRequest</span><span class="o">.</span><span class="n">DescribeDomainRecordInfoRequest</span><span class="p">()</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_RecordId</span><span class="p">(</span><span class="n">rc_record_id</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_accept_format</span><span class="p">(</span><span class="n">rc_format</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">clt</span><span class="o">.</span><span class="n">do_action</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONDecoder</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="c">#print result</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s">'Value'</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">update_dns</span><span class="p">(</span><span class="n">dns_rr</span><span class="p">,</span> <span class="n">dns_type</span><span class="p">,</span> <span class="n">dns_value</span><span class="p">,</span> <span class="n">dns_record_id</span><span class="p">,</span> <span class="n">dns_ttl</span><span class="p">,</span> <span class="n">dns_format</span><span class="p">):</span>
<span class="n">clt</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">AcsClient</span><span class="p">(</span><span class="n">access_key_id</span><span class="p">,</span> <span class="n">access_Key_secret</span><span class="p">,</span> <span class="s">'cn-hangzhou'</span><span class="p">)</span>
<span class="n">request</span> <span class="o">=</span> <span class="n">UpdateDomainRecordRequest</span><span class="o">.</span><span class="n">UpdateDomainRecordRequest</span><span class="p">()</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_RR</span><span class="p">(</span><span class="n">dns_rr</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_Type</span><span class="p">(</span><span class="n">dns_type</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_Value</span><span class="p">(</span><span class="n">dns_value</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_RecordId</span><span class="p">(</span><span class="n">dns_record_id</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_TTL</span><span class="p">(</span><span class="n">dns_ttl</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">set_accept_format</span><span class="p">(</span><span class="n">dns_format</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">clt</span><span class="o">.</span><span class="n">do_action</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">write_to_file</span><span class="p">():</span>
<span class="n">time_now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">'</span><span class="si">%</span><span class="s">Y-</span><span class="si">%</span><span class="s">m-</span><span class="si">%</span><span class="s">d </span><span class="si">%</span><span class="s">H:</span><span class="si">%</span><span class="s">M:</span><span class="si">%</span><span class="s">S'</span><span class="p">)</span>
<span class="n">current_script_path</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span>
<span class="k">print</span> <span class="n">current_script_path</span>
<span class="n">log_file</span> <span class="o">=</span> <span class="n">current_script_path</span> <span class="o">+</span> <span class="s">'/'</span> <span class="o">+</span> <span class="s">'aliyun_ddns_log.txt'</span>
<span class="n">write</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_file</span><span class="p">,</span> <span class="s">'a'</span><span class="p">)</span>
<span class="n">write</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">time_now</span> <span class="o">+</span> <span class="s">' '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">rc_value</span><span class="p">)</span> <span class="o">+</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span>
<span class="n">write</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">i_dont_know_record_id</span> <span class="o">==</span> <span class="s">'yes'</span><span class="p">:</span>
<span class="k">print</span> <span class="n">check_records</span><span class="p">(</span><span class="n">rc_domain</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">i_dont_know_record_id</span> <span class="o">==</span> <span class="s">'no'</span><span class="p">:</span>
<span class="n">rc_value</span> <span class="o">=</span> <span class="n">my_ip</span><span class="p">()</span>
<span class="n">rc_value_old</span> <span class="o">=</span> <span class="n">old_ip</span><span class="p">()</span>
<span class="k">print</span> <span class="p">(</span><span class="s">"old ip = "</span> <span class="o">+</span> <span class="n">rc_value_old</span> <span class="o">+</span> <span class="s">" new ip = "</span> <span class="o">+</span> <span class="n">rc_value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">rc_value_old</span> <span class="o">==</span> <span class="n">rc_value</span><span class="p">:</span>
<span class="k">print</span> <span class="s">'The specified value of parameter Value is the same as old'</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span> <span class="n">update_dns</span><span class="p">(</span><span class="n">rc_rr</span><span class="p">,</span> <span class="n">rc_type</span><span class="p">,</span> <span class="n">rc_value</span><span class="p">,</span> <span class="n">rc_record_id</span><span class="p">,</span> <span class="n">rc_ttl</span><span class="p">,</span> <span class="n">rc_format</span><span class="p">)</span>
<span class="c">#write_to_file()</span>
</code></pre></div> </div>
</li>
</ol>
<p>```</p>EasyFunny使用阿里云的DDNS动态更新DNS记录 注册阿里云账号,买一个域名吉他谱 活着 郝云2017-08-22T00:00:00+08:002017-08-22T00:00:00+08:00http://blog.2the.top/2017/08/22/guitar-haoyun-huozhe<h1 id="吉他谱-活着-郝云">吉他谱 活着 郝云</h1>
<p><img src="/images/blog/guitar/活着1.png" />
<img src="/images/blog/guitar/活着2.png" />
<img src="/images/blog/guitar/活着3.png" /></p>EasyFunny吉他谱 活着 郝云How did I create blog on github?2017-08-22T00:00:00+08:002017-08-22T00:00:00+08:00http://blog.2the.top/2017/08/22/How-Did-I-Create-Blog-On-Github<h1 id="how-did-i-create-blog-on-github">How did I create blog on github?</h1>
<ol>
<li>Step 1
<blockquote>
<p>https://pages.github.com</p>
</blockquote>
</li>
<li>Step 2
<blockquote>
<p>https://help.github.com/articles/adding-or-removing-a-custom-domain-for-your-github-pages-site/</p>
</blockquote>
</li>
<li>Step 3
<blockquote>
<p>https://help.github.com/articles/quick-start-setting-up-a-custom-domain/</p>
</blockquote>
</li>
<li>Step 4
<blockquote>
<p>https://help.github.com/articles/setting-up-a-custom-subdomain/</p>
</blockquote>
</li>
</ol>EasyFunnyHow did I create blog on github?