基于以太坊 ETH 的智能合约学习(二) 补足:CentOS7 下使用 Docker 部署 remix-ide 智能合约开发环境

如果你不喜欢官方的 Remix 或是想使用自己的域名来访问在线 Remix,那么就请继续看下去吧!
我并不推荐使用 npm 的安装方式,一方面是麻烦,另一方面官方 GitHub 仓库文档也只介绍了 Docker 启动。况且不同于 code-server,Remix 上编写的智能合约脚本不怎么吃系统资源,不用考虑性能问题。


官方 GitHub 项目地址:ethereum/remix-ide

1、下载 Docker 容器镜像

docker pull remixproject/remix-ide:latest

CentOS 服务器上没有安装过 Docker 的话,执行以下命令进行安装和启动:

yum -y install docker
# 启动 Docker 服务和设置为开机自启动
systemctl start docker.service
systemctl enable docker.service

2、启动容器
将容器内的 80 端口映射到宿主机的 8089 端口,并设置容器为开机自启动:

docker run -d -p 8089:80 --name remix --restart=always remixproject/remix-ide:latest

3、配置域名访问和开启 HTTPS
① 开启域名访问,我准备使用的域名是 remix.example.com,配置文件中的相关内容请自行替换。
修改宿主机的 Nginx 配置文件:

vi /etc/nginx/nginx.conf

新增如下内容:

    ...
    ...
    server {
        listen       80;
        server_name  remix.example.com;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        # 反代 8089 端口的 Remix
        location / {
            proxy_pass http://localhost:8089;
        }
    }
    ...
    ...

之后保存并重启 Nginx:

nginx -s reload
service nginx restart

之后去你域名服务商的 DNS 处解析域名到该服务器就 OK 了,访问一下看看:
HTTP 访问成功 ② 配置 SSL 证书以支持 HTTPS 访问

你可以选择申请 Let’s Encrypt 的免费 SSL 证书来开启 HTTPS,具体教程参考:Let’s Encrypt 证书的申请、自动更新和 Nginx 的配置
当然你也可以套 Cloudflare 的 CDN 并开启 SSL/TLS 的灵活模式,以跳过繁琐的申请过程并使用由 Cloudflare 提供的免费证书。

修改 Nginx 的配置文件:

    ...
    ...
    server {
        listen       80;
        server_name  remix.example.com;
        return 301   https://$host$request_uri;
    }

    server {
        listen          443 ssl;
        server_name     remix.example.com;
    
        # SSL 配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_certificate cert/remix.example.com_bundle.crt;
        ssl_certificate_key cert/remix.example.com.key;

        # 反代 8089 端口的 Remix
        location / {
            proxy_pass http://localhost:8089;
        }
    }
    ...
    ...

之后再用 HTTPS 协议访问试一下:
HTTPS 访问成功

结束。