当时用Docker运行GitLab时的非80端口HTTP服务

2017年11月28日 没有评论

我不知道多少人会像我一样在家里使用Docker来跑GitLab,如果真有,那么一定会与到和我一样的问题。我遇到的问题比较简单:宽带运营商不开放80端口,GitLab的Docker镜像默认只支持80端口。外网端口直接端口映射可以用,但是在gitlab的网站里面看到git的clone路径的端口是有问题的,或者地址也是内网的。

解决这个问题需要预先确定准备使用什么域名和端口。首先需要一个动态域名,老tp-link路由器可以使用花生壳,新的tp-link路由器可以用tp-link提供的动态域名,比如现在有一个叫 xx456.tpddns.cn的域名。然后需要确定使用什么端口,比如我映射在2080上。那么我们可以用如下的命令创建一个Docker容器:

docker run \
    -e GITLAB_OMNIBUS_CONFIG="external_url 'http://xx456.tpddns.cn:2080’;” \
    –p 22:22 –p 2080:2080 \
    --name gitlab \
    --restart always \
    -v /srv/docker/gitlab/config:/etc/gitlab \
    -v /srv/docker/gitlab/logs:/var/log/gitlab \
    -v /srv/docker/gitlab/data:/var/opt/gitlab \
    -d gitlab/gitlab-ce:latest

其中

  • 如果你不准备使用ssh访问gitlab里面的git的话,那个22端口的映射也可以去掉。
  • 环境变量GITLAB_MNIBUS_CONFIG里面的external_url就是gitlab提示的地址,gitlab会自动判断是使用http还是使用https,自动判断是使用默认端口,还是其中配置的接口。

现在LAN用ip访问一下,然后再在路由器上做外网2080端口到docker所在服务器192.168.1.2的2080端口的映射。这样无论以后在外网还是内网,都可以使用http://xx456.tpddns.cn:2080来访问这个docker容器中的gitlab了。

注意:不知道什么原因,这种方式做的gitlab容器,会比默认情况下创建的gitlab启动的要慢,也就是docker容器重启以后,由starting到health状态花费的时间要多,初步估计会多30%到50%,但是运行起来之后没有区别。

分类: Docker, Git 标签: ,

制作Archlinux32的docker镜像(image)

2017年11月23日 没有评论

docker hub里面的archlinux大部分是archlinux支持i686时期的镜像,目前archlinux不支持i686以后,这些镜像估计就不再支持i686了。我看了一些x86_64的镜像制作脚本,相当多的一部分都是直接用的其rootfs的tar来制作的,只有少数几种是直接从pacman获取包制作rootfs,挑了两种大牌的,如下:

1.在Moby的github的捐献里,有一个archlinux的制作完整base包的脚本,我把获取包的mirror服务器改成了Archlinux32在日本的服务器以后,在i686的环境里面制作成功并运行了一个Archlinux32。我整理的脚本在https://github.com/bh1rio/archlinux32-docker

2.另外一种方式是使用https://github.com/archlinux/archlinux-docker 的Makefile来直接用make的方式制作。这个不需要改Makefile,他是使用本机配置的mirror来获取包。惊喜是这个makefile可以制作rootfs。

对比两种方式,第二种方式的生成的包稍小,我怀疑有某些不必要的文件没有清理,不过还没有具体比较两个差异。

另,别问我为啥抱着i686玩docker:我给我的那个4盘位的小机器配好了Raid5,没理由扔到一边不管嘛

分类: Docker, Linux 标签: , ,

Archlinux官方不再支持i686(x86)以后,老机器怎么办?

2017年11月17日 2 条评论

新装机的话,可以从archlinux32.org下载纯32位的安装包。

