部署gerrit环境完整记录【转】
开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如下:
提前安装好java环境,mysql环境,nginx环境
测试系统:centos6.5
下载下面三个包,放到/root目录下(下载地址:http://pan.baidu.com/s/1nuP0X9R (提取密码gqj5))
mysql-connector-java-5.1.21.jar
bcpkix-jdk15on-1.52.jar
gerrit-2.11.3.war
--------------------------------------------gerrit历史版本下载地址-----------------------------------------------
http://gerrit-releases.storage.googleapis.com/index.html
---------------------------------------------------------------------------------------------------------------
1)创建gerrit数据库,并自定义编码为utf8
mysql>create database gerritdb CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>grant all on gerritdb.* to 'gerrituser'@'localhost' identified by 'gerritpass';
2)添加账号
[root@115 ~]#useradd gerrit
[root@115 ~]#su - gerrit
[gerrit@115 ~]$
在root账号下操作
[root@115 ~]# cp /root/gerrit-2.11.3.war /home/gerrit
下面一步很重要,就是说提前把下面的两个软件放到相应的位置,以防在gerrit安装过程中再去执行下载操作(因为安装过程中再去下载,由于网速问题会failed!)
[root@115 ~]#mkdir -p /home/gerrit/gerrit_site/lib
[root@115 ~]#cp /root/mysql-connector-java-5.1.21.jar /home/gerrit/gerrit_site/lib/
[root@115 ~]#cp /root/bcpkix-jdk15on-1.52.jar /home/gerrit/gerrit_site/lib/
[root@115 ~]#chown -R gerrit.gerrit /home/gerrit
接着在gerrit账号下进行安装
除了选用mysql数据库,Verified,http认证代理,其他的都是默认!
[gerrit@115 ~]$ java -jar gerrit-2.11.3.war init -d ~/gerrit_site
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
*** Gerrit Code Review 2.11.3
***
*** Git Repositories
***
Location of Git repositories [git]:
*** SQL Database
***
Database server type [h2]: mysql
Gerrit Code Review is not shipped with MySQL Connector/J 5.1.21
** This library is required for your configuration. **
Download and install it now [Y/n]?
Renaming
mysql-connector-java-5.1.10.jar to
.mysql-connector-java-5.1.10.jar.backupDownloading
http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar
... OK
Checksum mysql-connector-java-5.1.21.jar OK
Server hostname [localhost]:
Server port [(mysql default)]:
Database name [reviewdb]: gerritdb
Database username [gerrit]: gerrituser
gerrituser's password :
confirm password :
*** Index
***
Type [LUCENE/?]:
The index must be rebuilt before starting Gerrit:
java -jar gerrit.war reindex -d site_path
*** User Authentication
***
Authentication method [OPENID/?]: http
Get username from custom HTTP header [y/N]?
SSO logout URL :
*** Review Labels
***
Install Verified label [y/N]? y
*** Email Delivery
***
SMTP server hostname [localhost]:
SMTP server port [(default)]:
SMTP encryption [NONE/?]:
SMTP username :
*** Container Process
***
Run as [gerrit]:
Java runtime [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre]:
Copy gerrit-2.11.3.war to /home/gerrit/gerrit_site/bin/gerrit.war [Y/n]?
Copying gerrit-2.11.3.war to /home/gerrit/gerrit_site/bin/gerrit.war
*** SSH Daemon
***
Listen on address [*]:
Listen on port [29418]:
Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v151
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]?
Renaming
bcpkix-jdk15on-1.52.jar to .bcpkix-jdk15on-1.52.jar.backupDownloading
http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar ... !! FAIL
!!
error: http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar: 302 Found
Please download:
http://www.bouncycastle.org/download/bcpkix-jdk15on-151.jar
and save as:
/home/gerrit/gerrit_site/lib/bcpkix-jdk15on-151.jar
Press enter to continue
Continue without this library [Y/n]?
Generating SSH host key ... rsa(simple)... done
*** HTTP Daemon
***
Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address [*]:
Listen on port [8080]:
Canonical URL [http://Zabbix-server:8080/]:
*** Plugins
***
Installing plugins.
Install plugin download-commands version v2.11.3 [y/N]?
Install plugin reviewnotes version v2.11.3 [y/N]?
Install plugin singleusergroup version v2.11.3 [y/N]?
Install plugin replication version v2.11.3 [y/N]?
Install plugin commit-message-length-validator version v2.11.3 [y/N]?
Initializing plugins.
No plugins found with init steps.
Initialized /home/gerrit/gerrit_site
注意:
一键安装后,默认没有安装上任何插件的,如果用到插件,需要事后手动安装。
手动安装插件(比如replication同步插件)的方法请见于:[原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接(文章结尾有介绍)
*************************************************************************
第一次手动启动gerrit服务,可能会有下面连个报错
1)
[gerrit@115 ~]$/home/gerrit/gerrit_site/bin/gerrit.sh start
** ERROR: GERRIT_SITE not set
解决办法:
在/home/gerrit/gerrit_site/bin/gerrit.sh启动文件里添加下面一行,即指定gerrit2的路径
GERRIT_SITE=/home/gerrit/gerrit_site
2)
[gerrit@115 ~]$ /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting Gerrit Code Review: FAILED
查看日志,报错如下:
[gerrit@115 ~]$ tail -f /home/gerrit/gerrit_site/logs/error_log
[2016-07-14
10:52:07,317] INFO com.google.gerrit.server.cache.h2.H2CacheFactory :
Enabling disk cache /home/gerrit/gerrit_site/cache
[2016-07-14
10:52:08,110] INFO com.google.gerrit.server.config.ScheduleConfig : gc
schedule parameter "gc.interval" is not configured
[2016-07-14 10:52:08,859] INFO org.eclipse.jetty.util.log : Logging initialized @4743ms
[2016-07-14
10:52:09,278] INFO
com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting
core.streamFileThreshold to 2047m
[2016-07-14 10:52:09,320] INFO
com.google.gerrit.server.plugins.PluginLoader : Loading plugins from
/home/gerrit/gerrit_site/plugins
[2016-07-14 10:52:09,322] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemon
com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) No index versions ready; run Reindex
1 error
at com.google.gerrit.lucene.LuceneVersionManager.start(LuceneVersionManager.java:119)
at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74)
at com.google.gerrit.pgm.Daemon.start(Daemon.java:293)
at com.google.gerrit.pgm.Daemon.run(Daemon.java:205)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:166)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:93)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:50)
at Main.main(Main.java:25)
解决办法:运行reindex
[gerrit@115 ~]$ java -jar gerrit-2.11.3.war reindex -d /home/gerrit/gerrit_site
[2016-07-14
10:03:43,957] [main] WARN com.google.gerrit.pgm.util.ThreadLimiter :
Limiting program to 8 threads due to database.poolLimit
[2016-07-14
10:03:44,031] [main] INFO
com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting
core.streamFileThreshold to 2047m
[2016-07-14 10:03:44,492] [main]
INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk
cache /home/gerrit/gerrit_site/cache
Reindexing changes: done
Reindexed 0 changes in 0.0s (0.0/s)
再次启动gerrit就成功了
[gerrit@115 ~]$ /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting Gerrit Code Review: OK
**************************************************************************
修改/home/gerrit/gerrit_site/etc/gerrit.config配置文件
注意下面两个配置项,修改后如下:
[gerrit]
basePath = git
canonicalWebUrl = http://103.10.86.30/ //nginx的代理端口
.........
[httpd]
listenUrl = http://*:8080/
下面是nginx的认证代理配置记录
[root@115 vhosts]# pwd
/usr/local/nginx/conf/vhosts
[root@115 vhosts]# cat gerrit.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
auth_basic "Gerrit Code Review";
auth_basic_user_file /home/gerrit/gerrit_site/etc/passwords; //AuthUserFile路径
proxy_pass http://103.10.86.30:8080; //注意后面不能加"/",否则会出现“Code Review - Error The page you requested was not found....permission to view this page”的报错
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
但是nginx进程用户(这里是www)无权访问此路径,需要对/home/gerrit进行赋权:
[gerrit@115 ~]# setfacl -m g:www:rx /home/gerrit
这一步很重要!否则,访问gerrit的时候会报500的错!
[或者 setfacl -R -m u:www:rx /home/gerrit 上面是针对所属组进行授权,这里可以针对用户授权]
创建认证权限(也就是登陆的时候输入的权限)
注意:第一次加-c参数是为了创建密码文件,默认第一个用户是系统管理员
[root@115 vhosts]#htpasswd -c /home/gerrit/gerrit_site/etc/passwords gerrit
New password:
Re-type new password:
Adding password for user gerrit
[root@115 vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords wangshibo
New password:
Re-type new password:
Adding password for user wangshibo
[root@115 vhosts]#htpasswd /home/gerrit/gerrit_site/etc/passwords jenkins
New password:
Re-type new password:
Adding password for user jenkins
查看下认证账号文件信息
[root@115 vhosts]# cat /home/gerrit/gerrit_site/etc/passwords
重启nginx服务
[root@115 vhosts]# /usr/local/nginx/sbin/nginx -s reload
访问http://ip,输入上面创建的用户信息即可登陆gerrit
*************** *************** *************** *************** ***************
激活之后,在设置栏里就有邮箱可选择了
------------------------------------------------------------------------------------------------------------------------
注意:
用htpasswd创建第一个用户时默认是系统管理员,ID为1000000,默认只有这个系统管理员才有Create权限(创建group和Project),
其他的都只有“List”查看权限
用htpasswd创建的用户时,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中。
退出admin账号重新登陆(HTTP认证模式不支持Sign Out,需要先Sign Out退出账号,关闭浏览器后再登陆才能出现http验证密码的对话框
---------------------------------------------git中文编码问题------------------------------------------------------------
为妥善解决中文编码的问题,对所有git repository做如下约定:
a、所有文本文件都必须存储成utf8编码
b、对git做如下设置:
git config --global core.quotepath false
git config --global i18n.logoutputencoding utf8
git config --global i18n.commitencoding utf8
安装gerrit的时候对于数据库(选择myqsl方式的话)的编码设定为utf8
--------------------------------------------gerrit对接gitweb-----------------------------------------------------
上面搭建好的gerrit,登陆进去在Projects项目里的右边没有gitweb的超链接
1.需要先搭建gitweb,然后进行相关配置
[root@115 ~]# yum install -y gitweb 【或者直接yum install -y git*】
gitweb安装后的目录路径是/var/www/git
********************** ********************** ********************
gitweb还是蛮实用的。
可以通过打开gerrit上某个工程的gitweb,查看到这个工程代码近期的所有动向!
【默认情况下:只有gerrit的管理员权限才能查看gitweb】
【普通用户要想访问gitweb,需要后续添加访问权限,具体参照http://www.cnblogs.com/kevingrace/p/5651447.html文章底部的介绍】
如下:
--------------------------------------------------ssh公钥设置-------------------------------------------
[gerrit@115]$ cat id_rsa.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEAqvdgToL4veIqVe4D2iOwpzggdnGU8eGfRpwZH5hsCPdrIfjMgAMYz4TCKzmD9yv8VXrG/hCOX1zgL63ZLJ1NUTTG4zJ48UefRA0i3YqDez0RH5fhI/T69KalBNfPaRcaCqcdTfJcSW5FxZ4CMsHj7uyKrGry6sA3VkYhy08WA4CVcXHPI4R+va+Ga0KvTVKxBqpEiR+1r8+hECTyWo1XngqRVQpfJismQwUXe2J9U41T+DaQfJDaB+hdYPm2Xoeu7LlsyPFrUn/Jq3vy4YeU1XVD4BIMGXxg87MUdmZh0CzbeUSc1TgKYccUccTgnVDfgwgvwY/gJYbb7csCrlW5+w==
gerrit@xqshijie.cn
[gerrit@115]$vim /home/gerrit/.bashrc
[gerrit@115]$source /home/gerrit/.bashrc
[gerrit@115]$cat /home/gerrit/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
alias ssh-gerrit='ssh -p 29418 -i ~/.ssh/id_rsa 103.10.86.30 -l gerrit'
# User specific aliases and functions
[gerrit@115]$ssh-gerrit
**** Welcome to Gerrit Code Review ****
Hi gerrit管理员, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://gerrit@Zabbix-server:29418/REPOSITORY_NAME.git
Connection to 103.10.86.30 closed.
上面介绍了gerrit环境的部署,下面介绍下gerrit权限:
Abandon
此权限允许用户丢弃一个提交的change。如果用户有push权限,给用户分配此权限的同时用户也被分配了restore a change的权限。
Create Reference
此权限管理用户是有可以创建references,branches,tags。此权限一般与普通的push权限一起被分配。
Forge Author
伪造发起人权限,此权限允许用户绕过提交时的身份验证(Gerrit默认会匹配提交信息中author或者committer行中的email地址,如果 Email地址不匹配,则不允许提交)。
Forge Committer
伪造提交者权限,此权限允许用户绕过提交时的身份验证(Gerrit默认会匹配提交信息中author或者committer行中的email地址,如果 Email地址不匹配,则不允许提交 )。
Forge Server
伪造Gerrit服务器权限,此权限允许在committer行中使用server owner和email
Owner
此权限允许用户修改香项目的配置,具体如下:
修改项目描述
通过ssh的"create-branch"命令创建分支
在web UI界面创建/删除branch
允许/撤销任何访问权限,包括Owner权限。
Push
此分类控制用户被允许怎样推送新commit到Gerrit。
Direct Push
所有已存在的branch可以快进到新的commit。创建新分支受“Create Reference”控制,不允许删除已存在的分支,这是最安全的模式(因为commit不可以被丢弃)。
Force option
允许已存在的branch被删除。开启此选项可以从项目历史中删除提交记录。
此权限主要用来给那些只想用Gerrit的访问控制,不需要Gerrit的代码审查功能的工程使用。
Upload To Code Review
此push权限分配在refs/for/refs/heads/BRANCH命名空间上,允许用户提交一个未合并(non-merge)的commit到refs/for/BRANCH命名空间,创建一个新的代码审查change。
用户必须能够clone和fetch一个工程才可以提交change,所以用户还必须拥有Read权限。
Push Merge Commits
此权限允许用户提交merge commits,它是Push权限的附属物,如果想只允许通过Gerrit做merge操作,那么应该只分配Push仅限而不分配此权限。
Push Annotated Tag
此类权限允许用户向工程仓库提交一个annotated tag。通常使用以下两种方式提交:
git push ssh://USER@HOST:PORT/PROJECT tag v1.0
或者:
git push https://HOST/PROJECT tag v1.0
Tags必须被注释(使用git tag -a),必须在refs/tags/下存在,而且必须是新的。
一般在工程达到了稳定且可发布的时候会打一个Tag。
此权限允许创建一个未签名的Tag。打Tag者的email地址必须与当前用户的一致。
如果要提交不是自己打的Tag,则必须同时分配Forge Committer Identity权限。
如果要提交轻标签(lightweight tags)分配Create Reference权限给引用/refs/tags/*
如果要删除或覆盖一个已存在的tag,分配Push权限并开启Force option。
Push Signed Tag
此类权限允许用户向工程仓库提交一个PGP签名的 tag。通常使用以下两种方式提交:
git push ssh://USER@HOST:PORT/PROJECT tag v1.0
或者:
git push https://HOST/PROJECT tag v1.0
Tags必须被注释(使用git tag -a),必须在refs/tags/下存在,而且必须是新的。
Read
此类权限控制工程的changes, comments,和code diffs可见性,和是否可通过SSH或HTTP访问Git。
如果在单独工程的ACL中设置的此权限,那么全局ACL中的设置将不起作用。
Rebase
此类仅限允许用户通过web页面的“Rebase Change”按钮衍合(Rebase)修改
Remove Reviewer
此类权限允许用户在一个change的reviewers list中移除其他用户。
change所属者可以移除0分或负分的reviewers(即使没有此权限)。
项目所有者和网站管理员可以移除所有reviewers(即使没有此权限)。
没有此权限的用户只可以移除自己。
Review Labels
// TODO
Submit
此类权限允许用户提交changes。
提交一个change会使该change尽可能快的合并到目的分支,使其作为项目历史永久的一部分。
为了提交change,所有的labels都必须允许提交,并且不能block它。
如果要快速提交一个push上的change,用户需要在refs/for/<ref>(e.g. on refs/for/refs/heads/master)有此权限。
Submit(On Behalf Of)
此类权限允许有Submit权限的用户代表其他用户提交change。
在project.config文件中,此权限被命名为submitAs。
View Drafts
此类权限允许用户查看其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)
Publish Drafts
此类权限允许用户发布其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)
Delete Drafts
此类权限允许用户删除其他用户提交的drafts changes
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)
Edit Topic Name
允许用户编辑提交到review的change的话题名。
change所用者,分支所用者,项目所用者和网站管理员都可以编辑此话题名(即使没有此权限)。
“Force Edit”标识控制是否可以编辑已关闭的change标题,如果此标识设置只能编辑open changes,则不可以编辑已关闭的change 标题。
Edit Hashtags
允许用户在提交到reviews的changes上添加或移除hashtags。
change所用者和任何明确添加的reviewers也可以查看(即使没用此权限)
转自
[原创]CI持续集成系统环境---部署gerrit环境完整记录 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/5624122.html
部署gerrit环境完整记录【转】的更多相关文章
- [原创]CI持续集成系统环境---部署gerrit环境完整记录
开发同事提议在线上部署一套gerrit代码审核环境,不用多说,下面就是自己部署gerrit的操作记录. 提前安装好java环境,mysql环境,nginx环境 测试系统:centos6.5 下载下面三 ...
- [原创]CI持续集成系统环境---部署Gitlab环境完整记录
Gitlab是一个代码托管平台,在实际工作中,对代码管理十分有用. 废话不多说,下面是对我自己搭建的Gitlab环境做一记录: (1)安装 ------------------------------ ...
- Linux(宝塔)部署.Net Core完整记录
前言 最近在V站上看到一个外卖推广的小程序,意思大概是类似淘宝联盟那种,别人走自己的链接后,自己可以抽取大概4%-6%的提成.觉得还蛮有意思的,一开始开源的是静态页面写死的,所以我这边用.Net Co ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- ELK实时日志分析平台环境部署--完整记录(转)
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...
- Centos7.2下OpenVPN 环境完整部署记录
关于OpenVPN的有关介绍及为何使用OpenVPN在此就不做赘述了,下面直接记录Centos7.2系统下部署OpenVPN环境的操作过程: 1) 先将本机的yum换成阿里云的yum源 [root@t ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)
继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)kvm虚拟化管理平台WebVirtMgr部署-完 ...
随机推荐
- static关键字的作用(修饰类、方法、变量、静态块)
1. static修饰的类只能为内部类,普通类无法用static关键字修饰.static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() ).如下所示: public c ...
- 解决spring boot1.5以上版本@ConfigurationProperties提示“Spring Boot Configuration Annotation Processor not.."
Springboot1.5以上版本,在使用 @ConfigurationProperties注解的时候会提示“Spring Boot Configuration Annotation Processo ...
- 文件系统属性chattr权限
命令格式 chattr [+-=] [选项] 文件名或目录名 + 增加权限 - 删除权限 = 等于某权限 i 如果对文件赋予i权限,那么不允许对文件进行删除.改名,也不能添加.修改数据:如果对目录添加 ...
- WSDL知识点
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言. WSDL简介 1.什么是 WSDL? WSDL 指网络服务描述语言 WSDL 使用 X ...
- Redis一主二从Sentinel监控配置
本文基于Redis单实例安装安装.https://gper.club/articles/7e7e7f7ff7g5egc4g6b 开启哨兵模式,至少需要3个Sentinel实例(奇数个,否则无法选举Le ...
- 使用 create-react-app 快速构建 React 开发环境
在终端执行以下命令创建项目: 1.指定创建的项目位置(这里以桌面为例) cd Desktop 2.创建 React 项目 npx create-react-app my-app 3.进入项目并启动 c ...
- dns-prefetch应用好,网上速度能提高一半!
今天一个朋友给我说在网页上添加dns-prefetch,网页访问速度能提高,于是我百度查询关于dns-prefetch. DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端 ...
- C# 7.0 中的新特性((.NET Framework 4.7 与 Visual Studio 2017 ))
C#7.0 于 2017年3月 随 .NET 4.7 和 VS2017 发布. 一. out 变量(out variables) 以前我们使用out变量必须在使用前进行声明,C# 7.0 给我们提供了 ...
- Centos6 克隆后简单的网络配置
第一步:修改主机名 $ vi /etc/sysconfig/network 第二步: $ vi /etc/udev/rules.d/70-persistent-net.rules 注: ...
- mini_frame(web框架)
文件目录: dynamic中:框架 static:css,jss静态文件 teplates:模板 web_server.conf: 配置文件 web_server.py: 主程序 run.sh:运行脚 ...