Verdaccio 服务器的配置

🌙
手机阅读
本文目录结构

服务器配置

这主要是一些基础的 linux 服务器配置信息,但是我觉得很重要来;

记录并分享 verdaccio 在服务器上永久运行的步骤。

您将需要 admin 权限(或者 sudo)权限。

作为单独用户运行

首先创建 verdaccio 用户:

$ sudo adduser --system --gecos 'Verdaccio NPM mirror' --group --home /var/lib/verdaccio verdaccio

或者,如果您没有 adduser

$ sudo useradd --system --comment 'Verdaccio NPM mirror' --create-home --home-dir /var/lib/verdaccio --shell /sbin/nologin verdaccio

使用以下命令将外壳创建为 verdaccio 用户:

$ sudo su -s /bin/bash verdaccio
$ cd

该 cd 命令将您发送到 verdaccio 用户的主目录。确保至少运行一次 verdaccio 以生成配置文件。根据需要进行编辑。

监听所有地址

如果要侦听每个外部地址,请在配置中将 listen 指令设置为:

# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873

如果您在 Amazon EC2 实例中运行 verdaccio,则需要如上所述设置监听以更改配置文件。

是配置 Apache 还是 nginx?请检查反向代理设置

https://verdaccio.org/docs/zh-CN/reverse-proxy

让 verdaccio 一直运行下去

forever

您可以使用名为“ forever”的节点程序包使 verdaccio 始终保持运行。

首次 forever 在全球安装:

$ sudo npm install -g forever

确保已至少运行一次 verdaccio 来生成配置文件并记下创建的 admin 用户。然后,您可以使用以下命令启动 verdaccio:

$ forever start `which verdaccio`

您可以查看文档以获取有关永久使用的更多信息。

pm2

现在 pm2 也是非常流行的,可以使用

存留服务器重启

服务器重新引导后,可以一起使用 crontab 和 forever 来启动 verdaccio。当您以 verdaccio 用户身份登录时,请执行以下操作:

$ crontab -e

这可能会要求您选择编辑器。选择您喜欢的并继续。将以下条目添加到文件中:

@reboot /usr/bin/forever start /usr/lib/node_modules/verdaccio/bin/verdaccio

位置可能因服务器设置而异。如果您想知道文件在哪里,可以使用“哪个”命令:

$ which forever
$ which verdaccio

使用 systemd

而是 forever 可以使用它 systemd 来启动 verdaccio 并使它保持运行。

Verdaccio 安装具有 systemd 单元,您只需要复制它:

$ sudo cp /usr/lib/node_modules/verdaccio/systemd/verdaccio.service /lib/systemd/system/ && sudo systemctl daemon-reload

该单元假定您已在中进行配置 /etc/verdaccio/config.yaml 并将数据存储在中 /var/lib/verdaccio,因此可以将文件移动到这些位置或编辑该单元。

反向代理设置

使用反向代理是一种常见的做法。 以下配置是最推荐和最常用的配置。

Apache

Apache 和 mod_proxy 不应对斜杠进行解码 / 编码,而应保持原样:

用于在服务器上的相对路径 / npm 中安装

<VirtualHost *:80>
  AllowEncodedSlashes NoDecode
  ProxyPass /npm http://127.0.0.1:4873 nocanon
  ProxyPassReverse /npm http://127.0.0.1:4873
</VirtualHost>

用于在服务器上的根路径 / 下安装

<VirtualHost *:80>
  ServerName your.domain.com
  ServerAdmin hello@your.domain.com
  ProxyPreserveHost On
  AllowEncodedSlashes NoDecode
  ProxyPass / http://127.0.0.1:4873/ nocanon
  ProxyPassReverse / http://127.0.0.1:4873/
</VirtualHost>

用 SSL 配置

Apache 虚拟服务器配置

apacheconfig
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName npm.your.domain.com
    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/npm.your.domain.com/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/npm.your.domain.com/privkey.pem
    SSLProxyEngine          On
    ProxyRequests           Off
    ProxyPreserveHost       On
    AllowEncodedSlashes     NoDecode
    ProxyPass               /       http://127.0.0.1:4873/ nocanon
    ProxyPassReverse        /       http://127.0.0.1:4873/
    RequestHeader set       X-Forwarded-Proto "https"
</VirtualHost>
</IfModule>

Nginx

以下代码段是一个完整的 docker 示例,可以在我们的 Docker 示例存储库中进行测试。

https://github.com/verdaccio/docker-examples/tree/master/reverse_proxy/nginx

upstream verdaccio_v4 {
    server verdaccio_relative_path_v4:4873;
    keepalive 8;
}

upstream verdaccio_v4_root {
    server verdaccio_relative_path_v4_root:8000;
    keepalive 8;
}

upstream verdaccio_v3 {
    server verdaccio_relative_path_latest_v3:7771;
    keepalive 8;
}

server {
    listen 80 default_server;
    access_log /var/log/nginx/verdaccio.log;
    charset utf-8;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://verdaccio_v4_root;
      proxy_redirect off;
    }

    location ~ ^/verdaccio/(.*)$ {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://verdaccio_v4/$1;
      proxy_redirect off;
    }

    location ~ ^/verdacciov3/(.*)$ {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://verdaccio_v3/$1;
      proxy_redirect off;
    }
}

