搭建精简的git服务器,创建属于自己的私人仓库

背景

以前有装过 gitlab,本来也打算用 gitlab 来搭建自己的 git 服务,奈何gitlab 吃内存是众所周知的。

而我实际上也并不需要那么多的功能,个人使用,只要有简单的命令行界面即可。遂而使用了原始的 git server。当然对我来说也是容器化过后的,于是这一篇就是记录如何使用容器化的git-server。

当然系统占用也特别小,目前一个项目,只占用了6M内存,实在是非常精炼。

#使用

编辑 vi docker-compose.yml 文件

version: '3.2'
services:
  app:
    image: kelvinblood/git-server
    volumes:
      - /root/.ssh:/git-server/keys
      - ./:/repos
    ports:
      - '22:22'
    restart: always

假设 ssh 的密钥在文件夹内 /root/.ssh

运行 docker-compose up -d 运行即可。

初始化仓库

假设当前所在的文件夹为git,运行如下命令初始化仓库:

docker exec git_app_1 git init --bare test.git

此时在当前文件夹下多出了 test.git 这个初始化仓库。

拉取仓库

按照常用方式使用git,例如:

cd /tmp
git clone git@xx.xx.xx.xx:/repos/test.git
cd test
touch readme.md
git add .
git commit -m "[init]"
git push

如果你使用的不是22端口,假设是2222端口,则clone的命令要稍作改变:

git clone ssh://git@xx.xx.xx.xx:2222/repos/test.git

完成。

更多

本项目已共享至github:kelvinblood/git-server,以下是 dockerfile

FROM alpine:3.4

# "--no-cache" is new in Alpine 3.3 and it avoid using
# "--update + rm -rf /var/cache/apk/*" (to remove cache)
RUN apk add --no-cache \
# openssh=7.2_p2-r1 \
  openssh \
# git=2.8.3-r0
  git

# Key generation on the server
RUN ssh-keygen -A

# SSH autorun
# RUN rc-update add sshd

# -D flag avoids password generation
# -s flag changes user's shell
RUN mkdir -p /git-server/keys \
  && adduser -D -s /usr/bin/git-shell git \
  && echo git:12345 | chpasswd \
  && mkdir /home/git/.ssh

# This is a login shell for SSH accounts to provide restricted Git access.
# It permits execution only of server-side Git commands implementing the
# pull/push functionality, plus custom commands present in a subdirectory
# named git-shell-commands in the user鈥檚 home directory.
# More info: https://git-scm.com/docs/git-shell
COPY src/git-shell-commands /home/git/git-shell-commands

# sshd_config file is edited for enable access key and disable access password
COPY src/sshd_config /etc/ssh/sshd_config
COPY src/start.sh /git-server/start.sh

EXPOSE 22

WORKDIR /repos

CMD ["sh", "/git-server/start.sh"]

dockerfile参考了 jkarlosb/git-server-docker,做了极小的改动.


深度学习新星:GAN的基本原理、应用和走向 - 硬创公开课

转自https://www.leiphone.com/news/201701/Kq6FvnjgbKK8Lh8N.html,仅做收集用。文章是2017年的,看的时候注意时效性。

近年来,基于数据而习得“特征”的深度学习技术受到狂热追捧,而其中GAN模型训练方法更加具有激进意味:它生成数据本身。

GAN是“生成对抗网络”(Generative Adversarial Networks)的简称,由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域。2016年,GAN热潮席卷AI领域顶级会议,从ICLR到NIPS,大量高质量论文被发表和探讨。Yann LeCun曾评价GAN是“20年来机器学习领域最酷的想法”。

在GAN这片新兴沃土,除了Ian Goodfellow所在的OpenAI在火力全开,Facebook的人工智能实验室也在这一领域马不停蹄深耕,而苹果近日曝出的首篇AI论文,就是基于GANs的变种“SimGAN”。从学术界到工业界,GANs席卷而来。

经360首席科学家、人工智能研究院院长颜水成强力推荐,【硬创公开课】特邀冯佳时博士,在1月5日为大家带来了一期以《深度学习新星:GANs的诞生与走向》为主题的演讲,拨开围绕GANs的迷雾。

嘉宾介绍

冯佳时,现任新加坡国立大学电子与计算机工程系助理教授,机器学习与视觉实验室负责人。

中国科学技术大学自动化系学士,新加坡国立大学电子与计算机工程系博士。2014-2015年在加州大学伯克利分校人工智能实验室从事博士后研究。现研究方向为图像识别、深度学习及面向大数据的鲁棒机器学习。

冯佳时博士曾获ICCV’2015 TASK-CV最佳论文奖,2012年ACM多媒体会议最佳技术演示奖。担任ICMR 2017技术委员会主席,JMLR, IEEE TPAMI, TIP, TMM, TCSVT, TNNLS及 CVPR, ICCV, ECCV, ICML, NIPS, AAAI, IJCAI等期刊、会议审稿人。冯佳时博士已在计算机视觉、机器学习领域发表论文60余篇。

以下内容整理自公开课分享。

GANs是深度学习领域比较重要的一个模型,也是人工智能研究的一个重要工具。

我们现在所追求的人工智能,一个很重要的特性就是能够像我们人类一样,理解周围复杂的世界。包括识别和理解现实中的三维世界,人类、动物和各种工具。这样才能在对现实世界理解的基础上,进行推理和创造。