原来archlinux官方的i686装机,可以更换archlinux32的更新服务,方法如下:

  1. 先把/etc/pacman.d/mirrorlist的内容换成https://raw.githubusercontent.com/archlinux32/packages/master/core/pacman-mirrorlist/mirrorlist这个内容。这里面是最新的archlinux32的镜像文件清单,今天镜像服务器数量爆发性增长,是昨天的两倍了,昨天只有4个,今天8个了。国内目前不要选新加坡的那个,死慢,小鬼子的速度最快。
  2. 执行pacman -Syy archlinux32-keyring-transition来更新证书链。
  3. 执行pacman -Syuu来做完整升级。但是有两个问题:1是目前archlinux32的包没有archlinux的新,可能得有相当数量的包会提示降级。2是开始第一次会提示你本机缓存的老版本包的数字签名不对,一种解决办法是当提示你的时候,选Y然后删掉原来的包,再-Syuu的时候就会重新下载对的,另一种解决办法是在开始前先运行pacman -Sc据说会清理掉数字签名不对的。

不管咋样,我去重启我的那个机器去了

.

.

.

.

.

.

顺利重启,反正我也不关心是不是出了什么问题。

话说,国内也没谁写这样的Blog了吧

分类: Linux 标签:

VSCode自动排版的快捷键

2017年11月16日 没有评论

这个找了好久,以前在VisualStudio里面一直有,在Code里面不知道换成什么了。今天找了一下:

  • Windows下:Shift+Alt+F
  • Linux下:Shift+Ctrl+F

生活一下变美好了01968A66

分类: 未分类 标签:

在Docker里面运行MS SQLServer 2017的Linux版本

2017年11月16日 没有评论

今天看见Docker的Hub里面的microsoft/mssql-server-linux已经升级到了2017-CU1,就顺手装了一个。可以用如下命令:

docker run –name mssql -e ‘ACCEPT_EULA=Y’ -e ‘SA_PASSWORD=‘ -e ‘MSSQL_PID=Standard’ -p 1433:1433 -d microsoft/mssql-server-linux:2017-CU1</yourstrong!passw0rd>

其中有意思的是MSSQL_PID这个参数,PID是Product ID (PID)或者版本的意思,可以送的参数包括:

Developer :开发版,默认值
Express :这个不用说了
Standard :标准版
Enterprise :企业版
EnterpriseCore :这个你们自己试试吧

01448D53赶快搞起来吧

开启Docker的远程管理功能

2017年11月9日 没有评论

摘录自https://docs.docker.com/engine/admin/#configure-the-docker-daemon

首先修改/etc/docker/daemon.json文件,添加:

"hosts": ["unix:///var/run/docker.sock","tcp://192.168.59.3:2376"]

如果这个文件不存在,就创建一个。如果存在,注意这个文件是json格式,添加新的行,注意上一行末尾添加逗号。

然后再用systemctl show –property=FragmentPath docker找到服务的定义文件,然后去掉ExecStart那一行的-H参数,修改为:

ExecStart=/usr/bin/dockerd

这样重启整个系统就好了。不愿意重启的话,先systemctl daemon-reload,再systemctl restart docker

分类: Docker 标签:

Morse Runner是Delphi写的?

2017年10月23日 没有评论

一个朋友找这个软件联系Morse听力,发现这个软件不只是免费,还是在Github上开源的,https://github.com/VE3NEA/MorseRunner。貌似还是Delphi写的。真牛

分类: HAM 标签:

ArchLinux笔记本电脑合盖不休眠的方法

2017年9月4日 没有评论

找了一个N270处理器的小上网本跑ArchLinux当开发服务器,结果发现合上屏幕就会休眠,于是祭起搜索引擎神器,在ArchLinux的Wiki宝典里面找到了如下的办法:

  • 修改/etc/systemd/logind.conf

其中:

  • HandlePowerKey:按下电源键后的动作
  • HandleSleepKey:按下挂起键后的动作
  • HandleHibernateKey: 按下休眠键后的动作
  • HandleLidSwitch:合上笔记本盖后待机

动作可以是:ignore、poweroff、reboot、halt、suspend、hibernate、hybrid-sleep、lock 或 kexec。

话说自己用还是喜欢ArchLinux,云上的话CentOS也可以忍受

分类: Linux 标签:

用yum给centos7安装nginx

2017年8月21日 没有评论

最近使用阿里云上的centos7的时候,发现直接yum install的nginx版本比较低,鉴于我是新版本强迫症,研究了一下怎么用nginx预编译的包,而不是centos仓库自带的。如下