SSL 例子

server {
    listen 80;
    return 302 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name localhost;

    ssl_certificate     /etc/nginx/cert.crt;
    ssl_certificate_key /etc/nginx/cert.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location / {
        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;
        proxy_pass          http://verdaccio_v4_root;
        proxy_read_timeout  600;
        proxy_redirect off;
    }

    location ~ ^/verdaccio/(.*)$ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://verdaccio_v4_root/$1;
        proxy_redirect off;
    }
}

在逆向代理服务器后运行用不同的域名和端口

子目录

如果整个 URL 用于 Verdaccio,则无需定义 url_prefix,否则在 config.yaml 中将需要类似的内容。

url_prefix: /sub_directory/

如果在反向代理后面运行 verdaccio,您可能会注意到所有资源文件均作为相对路径,

例如 http://127.0.0.1:4873/-//static

要解决此问题,您应该将真实域和端口发送到带有主机头的 verdaccio

Nginx configure 应该如下所示:

ocation / {
    proxy_pass http://127.0.0.1:4873/;
    proxy_set_header Host            $host:$server_port;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
}

在这种情况下,不应在 verdaccio 配置中设置 url_prefix

或者子 - 目录安装:

location ~ ^/verdaccio/(.*)$ {
    proxy_pass http://127.0.0.1:4873/$1;
    proxy_set_header Host            $host:$server_port;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
}

在这个例子里, url_prefix 应该设置为 /verdaccio/

