12月25
一. 错误信息
先上阿里云上的报警信息。有个最大的问题是:top命令查看自己服务器CPU运行情况,会发现kdevtmpfsi的进程,CPU使用率为100%,第一次删除干净了kdevtmpfsi程序,没曾想几分钟以后,就出现了第二个警告。使用netstat -antp命令查看端口使用情况,又出现了kdevtmpfsi如图所示
netstat -antp

二.解决方法
一般出现kdevtmpfsi病毒都会伴有定时任务,就会出现我上面说的处理一次后,又会继续出现,反反复复处理不干净。
1.首先停掉kdevtmpfsi的程序
ps aux
找到kdevtmpfsi的进程
删除掉与kdevtmpfsi相关的进程

kill -9 20267
kill -9 20367
2.删除Linux下的异常定时任务
crontab -l 查看定时任务
crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除
如下图所示
3.结束kdevtmpfsi进程及端口占用
netstat -antp
找到kdevtmpfsi端口 我这里是28244 图中可以看到。不要直接杀掉,因为有守护线程还会重启。
ps -aux | grep kinsing
ps -aux | grep kdevtmpfsi
kill -9 28244
kill -9 28829
4.删除掉kdevtmpfsi的相关文件
cd /tmp
ls
rm -rf kdevtmpfsi
rm -rf /var/tmp/kinsing
最后自己可以再检查一下是否还有kdevtmpfsi的相关文件,有的话就继续删除
find / -name kdevtmpfsi
find / -name kinsing
三.怎么预防处理这个病毒
最根本的原因可能是自己的redis 6379配置不当导致的。大家可以参考阿里云的Redis服务安全加固
当然也可能是弱密码,被强行扫描了,建议定期更换系统密码。
也可以使用下面工具清除
#! /bin/sh
step=1
for (( i = 0; i < 60; i = (i+step) )); do
date >> /data/shell/clear_date_log.txt
KID=$(ps -ef |grep kdevtmpfsi |grep -w 'kdevtmpfsi'|grep -v 'grep'|awk '{print $2}')
if [ $KID];then #
echo "[info]kdevtmpfsiIDΪ:$KID" >> /data/shell/clear_date_log.txt
kill -9 $KID
rm -f /tmp/kdevtmpfsi
fi
sleep $step
done
exit 0
复制上面代码另存为kill_kdevtmpfsi.sh
先上阿里云上的报警信息。有个最大的问题是:top命令查看自己服务器CPU运行情况,会发现kdevtmpfsi的进程,CPU使用率为100%,第一次删除干净了kdevtmpfsi程序,没曾想几分钟以后,就出现了第二个警告。使用netstat -antp命令查看端口使用情况,又出现了kdevtmpfsi如图所示
netstat -antp
二.解决方法
一般出现kdevtmpfsi病毒都会伴有定时任务,就会出现我上面说的处理一次后,又会继续出现,反反复复处理不干净。
1.首先停掉kdevtmpfsi的程序
ps aux
找到kdevtmpfsi的进程
删除掉与kdevtmpfsi相关的进程
kill -9 20267
kill -9 20367
2.删除Linux下的异常定时任务
crontab -l 查看定时任务
crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除
如下图所示
3.结束kdevtmpfsi进程及端口占用
netstat -antp
找到kdevtmpfsi端口 我这里是28244 图中可以看到。不要直接杀掉,因为有守护线程还会重启。
ps -aux | grep kinsing
ps -aux | grep kdevtmpfsi
kill -9 28244
kill -9 28829
4.删除掉kdevtmpfsi的相关文件
cd /tmp
ls
rm -rf kdevtmpfsi
rm -rf /var/tmp/kinsing
最后自己可以再检查一下是否还有kdevtmpfsi的相关文件,有的话就继续删除
find / -name kdevtmpfsi
find / -name kinsing
三.怎么预防处理这个病毒
最根本的原因可能是自己的redis 6379配置不当导致的。大家可以参考阿里云的Redis服务安全加固
当然也可能是弱密码,被强行扫描了,建议定期更换系统密码。
也可以使用下面工具清除
#! /bin/sh
step=1
for (( i = 0; i < 60; i = (i+step) )); do
date >> /data/shell/clear_date_log.txt
KID=$(ps -ef |grep kdevtmpfsi |grep -w 'kdevtmpfsi'|grep -v 'grep'|awk '{print $2}')
if [ $KID];then #
echo "[info]kdevtmpfsiIDΪ:$KID" >> /data/shell/clear_date_log.txt
kill -9 $KID
rm -f /tmp/kdevtmpfsi
fi
sleep $step
done
exit 0
复制上面代码另存为kill_kdevtmpfsi.sh
12月17
一、执行程序切换后台
执行java -jar xxx.jar & 或者nohup java -jar xxxx.jar &。nohup不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系。
ctrl+z退出到控制台,执行 bg
执行exit
完成以上3步,退出SHELL后,jar服务一直在后台运行。
nohup java -jar XXX.jar >log.out &;
nohup是保证ssh连接关闭后,jar任然运行的关键,& 相当于后台运行,你后面还可以输入命令, >log.out 是输出日志的地方
ps aux|grep XXX.jar 查看某jar包的运行的进程号
二、结束进程
通过执行ps auxwww | grep XXX.jar通过查找进程关键字 找到进程PID。
执行kill -9 {PID} 杀死进程PID数字结束进程。
执行java -jar xxx.jar & 或者nohup java -jar xxxx.jar &。nohup不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系。
ctrl+z退出到控制台,执行 bg
执行exit
完成以上3步,退出SHELL后,jar服务一直在后台运行。
nohup java -jar XXX.jar >log.out &;
nohup是保证ssh连接关闭后,jar任然运行的关键,& 相当于后台运行,你后面还可以输入命令, >log.out 是输出日志的地方
ps aux|grep XXX.jar 查看某jar包的运行的进程号
二、结束进程
通过执行ps auxwww | grep XXX.jar通过查找进程关键字 找到进程PID。
执行kill -9 {PID} 杀死进程PID数字结束进程。
12月9
有个同事说使用Minio时发现返回的url访问直接访问不到,需要登录并且有有效期生成的文件地址,下面主要讲下在Minio中通过程序上传后的文件,返回的地址无法对外访问的问题。
MinioClient minioClient = new MinioClient(minio_url, minio_name, minio_pass);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
String objectName = ymd + "/" + UUID.randomUUID().toString() + (suffix != null ? suffix : "");
minioClient.putObject(bucketName, objectName, inputStream, contentType);
String url = minioClient.getObjectUrl(bucketName, objectName);
这里程序得到的地址,如果你想在浏览器直接访问是不行的。如果想要访问,需要对Minio进行一些设置。
Minio的称之为policy 即桶策略。如果想要直接访问图片,需要设置Bucket的访问策略。
官方文档 https://docs.minio.io/cn/minio-client-complete-guide.html#mb
下面介绍两种方法来实现永久访问,两种方法效果是一样的。
一、通过管理界面实现
登录后台管理界面,在右下角有个红色的加号图标,点击它,然后会看到下面的效果
点击create bucket ,输入要创建的bucket,如test
回车就可创建成功。
创建成功之后对bucket进行编辑。在页面的右上角。找到刚刚创建的test bucket。
点击那三个点,选择Edit policy ,会弹出下面的弹窗。