1.在/etc/yum.repos.d目录下创建nginx.repo文件,内容如下:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

2.再用yum install nginx的时候,可以看到已经是最新的版本了。

这样做的好处有几个,可以直接用systemctl来控制Nginx服务了,再有以后yum update也能跟着更新。

分类: Linux 标签: ,

CentOS的firewalld与docker有冲突

2017年7月25日 没有评论

我这里表现为容器映射到宿主的端口,没有被防火墙保护。防火墙能用,但是报错,如下:

[root@localhost ~]# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2017-07-26 00:42:31 CST; 7h left
     Docs: man:firewalld(1)
  Main PID: 760 (firewalld)
   Memory: 0B
   CGroup: /system.slice/firewalld.service
            └─760 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid

7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C OUTPUT -m addrtype –dst-type LOCAL -j DOCKER ! –dst 127.0.0.0/8’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-ISOLATION’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C DOCKER -i docker0 -j RETURN’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -D FORWARD -i docker0 -o docker0 -j DROP’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 -o docker0 -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 ! -o docker0 -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER’ failed:

分类: Linux 标签:

为SpringBoot做了一个Docker的Dockerfile

2017年7月25日 没有评论

话不多说,帖文件:

FROM java:openjdk-8u111-jdk

VOLUME /tmp

ADD springboot.jar app.jar

ENV JAVA_OPTS=""

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar" ]

分类: 未分类 标签:

关于服务器数字证书的几个问题

2017年7月17日 没有评论

1.数字证书的一般流程

数字证书一般要自己生成私钥(key文件),然后用私钥生成证书申请(csr文件),然后用证书申请文件去要求证书颁发机构来颁发签名证书(cer文件或者crt文件)。证书办法机构可以是企业的RootCA或者分支CA,也可以是第三方受信任的CA。

2.数字证书的格式

目前一般第三方受信任的CA的签名证书都是用PEM格式,也就是Base64文件方式,这种正式一般只有签名证书部分。在Nginx或者Aliyun的CDNShang,这种证书一般需要配合私钥使用。IIS上一般使用PKS格式的证书,这种可是的证书是包含私钥的,所以一般的PKS格式证书,需要用PEM格式的证书和私钥合并而成,合并的时候,还会要求密码。

Java使用另一套证书格式,比如Tomcat上要求的证书格式为jks文件,这是一种java使用的所谓的证书库

3.数字证书的加工

数字证书到手后,一般不需要加工,可以直接使用。但是随着现在浏览器环境的多样化,以及Google对于https的不懈推广,导致不使用https的网站,会被chrome或者firefox等浏览器直接标记为不可信任,,而使用了https的网站,证书或者ssl有什么问题,会被直接标记为不安全。在中文字面上,不安全在中文字面上反而比不被信任更让中国人不安。

这里面基于数字证书的加工,主要是将拿到手的第三方信任办法的数字证书与信任的根证书之间的中间证书与我们拿到手的数字证书做合并。

为什么会有中间证书?这是因为证书信任机制,是我们信任第三方根CA,相应其办法的证书,和使用其证书签名的下级证书,都是被信任的。因此,一般第三方CA不直接发证书,而是下级CA办法,这样,看上去就是我们到手的证书是由子级CA办法的,并且是由其证书签名的,而子级CA的证书是由根CA颁发的,由根CA的证书签名。这样子级CA的证书就被叫做中间证书。在一般的证书查看工具中,都能看到一整个证书链(当前证书->中间证书->根证书)。

为什么要将中间证书合并?前面提到,证书信任的不是证书本身,信任的是一条证书链,或者说链上的所有证书都被信任。但是现在一些浏览器不会自动的获取中间证书,也就是没有办法信任整条证书链,反而是一些ie浏览器对此支持的很好。这种情况下,为避免因此导致的不安全提示,所以,我们一般都获取中间证书再与手中的证书合并。

