linux 归档和压缩

zip 格式并不适linux上使用 ,Windows上的zip包拿到Linux上unzip解压会乱码。

而 tar 格式可以。而 tar 本身不提供压缩,无非就是把包括所有文件的內容和权限拼成一个文件而己,所以用另外如 gzip 格式压缩。为什么是 gzip,因为几乎所有 linux 都支持而已。

如果你的压缩包只在 linux 上用,则使用 tar 没错。

打包文件夹

tar [参数] [打包后的目录或文件(以.tar结尾)] [打包前的目录或源文件]
例:tar -cvf demo.tar demo
参数含义
-c做打包操作,可将多个文件或目录进行打包
-v显示打包过程
-f后接包名(必须要写)指明要打包的目录或源文件的名称

解包

tar [参数] [包名称]
例:tar -xvf abc.tar
解压到指定目录:tar -xvf abc.tar -C test/

参数含义
-x做解打包操作
-v显示解打包过程
-f后接包名(必须要写)指明要解打包的tar包的包名
-t查看tar包中有哪些文件或目录,不做解打包操作
-C(大写)指定解打包的具体位置

打包的同时进行压缩

常用参数及含义如下表所示:

参数含义
-z一步压缩和解压缩 “.tar.gz” 格式
-j一步压缩和解压缩 “.tar.bz2″格式
tar -zcvf demo.tar.gz demo
tar -jcvf abc.tar.bz2 abc
# 注意参数z与j及压缩包的后缀名

tailscale derper

version: "3"
services:
  derper:
    image: fredliang/derper
    container_name: derper
    environment:
      - DERP_DOMAIN=derper.tencent.codeon.cn
      # manual/letsencrypt
      - DERP_CERT_MODE=manual
      # - DERP_ADDR=:1443
    ports:
      - 3478:3478/udp
      - 1443:443
      # - 80:80
    volumes:
      - ./certs:/app/certs:ro
	"derpMap": {
		// "OmitDefaultRegions": true,
		"Regions": {
			"900": {
				"RegionID":   900,
				"RegionCode": "tencent",
				"RegionName": "tencent-cloud",
				"Nodes": [
					{
						"Name":     "1",
						"RegionID": 900,
						"HostName": "derper.tencent.codeon.cn",
						"DERPPort": 1443,
					},
				],
			},
		},
	},

DERPPort 和 docker compose端口1443保持一致

HostName 和 docker compose 中的DERP_DOMAIN保持一致

将证书放在 ./certs 目录。使用 letsencrypt 申请不到

使用 public 结尾的 crt 证书。 9277225_xxx.xxx.xxx.xx_public.crt

制作基于 mysql 的镜像

直接通过 commit 提交包含数据的MySQL镜像是无效的.

因为 mysql 的镜像使用了卷,而commit不会提交这些数据。

解决方案:

或许可以通过推荐方法来完成这个这件事情

创建一个 Dockerfile 文件。

# @see https://hub.docker.com/_/mysql
FROM mysql:8.0.28

# 创建数据库后按照此文件里面的配置进行初始化,文件将按字母顺序执行
COPY ./docker-entrypoint-initdb.d /docker-entrypoint-initdb.d

# 初始化一个数据库
ENV MYSQL_DATABASE=myDatabase

# 设置root账户密码
ENV MYSQL_ROOT_PASSWORD=123456

myDatabase 是你的数据库名称

123456 是你的 root 账户密码

紧接着,在 ./docker-entrypoint-initdb.d 目录里,放入你你用来初始化数据库的文件,比如 .sql 文件。

摘抄官网原文:When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.

译文:当容器第一次启动时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在/docker-entrypoint-initdb.d中找到的扩展名为.sh、.sql和.sql.gz的文件。文件将按字母顺序执行。您可以通过将SQL转储挂载到该目录中,并使用贡献的数据提供自定义映像来轻松填充mysql服务。默认情况下,SQL文件将被导入到由MYSQL_DATABASE变量指定的数据库中。

参考网站:mysql – Official Image | Docker Hub

drone server 使用 gitlab(极狐) 作为提供者

drone server 可以使用很多代码仓库作为提供者(提供项目,然后由 drone 来打包。)