而正像著名物理学家,理查德•费曼说的一样,如果要真正理解一个东西,我们必须要能够把它创造出来。

正是基于这样的想法,机器学习以及人工智能的研究者们提出了概率生成模型,致力于用概率和统计的语言,描述周围的世界。


开始维护自己的dns解析服务

背景

最近在做cdn相关的东西,随手开了一个 dns 服务 —— 47.96.79.77,今后会一直维护。

这个dns服务主要是做去广告的功能(相关资源都来自网络),今后还会做一些加速功能,有需要的朋友可以试用下,如果遇到广告的可以私信我。

下面解释下如何使用。

  1. 右键点击任务栏的网络设置。

    54615625944

  2. 选择更改适配器选项

    54615631410

    也有可能看到这个界面:

    54615679916

  3. 选择现在正在连接的网络,设置属性。


docker 查看最近日志

背景

使用容器时常常需要看日志,但是有些日志刷了很多,这时候单纯用 docker logs -f会刷很多日志,而没办法停止。解决的问题其实使用 tail 标志就可以了:

docker logs -f --tail 20 <container-id>

docker 清除无用资源

背景

在开发机上运行一段时间的容器后,你能看到有很多的无用容器、磁盘、镜像、网络等,其实大部分都是无用的。这篇文章记录下如何删除无用的资源,以节省磁盘空间。

下文转自:https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430

步骤

删除磁盘

// 参考 https://github.com/chadoe/docker-cleanup-volumes

$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm

删除网络

$ docker network ls  
$ docker network ls | grep "bridge"   
$ docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')

删除镜像

// 参考 http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker images
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

$ docker images | grep "none"
$ docker rmi $(docker images | grep "none" | awk '/ / { print $3 }')

删除容器

// 参考 http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker ps
$ docker ps -a
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")

整体清除

docker system prune -a

参考资料


zsh for centos

背景

个人很喜欢 zsh,社区也有人做了 maximum-awesome 这个专门针对 zsh 的一键安装项目。一开始是只有 Mac OS X 的,后来有人做成了 Debian 系的,无奈没有人做 CentOS 系的,大概是因为 CentOS 都是企业使用,而在企业环境里我们很少安装无用的软件吧。

其实制作起来相对简单的,社区安装使用的是ruby的rake安装,只需要把步骤中的 debian 的语法改成 CentOS 的语法即可。我也做好了发布到 github上: https://github.com/kelvinblood/maximum-awesome-centos

用法

用法也可以参考我另一个Linux安装脚本项目的引用:https://github.com/kelvinblood/KeluLinuxKit

下载后运行

./keluLinuxKit.sh install install_zsh_centos

即可。我在像目录不仅安装了 maximum-awesome,还安装了 tmux-powerline,而且自定义了显示栏内容。

安装的具体命令行脚本如下,想自定义的可以按需修改。

install_zsh_centos() {
    yum -y install zsh tmux git
    # zsh重启生效引入zsh增强插件,支持git,rails等补全,可选多种外观皮肤
    wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

    echo ''
    echo ''
    echo ''
    echo "-- awesome-tmux -----------------------------------------------------"
    # pass the_silver_searcher install
    yum install -y install build-essential automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev rake
    # awesome-tmux
    cd $DOWNLOAD
    if [ ! -e maximum-awesome-centos ]; then
      git clone https://github.com/kelvinblood/maximum-awesome-centos.git
    fi
    cd maximum-awesome-centos
    rake

    # rake install:solarized['dark']

    cp $DOWNLOAD/maximum-awesome-centos/tmux.conf $DOWNLOAD/maximum-awesome-centos/tmux.conf_backup
    cp $RESOURCE/maximum-awesome-linux/tmux.conf $DOWNLOAD/maximum-awesome-centos/tmux.conf

    # cp $RESOURCE/maximum-awesome-centos/tmux.conf $DOWNLOAD/maximum-awesome
    # cp $RESOURCE/maximum-awesome-centos/.tmux* $HOME
    # cp $RESOURCE/maximum-awesome-centos/.vimrc* $HOME
    # cp $RESOURCE/maximum-awesome-centos/vimrc.bundles $DOWNLOAD/maximum-awesome-centos/vimrc.bundles

    # git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
    # rm -r $HOME/.vim/bundle/vim-snipmate

    # tmux-powerline
    cd $HOME
    touch .tmux.conf.local

    cd $DOWNLOAD
    if [ ! -e tmux-powerline ]; then
      git clone https://github.com/erikw/tmux-powerline.git
    fi
    cp $DOWNLOAD/tmux-powerline/themes/default.sh $DOWNLOAD/tmux-powerline/themes/default.sh_backup
    cp $RESOURCE/tmux-powerline/default.sh $DOWNLOAD/tmux-powerline/themes/default.sh
cat >> $DOWNLOAD/maximum-awesome-linux/tmux.conf<< EOF
# add by Kelu
set-option -g status-left "#($DOWNLOAD/tmux-powerline/powerline.sh left)"
set-option -g status-right "#($DOWNLOAD/tmux-powerline/powerline.sh right)"
source-file ~/.tmux.conf.local
EOF

    cat $RESOURCE/Home/.zshrc >> $HOME/.zshrc
}