怎么做证书合并?首先要确保手中的证书是PEM格式的,因为PEM格式证书是Base64编码的,也就是说所有字节都是文本编辑器打开时可读的。PEM格式的证书是以—–BEGIN CERTIFICATE—–开头,并以—–END CERTIFICATE—–结尾的,中间内容为Base64编码的证书内容。而中间证书有两种方式获取,一种是直接从办法机构下载,下载的时候注意要下载PEM格式的。我们打开中间证书,可以看到也是以—–BEGIN CERTIFICATE—–开头的,并以—–END CERTIFICATE—–结束的。我们只需要将中间证书的全部内容复制,并粘贴在到手证书的新一行内,并保存就完成了证书合并。

另外一种获取中间证书的方式,就是在windows中打开证书,查看证书链,然后直接将证书链的中间证书保存。中间证书可能不只一个,所以有几个中间证书,就需要合并几个中间证书。保存的证书需要检查格式,如果不是PEM格式的话,就需要转换格式为PEM。

4.服务器使用数字证书的后期设置

服务器上使用数字证书,也会被浏览器标记为不安全,这是因为服务器可能使用了被浏览器认为不安全握手协议或者加密算法。比如SSL3安全漏洞、Diffie-Hellman安全漏洞、RC4安全漏洞。IIS上可以使用注册表,将这些不安全的因素关闭掉。但是可能造成一些兼容性问题,比如XP上的IE6最高只支持SSL3,不支持新的TLS1,这样关闭了SSL3和SSL2之后,IE6就没办法连接了。

如果不考虑这些问题,可以直接使用下面链接提供的pwoershell脚本来开启所有安全设置。https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12

或者自己手动来做,可以参考前面连接,或者微软KBhttps://support.microsoft.com/zh-cn/help/2868725/microsoft-security-advisory-update-for-disabling-rc4

5.检验服务器安全

使用网站https://www.ssllabs.com/ssltest/ 来检验服务器安全

分类: 未分类 标签:

使用MySQL for Visual Studio创建EF模型的注意事项

2017年7月14日 没有评论

1 安装的MySQL for Visual Studio之前需要先安装MySQL的Connector/NET

2 Connector/NET和MySQL for Visual Studio建议都安装release的版本。

3 在项目中创建MySQL的EF模型前,项目里面需要先用Nuget安装MySQL.Data.Entity,同样建议安装release版本。

4 更新EnityFramework到最新的版本。

因为:

  • 如果没有按照1、2和3的顺序来做的话,会出现创建连接的时候没有mysql的驱动。
  • 不都是用同意的release版本的话,可能在创建完成数据连接以后,选择表之前,窗口闪退。闪退的情况在Visual Studio 2015和2017中都会发生。互联网上还有2013同类问题的报告。
  • EntityFramework不升级到最新版的话,会有提示问题你是否生产EF5的实体模型……

使用多处理器编译AUR

2017年5月10日 1 条评论

archlinux用aur编译的时候,根据top看,多处理器没有用起来,于是研究了一下,发现可以修改/etc/makepkg.conf来修改make的环境变量,启用多处理。具体如下:

去掉MAKEFLAGS前面的注释,并根据处理器数量修改-j后面数据,双核为-j2,四核为-j4

MAKEFLAGS="-j2"

这个提升还是比较明显的。

分类: Linux 标签:

解决在使用AUR编译pgadmin4的安装包的时候遇到找不到公钥的问题

2017年5月2日 没有评论

提示RSA的ID为某个值的公钥找不到。这个时候,需要用pgp命令下载公钥。

命令为pgp –recv-keys 公钥

参考链接:

http://www.cnblogs.com/daemon369/p/3204020.html

http://www.2cto.com/kf/201703/607171.html

分类: 未分类 标签:

今天闲的蛋疼给树莓派上nginx的默认页做压力测试

2017年2月11日 没有评论

树莓派2安装最新的ArchLinuxARM,然后安装标准的nginx。压力源使用VS2015中测试项目的WebLoadTest。

第一次没调nginx的工作进程数,第二次调成4个工作进程,于是…….真相如下:

7413978647@chatroom_1486811612135_38

7413978647@chatroom_1486811913517_83

最惨的是我自己的pc跑满了 0C915302