在Prefix中输入* ,即允许所有访问。右边的选项选择 Read and write。

然后点击Add 按钮就可以了。
-----------------------------------------------------------------------------------------------------------------------------------------
二、通过Minio提供的客户端来实现
Minio单独提供了一个客户端来设置Minio的服务端。
1、下载客户端程序
下载地址 https://dl.minio.io/client/mc/release/windows-amd64/mc.exe
2、启动一个cmd窗口,进入mc.exe的目录
输入 .\mc.exe --h 可以查看mc.exe的命令帮助。
3、设置服务端
使用 minio client 将自己的 minio server 添加到 mc 的配置管理,命令如下
.\mc.exe config host add minio http://192.168.50.179:9000 3K2287Q20OW3HWQ2FJXJ L0eTMaBzVQwUgbeuo05f+qmSA
buZiWt4yZfDzrMv
Added `minio` successfully.
此命令将 http://192.168.50.179:9000 取一个别名 minio ,并交给mc进行配置管理。
4、查看minio中的桶,命令
.\mc.exe ls minio
[2021-12-08 20:34:25 CST] 0 B asiatrip\
[2021-12-08 21:15:55 CST] 0 B tonnyyy\
[2021-12-08 20:54:28 CST] 0 B xzspfj\
5、设置桶的访问策略,命令
.\mc.exe policy public minio/xzspfj/20211208/
Access permission for `minio/xzspfj/20211208/` is set to `public`
通过以上步骤,图片就可以直接通过地址进行访问了。
MinioClient minioClient = new MinioClient(minio_url, minio_name, minio_pass);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
String objectName = ymd + "/" + UUID.randomUUID().toString() + (suffix != null ? suffix : "");
minioClient.putObject(bucketName, objectName, inputStream, contentType);
String url = minioClient.getObjectUrl(bucketName, objectName);
这里程序得到的地址,如果你想在浏览器直接访问是不行的。如果想要访问,需要对Minio进行一些设置。
Minio的称之为policy 即桶策略。如果想要直接访问图片,需要设置Bucket的访问策略。
官方文档 https://docs.minio.io/cn/minio-client-complete-guide.html#mb
下面介绍两种方法来实现永久访问,两种方法效果是一样的。
一、通过管理界面实现
登录后台管理界面,在右下角有个红色的加号图标,点击它,然后会看到下面的效果
点击create bucket ,输入要创建的bucket,如test
回车就可创建成功。
创建成功之后对bucket进行编辑。在页面的右上角。找到刚刚创建的test bucket。
点击那三个点,选择Edit policy ,会弹出下面的弹窗。
在Prefix中输入* ,即允许所有访问。右边的选项选择 Read and write。
然后点击Add 按钮就可以了。
-----------------------------------------------------------------------------------------------------------------------------------------
二、通过Minio提供的客户端来实现
Minio单独提供了一个客户端来设置Minio的服务端。
1、下载客户端程序
下载地址 https://dl.minio.io/client/mc/release/windows-amd64/mc.exe
2、启动一个cmd窗口,进入mc.exe的目录
输入 .\mc.exe --h 可以查看mc.exe的命令帮助。
3、设置服务端
使用 minio client 将自己的 minio server 添加到 mc 的配置管理,命令如下
.\mc.exe config host add minio http://192.168.50.179:9000 3K2287Q20OW3HWQ2FJXJ L0eTMaBzVQwUgbeuo05f+qmSA
buZiWt4yZfDzrMv
Added `minio` successfully.
此命令将 http://192.168.50.179:9000 取一个别名 minio ,并交给mc进行配置管理。
4、查看minio中的桶,命令
.\mc.exe ls minio
[2021-12-08 20:34:25 CST] 0 B asiatrip\
[2021-12-08 21:15:55 CST] 0 B tonnyyy\
[2021-12-08 20:54:28 CST] 0 B xzspfj\
5、设置桶的访问策略,命令
.\mc.exe policy public minio/xzspfj/20211208/
Access permission for `minio/xzspfj/20211208/` is set to `public`
通过以上步骤,图片就可以直接通过地址进行访问了。
12月7
平时我们经常查看容器的日志,命令如下:
docker logs -f 容器名或者容器id
随着时间的推移,日志文件越来越大,那么我们该如何清理日志文件呢?下面来讲解清理的步骤:
1.进入docker容器目录:
cd /var/lib/docker/containers/
2.查看容器的id,获取容器id,容器id就是容器目录名字
docker ps -a
3.进入容器,删除以log结尾的文件就是日志文件了,删除即可:
rm -rf 容器id.log
4.重启容器
docker restart 容器名或者容器id
打完收工!
docker logs -f 容器名或者容器id
随着时间的推移,日志文件越来越大,那么我们该如何清理日志文件呢?下面来讲解清理的步骤:
1.进入docker容器目录:
cd /var/lib/docker/containers/
2.查看容器的id,获取容器id,容器id就是容器目录名字
docker ps -a
3.进入容器,删除以log结尾的文件就是日志文件了,删除即可:
rm -rf 容器id.log
4.重启容器
docker restart 容器名或者容器id
打完收工!
12月7
在Java后面添加如下参数即可
9520为远程调试端口
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9520 -jar ./leo-barcode.jar
9520为远程调试端口
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9520 -jar ./leo-barcode.jar
12月6
报错信息:
java.io.IOException: No space left on deviceat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:282)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
服务器磁盘不足,df -h 一下,发现tmpfs挂载的tmp文件夹只有2M剩下的只有几K了,在想应该是这个问题,于是将tmp目录调大一点,下面调到2g,输入以下命令:
mount -t tmpfs -o size=2g tmpfs /tmp
重新上传文件,发现成功上传,问题解决。
java.io.IOException: No space left on deviceat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:282)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
服务器磁盘不足,df -h 一下,发现tmpfs挂载的tmp文件夹只有2M剩下的只有几K了,在想应该是这个问题,于是将tmp目录调大一点,下面调到2g,输入以下命令:
mount -t tmpfs -o size=2g tmpfs /tmp
重新上传文件,发现成功上传,问题解决。
12月1
目录结构: tomcat/logs目录.
1.实时查看当前项目的运行日志,进入logs目录,
tail -f catalina.out
扩展: ( 退出 )
ctrl + c
2.查询某个时间段的日志?
首先, 日志中要有程序记录的时间,然后在logs目录下执行此命令: ( 把这段时间的日志输出到新的文件中。 )
sed -n '/2021-12-01 11:30:/,/2021-12-01 11:40:/p' catalina.out > new.out
解析: ( 命令详解 )
sed -n '/年份-月份-日期 小时:分钟:/,/年份-月份-日期 小时:分钟:/p' catalina.out > 新的的文件名称.out
注意:
若catalina.out文件比较大, 可以就会比较慢, 等待一会就可以了!
3.扩展一个<清空>日志文件的命令? ( 你可能会用到 )
echo ' ' > catalina.out
why?
若日志文件过大, 可能会导致服务器磁盘空间满了, 有些接口可能不能正常访问. ( 此时就需要解决! )
通过这种方法,磁盘空间可以立即释放,进程可以继续向文件写入日志,但不必重启服务器。
1.实时查看当前项目的运行日志,进入logs目录,
tail -f catalina.out
扩展: ( 退出 )
ctrl + c
2.查询某个时间段的日志?
首先, 日志中要有程序记录的时间,然后在logs目录下执行此命令: ( 把这段时间的日志输出到新的文件中。 )
sed -n '/2021-12-01 11:30:/,/2021-12-01 11:40:/p' catalina.out > new.out
解析: ( 命令详解 )
sed -n '/年份-月份-日期 小时:分钟:/,/年份-月份-日期 小时:分钟:/p' catalina.out > 新的的文件名称.out
注意:
若catalina.out文件比较大, 可以就会比较慢, 等待一会就可以了!
3.扩展一个<清空>日志文件的命令? ( 你可能会用到 )
echo ' ' > catalina.out
why?
若日志文件过大, 可能会导致服务器磁盘空间满了, 有些接口可能不能正常访问. ( 此时就需要解决! )
通过这种方法,磁盘空间可以立即释放,进程可以继续向文件写入日志,但不必重启服务器。
11月18
在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系。系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不间断。但在Linux下,默认情况下,系统时间和硬件时间并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU Tick来维持的。在系统开机的时候,会自动从BIOS中取得硬件时间,设置为系统时间。
1. Linux系统时间的设置
在Linux中设置系统时间,可以用date命令:
//查看时间
[root@node1 ~]# date
Tue Feb 25 20:15:18 CST 2014
//修改时间
[root@node1 ~]# date -s "20140225 20:16:00" #yyyymmdd hh:mm:ss
Tue Feb 25 20:16:00 CST 2014
//date 有多种时间格式可接受,查看date --help
2. Linux硬件时间的设置
硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。
//查看硬件时间可以是用hwclock ,hwclock --show 或者 hwclock -r
[root@node1 ~]# hwclock --show
Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds
//设置硬件时间
[root@node1 ~]# hwclock --set --date "20140225 20:23:00"
[root@node1 ~]# hwclock
Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds
3. 系统时间和硬件时间的同步
同步系统时间和硬件时间,可以使用hwclock命令。
//以系统时间为基准,修改硬件时间
[root@node1 ~]# hwclock --systohc <== sys(系统时间)to(写到)hc(Hard Clock)
//或者
[root@node1 ~]# hwclock -w
//以硬件时间为基准,修改系统时间
[root@node1 ~]# hwclock --hctosys
//或者
[root@node1 ~]# hwclock -s
4. 不同机器之间的时间同步
为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
不同机器间同步时间,可以使用ntpdate命令,也可以使用ntpd服务。
1. Linux系统时间的设置
在Linux中设置系统时间,可以用date命令:
//查看时间
[root@node1 ~]# date
Tue Feb 25 20:15:18 CST 2014
//修改时间
[root@node1 ~]# date -s "20140225 20:16:00" #yyyymmdd hh:mm:ss
Tue Feb 25 20:16:00 CST 2014
//date 有多种时间格式可接受,查看date --help
2. Linux硬件时间的设置
硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。
//查看硬件时间可以是用hwclock ,hwclock --show 或者 hwclock -r
[root@node1 ~]# hwclock --show
Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds
//设置硬件时间
[root@node1 ~]# hwclock --set --date "20140225 20:23:00"
[root@node1 ~]# hwclock
Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds
3. 系统时间和硬件时间的同步
同步系统时间和硬件时间,可以使用hwclock命令。
//以系统时间为基准,修改硬件时间
[root@node1 ~]# hwclock --systohc <== sys(系统时间)to(写到)hc(Hard Clock)
//或者
[root@node1 ~]# hwclock -w
//以硬件时间为基准,修改系统时间
[root@node1 ~]# hwclock --hctosys
//或者
[root@node1 ~]# hwclock -s
4. 不同机器之间的时间同步
为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
不同机器间同步时间,可以使用ntpdate命令,也可以使用ntpd服务。
11月18
架构

