文章

私有云搭建(二)ubuntu安装docker和v2rayA

前言


  我们前面讲过,私有云部署的服务尽量用docker来部署,所以我们要先安装docker,然后由于众所周知的网络问题,docker拉取镜像需要科学上网,所以我们还需要安装v2rayA

安装docker

  安装docker比较简单,直接问ChatGPT,照着做就行了,以下命令都来自ChatGPT,我简单整理了一下,建议读者们也问问GPT来安装,以下命令不一定是最新的。

1
2
3
4
5
6
7
8
9
10
11
12
#  更新系统并安装依赖
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 的软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 验证docker是否安装成功
docker --version

  安装后设置开机启动,并把当前用户加入到docker组里面,以便可以直接运行docker命令。

1
2
3
4
# 设置开机自启
sudo systemctl enable docker
# 添加当前用户到 Docker 组
sudo usermod -aG docker $USER

  注意:修改用户组后需要注销并重新登录才能生效。

安装v2rayA

  v2rayA是一个易用而强大的,跨平台的V2Ray客户端,主页是这个:v2rayA。这个客户端的界面是网页,用这个的好处是对于无界面的服务器,也可以直接用ip登录到对应服务器上的v2rayA后台去配置。

  本来安装v2rayA也挺简单的,直接几个命令就可以了,但我也想用docker来部署v2rayA,看了下官方安装教程,也是有docker安装的,但现在问题出现了,docker拉取镜像要先安装v2rayA,而用docker来安装v2rayA要先用docker拉取镜像,死锁了。所以这里就有两种方案:

  • 先直接安装v2rayA,然后用docker拉取v2rayA镜像,配置好后再删掉非docker安装的v2rayA
  • 从其它可以科学上网的电脑下载arm版的v2rayA镜像,打包复制到树莓派上来安装

  我选择了后者,原因如下:用docker安装是为了方便部署和迁移,用第一种方案不如直接安装就好了,因为你再一次部署到新机器一样是这么麻烦,没利用到docker安装的好处,有点舍本逐末,为了用docker而用docker。而第二种方案,我们只需要把这个打包的镜像保存好,下次部署一也可以用。那我们就开始安装。

在其它电脑将镜像保存到文件

  我在MacBook上安装docker,由于我的MacBook是M芯片的,跟树莓派一样是arm架构,所以拉取镜像时可以不用指定平台,如果你是用windows或者是intel芯片的Mac,可以加个参数--platform来指定平台,具体咨询ChatGPT

1
2
docker pull mzz2017/v2raya
docker save -o v2raya.tar mzz2017/v2raya

在树莓派加载镜像文件

  然后把我们打包的文件scp到树莓派,运行如下命令加载镜像:

1
docker load -i v2raya.tar

  查看本地的docker镜像是否有mzz2017/v2raya

1
docker image ls

启动配置v2rayA

  官方教程:docker安装v2rayA里面给出了运行v2rayA的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
  --restart=always \
  --privileged \
  --network=host \
  --name v2raya \
  -e V2RAYA_LOG_FILE=/tmp/v2raya.log \
  -e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \
  -e V2RAYA_NFTABLES_SUPPORT=off \
  -e IPTABLES_MODE=legacy \
  -v /lib/modules:/lib/modules:ro \
  -v /etc/resolv.conf:/etc/resolv.conf \
  -v /etc/v2raya:/etc/v2raya \
  mzz2017/v2raya

  为了部署迁移方便,我希望用docker compose来部署,也方便备份配置文件和数据,于是我就把这个示例仍给了ChatGPT,叫他帮忙改成docker compose的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3.8'
services:
  v2raya:
    image: mzz2017/v2raya
    container_name: v2raya
    restart: always
    privileged: true
    network_mode: "host"
    environment:
      - V2RAYA_LOG_FILE=/tmp/v2raya.log
      - V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray
      - V2RAYA_NFTABLES_SUPPORT=off
      - IPTABLES_MODE=legacy
    volumes:
      - /lib/modules:/lib/modules:ro
      - /etc/resolv.conf:/etc/resolv.conf
      - /etc/v2raya:/etc/v2raya

  我加了个时区环境变量,以及配置的路径不同,稍微修改了一下,最终配置文件如下,文件名为v2rayA.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: v2rayA

services:
  v2raya:
    container_name: v2raya
    image: mzz2017/v2raya:latest
    restart: always
    privileged: true
    network_mode: "host"
    environment:
      V2RAYA_LOG_FILE: /tmp/v2raya.log
      V2RAYA_V2RAY_BIN: /usr/local/bin/v2ray
      V2RAYA_NFTABLES_SUPPORT: off
      IPTABLES_MODE: legacy
      TZ: Asia/Shanghai
    volumes:
      - /lib/modules:/lib/modules:ro
      - /etc/resolv.conf:/etc/resolv.conf
      - ./config:/etc/v2raya

  专门创建一个v2rayA文件夹来存放镜像、yml配置和本身的程序配置,方便备份和迁移:

  运行v2rayA

1
2
3
4
# 运行
docker compose -f v2rayA.yml up -d
# 查看进程
docker compose -f v2rayA.yml ps

  接下来就是配置v2rayA,打开http://ip:2017,访问网页界面即可开始配置v2rayA,具体配置详见官方教程

  最后记得验证下代理配置是否成功:

1
curl -i www.google.com -x http://192.168.199.222:20171

docker配置代理

  这个一样问下ChatGPT,这里记录下。添加或者修改docker的配置文件/etc/docker/daemon.json

1
2
3
4
5
6
7
{
  "proxies": {
    "http-proxy": "http://127.0.0.1:20171",
    "https-proxy": "http://127.0.0.1:20171",
    "no-proxy": "localhost,127.0.0.0/8"
  }
}

  重新加载并重启docker

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

  验证下能否用docker search搜索镜像:

1
docker search nginx

  如果没报错然后就可以愉快地用docker拉取和搜索镜像啦,有报错请咨询ChatGPT,如果是网络问题,大概率是代理不稳定,可以多试几次。

本文由作者按照 CC BY 4.0 进行授权