DrPaulBrewer / meteor-satchat

Meteor chat room app for ham radio satellite enthusiasts
MIT License
2 stars 2 forks source link

Updated meteor libraries to 2.x versions; #10

Open DrPaulBrewer opened 2 months ago

DrPaulBrewer commented 2 months ago

The meteor framework software is really old, like 10+ years old -- version 1.3.5.1.

For continued availability the meteor framework needs to be upgraded.

But will the upgrades and new features break old code?

DrPaulBrewer commented 2 months ago

In initial tests, internal meteor packages do install with TLS servers, etc. but software fails silently on a low end VM. Maybe too much for that VM.

DrPaulBrewer commented 2 months ago

Builds means that the Dockerfile builds ok. Runs means that the Dockerfile runs and prints all of:

[[[[[ ~/meteor-satchat ]]]]]

=> Started proxy.
=> Started MongoDB.
I20240708-02:48:57.491(0)? updated TLEs for 314 satellites
=> Started your app.

=> App running at: http://localhost:3000/

Web means that the satchat web site is available as expected.

6 core, 16GB AMD Ryzen 5 5625U mini pc, port 3000

Builds 4 minutes OK. Runs, 2 minutes to start, OK. Web OK.

4 core, 16 GB Google Cloud Shell, port 3000

Builds 6 minutes OK. Runs, 5 minutes to start, OK. Web unknown, issue at Google.

partial core, 2 GB Google VM e2-small

Builds 15 minutes OK.

Doesn't Run. Crashes silently without swapfile created. Appears to be out of memory.

With 4GB swapfile, throws SQLITE error. SQLITE is not used by the satchat code so perhaps that is part of the meteor build process.

root@satchat:/home/drpaulbrewer# docker run -it -p 10.128.0.2:3000:3000 satchat
/home/mt/.meteor/packages/meteor-tool/.2.4.0_1.1ysxd7i.qhi2++os.linux.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/meteor-promise/promise_server.js:218
      throw error;
      ^

Error: SQLITE_READONLY: attempt to write a readonly database
 => awaited here:
    at Promise.await (/home/mt/.meteor/packages/meteor-tool/.2.4.0_1.1ysxd7i.qhi2++os.linux.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/meteor-promise/promise_server.js:60:12)
    at Db._execute (/tools/packaging/catalog/catalog-remote.js:361:8)
    at Txn.execute (/tools/packaging/catalog/catalog-remote.js:90:20)
    at /tools/packaging/catalog/catalog-remote.js:466:33
    at Function.each (/home/mt/.meteor/packages/meteor-tool/.2.4.0_1.1ysxd7i.qhi2++os.linux.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore-node-f-pre.js:1316:7)
    at Table.upsert (/tools/packaging/catalog/catalog-remote.js:462:7)
    at /tools/packaging/catalog/catalog-remote.js:903:26
    at /tools/packaging/catalog/catalog-remote.js:216:18
    at Db._serialize (/tools/packaging/catalog/catalog-remote.js:183:14)
    at Db.runInTransaction (/tools/packaging/catalog/catalog-remote.js:246:21)
    at RemoteCatalog.insertData (/tools/packaging/catalog/catalog-remote.js:902:20)
    at getSomeData (/tools/packaging/package-client.js:207:15)
    at _updateServerPackageData (/tools/packaging/package-client.js:223:7)
    at /tools/packaging/package-client.js:129:12
    at Object.enterJob (/tools/utils/buildmessage.js:356:14)
    at Object.exports.updateServerPackageData (/tools/packaging/package-client.js:128:23)
    at /tools/packaging/catalog/catalog-remote.js:782:36
    at Object.enterJob (/tools/utils/buildmessage.js:356:14)
    at RemoteCatalog.refresh (/tools/packaging/catalog/catalog-remote.js:781:18)
    at Object.catalog.refreshOrWarn (/tools/packaging/catalog/catalog.js:48:22)
    at /tools/cli/main.js:1047:19
    at Console.withProgressDisplayVisible (/tools/console/console.js:639:14)
    at /tools/cli/main.js:1046:17 {
  errno: 8,
  code: 'SQLITE_READONLY'
}

1 (bursts to 2) core, 4 GB Google VM e2-medium with 4GB swapfile Builds in 6 min Runs in 12 min Web requires a few tricks:

  1. Add a firewall rule opening port 3000:
    gcloud compute firewall-rules create --network=default             default-allow-meteor --allow=tcp:3000
  2. WIth docker run, bind to the internal ip address, not the external ip address. The linking of external to internal is done for you in Google Cloud Platform.
DrPaulBrewer commented 2 months ago

Running 'meteor run' , i.e. in dev mode, is definitely more of a memory hog in 2.x than 1.x.

Need to consider switching to meteor build. This may require creating some docker container changes.