如果你想了解其他git仓库作为提供者,参考官网

为 drone 申请ID和SECRET

在 gitlab 平台中,依次点击 偏好设置->应用 ,你将看到一个表单,根据下面这张表填写。

表单项参考值说明
名称Drone应用的名称,可以随便写。
Redirect URIDRONE_SERVER_PROTO://DRONE_SERVER_HOST/loginDRONE_SERVER_PROTO 和 DRONE_SERVER_HOST 都是安装 drone 时填写的环境变量,需要保持一致。
表单填写

勾选 api , read_api 两个选项。之后点击保存应用。

配置 drone server

我使用的 docker-compose 安装 drone server。在 docker-compose.yml 的 environment 配置下改即可。

drone 配置项
DRONE_GITLAB_CLIENT_ID上一步拿到的ID
DRONE_GITLAB_CLIENT_SECRET上一步拿到的SECRET
drone server 环境变量

配置好后重新启动 drone server

验证

使用 DRONE_SERVER_PROTO://DRONE_SERVER_HOST 访问 drone 的 WEB 页面。

点击 CONTINUE 按钮,进入 gitlab 的验证界面。

点击 红色的 Authorize 按钮,之后会跳转到 drone server 的仪表盘。

如果你可以看到你的项,那么恭喜你安装成功。

ln 软链

有些软件命令在目录里不方便执行?

ln -s xxx /usr/bin/xxx

xxx 使用绝对路径

注册 gitlab runner

本文使用 docker 引擎。详细内容参考官网

下载镜像

docker pull gitlab/gitlab-runner:latest

先下载下载,在做其他事情,启动的时候会很快。

生成配置(注册容器)

操作都在 gitlab-runner 目录下执行。

docker run --rm -it -v /root/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest register

详细说明参考 官网

url: 你的 gitlab 服务器的 url

token: 用管理员账户可以在 /admin/runners 下看到,点击路径为 管理中心 > 概览 > runner

runner executor:我选的 docker

image: 我输入的 centos:7

完成之后可以 ctrl + c 结束,此时/root/gitlab-runner/config目录下会多一个 config.toml 文件。

样例配置参考

理论上直接复制这份文件改改也行。

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "第一个 runner"
  url = "<填写 gitlab url>"
  id = 1
  token = "<填写从 gitlab 管理中心复制过来的 token>"
  token_obtained_at = 2022-10-10T01:34:00Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "centos:7"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

启动

我使用的 docker compose 启动

此文件在 gitlab-runner 目录下。

version: '3.3'
services:
    gitlab-runner:
        container_name: gitlab-runner
        restart: always
        volumes:
            - ./config:/etc/gitlab-runner
            - /var/run/docker.sock:/var/run/docker.sock
        image: gitlab/gitlab-runner:latest
        command: register

检查

如果完成,在 gitlab 的管理中心 runner 栏目下可以看一个 runner。

docker in docker

如果你需要在 docker 里执行 docker ,那么可能会遇到一些问题。

比如像这样的错误 error during connect: Get "http://docker:2375/v1.24/containers/json": dial tcp: lookup docker on 223.5.5.5:53: no such host

将 “/var/run/docker.sock:/var/run/docker.sock” 复制到 /root/gitlab-runner/config/config.toml 里的 ,使其长得看起来像这样:

    volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"]

然后重启你的 runner ,类似于这样的命令

gitlab-runner restart
如果你使用`shell 执行器`

需要将 gitlab-runner 用户添加到 docker 组

usermod -aG docker gitlab-runner

更详细的内容,那么请访问这里

centos7 安装 drone server

这里为 GitLab 安装 Drone 服务器。参考官网

申请 gitlab 的 ID 和 SECRET

你必须有一个可以登录到 gitlab 的账号。

登录您的 gitlab 账号,并定位到 个人资料 -> 应用。

在名称输入框里填写 Drone ,当然,只要你知道这是什么,填其他名称也可以。

Redirect URI输入框中填写你的 drone server 服务器的域名。

建议授权 api 和 read_api 权限

点击下面的保存按钮,你将得到一个 ID密码