7413978647@chatroom_1486811501740_85

分类: Linux, Web 标签: ,

ArchLinux自2017年3月开始ISO不在支持i686

2017年2月11日 没有评论

1月份刚收了一个带有Raid卡和热插拔笼子的HP瘦客户机,上周刚给他装上2块500G的2.5寸硬盘,做好raid装好Arch,就看到了这个消息。

看到这个消息有点不舒服,不是因为这机器装的Arch一年后就没有更新了,而是突然回首发现已经玩了20年的Linux了。

不说这个了,给大家看看这个奇怪的瘦客户机。原机是HP的T5740,但是加厚扩展了4盘位的盘仓和Raid卡。卡是Sil 3114有点鸡肋,但是能扩充4盘位。机器内部还有一个8G SATA口的SSD。处理器是N280,单处理器,32位,好处就是省电低热。这机器主板不支持加载3114上的硬盘,所以/boot和grub都在这个8G的SSD上面。

638597461837233419

分类: Linux 标签:

使用ArchLinux的AUR

2017年2月8日 没有评论

Archlinux的AUR里面有很多非官方的软件包,但是需要自己编译,编译前还有很多相应的准备工作。需要先安装base-devel这个安装包的组,然后还要安装git。另外还要准备一个非root的账号,并具备sudo的权限。

1.当前使用root身份安装必须的文件:

pacman –S base-devel git

2.使用root身份用visudo命令添加tom ALL=(ALL) ALL,这里tom就是那个非root账号。

3.使用su tom的方式切换到tom用。

4.使用git clone的方式拿取安装包的信息文件,这会为包安装创建一个文件夹。

5.进入这个文件夹,然后使用makepkg –si。这会自动下载依赖的安装包,下载依赖的文件,编译这些文件,并制作安装包。然后会问你tom这个账号的密码,密码正确以后,会以root权限来安装刚才做好的安装包。

 

利用这个可以解决mkinitcpio时候aic94xx和wd719xx两个firmware确实造成的报错。

分类: Linux 标签:

ArchLinux上玩Docker

2016年11月18日 没有评论

先是收了一个群晖DS716+ii,玩了一下Docker,于是又在Arch上面玩。Docker确实好玩,作为沙箱环境,创建速度快了很多。下面是整理的资料:

Install Docker on Arch Linux:https://docs.docker.com/engine/installation/linux/archlinux/

分类: Linux 标签: ,

在ArchLinux中安装PostgreSQL

2016年9月30日 没有评论

这个可能是我Blog里面第一篇使用Open Live Writer写的内容,目前其本版为0.6。

前段时间摔伤,把手里的工作交接了一下,顺便开始研究一些之前腾不出时间做的研究。这次是在ArchLinux上安装PostgreSQL。研究了一下PostgreSQL的文档,写的很细,但是无从下手。研究了一下ArchLinux的Wiki,基本过程写了,但是还有问题,自己折腾了两天才搞定,特此记录一下。

1.首先还是要安装postgresql安装包。

pacman –S postgresql

2.安装包搞定以后,会自动创建postgres账号。按照ArchLinux的要求,需要修改这个账号的密码,作为开发环境可以跳过。然后su成这个账号,做数据库的初始化。因为postgresql是以这个账号运行的,所以数据库初始化,一定要su成这个账号。

su postgres

initdb –locale $LANG  -E UTF8 –D ‘/var/lib/postgres/data’

exit

3.初始化完成以后,会创建好配置文件和系统库。接下来编辑配置文件。配置文件都在刚才的数据目录内。

先修改postgresql.conf文件,去掉listen_address前面的注释符,并将内容修改为*号,表示监听所有的IP。

再修改pg_hba.conf文件,添加host all all 192.168.1.0/24 md5,表示允许某个网段以md5编码的方式验证用户登录。

4.修改完成就可以注册服务和启动服务了。

systemctl enable postgresql

systemctl start postgresql

5.启动以后需要修改管理账号的密码

psql –U postgres

postgres=#\password postgres

6.这样就安装完成,可以使用远程的pgAdmin 3试试能否连接到服务器了。