从源代码部署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
[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;
}
}