scp -R my@old_server:/all/stuff my@new_server:/


以下命令均基于 Ubuntu 22.04 系统

# 0. 注意事项

推荐在更改服务器配置时,始终保留一个 root 的 ssh 连接 session,以便配置出错时进行恢复

# 1. 用户及登录

在服务器上输入以下命令以新建用户:

adduser [username]

执行时根据提示输入密码及相关信息,后者可以留空。

以下命令将对新建的用户赋予 sudo 权限(添加进 sudo 组):

usermod -aG sudo [username]

为了使新用户可以通过 ssh 连接,需要在服务器上对应账户的 ~/.ssh/authorized_keys 中添加本地公钥,一台客户端一行。

然后使用以下命令更改文件的所属及权限:

chown [username]:[username] ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

为了防止非法连接,推荐在服务器上的 /etc/ssh/sshd_config 中,将对应条目改为如下值,以禁用 openssh 的 root 登录及密码登录,仅开启密钥登录

PubkeyAuthentication yes
PermitRootLogin no
PasswordAuthentication no

# 2. 软件配置

# docker

参考阿里云的官方文档进行配置即可

# zsh & oh-my-zsh

使用如下命令安装 zsh 及 oh-my-zsh,并将默认 shell 配置为 zsh

apt install zsh
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
chsh -s /bin/zsh

# 3. HTTPS 证书申请

使用 certbot ,向 Let's Encrypt 申请证书。

首先使用 dry-run 观察命令执行正确与否:

certbot certonly --dry-run -d domain.com -d XXX.domain.com -d YYY.domain.com

在验证域名所属时,可在配置好解析、确认服务器 80 端口未被占用的情况下,选择 spin up a temporary server

确定一切无误后,去掉 dry-run 参数,进行实际的证书申请:

certbot certonly -d domain.com -d XXX.domain.com -d YYY.domain.com

# 4. 服务搭建及搬迁

# Nginx

在服务器上使用以下命令安装 Nginx

apt install nginx

安装好后,在 /etc/nginx/sites-available 中使用如下模板创建服务解析

server {
  listen 443 ssl http2;
  server_name git.etchone.ink;
  ssl_certificate /etc/letsencrypt/live/git.etchone.ink/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/git.etchone.ink/privkey.pem;
  ssl_session_timeout 5m;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
  client_max_body_size 800m;
}

然后 cd 进 /etc/nginx/sites-enabled ,使用如下命令创建软链接,使 nginx 可以使用相关配置

ln -s ../sites-available/gitea .

然后测试并启用网站

nginx -t
nginx -s reload

# Gitea

可参照官方文档进行配置

在空白文件夹中创建文件 docker-compose.yml ,然后输入以下内容

version: "3"
networks:
  gitea:
    external: false
services:
  server:
    image: docker.io/gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - gitea
    volumes:
      - /data/gitea:/data # 本地 -> 容器内的数据路径映射,格式为 "{本地}:{容器}"
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"

然后把旧服务器上的本地 data 文件夹全部挪过来就好

# 5. SMTP 服务器配置

选用 MailJet 作为 SMTP 服务器,参照官方文档配置即可