官方命令

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GITLAB_SERVER=https://gitlab.com \
  --env=DRONE_GITLAB_CLIENT_ID=05136e57d80189bef462 \
  --env=DRONE_GITLAB_CLIENT_SECRET=7c229228a77d2cbddaa61ddc78d45e \
  --env=DRONE_RPC_SECRET=super-duper-secret \
  --env=DRONE_SERVER_HOST=drone.company.com \
  --env=DRONE_SERVER_PROTO=https \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2

使用 docker compose

version: '3.3'
services:
    drone:
        volumes:
            - '/var/lib/drone:/data'
        environment:
            - DRONE_GITLAB_SERVER=https://gitlab.com
            - DRONE_GITLAB_CLIENT_ID=05136e57d80189bef462
            - DRONE_GITLAB_CLIENT_SECRET=7c229228a77d2cbddaa61ddc78d45e
            - DRONE_RPC_SECRET=super-duper-secret
            - DRONE_SERVER_HOST=drone.company.com
            - DRONE_SERVER_PROTO=https
        ports:
            - '80:80'
            - '443:443'
        restart: always
        container_name: drone
        image: 'drone/drone:2'

修改配置

DRONE_SERVER_HOST

修改为你的域名

DRONE_RPC_SECRET

修改成一个随机的字符串,官方推荐使用命令生成

openssl rand -hex 16

在 Linux 中执行。

DRONE_SERVER_PROTO

http 或者 https

DRONE_GITLAB_SERVER

gitlab 的服务器的URL

DRONE_GITLAB_CLIENT_ID

第一步申请的 ID

DRONE_GITLAB_CLIENT_SECRET

第一步申请的 SECRET

修改 存储卷

如果你不在意位置的话可以不修改

启动

docker compose up -d

使用

使用 http 或者 https 协议访问你的 DRONE_SERVER_HOST

 ... certificate is valid for gitlab.example.com, not ...

这是应该是 gitlab 服务器的问题,检查 GITLAB_OMNIBUS_CONFIG 配置可能会解决这个问题。

centos7 搭建 gitlab

本文使用 docker compose 方式安装。参考 官网,更多的安装方式,参考官网

准备

创建一个目录,比如 `gitlab`

来自官方的 docker compose 文件

version: '3.6'
services:
  web:
    image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # Add any other gitlab.rb configuration here, each on its own line
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

将上面的文件拷贝到你的目录下,用 docker-compose.yml 文件命名它.

修改 volumes

将 $GITLAB_HOME 替换成 .(当前目录)

在当前目录下创建 config、logs、data 目录。

如果你不喜欢这种方式,可以使用官网的 export 变量方式。

修改 ssh 默认的端口

如果你使用 ssh 连接你的 Linux ,那么需要让出默认的 22 端口使用,因为后续拉取代码默认都是走 22 端口。相关操作可以参考 修改端口

如果你不想修改端口,那么把 docker-compose.yml 中的物理机 22 端口换成其他端口即可。

美化

如果你觉得官方的 英文单引号 很难看,那就去掉它吧!

配置域名

关注 环境变量参数了吗?

修改 external_url 的值为你的服务器域名。

注意 https 还是 http

不配置也可以使用 https 访问。

启动

在当前目录下启动容器

docker compose up -d

查看日志

docker compose logs web

访问

如果一切正常,你在配置URL那一部的地址已经可以访问了。

如果有问题,请翻阅官网文档

账号 和 密码

默认的管理账号: root

初始化密码在 ./config/initial_root_password 文件里,并按照官网说法,此文件24小时后会自动删除,应及时修改

linux 修改 ssh 的端口号

将默认的 22 端口修改成 2222 端口

修改配置

vim /etc/ssh/sshd_config

注意是 sshd_config

防火墙放行

irewall-cmd --zone=public --add-port=22438/tcp --permanent
firewall-cmd --reload
检查是否放行成功
firewall-cmd --zone=public --query-port=22438/tcp

修改 SELinux

查看允许的ssh端口
semanage port -l | grep ssh

可以看到输出 22 端口字样

添加2222端口
semanage port -a -t ssh_port_t -p tcp 2222
验证是否成功

再次执行查看命令,可以看到输出 2222 字样