从0开始的服务器配置 — Debian 9 — apache2+php+mysql+phpmyadmin+smtp(s)+imap(s)

写在前面 鉴于服务器要续费而且服务器内部实在是太乱了…所以有必要重做一次服务器,但是每一次搞服务器都是大坑,所以写一篇博文记录这次的服务器维护过程,给自己提示,也希望能够给初学者(虽然自己也是)予以帮助,因而,如果文章有不准确的地方或着错误的地方,欢迎评论或者邮箱纠正

0x00 基础搭建

对于一台服务器而言,首先你需要选择一个合适的服务器系统,虽然说市面上大多使用Centosyum类包管理器的系统,但是对于博主而言,因为平日电脑上使用的就是使用apt包管理器的deepin,而deepin的祖上就是debian,因而为了维护的方便和日常使用习惯而言,选择Debian 9 x64
Tips: 如果可以的话,建议在Debian的所有中优先使用Debian 9因为Debian 9的软件包维护较为广泛与新,可以避免一些服务必须要编译或者添加软件源的问题
选择完服务器系统后,就要开始基础维护了
注意,从此处开始,下文所有部分都是基于Debian 9而写的,如果你在使用Ubuntu系统或其他apt系的系统,请在确保不会产生软件包冲突的情况下,酌情参考,如果你是非apt系的系统,可以将本文命令替换成自己系统上相同或者相同作用的语句
首先,完成现有包更新
apt-get update
apt-get full-upgrade

1×00 Web 服务器搭建

一般 Web 服务器就是Apache2,NginxLighttpd,博主这里选择的是Apache2

1×01 安装Apache2

apt-get install apache2
apt包管理器用起来真舒服 如果你是的服务器正常的话,运行下面的命令应该会与我的返回值类似
< apache2 -v
> Server version: Apache/2.4.25 (Debian)
Server built:   2018-03-31T08:47:16

1×02 开启 Apache2 所需服务

a2enmod rewrite
a2enmod ssl
a2enmod headers
a2enmod http2
开启重定义链接与 ssl 选项,并且开启headerhttp/2使用

1×10 SSL 加密证书申请


为了方便和省钱起见,我们使用certbot 然后为了简介和逼格,我们申请通配符证书
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto certonly -d *.你的域名 --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
中间有输出这么一端话:
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.xxx.xx with the following value:
<TXT记录内容>
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
意思就是让你给_acme-challenge.你的域名加个txt解析,记录内容是中间的<TXT记录内容>,用dig命令确认完记录后回车即可

1×20 Apache2 配置