组件基本交流流程

核心对象

k8s常见操作
创建配置
$ vim examplepod.yml
在文件中填入如下内容并保存。
apiVersion: v1
kind: Pod
metadata:
name: examplepod
spec:
containers:
- name: examplepod-container
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c']
args: ['echo "Hello Kubernetes!"; sleep 3600']
执行一个service
$ kubectl apply -f examplepod.yml
获取执行中的pod
$ kubectl get pod
获取单个pod
$ kubectl get pod {Pod名称}
持续监控
$ kubectl get pod {Pod名称} -w
详细参数
$ kubectl get pod {Pod名称} -o wide
输出详细参数
$ kubectl get pod examplepod --output yaml
$ kubectl get pod examplepod --output json
查看详细信息
$ kubectl describe pods {Pod名称}
查看日志
$ kubectl logs {Pod名称}
修改pod
$ kubectl replace -f {pod模板路径}
强制修改
kubectl replace -f example.yaml --force
删除pod
$ kubectl delete pod {Pod名称}
模板删除
$ kubectl delete -f {模板文件名称}
组件基本交流流程
核心对象
k8s常见操作
创建配置
$ vim examplepod.yml
在文件中填入如下内容并保存。
apiVersion: v1
kind: Pod
metadata:
name: examplepod
spec:
containers:
- name: examplepod-container
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c']
args: ['echo "Hello Kubernetes!"; sleep 3600']
执行一个service
$ kubectl apply -f examplepod.yml
获取执行中的pod
$ kubectl get pod
获取单个pod
$ kubectl get pod {Pod名称}
持续监控
$ kubectl get pod {Pod名称} -w
详细参数
$ kubectl get pod {Pod名称} -o wide
输出详细参数
$ kubectl get pod examplepod --output yaml
$ kubectl get pod examplepod --output json
查看详细信息
$ kubectl describe pods {Pod名称}
查看日志
$ kubectl logs {Pod名称}
修改pod
$ kubectl replace -f {pod模板路径}
强制修改
kubectl replace -f example.yaml --force
删除pod
$ kubectl delete pod {Pod名称}
模板删除
$ kubectl delete -f {模板文件名称}
11月18
gitlab安装
docker启动gitlab 并配置端口号 因为要映射到外网 因此docker的第一个端口号要与外网端口号一致 防止新建的库端口号与访问地址不一致
docker run -d \
-p 80:30039 \
-p 443:443 \
-p 1022:22 \
--name gitlab \
--restart unless-stopped \
-v gitlab-config:/etc/gitlab \
-v gitlab-logs:/var/log/gitlab \
-v gitlab-data:/var/opt/gitlab \
twang2218/gitlab-ce-zh
修改配置文件/etc/gitlab/
配置 external_url 为新建库地址 smtp配置为邮件服务
external_url 'http://www.heckjj.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "i@heckjj.com"
gitlab_rails['smtp_password'] = "OFJGZWLKJQVXWLHK"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = "i@heckjj.com" #配置gitlab的配置的发信人
访问 http://www.heckjj.com/ 设置密码
登录账号:root
密码:设置的密码
git常见操作
命令行操作:
Git 全局设置
git config --global user.name "heck"
git config --global user.email "i@heckjj.com"
创建新版本库
git clone http://www.heckjj.com/heck/heck.git
cd heck
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
已存在的文件夹
cd existing_folder
git init
git remote add origin http://www.heckjj.com/heck/heck.git
git add .
git commit -m "Initial commit"
git push -u origin master
已存在的 Git 版本库
cd existing_repo
git remote rename origin old-origin
git remote add origin http://www.heckjj.com/heck/heck.git
git push -u origin --all
git push -u origin --tags
docker启动gitlab 并配置端口号 因为要映射到外网 因此docker的第一个端口号要与外网端口号一致 防止新建的库端口号与访问地址不一致
docker run -d \
-p 80:30039 \
-p 443:443 \
-p 1022:22 \
--name gitlab \
--restart unless-stopped \
-v gitlab-config:/etc/gitlab \
-v gitlab-logs:/var/log/gitlab \
-v gitlab-data:/var/opt/gitlab \
twang2218/gitlab-ce-zh
修改配置文件/etc/gitlab/
配置 external_url 为新建库地址 smtp配置为邮件服务
external_url 'http://www.heckjj.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "i@heckjj.com"
gitlab_rails['smtp_password'] = "OFJGZWLKJQVXWLHK"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = "i@heckjj.com" #配置gitlab的配置的发信人
访问 http://www.heckjj.com/ 设置密码
登录账号:root
密码:设置的密码
git常见操作
命令行操作:
Git 全局设置
git config --global user.name "heck"
git config --global user.email "i@heckjj.com"
创建新版本库
git clone http://www.heckjj.com/heck/heck.git
cd heck
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
已存在的文件夹
cd existing_folder
git init
git remote add origin http://www.heckjj.com/heck/heck.git
git add .
git commit -m "Initial commit"
git push -u origin master
已存在的 Git 版本库
cd existing_repo
git remote rename origin old-origin
git remote add origin http://www.heckjj.com/heck/heck.git
git push -u origin --all
git push -u origin --tags