注意:安装路径后有一个斜杠 (https://your-domain:port/verdaccio/)!

设置 SSL 证书

请按照以下说明配置 SSL 证书,以通过 HTTPS 为 NPM 注册表提供服务。

  • ~/.config/verdaccio/config.yaml更新监听属性:
listen: 'https://your.domain.com/'

更新完 listen 属性并尝试再次运行 verdaccio 后,它将要求提供证书。

  • 生成证书
 $ openssl genrsa -out /Users/user/.config/verdaccio/verdaccio-key.pem 2048
 $ openssl req -new -sha256 -key /Users/user/.config/verdaccio/verdaccio-key.pem -out /Users/user/.config/verdaccio/verdaccio-csr.pem
 $ openssl x509 -req -in /Users/user/.config/verdaccio/verdaccio-csr.pem -signkey /Users/user/.config/verdaccio/verdaccio-key.pem -out /Users/user/.config/verdaccio/verdaccio-cert.pem
  • 编辑您的配置文件/Users/user/.config/verdaccio/config.yaml并添加以下部分
https:
    key: /Users/user/.config/verdaccio/verdaccio-key.pem
    cert: /Users/user/.config/verdaccio/verdaccio-cert.pem
    ca: /Users/user/.config/verdaccio/verdaccio-csr.pem

或者,如果您拥有 server.pfx 格式的证书,则可以添加以下配置部分:

(密码是可选的,只有在证书被加密时才需要。)

https:
  pfx: /Users/user/.config/verdaccio/server.pfx
  passphrase: 'secret'

You can find more info on the key, cert, ca, pfx, and passphrase arguments in the Node documentation

https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options

这些说明大多数在 OSX 和 Linux 下有效。 在 Windows 上,路径会有所不同,但是步骤相同。

Docker

如果您使用的是 Docker 映像,则必须将 VERDACCIO_PROTOCOL 环境变量设置为 https

因为 dockerfile 中提供了 listen 参数,因此从配置文件中将其忽略。

如果使用的端口不是 4873,也可以设置 VERDACCIO_PORT 环境变量。

作为 Windows 服务安装

基于的非精确指南请见这里:http://asysadmin.tumblr.com/post/32941224574/running-nginx-on-windows-as-a-service 。

我制作以下,它提供良好运行的 verdaccio 服务安装:

  • 为 verdaccio 创建一个目录
    • mkdir c:\verdaccio
    • cd c:\verdaccio
  • 当地安装 verdaccio(我在全局安装的时候出现 npm 问题)
    • npm install verdaccio
  • 在此位置 (c:\verdaccio\config.yaml) 创建 config.yaml 文件
  • Windows 服务设置

使用 NSSM

替代方法:(当我尝试下载的时候,WinSW 包缺失)

  • 下载 NSSM 并提取

  • 添加包含 nssm.exe 的路径到 PATH(路径)中

  • 打开管理命令

  • 运行 nssm install verdaccio,至少必须填写应用程序 tab Path(选项卡路径),启动目录和参数字段。 假设在系统路径中以及 c:\verdaccio 位置用 node 安装,以下的值将起作用:

    • Path: node
    • Startup directory: c:\verdaccio
    • Arguments: c:\verdaccio\node_modules\verdaccio\build\lib\cli.js -c c:\verdaccio\config.yaml
    • You can adjust other service settings under other tabs as desired. When you are done, click Install service button
  • 启动服务 sc 启动 verdaccio

使用 WinSW

  • As of 2015-10-27, WinSW is no longer available at the below location. Please follow the Using NSSM instructions above.
  • Download WinSW
    • 放置可执行文件(例如 winsw-1.9-bin.exe) 到此文件夹 (c:\verdaccio) 中并将其重命名为 verdaccio-winsw.exe
  • 在 c:\verdaccio 创建一个配置文件,命名为 verdaccio-winsw.xml,它有以下配置 xml verdaccio verdaccio verdaccio node c:\verdaccio\node_modules\verdaccio\src\lib\cli.js -c c:\verdaccio\config.yaml roll c:\verdaccio。
  • 安装服务
    • cd c:\verdaccio
    • verdaccio-winsw.exe install
  • 开始服务
    • verdaccio-winsw.exe start

以上的一些配置比我预想的要繁琐,看起来好像忽略了’workingdirectory’,

但除此以外,这对我来说很有效,而且让 verdaccio instance 保持在服务器重启之间,

并且还在 verdaccio 流程出事故的时候可以自我重启。

更多请参考:https://github.com/davidenke/verdaccio-deamon-windows

在 IIS 服务器上安装

这些说明是针对 Windows Server 2016,IIS 10,Node.js 10.15.0,iisnode 0.2.26 和 verdaccio 3.11.0 编写的。

  • 安装 IIS 安装 iisnode。 确保按照 iisnode 的说明中的说明安装必备组件(URL 重写模块和节点)。
  • 在要承载 verdaccio 的资源管理器中创建一个新文件夹。 例如 C:\verdaccio。 在此文件夹里保存 package.json, start.js 和 web.config 。
  • 在因特网信息服务管理器中创建一个新站点。 您可以随意给它命名。 我将在这些用法说明中称它为 verdaccio。 指定保存所有文件和端口号的路径。
  • 返回到资源管理器中,把对您刚创建的文件夹的修改权限赋予给运行此应用程序池的用户。 如果您已命名此站点为 verdaccio,并没有修改该应用程序池,它正在 ApplicationPoolIdentity 下运行,您就应该给用户 IIS AppPool\verdaccio 修改权限。如果您需要帮助的话,请参照用法说明。 (如果需要,可以在日后限制访问,这样它只有 iisnode 和 verdaccio\storage 的修改权限)
  • 启动命令行并执行以下命令来下载 verdaccio:
cd c:\verdaccio
npm install
  • 请确保您有入站规则来接受 TCP 流量到 Windows 防火墙的端口
  • 现在,您可以导航到您指定的主机和端口

我希望 verdaccio 站点成为 IIS 中默认的站点,因此我执行了以下操作:

  • 我中止“默认网站”,并且只在 IIS 里启动"verdaccio"站点
  • 我将端口 80 绑定设置为"http", ip 地址为"全部未定义",ok 任何警告或提示。

这些指南是基于 Host Sinopia in IIS on Windows。

https://gist.github.com/HCanber/4dd8409f79991a09ac75

{
  "name": "iisnode-sinopia",
  "version": "1.0.0",
  "description": "Hosts sinopia in iisnode",
  "main": "start.js",
  "dependencies": {
    "sinopia": "^1.3.1"
  }
}

不得不依照以下调整我的网页配置,但是您可能发现上述提到链接里的原始配置可以更好作业

将创建默认配置文件 c:\verdaccio\verdaccio\config.yaml

package.json

{
  "name": "iisnode-verdaccio",
  "version": "1.0.0",
  "description": "Hosts verdaccio in iisnode",
  "main": "start.js",
  "dependencies": {
    "verdaccio": "^3.11.0"
  }
}

start.js

process.argv.push('-l', 'unix:' + process.env.PORT, '-c', './config.yaml');
require('./node_modules/verdaccio/build/lib/cli.js');

Alternate start.js for Verdaccio versions < v3.0

process.argv.push('-l', 'unix:' + process.env.PORT);
require('./node_modules/verdaccio/src/lib/cli.js');

web.config

<configuration>
  <system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>

    <!-- indicates that the start.js file is a node.js application
    to be handled by the iisnode module -->
    <handlers>
            <remove name="WebDAV" />
            <add name="iisnode" path="start.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Execute" />
            <add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="Execute" />
    </handlers>

    <rewrite>
      <rules>

        <!-- iisnode folder is where iisnode stores it's logs. These should
        never be rewritten -->
        <rule name="iisnode" stopProcessing="true">
            <match url="iisnode*" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="None" />
        </rule>

        <!-- Rewrite all other urls in order for verdaccio to handle these -->
        <rule name="verdaccio">
            <match url="/*" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="Rewrite" url="start.js" />
        </rule>
      </rules>
    </rewrite>

    <!-- exclude node_modules directory and subdirectories from serving
    by IIS since these are implementation details of node.js applications -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="node_modules" />
        </hiddenSegments>
      </requestFiltering>
    </security>

  </system.webServer>
</configuration>

故障排除

使用 https 托管时,Web 界面不会加载,因为它尝试通过 http 下载脚本。

确保您在 verdaccio 配置中正确提到了 url_prefix。 按照讨论。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了