默认 Apache2 配置文件: /etc/apache2/apache2.conf
站点配置文件: /etc/apache2/sites-enabled/*.conf

1×21 目录配置

AllowOverride None更改为AllowOverride All

1×22 站点配置

养成一个好习惯,把站点配置文件按照/etc/apache2/sites-enabled/<优先级>-<域名>.conf eg:001-blog.woshiluo.site.conf 不然你的后期维护将会非常的麻烦~~血的教训 标准配置文件如下
<VirtualHost *:80>
# http 配置
    ServerAdmin <你的邮箱>
    ServerName <域名>
    DocumentRoot <域名目录>
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost *:443>
# https 配置
        # 开启 http2
        Protocols h2 http/1.1
        ServerAdmin <你的邮箱>
        ServerName <域名>
        DocumentRoot <域名目录>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile     /etc/letsencrypt/live/<申请证书域名>/fullchain.pem
        SSLCertificateKeyFile      /etc/letsencrypt/live/<申请证书域名>/privkey.pem
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
    </VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
其中 <你的邮箱>表示你的名字当前域名的Admin邮箱,当然这个就写你自己的邮箱啦 <域名> 表示正在配置的域名 <域名目录> 表示当前域名指向的目录,如/var/www/html <申请证书域名> 表示你在上文申请证书时所用的域名,注意通配符证书的域名不带*.比如你申请的为*.woshiluo.sie,那么此处填写woshiluo.site

1×24 SSL 加强[选做]

经过这一步,你的服务器在 SSL Lab 的评测会得到 A+
本部分部分源自:https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
在你的配置加上这些语句:
# 去除弱加密部分
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options nosniff
# 修复了一堆漏洞
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLSessionTickets Off
至此,你的Apache2基础配置完毕

1×30 服务器运行环境配置


Upd: 2019.03.04
目前看来, 使用官方的 apt 源是一个更加优秀的选择
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
dpkg -i mysql-apt-config_0.8.12-1_all.deb
或者去官网下载
然后执行
apt-get update
apt-get install mysql-community-server php phpmyadmin
注意,使用弱加密模式才可使用phpmyadmin
以下是更新前内容


apt-get install php mysql-server phpmyadmin
一个命令解决一切问题(划 然而实际上这样子会出一点问题,使用这个命令安装很有可能会出现一个问题,那就是mysql root用户密码为空… 按照下面的操作一般就可以修复了:
mysql -uroot
update mysql.user set authentication_string=PASSWORD('<你的密码>'),
flush privileges;
quit;
service mysql restart

1×31 关于http2的细小配置


Apache 2.4.27, HTTP/2 在prefork模式下将不受支持 所以防患于未然,我们来一波配置:
apachectl stop
apt-get install php-fpm
a2enmod proxy_fcgi setenvif
a2enconf php7.0-fpm
a2dismod php7.0
a2dismod mpm_prefork
a2enmod mpm_event
apachectl start

1×40 邮箱服务搭建


我们使用postfixdovecot相结合来搭建邮箱服务,当然不可能只有安装这么简单,我们还需要配置
apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules dovecot-imapd dovecot-pop3d dovecot-common
又一次证明apt管理的方便

1×41 配置postfix与dovecot

首先我们需要停止服务:
service postfix stop
service dovecot stop
修改postfix基础配置文件:/etc/postfix/main.cf 在文件末尾加入下面的语句:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = <你的域名>
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
message_size_limit = 10240000
其中 <你的域名>表示你要进行邮箱配置的域名 修改dovecot配置文件:/etc/dovecot/dovecot.conf 在开头添加:
protocols = pop3 imap
mail_location = mbox:~/mail:INBOX=/var/mail/%u
disable_plaintext_auth = no
auth default {
    mechanisms = plain login
    socket listen {
        client {
            path = /var/spool/postfix/private/auth
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
修改sasl配置文件:`/etc/default/saslauthd中的
START=no
START=yes
修改
OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
当然,咱把目录改了…文件也得改啊:
rm -r /var/run/saslauthd/
mkdir -p /var/spool/postfix/var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run
chgrp sasl /var/spool/postfix/var/run/saslauthd
adduser postfix sasl
启动这几个服务以及处理一些权限:
service postfix start
service dovecot start
usermod -G root postfix
chmod -R 777 /var/mail
然后根据想要的用户前缀建个用户
adduser  <你的用户名字>
然后根据需求加密码什么的就行了

1×42 启用 imaps / pop3s / smtps[选做]

Postfix基础配置中写入下列语句:
smtpd_tls_key_file = <你的加密证书>
smtpd_tls_cert_file = <你的CA证书>
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
<你的CA证书> <你的加密证书>参考上文apache2配置 在Postfix端口配置中写入下列语句:/etc/postfix/master.cf
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
在 Dovecot 的 ssl 配置中写入下列语句:
ssl = yes
ssl_cert = <<你的CA证书>
ssl_key = <<你的加密证书>
<你的CA证书> <你的加密证书>参考上文apache2配置 重启服务:
service dovecot restart
service postfix restart
以上,你的邮箱服务其就配置完成了

开启BBR优化

BBR是谷歌最新的TCP拥塞算法,效果较为优秀,我们当然要添加一波 虽然有要求版本4.9以上,但是我们 Debian 9默认刚好4.9,擦边球wq 那么执行下面的命令即可:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.tcp_available_congestion_control

2×00 致谢与版权声明


在撰写本博文的时候,博主参考并整理许多博文,以下是主要部分,还有许多杂七杂八的小问题来自网上或来自自己的经验,并于此表示感谢: 除此之外,其他基本上没有引用 当然,如果有任何问题,希望你能提出并发于评论]]>

论如何愉快的建一个网站

本文章所提的任何服务未标注的博主都自己用过

0x00


博主表示建站有些日子了,所以呢,今天就水一篇这样的博文,第一也能帮助刚学建站的同学们,避免像我一样踩一堆坑,第二也算是留个记录

0x01


你需要做的第一件事就是决定买域名和服务器商。

域名


域名买的地方有许多种,如果不想自己的太多信息交个域名服务商的话,选择国外的还是很重要的,如NameSilo就是个不错的选择,当然如果你不在意这些,也不会在网站内扯及敏/感话题的话,国内是最好的选择,毕竟自己能看得懂,国内的话价格相对便宜的我所见到就是西部数码了。 P.S:域名的NS服务商我比较建议Cloudxns. 买域名需要注意到你是否需要备案,在网上查清所买域名后缀是否可以备案。 但我要说的是,如果你不是营销类或公司网站,我建议你还是不要备案了,备案的话会麻烦的多。

服务器


服务器我选的时候有两大标准
1、有ssl支持 2、有钱就使用付费
话虽如此,但这两项你只需要注意第二项,免费的东西虽然不要钱,但你也需需要更大的精力去另辟蹊径免费服务的限制,即使限制较少,但免费的服务的不稳定性是可以肯定的。至于ssl不加目前问题也不大,但ssl确实开始变得流行起来,并且https可以在浏览器上有个小绿锁,而且当你被黑的时候(虽然概率太小了),那就追悔莫及了。 那么接下来会有以下几种可能
静态页面

如果你使用的是静态网站,我建议你忽略第二条要求,因为静态网站付费真的没必要。 我只建议你使用Github P.S:如果你想愉快使用更改Host或者使用PureDNS P.SS:Coding之所以不希望你使用因为实在太贵了 P.SSS:Coding在今年愚人节钱还好着的 P.SSSS:为什么是愚人节 P.SSSSS:为啥这么多S Github我建议配上Cloudflare来添加https P.S:这是我首页的配置,你可以试试看速度 P.SS:用这个网站ssl安全测试还可以A+ P.S:如果你想通过静态页面创建一个博客,我建议使用Hexo,我这有一篇教程你可以看看。点我点我
动态页面

用动态页面一般都是PHP+MySQL,如果你还在用微软的ASP.NET的话我没办法推荐,因为我也没用过。
大陆服务(香港,澳门)

国内服务我建议你去百毒搜搜他的情况,结合搜到的情况,决定你是否使用,当然如果这个是免费的,那这一步没啥关系,毕竟不要钱嘛#滑稽。 我说一下哈,如果你是一个纯粹的新手,则彩虹云主机是个不错的选择,当然,你得有备案
大陆外服务

如果你域名有备案的话,还请你使用大陆服务。 国外服务器主要是未备案的域名,我比较建议你使用香港服务器,速度还说的过去,那我再安利两个 IT派对云这个网站不单有香港服务,还有国内的,这是我博客的服务器 古尔数据这个服务也有国内的,申请免费的需要已经建个站,这个是我统计服务的服务器。

1×0


接下来是选择程序,如果你是使用静态页面,博客直接Hexo,如果是自己写的静态页面,那么你可以过了,会自己写一个静态页面的人,大多善于折腾,那么你看到这可以退出这篇文章了,自己整会的好处很大。 如果是动态页面,看个人喜好,喜好简洁的话typecho就很不错,如果你喜好折腾则WordPress就不错,因为你可以在网上搜到很多有关Wordpress的,Emlog没用过,不给予评价。 如果你是做内容聚合类的网站,Wordpress也是不错的。

1×1


在此我特别说明一下域名解析,一般而言服服提供商都标的很清楚,但你一定要知道CNAME与A的区别

1×2


ssl证书,这点的话,不要钱的比较少,腾讯云西部数码可以免费申请到,而CloudFlare则自动添加。

End


要说的就只有这么多,如果你有什么想补充的或者想说想问的,评论一下呗! ]]>

必应壁纸获取对应故事(一)

0x-1


大家好我是半夜打博文的SB博主,话说新疆真没有春天啊,4月低还在10~0度徘徊呢,五月初就上20度了。你们的懒癌晚期博主只能在家里没事找事。

0x00


一个无聊的下午,博主放学回家更同学浪了一会回家后还没到6点,不想看书不想码字,然后就搜搜看看小马宝莉是不是出了新一季(什么鬼),结果没有,又去Bilibili(什么鬼x2)……实在不想干啥然后看起了必应壁纸,突然发现必应壁纸的故事也挺好的,转念一想,干脆写个网页吧 #1

0x01


跟写壁纸借口一样,先找到官方接口,然而,完全没有,最后在http://cn.bing.com/cnhp/lifecurrentDate=20170505&IID=SERP.5045&IG=B06DB1B2350E43BBA4EE1C3EE38C6C1E #2找到了网页,这……不管了先简化网址, http://cn.bing.com/cnhp/life?currentDate=[date][date]=你所要查询的日期。 #3

0x02


光有网页咋找呢,js什么的我一点都不知道,于是我在找到了正则式匹配,代码就成了这样
//获取题目
        preg_match('$(?<=\<div\sclass=\"hplatt\"\>)(.*?)(?=\<\/div\>)$',$text,$title);
        //存入 $bing 二维数组
        $bing['title']=$title[0];
        //获取地点
        preg_match('$(?<=\<span\sclass=\"hplaAttr\"\>)(.*?)(?=\<\/span\>)$',$text,$add);
        $bing['add']=$add[0];
        //获取主标题
        preg_match('$(?<=\<div\sclass=\"hplats\"\>)(.*?)(?=\<\/div\>)$',$text,$titles);
        $bing['titles']=$titles[0];
        //获取副标题
        preg_match('$(?<=\<div\sclass=\"hplaTtl\"\>)(.*?)(?=\<\/div\>)$',$text,$hpla);
        //获取详细介绍
        $bing['hpla']=$hpla[0];
        preg_match('$(?<=\<div\sid=\"hplaSnippet\"\>)(.*?)(?=\<\/div\>)$',$text,$more);
        $bing['more']=$more[0];
既然已经获取到了,直接输去就行,不过博主可不是那么容易了事的人,自然还要再折腾,后面会咋折腾,就请看下一篇吧。 ]]>

Kartos主题为首页特色图片添加LightGallery特效

起因


再看Halyul博客时发现了LightGallery这个有趣的东西,然后我一想,添加到首页的特色图片看起来应该不错,然后就开始了为其3天的折腾 请务必将从官网下载下来的LightGallery中的/demo/js文件夹与 /lib文件夹放到博客根目录下

0X01


按照网上的帮助文档代码应该是这个样子的
 <div class="demo-gallery">
            <ul id="lightgallery" class="list-unstyled row">
                <li data-responsive="#图片链接" data-src="#图片链接" data-sub-html="#介绍部分">
                    <a href="">
                        <img class="img-responsive" src="#图片链接">
                    </a>
                </li>
            </ul>
        </div>
        <script type="text/javascript">
        $(document).ready(function(){
            $('#lightgallery').lightGallery();
        });
        </script>
        <script src="//cdn.jsdelivr.net/picturefill/2.3.1/picturefill.min.js">
        <script src="js/lightgallery.js"></script>
        <script src="js/lg-fullscreen.js"></script>
        <script src="js/lg-thumbnail.js"></script>
        <script src="js/lg-video.js"></script>
        <script src="js/lg-autoplay.js"></script>
        <script src="js/lg-zoom.js"></script>
        <script src="js/lg-hash.js"></script>
        <script src="js/lg-pager.js"></script>
        <script src="../lib/jquery.mousewheel.min.js"></script>
那么应该先在主题目录中的index.php找到文章循环,然而循环呢???说好的循环呢,后来发现里头有这一行
    get_template_part('content', get_post_format());
会不会在content.php文件里?

0X02


好吧,确实是在content.php文件,如果是这样的话找到图片的class标签,然后就可以了,在 F12 中,我找到了class标签就是kratos-entry-thumb-new然后在div中只有这样一行<?php kratos_blog_thumbnail_new() ?>这估计是在functions.php里的kratos_blog_thumbnail_new() 函数,在这个函数的代码在 functions.php 代码如下
function kratos_blog_thumbnail_new() {
    global $post;
    $img_id = get_post_thumbnail_id();
    $img_url = wp_get_attachment_image_src($img_id,'kratos-entry-thumb');
    $img_url = $img_url[0];
    if ( has_post_thumbnail() ) {
        echo '<a href=""><img src="'.$img_url.'" /></a>';
    } else {
        $content = $post->post_content;
        $img_preg = "/<img (.*?) src=\"(.+?)\".*?>/";
        preg_match($img_preg,$content,$img_src);
        $img_count=count($img_src)-1;
        $img_val = $img_src[$img_count];
        if(!empty($img_val)){
            echo '<a href="<?php the_permalink() ?>"><img src="'.$img_val.' "class="img-responsive"/></a>';
        } else {
             echo '<a href="<?php the_permalink() ?>"><img src="'. kratos_option('default_image') .'" /></a>';
        }
    }
}
第一个if应该是在判断是否有特色图片,我这么点云服务器空间,特色图片又不能用外链,谁用啊,第二个应该是文章中有没有图片这个是要加的,最后都不符合的就该是使用Kratos主题设置你的图片了,最后两个都得加特效那么就将这个函数改为如下。
function kratos_blog_thumbnail_new() {
    global $post;
    $img_id = get_post_thumbnail_id();
    $img_url = wp_get_attachment_image_src($img_id,'kratos-entry-thumb');
    $img_url = $img_url[0];
    if ( has_post_thumbnail() ) {
        echo '<a href=""><img src="'.$img_url.'" /></a>';
    } else {
        $content = $post->post_content;
        $img_preg = "/<img (.*?) src=\"(.+?)\".*?>/";
        preg_match($img_preg,$content,$img_src);
        $img_count=count($img_src)-1;
        $img_val = $img_src[$img_count];
        if(!empty($img_val)){
            echo '<li data-responsive="'.$img_val.'" data-src="'.$img_val.'" ><a href=""><img src="'.$img_val.' "class="img-responsive"/></a></li>';
        } else {
             echo '<li data-responsive="'. kratos_option('default_image') .'" data-src="'. kratos_option('default_image') .'" ><a href=""><img src="'. kratos_option('default_image') .'" /></a></li>';
        }
    }
}

0X03


接下来是完成JS代码的添加,我对JS代码毛都不知啊,没办法,解决一点是一点。 先把图片后面的JS进行添加,这样的话,就该将content.php里从39行一直到下一个div标签中的代码改成这样
<?php } if($listlayout == 'new_layout'){ ?>
<div class="kratos-entry-border-new clearfix">
    <div class="kratos-entry-thumb-new">
        <div class="demo-gallery" id="lightgallery<?php the_ID(); ?>">
        <?php kratos_blog_thumbnail_new() ?>
        </div>
    </div>
    <script type="text/javascript">
        $(document).ready(function(){
            $('#lightgallery').lightGallery();
        });
        </script>
        <script src="https://cdn.jsdelivr.net/picturefill/2.3.1/picturefill.min.js"></script>
        <script src="/js/lightgallery.js"></script>
        <script src="/js/lg-fullscreen.js"></script>
        <script src="/js/lg-thumbnail.js"></script>
        <script src="/js/lg-video.js"></script>
        <script src="/js/lg-autoplay.js"></script>
        <script src="/js/lg-zoom.js"></script>
        <script src="/js/lg-hash.js"></script>
        <script src="/js/lg-pager.js"></script>
        <script src="../lib/jquery.mousewheel.min.js"></script>
如果你的网站提示jQuery not found或类似错误,请在header.php中添加
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.js"></script>
然后将css文件引用,同样在header.php中添加如下代码
<link href="https://cdn.bootcss.com/lightgallery/1.3.9/css/lightgallery.css" rel="stylesheet">

0X04


你以为就这么完了?,不可能,可能我还要去问追梦人虽然他还没回答我我就整好了 F12中发生如下错误
Uncaught TypeError: $(...).lightGallery is not a function
    at HTMLDocument.<anonymous> ((index):344)
    at mightThrow (jquery.js:3570)
    at process (jquery.js:3638)
什么鬼???(黑人问号脸.jpg) 在本地发现不能多次加载$('#lightgallery').lightGallery();,这样一来就只能加载形如$('#lightgallery'+数字).lightGallery();的办法了,并且div中id也得变成 lightgallery+数字,数字不能重复,如果这样的话,通过毫秒也无法避免重复的可能性,想一下,wordpress不是有Post ID吗?这玩意是唯一的啊,这样一来只需往lightgallery后面加上<?php the_ID(); ?>就行了

0X05

然而问题依旧没有解决,在结合搜索引擎后,我将如下代码
<script type="text/javascript">
        $(document).ready(function(){
            $('#lightgallery<?php the_ID(); ?>').lightGallery();
        });
        </script>
改成了如下
<script type="text/javascript">
        $(document).ready(function($){
            $('#lightgallery<?php the_ID(); ?>').lightGallery();
        });
        </script>
问题就神奇的解决了

0X06


基本功能完成,特效还是得有的往,header.php文件添加如下代码,可以让鼠标移到时对图片进行放大并去掉li标签中的点
li{
                list-style-type:none;
                margin:0px;
            }
           .demo-gallery >  li a {
              border: 3px solid #FFF;
              border-radius: 3px;
              display: block;
              overflow: hidden;
              position: relative;
              float: left;
            }
            .demo-gallery > li a > img {
              -webkit-transition: -webkit-transform 0.15s ease 0s;
              -moz-transition: -moz-transform 0.15s ease 0s;
              -o-transition: -o-transform 0.15s ease 0s;
              transition: transform 0.15s ease 0s;
              -webkit-transform: scale3d(1, 1, 1);
              transform: scale3d(1, 1, 1);
            }
            .demo-gallery > li a:hover > img {
              -webkit-transform: scale3d(1.1, 1.1, 1.1);
              transform: scale3d(1.1, 1.1, 1.1);
            }
            .demo-gallery >  li a:hover .demo-gallery-poster > img {
              opacity: 1;
            }
            .demo-gallery >  li a .demo-gallery-poster {
              background-color: rgba(0, 0, 0, 0.1);
              bottom: 0;
              left: 0;
              position: absolute;
              right: 0;
              top: 0;
              -webkit-transition: background-color 0.15s ease 0s;
              -o-transition: background-color 0.15s ease 0s;
              transition: background-color 0.15s ease 0s;
            }
            .demo-gallery >  li a .demo-gallery-poster > img {
              left: 50%;
              margin-left: -10px;
              margin-top: -10px;
              opacity: 0;
              position: absolute;
              top: 50%;
              -webkit-transition: opacity 0.3s ease 0s;
              -o-transition: opacity 0.3s ease 0s;
              transition: opacity 0.3s ease 0s;
            }
            .demo-gallery >  li a:hover .demo-gallery-poster {
              background-color: rgba(0, 0, 0, 0.5);
            }
            .demo-gallery .justified-gallery > a > img {
              -webkit-transition: -webkit-transform 0.15s ease 0s;
              -moz-transition: -moz-transform 0.15s ease 0s;
              -o-transition: -o-transform 0.15s ease 0s;
              transition: transform 0.15s ease 0s;
              -webkit-transform: scale3d(1, 1, 1);
              transform: scale3d(1, 1, 1);
              height: 100%;
              width: 100%;
            }
            .demo-gallery .justified-gallery > a:hover > img {
              -webkit-transform: scale3d(1.1, 1.1, 1.1);
              transform: scale3d(1.1, 1.1, 1.1);
            }
            .demo-gallery .justified-gallery > a:hover .demo-gallery-poster > img {
              opacity: 1;
            }
            .demo-gallery .justified-gallery > a .demo-gallery-poster {
              background-color: rgba(0, 0, 0, 0.1);
              bottom: 0;
              left: 0;
              position: absolute;
              right: 0;
              top: 0;
              -webkit-transition: background-color 0.15s ease 0s;
              -o-transition: background-color 0.15s ease 0s;
              transition: background-color 0.15s ease 0s;
            }
            .demo-gallery .justified-gallery > a .demo-gallery-poster > img {
              left: 50%;
              margin-left: -10px;
              margin-top: -10px;
              opacity: 0;
              position: absolute;
              top: 50%;
              -webkit-transition: opacity 0.3s ease 0s;
              -o-transition: opacity 0.3s ease 0s;
              transition: opacity 0.3s ease 0s;
            }
            .demo-gallery .justified-gallery > a:hover .demo-gallery-poster {
              background-color: rgba(0, 0, 0, 0.5);
            }
            .demo-gallery .video .demo-gallery-poster img {
              height: 48px;
              margin-left: -24px;
              margin-top: -24px;
              opacity: 0.8;
              width: 48px;
            }
            .demo-gallery.dark > li a {
              border: 3px solid #04070a;
            }

结束


漫长的折腾路终于完成了,不过大家还可以基于此继续修改,对于之前的教程,我有可能会进行重编,不过我会尽可能让博客多出一些干货的。 ]]>

Hexo建站

http://www.coder-bts.site/2016/12/03/hexolinux/ 首先是这两款软件:

  1. Node.js
  2. Git
链接我就不写了,自己上网查,找合适版本。 然后找一个你想保存网站文件的地方,比如我下载站的博客在电脑上的E://110(好像有哪不对)就在E盘根目录下新建一个名为110的文件夹,然后按着shift键右键这个文件夹,点击在命令行中打开,后面就是执行命令,命令方面我就不详解了,打了也白打,想看详解去官网这一步比我详细。
npm config set registry "https://registry.npm.taobao.org"#更换npm镜像为淘宝家的
npm install -g hexo-cli
hexo init
npm install
hexo generate#生成文件
hexo clean#清理文件
替换主题的方法: 博主所在地的原因,替换主题命令大多执行不了,这有一种粗暴的办法直接替换默认主题文件夹的文件。 下面是SSH配置方法:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"其中,your_email@example.com 是你的SSH链接后面全部回车
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
之后SSH就复制到了剪贴板,自行配制到Coding Pages。 接着在_config.yml更改下面的代码
deploy:
  type: git
  repo: #你的SSH链接
  branch: master
之后就可以使用Hexo deploy直接上传文件了 最后在把coding pages服务打开即可,后面的配制就不用多说了吧,我是肯定不会写WP安装步骤的,因为并不复杂。 我的下载站之所以用Hexo是因为我懒得打Html代码好看。 ]]>