ChenLang's Note
25/04/21 Monday 03:25

从源代码部署GCopy剪贴板

参考信息部署步骤 deploy-from-source.md ,需分别部署前端、后端应用。因VPS性能过低所以采用使用本地虚拟机Debian11编译完成后将必要文件上传至VPS的编译方式。

编译环境依赖

  • git
  • golang 1.20+
  • Node.js 18.17+

后端

在本地构建完成,避免每次运行前都进行构建。

make ./bin/gcopy
chmod +x ./bin/gcopy
/opt/gcopy/bin/gcopy \
    -app-key=<app-key> \
    -smtp-host=<smtp-host> \
    -smtp-port=<smtp-port> \
    -smtp-username=<smtp-username> \
    -smtp-password=<smtp-password> \
    -smtp-ssl

 

bin文件运行测试无问题后改为systemd管理后端服务:

[Unit]
Description=gcopy-backend service
After=network.target

[Service]
User=www-data
Group=www-data
Type=simple
Restart=on-failure
RestartSec=5s
StartLimitBurst=0
ExecStart=/usr/local/bin/gcopy -app-key=<-app-key> -smtp-host=smtp.office365.com -smtp-port=587 -smtp-username=<smtp-username> -smtp-password=<smtp-password>

[Install]
WantedBy=multi-user.target
无法送出邮件问题:使用Microsoft 365商业版帐户配置587端口+“-smtp-ssl”无法送出验证码邮件,所以正式运行时放弃加密去掉了“-smtp-ssl”部分。

前端

配置文件

不同的环境配置分别存储在不同.env文件扩展名的文件中。

# 前端目录
cd /opt/gcopy/frontend
# 开发环境,未选择此模式
cp .env.sample .env.local
# 生产环境,选择了此模式
cp .env.sample .env.production
# 更改后端服务的地址SERVER_URL,将host改为127.0.0.1。
- SERVER_URL=http://gcopy:3376
+ SERVER_URL=http://127.0.0.1:3376

生产模式中运行

# 官方示例
cd /opt/gcopy/frontend
npm ci
npm run buildv
# 把编译好的静态资源文件夹 .next/static 复制到VPS
cp -r .next/static .next/standalone/.next/
# NODE运行测试无问题后改为systemd管理运行服务
NODE_ENV=production PORT=3375 node .next/standalone/server.js
NODE运行测试无问题后改为systemd管理前端服务:
[Unit]
Description=gcopy-front service
After=network.target

[Service]
User=www-data
Group=www-data
Type=simple
Restart=on-failure
RestartSec=5s
StartLimitBurst=0
WorkingDirectory=/path/gcopy/frontend/
Environment=NODE_ENV=production PORT=3375
ExecStart=node /path/gcopy/frontend/.next/standalone/server.js

[Install]
WantedBy=multi-user.target

Nginx反向代理

使用Nginx代理前端、后端服务,配置参考官方文件deploy/nginx-example.conf
upstream upstream_gcopy_frontend {
    server 127.0.0.1:3375 weight=1 max_fails=3 fail_timeout=30s;
}

upstream upstream_gcopy {
    server 127.0.0.1:3376 weight=1 max_fails=3 fail_timeout=30s;
}

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

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name gcopy.example.com;
    
    client_max_body_size 0;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    proxy_connect_timeout 180;
    proxy_send_timeout 180;
    proxy_read_timeout 180;
    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;

    location / {
        proxy_pass http://upstream_gcopy_frontend;
    }

    location /api/v1 {
        proxy_pass http://upstream_gcopy;
    }
}

 



This article was updated on 25/04/22 Tuesday 18:10

Share post:

Facebook Twitter Pinterest Mix LinkedIn Buffer WhatsApp

Chen Lang

Menu

  • 主页
  • 标签
  • 关于
  • 书签

Editor Pick's

关于Fanuc手工编写LS程序的说明

 

Tecnomatix(Process Designer, Process Simulate)安装避坑记录

 

  • More

Get in touch

  • Email
  • Telegram
  • Home

于九渊之下,仍见星之微光。