// uuid 解码参数
const separator = '@';
const HexChars = '0123456789abcdef'.split('');
const _t = ['', '', '', ''];
const UuidTemplate = _t.concat(_t, '-', _t, '-', _t, '-', _t, '-', _t, _t, _t);
const Indices = UuidTemplate.map((x, i) => (x === '-' ? NaN : i)).filter(Number.isFinite);
const BASE64_KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
const values = new Array(123); // max char code in base64Keys
for (let i = 0; i < 123; ++i) { values[i] = 64; } // fill with placeholder('=') index
for (let i = 0; i < 64; ++i) { values[BASE64_KEYS.charCodeAt(i)] = i; }
const BASE64_VALUES = values;

// 将3.8的uuid解码
function decodeUuid (base64) {
    const strs = base64.split(separator);
    const uuid = strs[0];
    if (uuid.length !== 22) {
        return base64;
    }
    UuidTemplate[0] = base64[0];
    UuidTemplate[1] = base64[1];
    for (let i = 2, j = 2; i < 22; i += 2) {
        const lhs = BASE64_VALUES[base64.charCodeAt(i)];
        const rhs = BASE64_VALUES[base64.charCodeAt(i + 1)];
        UuidTemplate[Indices[j++]] = HexChars[lhs >> 2];
        UuidTemplate[Indices[j++]] = HexChars[((lhs & 3) << 2) | rhs >> 4];
        UuidTemplate[Indices[j++]] = HexChars[rhs & 0xF];
    }
    return base64.replace(uuid, UuidTemplate.join(''));
}

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    # https://github.com/http-rs/tide/issues/458#issuecomment-619243201
    proxy_http_version 1.1;

    proxy_pass http://dotdotvote;
  }

最重要是那一行proxy_http_version 1.1;并且proxy_pass 放到最后一行

通常先安装工具:

sudo apt-get install musl-tools

先为项目设置使用的静态库:

rustup target add x86_64-unknown-linux-musl  
cargo build --release --target=x86_64-unknown-linux-musl

这样编译就好了。如果还有问题可能编译用的第三方库有依赖。按情况安装软件就行。

一般用Ubuntu相关的Docker
正常启动镜像时记得用 -p 1022:22 影射一个端口,然后先装SSH

 apt-get update && apt-get install -y openssh-server

最关键执行这几个不然一直密码错误:

ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

修改root密码:passwd

修改配置:

 /etc/ssh/sshd_config

开端口 Port 22
开Root登录 PermitRootLogin Yes

启动服务:

service ssh start

/usr/sbin/ssh -D

开机(Docker启动) 就执行服务

systemctl enable ssh

// 这是一个简单的宏,名为 `say_hello`。
macro_rules! say_hello {
    // `()` 表示此宏不接受任何参数。
    () => (
        // 此宏将会展开成这个代码块里面的内容。
        println!("Hello!");
    )
}

macro_rules! say_hello2 {
    // `()` 表示此宏不接受任何参数。
    ($args:tt) => (
        // 此宏将会展开成这个代码块里面的内容。
        println!("Hello! {}", $args);
    )
}

fn main() {
    // 这个调用将会展开成 `println("Hello");`!
    say_hello!()
    say_hello2!("fd")
    say_hello2!(1)
    say_hello2!(true)
    // err : say_hello2!(1,2,3,4) 参数还是要跟定义一样
}

这里跟普能函数区别就是。他传的参数是可以是你在编辑器上的填的字符。在say_hello2中就相当于编译后。会将"fd"替换掉定义里的$args,是字符替换。不是传参数。这样就很好区分他和函数的区别。